c语言-学生成绩管理系统

上传人:痛*** 文档编号:51278829 上传时间:2022-01-25 格式:DOC 页数:13 大小:103KB
收藏 版权申诉 举报 下载
c语言-学生成绩管理系统_第1页
第1页 / 共13页
c语言-学生成绩管理系统_第2页
第2页 / 共13页
c语言-学生成绩管理系统_第3页
第3页 / 共13页
资源描述:

《c语言-学生成绩管理系统》由会员分享,可在线阅读,更多相关《c语言-学生成绩管理系统(13页珍藏版)》请在装配图网上搜索。

1、C语言课程设计报告书 课程名称:学生信息管理系统一、设计目的:(1)本学期我们学习了C语言,由于初接触,学习有一定困难;于是学校给我们提供一次巩固提高的机会-课程设计。该可程设计要求学生既动手又动脑,自学,查资料,独立实践。将本学期课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。(2)C语言的实践。掌握C语言函数的定义方法,函数的声明及函数的调用过程。掌握结构体类型变量的定义和使用,综合应用C语言的知识,实现一个完整的系统,提高编程能力,体会软件程序的开发过程。二、总体设计(1)程序设计组成框图学

2、生成绩管理系统1.按班级输出学生成绩单2.按姓名查询3.增加学生4.删除学生5.按班级修改学生成绩6.按班学期改学生成绩7.保存所有学生信息8.显示不及格学生成绩9.按平均成绩排序并输出成绩10.退出(2)模块功能说明1 输出功能:完成全部学生记录的显示。2 查询功能:输入姓名可以查询学生的详细信息。3 增加功能:增加新学生的信息。 4 删除功能:删除学生信息。5 修改功能:修改学生的错误信息。6保存功能:保存已输入信息。7读取功能:读取已输入信息。8显示功能:按要求显示学生记录。9 排序功能:按要求完成对学生信息的排序。 10 退出系统。(3)程序流程图开始输入指令(110)学生成绩单按姓名

3、查询增加学生删除学生按班级修改按学期修改保存信息不及格成绩平均分排序退出123456789100结束(4)主要函数之间相互调用如下:主函数main ()的调用switch(choice)case 1:OutputInformation();break; case 2:DesplayInfoBystudentName();break;case 3:p=MallocNode();GetInformation(p); InsertOneNode(p); break;case 4:DeleteNodeBystudentNumber();break;case 5:ChangeMarkByName();b

4、reak;case 6:ChangeMarkByNumber();break;case 7:SaveLinkToFile();break;case 8:DesplayMarkSegment();break;case 9:CompositorByTotalMark();break;case 10:SaveLinkToFile(); (5)各函数功能详见源程序清单(6)在设计过程中的感受:首先经过一周的编程实习,并在后一段的报告总结,我对C语言这门科有新的认识,本人实在是获益不浅!要想编写一个准确、高效并有使用价值的程序,一定先要对课本知识熟悉,还要掌握必要的上机操作能力,写程序其实很容易而关键在

5、于调试程序。这次设计,让我重新掌握了C语言,而且还得到了用C语言解决实际问题的宝贵经验。其次, 通过此次编程我也发现了自己在学习中的错误和不足,复习了以前学过的知识。同时也学到了一些没学过的知识,让我从中收益非浅,也为期末考试准备了一下!更重要的是培养了独立思考问题和解决问题的能力,熟悉了一些基本操作和解决问题的方法!第三, 因为初次接触等原因此次设计遇到了许多问题,我深刻体会到老师发挥的重要作用,C语言程序对我们来说比较难,在匆忙的学习中更是难上加难,似乎觉得自己仅是个匆匆过客,但在老师的帮助下我学会了如何调试,如何查找系统没有提示的错误,最后终于排除万难把程序搞定,体会到原来编程也挺有意思

6、的快感.我想没有老师的帮助我很难在短期内把程序设计做的这样好,在此特地感谢老师的帮助。三、源程序清单#include#include#include#includetypedef struct STUDENTchar studentNumber10;/*学生学号*/char studentName20;/*学生姓名*/char className20;/*班级名称*/char yearName20;/*学期名称*/float mark1;/*第1门成绩*/float mark2;/*第2门成绩*/float mark3;/*第3门成绩*/struct STUDENT *next;STUDENT

7、;STUDENT *headLink;/*链表表头指针*/*以下是函数声明*/void ReadInfoFormFile(void);void DesplayMenu(void);void CreateHeadLink(void);STUDENT *MallocNode(void);void GetInformation(STUDENT *t);void OutputInformation(void);void DesplayInfoBystudentName(void);void DesplayOneNode(STUDENT *t);void InsertOneNode(STUDENT *t

8、);void DeleteNodeBystudentNumber(void);void ChangeMarkByName(void);void ChangeMarkByNumber(void);void SaveLinkToFile(void);void DesplayMarkSegment(void);void CompositorByTotalMark(void);int choose;/*用于接受用户的选择*/*主函数*/void main()CreateHeadLink();ReadInfoFormFile();DesplayMenu();/*函数功能:从文件中读学生信息到链表中*/v

9、oid ReadInfoFormFile(void)FILE *fp;STUDENT *p;fp=fopen(student.txt,r);if(!fp)printf(文件不存在n);return;p=MallocNode();while(fscanf(fp,%s%s%s%f%f%f,p-studentNumber,p-studentName,p-className,&(p-mark1),&(p-mark2),&(p-mark3)0)InsertOneNode(p);p=MallocNode();fclose(fp);/*函数功能:显示菜单,根据用户的输入完成相应的功能*/void Despl

10、ayMenu(void)STUDENT *p;printf(-请选择相应功能-nn);printf(| 1 按班级输出学生成绩单 |n);printf(| 2 按姓名查询 |n);printf(| 3 增加学生 |n);printf(| 4 删除学生 |n);printf(| 5 按班级修改学生成绩 |n);printf(| 6 按学期修改学生成绩 |n);printf(| 7 保存所有学生信息 |n);printf(| 8 显示不及格学生成绩 |n);printf(| 9 按平均成绩排序并输出绩 |n);printf(| 10 退出 |nn);scanf(%d,&choose);/*取得用户

11、的选择*/switch(choose)case 1:OutputInformation();/*显示所有学生的信息*/break;case 2:DesplayInfoBystudentName();break;case 3:p=MallocNode();/*先申请一个新结点*/GetInformation(p);/*要求用户输入信息到新结点中*/InsertOneNode(p);/*将新结点加到链表中*/break;case 4:DeleteNodeBystudentNumber();/*根据用户输入的学号删除该学生*/break;case 5:ChangeMarkByName();/*根据用

12、户输入的姓名修改学生成绩*/break;case 6:ChangeMarkByNumber();/*根据用户输入的学号修改学生成绩*/break;case 7:SaveLinkToFile();/*保存数据*/break;case 8:DesplayMarkSegment();/*显示不及格的学生成绩*/break;case 9:CompositorByTotalMark();/*按平均成绩排序*/break;case 10:SaveLinkToFile();/*保存数据后再退出*/free(headLink);exit(1);break;default:break;DesplayMenu()

13、;/*递归调用*/*函数功能:建立链表表头*/void CreateHeadLink(void)STUDENT *p;p=(STUDENT*)malloc(sizeof(STUDENT);headLink=p;p-next=NULL;/*函数功能:申请一个新结点,并将其初始化*/STUDENT *MallocNode(void)STUDENT *p;int i;p=(STUDENT*)malloc(sizeof(STUDENT);if(p=NULL)return NULL;for(i=0;istudentNumberi=0;for(i=0;istudentNamei=0;for(i=0;icl

14、assNamei=0;p-mark1=0.0;p-mark2=0.0;p-mark3=0.0;p-next=NULL;return p;/*函数功能:取得用户输入的学生信息*/void GetInformation(STUDENT *t)printf(请输入学生学号:n);scanf(%s,t-studentNumber);printf(请输入学生姓名:n);scanf(%s,t-studentName);printf(请输入该生所在班级:n);scanf(%s,t-className);printf(请输入第1门成绩:n);scanf(%f,&(t-mark1);printf(请输入第2门成

15、绩:n);scanf(%f,&(t-mark2);printf(请输入第3门成绩:n);scanf(%f,&(t-mark3);/*函数功能:在链表的结尾处增加一个结点*/void InsertOneNode(STUDENT *t)STUDENT *p;p=headLink;while(p-next)p=p-next;p-next=t;/*函数功能:根据用户输入的学生姓名显示该学生的信息*/void DesplayInfoBystudentName(void)STUDENT *p;char studentName20;char flag=0;p=headLink-next;printf(请输入

16、学生姓名:n);scanf(%s,studentName);while(p)if(strcmp(p-studentName,studentName)=0)printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn);DesplayOneNode(p);flag=1;break;p=p-next;if(!flag)printf(对不起,不存在姓名为 %s 的学生n,studentName);/*函数功能:输出一个结点的信息*/void DesplayOneNode(STUDENT *t)printf(%st,t-studentNumber);printf(%st,t-stude

17、ntName);printf(%st,t-className);printf(%.2ft,t-mark1);printf(%.2ft,t-mark2);printf(%.2ft,t-mark3);printf(%.2ft,t-mark1+t-mark2+t-mark3);printf(%.2ftn,(t-mark1+t-mark2+t-mark3)/3);/*函数功能:根据用户输入的学号删除该学生*/void DeleteNodeBystudentNumber(void)char studentNumber10;STUDENT *p,*q;char flag=0;printf(请输入要删除的学

18、生学号:);scanf(%s,studentNumber);p=headLink;q=headLink-next;while(q) if(strcmp(q-studentNumber,studentNumber)=0) p-next=q-next; free(q); flag=1; break; p=p-next; q=q-next; if(!flag)printf(不存在该学号的学生n);return;printf(成功删除n);/*函数功能:显示所有学生的信息*/void OutputInformation(void)STUDENT *p;p=headLink-next;if(p=NULL

19、)printf(现在没有学生信息,请先输入学生信息nn);return;printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn);while(p)DesplayOneNode(p);p=p-next;/*函数功能:根据输入的班级修改成绩*/void ChangeMarkByName(void)STUDENT *p;int a;char studentName20;char flag=0;float mark1,mark2,mark3;p=headLink-next;printf(请输入学生班级:n);scanf(%d,&a);printf(请输入学生姓名:n);scanf

20、(%s,studentName);while(p)if(strcmp(p-studentName,studentName)=0)printf(请输入新的第1门成绩:n);scanf(%f,&mark1);printf(请输入新的第2门成绩:n);scanf(%f,&mark2);printf(请输入新的第3门成绩:n);scanf(%f,&mark3);p-mark1=mark1;p-mark2=mark2;p-mark3=mark3;flag=1;printf(修改成功n);break;p=p-next;if(!flag)printf(对不起,不存在班级为 %s 的学生n,studentNa

21、me);/*函数功能:根据输入的学期修改成绩*/void ChangeMarkByNumber(void)STUDENT *p;int b;char studentNumber20;char flag=0;float mark1,mark2,mark3;p=headLink-next;printf(请输入学生所在学期:n);scanf(%d,&b);printf(请输入学生学号:n);scanf(%s,studentNumber);while(p)if(strcmp(p-studentNumber,studentNumber)=0)printf(请输入新的第1门成绩:n);scanf(%f,&

22、mark1);printf(请输入新的第2门成绩:n);scanf(%f,&mark2);printf(请输入新的第3门成绩:n);scanf(%f,&mark3);p-mark1=mark1;p-mark2=mark2;p-mark3=mark3;flag=1;printf(修改成功n);break;p=p-next;if(!flag)printf(对不起,不存在学期为 %s 的学生n,studentNumber);/*函数功能:保存链表数据到文件中*/void SaveLinkToFile(void)STUDENT *p;FILE *fp;p=headLink-next;if(p=NULL

23、)printf(现在没有学生信息,请先输入学生信息nn);return;fp=fopen(student.txt,w+);if(!fp)printf(文件不存在n);return;while(p)fprintf(fp,%s %s %s %f %f %fn,p-studentNumber,p-studentName,p-className,p-mark1,p-mark2,p-mark3);p=p-next;fclose(fp);/*函数功能:不及格学生成绩*/void DesplayMarkSegment(void)STUDENT *p;int count=0;p=headLink-next;p

24、rintf(60分以下(不及格)的学生成绩如下:n);printf(学号t姓名t班级t成绩1t成绩1t成绩3t总成绩t平均成绩nn);while(p)if(6(int)(p-mark1/10)|(6(int)(p-mark2/10)|(6(int)(p-mark3/10)/*只要有一科不及格就认为该生不及格*/count+;DesplayOneNode(p);p=p-next;printf(不及格的学生一共有%d人n,count);/*函数功能:按平均成绩排序*/void CompositorByTotalMark(void)STUDENT exchange,*r,*p,*q;r=headLi

25、nk-next;if(r=NULL)printf(现在还没学生信息,请先输入学生信息n);return;while(r)/*两层while循环实现排序*/p=r;q=r-next;while(q)if(q-mark1+q-mark2+q-mark3)(p-mark1+p-mark2+p-mark3)strcpy(exchange.studentNumber,q-studentNumber);/*先复制q结点信息到exchange*/strcpy(exchange.studentName,q-studentName);strcpy(exchange.className,q-className);

26、exchange.mark1=q-mark1;exchange.mark2=q-mark2;exchange.mark3=q-mark3;strcpy(q-studentNumber,p-studentNumber);/*再复制p结点信息到q*/strcpy(q-studentName,p-studentName);strcpy(q-className,p-className);q-mark1=p-mark1;q-mark2=p-mark3;q-mark3=p-mark3;strcpy(p-studentNumber,exchange.studentNumber);/*最后复制exchange结点信息到p*/strcpy(p-studentName,exchange.studentName);strcpy(p-className,exchange.className);p-mark1=exchange.mark1;p-mark2=exchange.mark2;p-mark3=exchange.mark3;q=q-next;r=r-next;OutputInformation();

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!