C语言成绩管理系统源代码.doc

上传人:laozhun 文档编号:2384658 上传时间:2023-02-17 格式:DOC 页数:19 大小:62KB
返回 下载 相关 举报
C语言成绩管理系统源代码.doc_第1页
第1页 / 共19页
C语言成绩管理系统源代码.doc_第2页
第2页 / 共19页
C语言成绩管理系统源代码.doc_第3页
第3页 / 共19页
C语言成绩管理系统源代码.doc_第4页
第4页 / 共19页
C语言成绩管理系统源代码.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C语言成绩管理系统源代码.doc》由会员分享,可在线阅读,更多相关《C语言成绩管理系统源代码.doc(19页珍藏版)》请在三一办公上搜索。

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.zchjixk0.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);/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号