




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include#include #definenull 0#define len sizeof(struct student) struct date int year; int month;int day; ; struct xueke int pingshi; int shiyan; int kaoshi; float zchji; ;struct student int num; char name10; char sex; struct date birthday; struct xueke xk2; struct student *next; /*指向下一个结构体数据类型*/;ty
2、pedef struct student score; /*用score来代替类型struct student*/int n,k; /*n.k为全局变量,n表示结点个数,k表示人数*/score *r=null; /*定义一个全局变量指针*/score *stu;/*菜单*/int caidan(k) int i; printf(nnntttt考试成绩管理系统n); printf(ttt作者:薛文波、魏文清、姚志浩n); for(i=1;i79;i+) printf(*); printf(n); printf(1.输入学生资料tt2.输出学生资料tt3.统计学生资料n); printf(4.删
3、除学生资料tt5.查询学生资料tt6.排序学生资料n); printf(7.插入学生资料tt8.更新学生资料tt9.保存学生资料n); printf(0.退出!n); for(i=1;inum,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); fprintf(fp,%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); fprintf(fp,%5d|%5d|%5d|%.1fn,q-xk1.pingshi,q-xk1.shiyan,q
4、-xk1.kaoshi,q-xk1.zchji); q=q-next; fclose(fp); /*关闭文件指针fp指向的文件*/printf(文件已保存n);return(0);/*输入模块*/score *creat(void) score *head,*p1,*p2; /*定义一个头指针和两个工作点*/ int i; head=null; n=0; p1=(struct student *)malloc(len); /*用p1开辟一个新单元*/ printf(1.请输入学生资料(输0退出):n); printf(a.请输入学生学号(学号应大于0):); scanf(%d,&p1-num)
5、; while(p1-numnum); while(p1-num!=0) printf(b.请输入学生的姓名:); scanf(%s,p1-name); printf(请输入学生的性别(m&f):); scanf( %c,&p1-sex); while(p1-sex!=m&p1-sex!=f) /*判断输入性别时的字母是否为m或f*/ printf(输入错误,请重新输入学生的性别:); scanf( %c,&p1-sex); printf(c.请输入学生的生日(年.月.日):); scanf( %d.%d.%d,&p1-birthday.year,&p1-birthday.month,&p1-
6、birthday.day); printf(d.请输入学生的成绩!n); printf(1.请输入 c 成绩(平时,实验,考试):); scanf( %d,%d,%d,&p1-xk0.pingshi,&p1-xk0.shiyan,&p1-xk0.kaoshi); p1-xk0.zchji=p1-xk0.pingshi*0.1+p1-xk0.shiyan*0.2+p1-xk0.kaoshi*0.7; printf(2.请输入高数成绩(平时,实验,考试):); scanf( %d,%d,%d,&p1-xk1.pingshi,&p1-xk1.shiyan,&p1-xk1.kaoshi); p1-xk
7、1.zchji=p1-xk1.pingshi*0.1+p1-xk1.shiyan*0.2+p1-xk1.kaoshi*0.7; n=n+1; /*结点个数加一*/ if(n=1) head=p2=p1; /*若为首结点,则头指针指向本结点*/ else p2-next=p1; p2=p1; /*若不是首结点 则把本结点链接到尾部*/ p1=(struct student *)malloc(len); printf(*n); printf(1.请输入学生资料(输0退出):n); printf(a.请输入学生的学号(学号应大于0):); scanf(%d,&p1-num); while(p1-nu
8、mnum); p2-next=null; /* 最后结点不指向任何地址*/ free(p1); /*释放结点占用空间*/ return(head); /*输出模块*/ void print(score *head) score *q=head; printf(n输出%d个学生的资料:n,n); printf(*n); printf(|学号|姓名|性别|生 日 |); printf(c(平时.实验.考试.综合)|); printf(高数(平时.实验.考试.综合)n); printf(*n); if(head=null) printf(n没有这个学生的资料!n); return; while(q!
9、=null) printf(|%4d|%4s|%4c|%4d-%2d-%2d|,q-num,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); printf(%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); printf(%5d|%5d|%5d|%.1f n,q-xk1.pingshi,q-xk1.shiyan,q-xk1.kaoshi,q-xk1.zchji); q=q-next; /*q指针依次向下扫描*/ printf(n
10、*n); /*统计模块*/score *tongji(score *head) score *q=head,*max,*min; int i,k12=0,0,k22=0,0,k32=0,0; /*将人数统计值的初始值赋为0*/ float czong=0,gzong=0,caver,gaver; q=head; /*工作点首先指向头指针*/ max=q; min=q; while(q!=null) czong+=q-xk0.zchji; /*p1指向学生总成绩*/ gzong+=q-xk1.zchji; for(i=0;ixki.zchjimax-xki.zchji) max=q; /*将最大
11、值的地址赋给p1*/ if(q-xki.zchjixki.zchji) min=q; if(q-xki.zchji=80) k1i+; /*k1i+为人数的统计*/ else if(q-xki.zchji=60) k2i+; else k3i+; /*分段成绩的人数统计*/ q=q-next; caver=czong/n; /*计算c的平均成绩*/ gaver=gzong/n; /*计算math平均成绩*/ printf(c 语言成绩的总分为:%.2f c 语言成绩的平均分为:%.2fn,czong,caver); printf(c 语言成绩的最高分为:%.2f c 语言成绩的最低分为:%.2
12、fn,max-xk0.zchji,min-xk0.zchji); printf(c 语言成绩优秀的人数为:%dn,k10); printf(c 语言成绩良好的成绩为:%dn,k20); printf(c 语言成绩及格的人数为:%dn,k10+k20); printf(c 语言成绩不及格的人数为:%dn,k30);printf(高数成绩的总分为:%.2f 高数成绩的平均分为:%.2fn,gzong,gaver); printf(高数成绩的最高分为:%.2f 高数成绩的最低分为:%.2fn,max-xk1.zchji,min-xk1.zchji); printf(高数成绩优秀的人数为:%dn,k1
13、1); printf(高数成绩良好的人数为:%dn,k21); printf(高数成绩及格的人数为:%dn,k11+k21); printf(高数成绩不及格的人数为:%dn,k31); return(head); /*按学号查询模块*/ void chaxun2(score *head) score *q=head; int sss=0; char name10;printf(请输入要查询的学生姓名:);scanf(%s,name);while(q!=null) if(strcmp(name,q-name)=0) /*通过字符串的比较按姓名查找*/ printf(*n); printf(|学号
14、|姓名|性别|生 日 |); printf(c(平时.实验.考试.综合)|); printf(高数(平时.实验.考试.综合)n); printf(*n); printf(|%4d|%4s|%4c|%4d-%2d-%2d|,q-num,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); printf(%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); printf(%5d|%5d|%5d|%.1fn,q-xk1.pingshi,q-
15、xk1.shiyan,q-xk1.kaoshi,q-xk1.zchji); printf(*n); sss=3; /*定义变量不等于初始值则退出循环体*/ q=q-next; if(sss=0) printf(没有这个学生的资料!nn); /*按学号查询*/ void chaxun1(score *head) score *q=head;int num,sss=0;printf(请输入要查询的学生学号:);scanf(%d,&num);while(q!=null) if(num=q-num) printf(*n); printf(|学号|姓名|性别|生 日 |); printf(c(平时.实验
16、.考试.综合)|); printf(高数(平时.实验.考试.综合)n); printf(*n); printf(|%4d|%4s|%4c|%4d-%2d-%2d|,q-num,q-name,q-sex,q-birthday.year,q-birthday.month,q-birthday.day); printf(%5d|%5d|%5d|%.1f|,q-xk0.pingshi,q-xk0.shiyan,q-xk0.kaoshi,q-xk0.zchji); printf(%5d|%5d|%5d|%.1fn,q-xk1.pingshi,q-xk1.shiyan,q-xk1.kaoshi,q-xk1
17、.zchji); printf(*n); sss=3; q=q-next; if(sss=0) printf(没有这个学生的资料!nn); /*查询二级菜单*/ chaxun_cd()int m=0,i;while(m=0)printf(查询学生的资料n);printf(1.按学号查询n);printf(2.按姓名查询n);printf(请选择你所要操作的选项(按0退出):);scanf(%d,&i);switch(i)case 1:chaxun1(r);break; /*break表示跳出循环结构结束循环退出包含break语句的那层循环体*/case 2:chaxun2(r);break;c
18、ase 0:m=1;break;default:printf(错误,重新选择:);break;/*按学号删除*/ score *del1(score *head) score *p1,*p2; int num; printf(请输入要删除学生的学号:); scanf(%d,&num); if(head=null) printf(没有这个学生的资料!nn); return(head); p2=p1=head; while(num!=p1-num&p1-next!=null) p2=p1; p1=p1-next; if(num=p1-num) if(head=p1) head=head-next;
19、 else p2-next=p1-next; free(p1); p1=p2; printf(第%d 学生的资料已删除完毕!nn,num); else printf(没有这个学生的资料!nn); return(head); /*/score *del2(score *head) score *p1,*p2; char name10; printf(请输入要删除学生的姓名:); scanf(%s,name); if(head=null) printf(没有这个学生的资料!nn); return(head); p2=p1=head; while(strcmp(name,p1-name)!=0&p1
20、-next!=null) p2=p1; p1=p1-next; if(strcmp(name,p1-name)=0) if(head=p1) head=head-next; else p2-next=p1-next; free(p1); p1=p2; printf(名字叫%s的学生的资料已被删除!nn,name); else printf(没有这个学生的资料!nn); return(head);/*/del_cd()int m=0,i;while(m=0) printf(删除学生的资料n);printf(1.按学号删除n);printf(2.按姓名删除n);printf(3.查看删除结果n);
21、printf(请选择你所要操作的选项(按0退出):);scanf(%d,&i);switch(i)case 1:r=del1(r);break;case 2:r=del2(r);break;case 3:print(r);break;case 0:m=1;break;default:printf(错误,重新选择:);break;/*按学号排序*/score *paixu2(score *head) score *p1,*p2,*k,h; int i; if(head=null) printf(没有任何学生的资料!); return(head); p1=head; p2=head-next; k
22、=p1; for(i=0;inump2-num) k=p2; p2=p2-next; if(k!=p1) h=*k;*k=*p1;*p1=h;h.next=k-next;k-next=p1-next;p1-next=h.next; p1=p1-next; p2=p1-next; k=p1; printf(排序成功!nn); return(head);/*/score *paixu1(score *head) score *p1,*p2,*k,h; int i; if(head=null) printf(没有任何学生的资料!); return(head); p1=head; p2=head-ne
23、xt; k=p1; for(i=0;ixk0.zchjip2-xk0.zchji)k=p2;p2=p2-next; if(k!=p1) h=*k;*k=*p1;*p1=h;h.next=k-next;k-next=p1-next;p1-next=h.next; p1=p1-next; p2=p1-next; k=p1; printf(排序成功!nn); return(head); /*/paixu_cd()int m=0,i;while(m=0) printf(对学生的资料进行排序n);printf(1.按c语言成绩排序n);printf(2.按学号排序n);printf(请选择你所要操作的选
24、项(按0退出):);scanf(%d,&i);switch(i)case 1:r=paixu1(r);break;case 2:r=paixu2(r);break;case 0:m=1;break;default:printf(错误,重新选择:);break;/*按c成绩插入*/score *charu1(score *head,score *stu) score *p1,*p2; int i; p1=head; r=paixu1(r); stu=(score*)malloc(len); /*开辟一个新单元,用于保存要插入的信息*/ printf(请输入要增加的学生资料:n); printf(
25、请输入要增加的学生学号:); scanf(%d,&stu-num); while(stu-numnum); printf(b.请输入要增加的学生姓名:); scanf(%s,stu-name); printf(请输入要增加的学生性别(f或m):); scanf( %c,&stu-sex); while(stu-sex!=m&stu-sex!=f) printf(输入错误,输入错误请重新输入性别:); scanf( %c,&stu-sex); printf(c.请输入要增加的学生生日(年.月.日):); scanf( %d.%d.%d,&stu-birthday.year,&stu-birthd
26、ay.month,&stu-birthday.day); printf(d.请输入要增加的学生成绩!n); printf(1.请输入要增加的学生c语言成绩(平时,实验,考试):); scanf( %d,%d,%d,&stu-xk0.pingshi,&stu-xk0.shiyan,&stu-xk0.kaoshi); stu-xk0.zchji=stu-xk0.pingshi*0.1+stu-xk0.shiyan*0.2+stu-xk0.kaoshi*0.7; printf(2.请输入要增加的学生高数成绩(平时,实验,考试):); scanf( %d,%d,%d,&stu-xk1.pingshi,
27、&stu-xk1.shiyan,&stu-xk1.kaoshi); stu-xk1.zchji=stu-xk1.pingshi*0.1+stu-xk1.shiyan*0.2+stu-xk1.kaoshi*0.7; if(head=null) /*判断头指针是否为空*/ head=stu; stu-next=null; /*如果为空,直接插入头上*/ n+; /*人数加一*/ return(head); while(p1-xk0.zchjixk0.zchji&p1-next!=null) /*根据c成绩确定要插入的位置*/ p2=p1; p1=p1-next; if(stu-xk0.zchjix
28、k0.zchji) if(p1=head) /*如果p1指向头指针 */ head=stu; stu-next=p1; n+; else stu-next=p2-next; p2-next=stu; n+; else p1-next=stu; stu-next=null; n+; printf(增加学生资料成功!n); return(head);/*按学号插入*/score *charu2(score *head,score *stu) score *p1,*p2; int i=0; p1=head; r=paixu2(r); /*调用排序函数*/ stu=(score*)malloc(len
29、); /*开辟一个新单元,用于保存要插入的信息*/ printf(请输入要增加的学生资料:n); printf(请输入要增加的学生学号:); scanf(%d,&stu-num); while(stu-numnum); printf(b.请输入要增加的学生姓名:); scanf(%s,stu-name); printf(请输入要增加的学生性别(f或m):); scanf( %c,&stu-sex); while(stu-sex!=m&stu-sex!=f) printf(输入错误,输入错误请重新输入性别:); scanf( %c,&stu-sex); printf(c.请输入要增加的学生生日(
30、年.月.日):); scanf( %d.%d.%d,&stu-birthday.year,&stu-birthday.month,&stu-birthday.day); printf(d.请输入要增加的学生的成绩!n); printf(1.请输入要增加的学生c语言成绩(平时,实验,考试):); scanf( %d,%d,%d,&stu-xk0.pingshi,&stu-xk0.shiyan,&stu-xk0.kaoshi); stu-xk0.zchji=stu-xk0.pingshi*0.1+stu-xk0.shiyan*0.2+stu-xk0.kaoshi*0.7; printf(2.请输入
31、要增加的学生高数的成绩(平时,实验,考试):); scanf( %d,%d,%d,&stu-xk1.pingshi,&stu-xk1.shiyan,&stu-xk1.kaoshi); stu-xk1.zchji=stu-xk1.pingshi*0.1+stu-xk1.shiyan*0.2+stu-xk1.kaoshi*0.7; if(head=null) /*判断头指针是否为空*/ head=stu; stu-next=null; n+; return(head); while(p1-numnum&p1-next!=null) /*根据学号确定要插入的位置*/ p2=p1; p1=p1-nex
32、t; if(stu-numnum) if(p1=head) head=stu; stu-next=p1; n+; else stu-next=p2-next; p2-next=stu; n+; else p1-next=stu; stu-next=null; n+; printf(增加学生资料成功!n); printf(n); return(head); /*返回头指针*/*插入的二级菜单*/charu_cd()int m=0,i;while(m=0)printf(增加学生的人数n);printf(n1.按c语言成绩增加n);printf(2.按学号增加n);printf(请选择你所要操作的选
33、项(按0退出):);scanf(%d,&i);switch(i)case 1:r=charu1(r,stu);break;case 2:r=charu2(r,stu);break;case 0:m=1;break;default:printf(错误,重新选择:);break;/*更新模块*/score *gengxin(score *head) score *q=head;int i,sss=0;int num,year,month,day,pingshi1,shiyan1,kaoshi1,pingshi2,shiyan2,kaoshi2; char name10; char sex;printf(请输入要更新学生的学号:);scanf(%d,&num);while(q!=null) if(num=q-num) printf(请输入新的学号:); scanf(%d,&num); q-num=num; printf(请输入新的姓名:); scanf(%s,name); strcpy(q-name,name); printf(请输入新学生的性别:); scanf( %c,&sex); while(sex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报书主要观点
- 海口课题立项申报书
- 农村砖房拆墙合同范本
- 【复习大串讲】【中职专用】高二语文上学期期末期末综合测试题(二)(职业模块)(原卷版)
- 刀出售合同范本
- 吧台设备采购合同范例
- 医疗耗材oem合同范本
- 住房房屋装修合同范本
- 老旧农机淘汰更新工作方案
- 卖鸡销售合同范例
- 10KV电力工程施工组织设计
- 《无损检测(第2版)》 课件绪论
- 肾上腺肿物的护理(演示模板)
- 2024年湖南工业职业技术学院单招职业适应性测试题库参考答案
- 电工流体 变压器和开关用的未使用过的矿物绝缘油
- 2024年安徽医学高等专科学校单招职业适应性测试题库带答案
- 声门下分泌物引流的应用专家讲座
- 7.1.2全概率公式课件高二下学期数学人教A版选择性
- 硝酸脂类药物的作用注意事项不良反应
- 科普版小学英语六年级下册全册教案
- 脑梗合并心衰护理查房
评论
0/150
提交评论