1、链表实现学生学籍管理系统#include #include #include #define N 15 /学号位数#define M 15 /姓名字节数#define L 4 /成绩的科数int aa=0; /记录筛选时打开的文void printf_(struct stu *); /输出单个的学生数据 struct stu * scanf1_(); /接收单个的学生数据,返回指针,struct stu * scanf_(); /得到学生的数据,并放入到链表中void print_(struct stu *); /输出链表中的学生信息struct stu *num_paixu(struct s
2、tu *); /用链表给学生排序void chaxun(struct stu *); /根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); /将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。struct stu * shanchu(struct stu *); /删除数据void xiugai(struct stu *); /修改学生的信息。void fprint_(struct stu *); /把数据写入到文件int to_ji(struct stu *); /统计学生的总人数int t_ji_tj(struct
3、 stu *); /统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); /按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); /筛选符合条件的数据,得到符合条件的结构体数据的指针。void shuchu_shai(struct s *); /输出筛选出来的数据void fb_shu_shai(struct s *); /将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); /计算平均成绩void fb_avrage(float *); /将平
4、均成绩放在文件的最后面/建立学生结构体struct stu char numN; char nameM; int ch_jiL; struct stu *next;/建立一个链表,存放学生结构体的指针struct s struct stu *p; struct s *ps;void main() int i,n,x=1,k=0; float aL=0; struct stu *head=NULL; struct s *shead=NULL; char ch; while(x) system(cls); printf(*n); printf( 0-退出系统 1-录入数据 n); printf(
5、2-保存文件 3-按成绩排序 n); printf( 4-查看信息 5-按学号排序 n); printf( 6-统计人数 7-按条件筛选 n); printf( 8-查询信息 9-显示筛选结果 n); printf( 10-插入数据 11-保存筛选结果 n); printf( 12-删除数据 13-计算平均成绩 n); printf( 14-修改数据 15-保存平均成绩 n); printf( 16-按条件统计人数 n); printf(*n); scanf(%d,&n); getchar();/有啥作用 switch(n) case 0: x=0;break; case 1: head=sc
6、anf_();break; case 2: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else fprint_(head);break; case 3: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else head=ch_ji_paixu(head); break; case 4: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break;
7、 else print_(head);break; case 5: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else head=num_paixu(head); printf(是否显示排序结果 Y/N ?); ch=getchar();getchar(); if(ch=y|ch=Y) printf(n); print_(head); break; case 6: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; els
8、e k=to_ji(head); printf(总共有%3d 名学生,k); getchar(); break; case 7: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else shead=shaixuan(head); if(shead!=NULL&shead-ps!=NULL) printf(是否显示筛选结果 Y/N ?); ch=getchar(); if(ch=y|ch=Y) printf(n); shuchu_shai(shead); getchar(); break; case 8: i
9、f(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else chaxun(head); getchar(); break; case 9: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else printf(n); shuchu_shai(shead); getchar(); break; case 10: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar();
10、 break; else head=charu(head);break; case 11: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else fb_shu_shai(shead); getchar(); break; case 12: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else head=shanchu(head); break; case 13: if(head=NULL|head-next=NULL
11、) printf(请先录入学生的数据!); getchar(); break; else avrage(head,a); printf(平均值计算成功!n是否显示平均成绩 Y/N ?); ch=getchar(); if(ch=y|ch=Y) printf(n 语文 数学 英语 总成绩n); printf(%-8.2f%-8.2f%-8.2f%-8.2f,a0,a1,a2,aL-1); getchar(); break; case 14: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else xiugai
12、(head); break; case 15: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else fb_avrage(a); printf(平均值保存成功!); getchar(); break; case 16: if(head=NULL|head-next=NULL) printf(请先录入学生的数据!); getchar(); break; else k=t_ji_tj(head); if(k0) printf(符合条件的有%3d 名学生!,k); getchar(); else if(k=0)
13、 printf(没有符合条件的学生!); getchar(); else if(k=-2) getchar(); break; default : printf(输入有误,请重新输入!); getchar(); break; /输出单个的学生数据 void printf_(struct stu *p0) int i; printf(学号:); puts(p0-num); printf(姓名:); puts(p0-name); printf(语文 数学 英语 总成绩n); for(i=0;ich_jii); printf(n);/接收单个的学生数据,返回指针,struct stu * scanf
14、1_() int i,sum=0; struct stu *p0; p0=(struct stu *)malloc(sizeof(struct stu); printf(请输入学生的学号:); gets(p0-num); printf(请输入学生的姓名:); gets(p0-name); printf(请输入学生的三科成绩(语文、数学、英语):); for(i=0;ich_jii); sum+=p0-ch_jii; getchar(); p0-ch_jiL-1=sum; return p0;/得到学生的数据,并放入到链表中struct stu * scanf_() struct stu *p1
15、,*p2,*head; int i,sum=0,n=0; printf(注意:当学生学号为 0 时输入结束nn); p1=(struct stu *)malloc(sizeof(struct stu); /*得到学生信息*/ head=p2=p1; do printf(请输入学生的学号:); gets(p1-num); if(strcmp(p1-num,0)=0) break; printf(请输入学生的姓名:); gets(p1-name); printf(请输入学生的三科成绩(语文、数学、英语):); for(i=0;ich_jii); sum+=p1-ch_jii; getchar();
16、 printf(n); p1-ch_jiL-1=sum; sum=0; p1=(struct stu *)malloc(sizeof(struct stu); p2-next=p1; p2=p1; n+; while(1); p1-next=NULL; printf(成绩输入结束!n); getchar();/*学生的数据被放在链表中*/ return head; /*输出链表中的学生信息*/void print_(struct stu *head) int i; struct stu *p1,*p2; p1=p2=head; while(p1-next!=NULL) printf(学号: )
17、; puts(p1-num); printf(姓名: ); puts(p1-name); printf(语文 数学 英语 总成绩n); for(i=0;ich_jii); printf(n); p1=p2-next; p2=p1; getchar(); /*用链表给学生排序*/struct stu *num_paixu(struct stu *head) struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7; int x=1; for(p1=head;p1-next!=NULL;p4=p1,p1=p1-next) p3=p1; for(p2=p1-next,p5=p7=
18、p2;p2-next!=NULL;p7=p2,p2=p2-next) if(strcmp(p3-num,p2-num)0) p3=p2; p5=p7; if(p3!=p1) if(x&p1=head) p6=p1-next; p1-next=p3-next; p3-next=p6; p5-next=p1; head=p3; p1=p3; x=0; else p6=p1-next; p1-next=p3-next; p3-next=p6; p4-next=p3; p5-next=p1; p1=p3; printf(排序成功!n); return head;/根据学生的学号查询学生的信息,并把学生
19、的数据输出void chaxun(struct stu *head) char aN; struct stu *p1; printf(请输入要查询的学号:); gets(a); p1=head; while(p1-next!=NULL) if(strcmp(p1-num,a)=0) break; p1=p1-next; if(p1-next=NULL) printf(没有找到学号为 %s 的学生!n,a); else printf(要查询的学生信息如下:nn); printf_(p1); /将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。struct stu * charu(st
20、ruct stu *head) struct stu *p1,*p2,*p3; p1=scanf1_(); p2=head; p3=p2; while(strcmp(p2-num,p1-num)next!=NULL) p3=p2; p2=p2-next; if(p2=head) p1-next=head; head=p1; else p3-next=p1; p1-next=p2; printf(插入成功!n); getchar(); return head;/删除数据struct stu * shanchu(struct stu *head) char aN; struct stu *p1,*
21、p2,*p3; printf(请输入要删除的学生的学号:); gets(a); p1=head; p2=p1; while(strcmp(p2-num,a)!=0)&p2-next!=NULL) p3=p2; p2=p2-next; if(p2-next=NULL) printf(没有找到要删除的数据!n); else if(p2=head) head=p2-next; printf(删除成功!n); else p3-next=p2-next; printf(删除成功!n); getchar(); return head;/修改学生的信息。void xiugai(struct stu *hea
22、d) char aN; struct stu *p1; int i,k; printf(输入要修改的学生的学号); gets(a); p1=head; while(p1-next!=NULL) if(strcmp(p1-num,a)=0) break; p1=p1-next; if(p1-next=NULL) printf(没有要找的学生信息!n); getchar(); else printf(*n); printf(* 0-放弃修改 *n); printf(* 1-修改学号 *n); printf(* 2-修改姓名 *n); printf(* 3-修改成绩 *n); printf(* 4-修改全部 *n); printf(*n); scanf(%d,&k); getchar(); switch(k) case 0: break; case 1: printf(请输入新学号:); gets(p1-num); printf(修改成功!); getchar();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1