您的位置:首页 > 编程语言 > C语言/C++

学生信息管理系统简单模拟(C语言实现)

2008-04-28 13:18 1416 查看
/*通过vc++6.0编译*/
/*菜鸟级第一次晒程序,请高人指点,*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node_1{
char num[8]; /*学号*/
char name[8];/*姓名*/
char score[2];/*成绩*/
}Type; /*存储学生信息*/
typedef struct node_2{
Type data;
struct node_2 *next;
}List; /*定义链表结构*/

print(){
printf("=============================================/n");
printf("====欢迎进入学生信息管理系统主菜单界面=======/n");
printf("=============================================/n");
printf("====请输入您的要操作的功能===================/n");
printf("====1:建立学生信息的线性表==================/n");
printf("====2:插入学生信息==========================/n");
printf("====3:查询学生信息==========================/n");
printf("====4:删除学生信息==========================/n");
printf("====5:输出所有学生的信息====================/n");
printf("====0:退出学生信息管理系统的主菜单页面======/n");
printf("=============================================/n");
}
/*输出屏幕,功能菜单*/

int select(){
int sn;
for(;;){
printf("请输入你的选择/n");
scanf("%d",&sn);
if(sn<0||sn>5){
printf("您的输入不合法,请重新输入!/n");
break;
}
else
break;
}
return sn;
} /*菜单选择功能*/

List *creat (List *head){ /*单链表创建链表*/
int i,n;
List *p,*q;
p=(List *)malloc(sizeof(List));
head->next=p;
printf("请输入需要建立的线性表的数据的个数/n");/*数据个数的输入*/
scanf("%d",&n);
for(i=0;i<n;i++){
printf("请按学号,姓名,成绩的顺序依次输入学生信息/n");
scanf("%s%s%s",p->data.num,p->data.name,p->data.score);
q=(List *)malloc(sizeof(List));
p->next=q;
p=q;
}/*尾插法*/
p->next=NULL; /*单链表结束标志*/
return head;
}
List *insert(List *head){
int j=0;
int i;/*控制待插入的节点,i表示插入完成后的链表中插入节点的位置*/
List *q;
List *r;
r=head;
q=(List *)malloc(sizeof(List));
printf("请输入要插入的位置/n");
scanf("%d",&i);
printf("请按学号,姓名,成绩的顺序依次输入/n");
scanf("%s%s%s",q->data.num,q->data.name,q->data.score);/*输入插入的信息*/

if(r->next==NULL){/*如果只有头结点*/
if(i==1){
r->next=q;
q->next=NULL;
return head;
}
else return NULL;
}
while(r&&j<i-1){/*寻找待插入位置*/
r=r->next;
j++;
}

if(!r){
printf("没有找到合适的位置,插入失败/n");
return NULL;
}

if(r->next==NULL){/*如果r已经到了尾节点*/
r->next=q;
q->next=NULL;
return head;
}
q->next=r->next;/*将待插入节点插入*/
r->next=q;
return head;
}
List *find(List *head){
char num[8];
char name[8];
List *p;
int i;
p=head->next;
printf("请您输入您要查询的功能/n");
printf("1是按学号查询/n");
printf("2是按姓名查询/n");
scanf("%d",&i);/*输入要查询的信息*/
if(i==1){
printf("请您输入您要查询的学号/n");
scanf("%s",num);
while(p&&strcmp(p->data.num,num)!=0)
p=p->next;/*查找过程*/

if(!p){
printf("没有找到/n");
return NULL;/*没有找到*/
}

else{
printf("您查找的学生信息如下:/n");
printf("查找的学生学号是:%s/n",p->data.num);
printf("查找的学生姓名是:%s/n",p->data.name);
printf("查找的学生成绩是:%s/n",p->data.score);
return p;/*返回查询的结果*/
}

}
if(i==2){
printf("请输入您要查询的姓名/n");
scanf("%s",name);
while(p&&strcmp(p->data.name,name)!=0)
p=p->next;

if(!p){
printf("没有找到/n");
return NULL;
}

else{
printf("您查找的学生信息如下:/n");
printf("查找的学生学号是:%s/n",p->data.num);
printf("查找的学生姓名是:%s/n",p->data.name);
printf("查找的学生成绩是:%s/n",p->data.score);
return p;
}

}
}

List *del(List *head){
List *p,*q;
q=head;
printf("删除采用查询信息后再删除!/n");
p=find(head);
if(!p){
printf("没有找到删除的信息,删除失败/n");
return NULL;
}
while(q!=NULL&&q->next!=p)
q=q->next;
if(!q){
printf("没有找到删除信息,删除失败/n");
return NULL;
}
q->next=p->next;
free(p); /*删除节点*/
printf("删除成功!/n");
return head;
}

int play(List *head){
List *p;
if(!p){
p=head->next;
printf("没有信息可以输出!/n");
return -1;}/*链表为空*/

p=head->next;
while(p->next){
printf("学生信息如下:/n");
printf("学生的学号是:%s/n",p->data.num);
printf("学生的姓名是:%s/n",p->data.name);
printf("学生的成绩是:%s/n",p->data.score);
p=p->next;
}/*链表非空,从头结点开始遍历便表,直到尾节点*/
return 0;
}

main(){
List *head;
head=(List *)malloc(sizeof(List));
while(1){
print();

switch(select()){

case 0:
printf("谢谢您的使用,欢迎下次继续使用本系统/n");
exit(0);
break;

case 1:
creat(head);
break;
case 2:

insert(head);
break;
case 3:
find(head);
break;

case 4:
del(head);
break;

case 5:
play(head);
break;

default:
break;
}

}

}

[align=center]
[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: