《C语言程序设计报告-学生成绩管理系统.pdf》由会员分享,可在线阅读,更多相关《C语言程序设计报告-学生成绩管理系统.pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、学生成绩管理系统1c c 语言课程设计语言课程设计程序设计说明书程序设计说明书院院系系:信息系信息系专业班级专业班级:计算机计算机二二班班学学号号:140713014071304141学生姓名学生姓名:董丁锐董丁锐指导教师指导教师:刘红梅刘红梅学生成绩管理系统2内容摘要摘要:本次课程设计的课题是学生成绩管理系统,本文介绍课程设计课题的选题意义,说明了本系统提供的主要功能,对设计思路、功能模块、流程图、功能模块、中心算法进行了详细的说明,并画出流程框图。本文提供了完整的源程序代码,并展示了系统使用和运行效果。最后给出了在小学期高级语言程序设计过程中的总结,其中包含本程序独特设计,作者的设计收获、
2、设计中遇到的困难和问题,以及作者对设计题目及功能的改进意见,查阅的参考文献等方面的内容。索引关键字关键词:源程序代码,学生成绩管理,流程框图学生成绩管理系统3内容目录内容目录1题目要求-41.1内容要求-41.2设计要求-42设计思想-53功能模块及流程图-54数据结构-75中心算法代码说明-76系统实现-86.1程序代码-86.2系统使用-216.3运行效果说明-217总结-248致谢词-259参考文献-25学生成绩管理系统4.正文1 题目要求1.1 内容要求要求能够实现输入记录、查询记录、更新记录、统计记录、输出记录等功能。1.输入记录。对每个学生的学号、姓名、班级、数学、英语、计算机成绩
3、进行输入并存储,在程序的运行过程中,数据的存储可以采用结构体数组或者链表,但是最终应该存储在文件中。2.维护记录。能够实现添加、删除、修改学生记录,但是一定要将最终数据存储到文件中。3.查询记录。根据班级、学号、科目等查询学生的成绩。如果查询时学生数据并没有读入到结构体数组或者链表中,则应该先从文件中读出数据并存储在结构体数组或者链表中,然后在结构体数组或者链表中查询满足条件的数据。4.统计记录。完成对各门功课最高分和不及格人数的统计。1.2 设计要求各级菜单及功能间必须建立必要的联系,要定义参照完整性规则。使用二进制文件方式存储数据。要求有菜单界面,结果显示时应达到界面友好。将完成的全部内容
4、连编成一个.exe 文件。学生成绩管理系统52 设计思想1.在设计时考虑以下几个方面:操作简单。因为使用者多为非计算机专业人员,所以该系统要求设计的界面美观,操作方便。要充分考软件界面友好和操作方便,便愈使用人员快速上手。易于维护。一个软件的好坏,关键在于产品的可靠,稳定,便于维护。2开发语言的选择针对世界上流行的大量软件和开发工具,经过认真分析其优缺点,结合目前的软硬件开发环境,选用微软 WINDOWS 平台下的 Visual C+作为软件开发工具。选用工具有几下几方面优点:1C 语言简洁、紧凑、使用方便、灵活。有 32 个关键字。C 语言程序比其他许多高级语言简练,源程序短,因此输入程序时
5、工作量小。2运算符丰富。3数据类型丰富,具有现代语言的各种数据结构。4C 语言是完全模块化和结构化的语言。用函数作为程序的模块单位,便于实现程序的模块化。5语法限制不太严格,程序设计自由度大。6生成目标代码质量高,程序执行效率高。7用 C 语言编写的程序可移植性好。综上所述,Visual C+可以满足学生成绩管理的要求,所以用来开发学生成绩管理系统是非常合适的。3 功能模块及流程图学生成绩管理系统6学生成绩管理系统对学校加强学生基本情况及学生成绩管理有着重要的作用。为了能使该系统具有更为广泛的功能:应该将该系统细分为学生操作系统、教师操作系统、教务处操作系统,以满足不同身份的人的需求。总体来说
6、,该系统应分为输入模块、维护模块、查询模块以及统计模块。由于本软件为学校中多个身份的人的定制开发的。我们经过反复论证,最终确定了学生成绩管理系统的设计方案,主要流程图如下所示:系统主菜单学生操作教师操作教务处操作查询功能录入功能删除功能修改功能查询功能查询功能统计功能统计功能按班级按学号按科目按班级按学号按科目按班级按学号按科目数学英语计算机数学英语计算机数学英语计算机学生成绩管理系统7通过系统主菜单,可以使学校中不同身份的人选择不同的操作系统,从而合理的使用不同的功能。4 数据结构结构体:程序设计中用到的结构体类型:学生信息结构体类型:struct studentint num;char n
7、am20;char clas20;float math;float english;float computer;stuSIZE;5 中心算法代码说明说明1.void save()FILE*fp;int j;if(fp=fopen(stu_list,wb)=NULL)printf(cannot open filen);return;for(j=0;jSIZE;j+)if(fwrite(&stuj,sizeof(struct student),1,fp)!=1)printf(file write errorn);fclose(fp);以上代码将数据存入文件中,操作起来避免了直接对内存进行操作,可
8、对文件进行操作。2.for(i=0;iSIZE;i+)学生成绩管理系统8for(j=0;jstui+1.math)t=stui.math;stui.math=stui+1.math;stui+1.math=t;for(j=0,i=0;iSIZE;i+)if(stui.math60)j=j+1;统计函数中使用起泡法排序再统计的方法6.6.系统实现系统实现6.1 程序代码代码如下:#include#include#define SIZE 34struct studentint num;char nam20;char clas20;float math;float english;float com
9、puter;stuSIZE;void save()/*将数据储存于文件*/FILE*fp;int j;if(fp=fopen(stu_list,wb)=NULL)学生成绩管理系统9printf(cannot open filen);return;for(j=0;jSIZE;j+)if(fwrite(&stuj,sizeof(struct student),1,fp)!=1)printf(file write errorn);fclose(fp);search(int n)/*查询学号函数*/int j;for(j=0;jSIZE)return-1;void function1()/*添加记录*
10、/void xt2();int i;char k;printf(*添加学生信息*n);for(i=0;iSIZE;i+)printf(请输入该生学号:n);scanf(%d,&stui.num);printf(请输入该生姓名:n);scanf(%s,&stui.nam);printf(请输入该生所在班级:n);scanf(%s,&stui.clas);printf(请输入该生数学成绩:n);scanf(%f,&stui.math);printf(请输入该生英语成绩:n);scanf(%f,&stui.english);学生成绩管理系统10printf(请输入该生计算机成绩:n);scanf(%
11、f,&puter);getchar();printf(完成本次操作!n);printf(是否返回上一菜单?y/n:n);k=getchar();if(k=n)continue;/*判断*/elsebreak;save();xt2();void function2()/*删除学生记录*/void xt2();int i,j;char a,k;printf(*删除学生信息*n);printf(请输入要删除学生的学号:n);scanf(%d,&i);j=search(i);if(j=-1)loop:printf(该学生不存在,请重新输入!n);printf(输入 0 退出n);for(j=0;jSI
12、ZE;j+)if(j=-1)goto loop;else break;elsefor(i=0;iSIZE;i+)printf(原数据为:n);学生成绩管理系统11printf(学 号%d,姓 名%s,班 级%s,数 学 成 绩%4.1f,英 语 成 绩%4.1f,计 算 机 成绩%4.1fn,stuj.num,stuj.nam,stuj.clas,stuj.math,stuj.english,puter);stuj.num=0;stuj.nam20=0;stuj.clas20=0;stuj.math=0;stuj.english=0;puter=0;printf(删除结果为n);printf(
13、学 号%d,姓 名%s,班 级%s,数 学 成 绩%4.1f,英 语 成 绩%4.1f,计 算 机 成绩%4.1fn,stuj.num,stuj.nam,stuj.clas,stuj.math,stuj.english,puter);save();printf(完成本次操作!n);k=getchar();if(k=y)continue;/*判断*/elsebreak;printf(是否返回主菜单 y/n:n);scanf(%c,&a);if(a=y)xt2();elsefunction2();void function3()/*修改*/char name20,phy10;void xt2();
14、printf(请输入要修改的学生姓名:);scanf(%s,name);printf(n);int i;float t;for(i=0;iSIZE;i+)学生成绩管理系统12change:if(strcmp(stui.nam,name)=0)printf(请输入要修改的科目:);scanf(%s,phy);if(strcmp(math,phy)=0)printf(输入成绩:);scanf(%f,&t);stui.math=t;printf(成绩为:%4.2fn,stui.math);else if(strcmp(english,phy)=0)printf(输入成绩:);scanf(%f,&t)
15、;stui.english=t;printf(成绩为:%4.2fn,stui.english);else if(strcmp(computer,phy)=0)printf(输入成绩:);scanf(%f,&t);puter=t;printf(成绩为:%4.2fn,puter);elseprintf(错误,请重新输入:);goto change;save();printf(完成本次操作!n);xt2();void way1()/*按班级查询*/void function4();学生成绩管理系统13int i;char clas20;char a;loop:printf(请输入要查询学生的班级:n
16、);scanf(%s,clas);for(i=0;iSIZE;i+)if(strcmp(clas,stui.clas)=0)printf(学 号%d,姓 名%s,班 级%s,数 学 成 绩%f,英 语 成 绩%f,计 算 机 成绩%fn,stui.num,stui.nam,stui.clas,stui.math,stui.english,puter);if(i=SIZE)printf(您所查询的信息不存在,请重新输入);goto loop;printf(完成本次操作!n);scanf(%c,&a);if(a=y)way1();elsefunction4();void way2()/*按学号查询
17、*/void function4();int i;int number;char a;loop:printf(请输入要查询学生的学号:n);scanf(%d,&number);for(i=0;iSIZE;i+)if(number=stui.num)printf(学 号%d,姓 名%s,班 级%s,数 学 成 绩%f,英 语 成 绩%f,计 算 机 成绩%fn,stui.num,stui.nam,stui.clas,stui.math,stui.english,puter);if(i=SIZE)printf(您所查询的信息不存在,请重新输入n);goto loop;学生成绩管理系统14print
18、f(完成本次操作!n);scanf(%c,&a);if(a=y)way2();elsefunction4();void check1()/*按学生数学成绩查询*/void way3();int i;char a;char name20;loop:printf(请输入要查询的学生姓名n);scanf(%s,name);for(i=0;iSIZE;i+)if(strcmp(name,stui.nam)=0)printf(%s 的数学成绩是%fn,name,stui.math);printf(完成本次操作!n);scanf(%c,&a);if(a=y)goto loop;elseway3();voi
19、d check2()/*按学生英语成绩查询*/void way3();int i;char a;char name20;loop:printf(请输入要查询的学生姓名n);scanf(%s,name);for(i=0;iSIZE;i+)学生成绩管理系统15if(strcmp(name,stui.nam)=0)printf(%s 的英语成绩是%fn,name,stui.english);printf(完成本次操作!n);scanf(%c,&a);if(a=y)goto loop;elseway3();void check3()/*按学生计算机成绩查询*/void way3();int i;cha
20、r a;char name20;printf(请输入要查询的学生姓名n);scanf(%s,name);for(i=0;iSIZE;i+)if(strcmp(name,stui.nam)=0)printf(%s 的计算机成绩是%fn,name,puter);printf(完成本次操作!n);scanf(%c,&a);if(a=y)check3();elseway3();void way3()/*按科目查询*/void function4();int check;printf(*请输入要查询的科目:*n);printf(1 按学生数学成绩查询n);printf(2 按学生英语成绩查询n);pri
21、ntf(3 按学生计算机成绩查询n);学生成绩管理系统16printf(4.返回上一菜单n);printf(请选择:n);scanf(%d,&check);switch(check)case 1:check1();break;case 2:check2();break;case 3:check3();break;case 4:function4();break;void function4()/*查询记录*/void main();int way;printf(*查询学生成绩*n);printf(1 按班级查询n);printf(2 按学号查询n);printf(3 按科目查询n);print
22、f(4 返回主菜单n);printf(*n);printf(请选择:n);scanf(%d,&way);switch(way)case 1:way1();break;case 2:way2();break;case 3:way3();break;case 4:main();break;void function5()/*统计*/void main();学生成绩管理系统17char phy10;inta;printf(请输入要统计的科目:);shuru:scanf(%s,phy);if(strcmp(math,phy)=0)int i,j;float t;for(i=0;iSIZE;i+)for
23、(j=0;jstui+1.math)t=stui.math;stui.math=stui+1.math;stui+1.math=t;for(j=0,i=0;iSIZE;i+)if(stui.math60)j=j+1;printf(数学最高分为%4.1f,不及格人数为%dn,stuSIZE.math,j);if(strcmp(english,phy)=0)int i,j;float t;for(i=0;iSIZE;i+)for(j=0;jstui+1.english)t=stui.english;stui.english=stui+1.english;stui+1.english=t;for(j
24、=0,i=0;iSIZE;i+)学生成绩管理系统18if(stui.english60)j=j+1;printf(英语最高分为%4.1f,不及格人数为%dn,stuSIZE.english,j);if(strcmp(computer,phy)=0)int i,j;float t;for(i=0;iSIZE;i+)for(j=0;jstui+puter)t=puter;puter=stui+puter;stui+puter=t;for(j=0,i=0;iSIZE;i+)if(puter60)j=j+1;printf(计算机最高分为%4.1f,不及格人数为%dn,stuSIZE.computer,
25、j);printf(1,继续统计n);printf(2,返回主菜单n);printf(请选择:n);scanf(%d,&a);switch(a)case 1:function5();break;case 2:main();break;学生成绩管理系统19void xt1()void main();printf(*学生操作系统*n);printf(1.查询记录n);printf(2.返回上一菜单n);printf(*n);printf(n);int function;printf(请输入要选择的功能:);scanf(%d,&function);switch(function)case 1:fun
26、ction4();break;case 2:main();break;void xt2()void main();printf(*教师操作系统*n);printf(1.添加记录n);printf(2.删除记录n);printf(3.修改记录n);printf(4.查询记录n);printf(5.统计记录n);printf(6.返回上一菜单n);printf(*n);printf(n);int function;printf(请输入要选择的功能:);scanf(%d,&function);学生成绩管理系统20switch(function)case 1:function1();break;cas
27、e 2:function2();break;case 3:function3();break;case 4:function4();break;case 5:function5();break;case 6:main();break;void xt3()void main();printf(*教务处操作系统*n);printf(1.查询记录n);printf(2.统计记录n);printf(3.返回上一菜单n);printf(*n);printf(n);int function;printf(请输入要选择的功能:);scanf(%d,&function);switch(function)cas
28、e 1:function4();break;case 2:function5();break;case 3:main();break;void main()int a;printf(*学生成绩管理系统*n);printf(1.学生2.教师3.教务处n);学生成绩管理系统21printf(*n);printf(请选择运行身份:);scanf(%d,&a);if(a=1)xt1();if(a=2)xt2();if(a=3)xt3();6.2 系统使用录入信息时,每一个项目都必须输入相应的内容,输入错误时,系统自动提供输入错误提示,可以根据提示重新输入。修改、增加、删除,查找记录前必须先打开一个文件
29、修改完后必须记得保存信息。6.3 运行效果说明主菜单:供使用人选择身份,进入相应的管理系统。学生成绩管理系统22添加学生信息:是教师能够录入添加学生信息。查询功能:使使用人可以根据班级、学号、科目查询成绩。学生成绩管理系统23删除功能:教师能够删除学生信息并储存。修改功能:使教师能够根据学生姓名修改学生不同科目的成绩。学生成绩管理系统24统计功能:用来统计某科目在班级中最高分以及不及格人数。7.总结通过本次 C 程序课程设计,我觉得对自己提高很大:克服了懒惰,这在我以后的学习和工作中的心理定位与调节有很大的帮助。我感受到了编程是一项非常烦琐周密的活动,他不但需要一个人周密的思考问题的能力,处理
30、问题的能力,还需要有足够的耐心和严谨治学的作风,来不得半点马虎。通过本次课程设计,我初步学会了程序设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道如何去查找资料和整合处理这些资料的能力,这为以后的大学毕业设计论文打下了一个初步的基础使我收益最大的是享受到了一种成功的喜悦,在这九天之中从开始的确定课程设计题目,然后是上网和上图书馆查找资料,编写 C 语言原程序,然后是进行编译,这个环节是一个非常痛苦和艰难的,常常会因为一小点的错误而在编译失败与再次修改的漫漫循环之路中,但失败的越多,对人的考验就越多,在编译运行成功之后的享受成功的喜悦也就越多,另外在调试程序的过程中不断的思考和运用已经学到
31、的知识,这对于自己是有很大的提高的。由于所学的知识不多,自己的编程经验不足,遇到了一些问题。例如:多个数据存储问题,返回上一菜单问题,未接受回车符而造成的后面程序无法运行等问题,经过查询资料,小组讨论以及向指导老师求助,我们顺利地解决了上述问题,从而积累了一些编程经验。通过这几天地实践,发现该管理系统存在升级的空间,界面不是十分友好,这些方面有待完善。学生成绩管理系统258 致谢辞经过几天的课程设计,我学会了很多东西。这次课程设计的成功完成离不开同学和老师的帮助。当自己在编程中遇到困难的时候,有同学们共同商量,相互协助,献计献策,使我能够比较分析各种方案,找出解决问题的方法;当在课程设计过程中
32、遇到模棱两可的问题,同学们能过各抒己见,尊重他人见解,使我能够综合各种观点,取长补短,虚心借鉴,是程序做得更尽人意;当遇到我们都无法解决的问题时,有辅导老师耐心讲解,详细地指出了程序中的错误,不仅帮我解决了当前编程中的问题,而且使我加深了对 C 语言的认识,为以后的学习铺平了道路。感谢他们,他们不仅是我收获了更多的知识,丰富了学习经验,而且使我养成了“严谨治学”的学习态度,使我拥有了面对困难的勇气,并且体会到了浓浓的师生情,体会到了同窗之间难以忘怀的友谊。这必定是我人生中一笔宝贵的财富,再次感谢他们!7.参考文献【1】C 语言程序设计实例精粹【2】C 语言课程设计案例精编【3】C 语言实战 105 例【4】C 程序设计(第三版)谭浩强 著清华大学出版【5】C 语言程序设计实验指导 课程设计 习题解答高涛 陆丽娜 著西安交通大学出版