还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程设计报告书课程名称学院班级学号姓名指导老师设计时间学生成绩管理课程设计
1、设计题目用C语言编写程序完成以下任务
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平时成绩进行查询
(3)能查询学生成绩,不及格科目及学生__
(4)能按班级输出学生的成绩单
二、设计要求
(1)贯彻结构化的程序设计思想
(2)用户界面友好,功能明确,操作方便
(3)用户界面中的菜单至少应包括“统计各班总分及平均分”、“平均成绩排序”、“成绩单显示”和“退出”4项
(4)代码应适当缩进,并给出必要的注释,以增强程序的可读性
三、设计需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为十个模块,每一个模块对应一个函数在这些函数当中,按学期对学生信息查询函数、按班级对学生信息查询函数、按平均成绩排序函数、按班级显示学生成绩单函数、统计全部学生总分及平均分函数、按总成绩排序函数、统计成绩不及格学生信息函数、显示全部学生信息并统计人数函数的实现严格按照题目的要求读取文件函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行
1.显示全部学生信息并统计人数这里要用到文件打开函数和文件读取数据函数,再加入人数的统计语句,以实现将文件内容显示到窗体并统计总人数
2.统计全部学生总分及平均分这一步在第一项功能的基础上稍加改动,添加求学生总分和平均分的函数就可以实现预期的功能
3.按学期对学生信息查询实现的功能是按照学期对学生的成绩和数据进行查询,要求输入正确学期实现该功能
4.按班级对学生信息查询实现的功能是按照班级对学生的成绩和数据进行查询,要求输入正确班级实现该功能
5.按总成绩排序该项为附加功能实现的是总成绩的递减排序以及名次显示,其中总成绩相同者名次相同
6.按平均成绩排序按照题目的具体要求实现的是平均成绩的递减排序以及名次显示,其中平均成绩相同者名次相同
7.统计成绩不及格学生信息该项即统计所有学生中各科中至少有一科不及格的学生的所有信息
8.按班级显示学生成绩单该项即显示所有学生的基本信息及在总体中成绩排序信息除上面介绍的功能之外,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序,这使整个程序更加完善每一个学生记录都包含学期、班级、学号、姓名,以及英语、计算机两门成绩,在程序当中将学生记录类型定义为结构体类型,函数每次对学生记录的访问,其数据来源都是file.___文件,这样做保证学生数据的一致性,每次运行程序都可以采用原来的数据
4、程序流程图
1.程序总体结构图�当1输入值n=1真假函数printlln=2真假函数sortn=3真假函数query真假n=4函数sort1n=5真假函数sort2函数excellent真n=7假函数cjdan�n=6真假图1程序总体结构图
2.具体功能框图
(1)显示全部学生信息并统计学生人数函数�以读方式打开E盘student.txt文件成功真假输出文件打开失败返回循环变量i=0当文件未结束时i++关闭文件读取学生信息到数组元素stu[i]中返回学生人数i图2读取学生数据
(2)按平均分排序函数�循环变量i=0第j个学生平均分第j+1个学生平均分真假交换两个学生信息j++i++当in-1时当jn-1-i时j++j输出学生信息和排名情况第j个学生平均分=第j+1个学生平均分n=readsstuj=0真假j++i++图3按平均分排序
五、核心技术的实现说明及相应程序段本程序主要由十个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能在这些函数当中,按学期对学生信息查询、按班级对学生信息查询函数、按平均成绩排序函数、统计成绩不及格学生信息函数等是程序中较为核心的部分,下面分别进行说明
1.按学期、班级对学生信息查询函数首先调用reads函数读取文件中的信息,利用for循环按照班级号循环查找,通过strcmp函数比较所查找学期、班级和已知学期、班级字符,利用if语句对所输入的待查找学期、班级与已知学期、班级字符进行判断,如果所查学期、班级字符不是已知,则显示无此学期、班级信息,在符合条件的情况下则输出该学期学生所有信息具体的程序段如下:/*按学期对学生信息查询*/void___qi{structstudentstud[N];charnumber
[20];intin;n=readsstud;printf\n请输入待查询的学生学期号按回车键确认\nnumber;scanf%snumber;printf***********************所查学生信息如下************************\n;printf学期班级学号姓名计算机英语总分平均分\n;printf***************************************************************\n;fori=0;in;i++{ifstrcmpnumberstud[i].xq!=0continue;ifi=n{printf没有找到该学期信息!\n;return;}elseprintf%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\t%
3.1f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].englishstud[i].computer+stud[i].english/2;}}}}/*按班级对学生信息查询*/voidquery{structstudentstud[N];charnumber
[20];intin;n=readsstud;printf\n请输入待查询的学生班级号按回车键确认\nnumber;scanf%snumber;printf***************************所查学生信息如下**********************\n;printf班级学期学号姓名计算机英语总分平均分\n;printf*****************************************************************\n;fori=0;in;i++{ifstrcmpnumberstud[i].cla!=0continue;ifi=n{printf没有找到该班级信息!\n;return;}elseprintf%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\t%
3.1f\nstud[i].clastud[i].xqstud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].englishstud[i].computer+stud[i].english/2;}}
2.按平均成绩排序函数该函数的核心内容是求平均成绩并对所有人进行排序采用冒泡法对平均分进行排序,并记录对于总分的排序采用的排序算法是冒泡法排序,其中平均分的求得是在排序的过程中实现的,这部分程序仍然调用了reads函数,整个排序过程在结构体数组stud中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助对于学生排序后名次的确定在结果输出时予以显示具体程序段如下/*按平均成绩排序*/voidsort2{structstudentstud[N]temp;intijn;n=readsstud;fori=0;in-1;i++forj=0;jn-1-i;j++{ifstud[j].english+stud[j].computer/2stud[j+1].english+stud[j+1].computer/2{temp=stud[j];stud[j]=stud[j+1];stud[j+1]=temp;}}j=1;printf***********************平均成绩排序结果如下*************************\n\n;printf名次学期班级学号姓名英语计算机平均成绩\n;printf***************************************************************************\n;fori=0;in;i++//输出结果并排名{ifstud[i].english+stud[i].computer==stud[i+1].english+stud[i+1].computerprintf%d\t%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\njstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english/2;elseprintf%d\t%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\nj++stud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english/2;}getch;}
3.统计成绩不及格学生信息该函数首先读取文件中的内容,通过循环将挑选出至少一科成绩不及格的学生的信息具体的程序段如下/*统计成绩不及格学生信息*/voidbujige{structstudentstud[N];intin;n=readsstud;printf***************成绩不及格学生信息如下************\n\n;printf学期班级学号姓名计算机英语\n;printf**************************************************\n;fori=0;in;i++ifstud[i].computer60||stud[i].english60printf%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].english;}
六、测试情况
七、课程设计总结不觉之中C语言课程设计很快结束了,通过这一段时间的设计使我学到了许多,以前对C语言的认识比较肤浅,不过在不断尝试中我知道能利用C语言解决比较复杂的问题,也对许多函数有了很深的认识通过我的努力以及遇到不会的问题主动向老师请教和向同学们探讨,我顺利的完成了这次语言课程设计,感到要想对一门课程了解深刻就必须亲自身入其中的去体验,这样才能发现自己的很多缺点,才能一一的去克服,也才能真正的学到知识,也明白了那句“纸上谈来终觉浅,深知此是要躬行”的真正意义纵然把结论书本背得滚瓜烂熟而不运用与实际,也不过是纸上谈兵罢了,终究在未来需要动手能力和实践人才的社会竞争中被淘汰,所以我们需要实际的操作,需要更多的实践训练,这样才能成为真正的__一世纪合格的大学生!
八、源程序代码#includestdio.h#includestdlib.h#includestring.h#includeconio.h#defineN25structstudent{charcla
[10];charxq
[10];charnum
[20];charname
[10];floatcomputer;floatenglish;floatsum__er;}stud[N];voidmenu;voidsort;voidprintll;intreadsstructstudentstu[N];voidsort1;voidsort2;void___qi;voidquery;voidbujige;voidcjdan;void__in{intc;while1{menu;printf\n请输入您要选择的操作序号,按回车键确认;scanf%dc;ifc8||c1printf------对不起,没有此项功能-----!\n;switchc{case1:printll;break;case2:sort;break;case3:___qi;break;case4:query;break;case5:sort1;break;case6:sort2;break;case7:bujige;break;case8:cjdan;break;case9:exit0;}}}voidmenu{printf*******************************************************\n;printf*******************************************************\n;printf※☆欢迎光临☆※\n;printf\n;printf★★成绩统计系统★★\n;printf\n;printf★
1.显示全部学生信息并统计人数\n;printf\n;printf★
2.统计全部学生总分及平均分\n;printf\n;printf★
3.按学期对学生信息查询\n;printf\n;printf★
4.按班级对学生信息查询\n;printf\n;printf★
5.按总成绩排序\n;printf\n;printf★
6.按平均成绩排序\n;printf\n;printf★
7.统计成绩不及格学生信息\n;printf\n;printf★
8.按班级显示学生成绩单\n;printf\n;printf★
9.退出\n;printf\n;printf*******************************************************\n;printf*******************************************************\n;}intreadsstructstudentstud[N]//读取文件中的内容{FILE*fp;inti=0;iffp=fopene:\\file
04.___r==NULL{printf文件打开失败!\n;return0;}else{fori=0;!feoffp;i++fscanffp%s\t%s\t%s\t%s\t%f\t%f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].english;}fclosefp;returni;}voidprintll/*读取D盘文件并打印全部统计总人数*/{FILE*fp;intnumber=0in=20;iffp=fopenE:\\file
04.___r==NULL{printf无法打开文件\n;}printf*********************所有的学生信息如下*********************\n;printf学期班级学号姓名计算机英语\n;printf************************************************************\n;fori=0;in;i++{fscanffp%s\t%s\t%s\t%s\t%f\t%f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].english;printf%s\t%s\t%s\t%s\t%f\t%f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].english;number++;iffeoffpbreak;}printf学生总人数为:%d\nnumber;fclosefp;}voidsort/*统计全部学生总分及平均分*/{structstudentstud[N];intin;n=readsstud;printf***************************全部学生信息如下***************\n;printf班级学号姓名计算机英语总分平均分\n;printf**********************************************************\n;printf**********************************************************\n;fori=0;in;i++{stud[i].sum=stud[i].computer+stud[i].english;stud[i].__er=stud[i].computer+stud[i].english/2;printf%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\t%
3.1f\nstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].sumstud[i].__er;}getch;}void___qi/*按学期对学生信息查询*/{structstudentstud[N];charnumber
[20];intin;n=readsstud;printf\n请输入待查询的学生学期号按回车键确认\nnumber;scanf%snumber;printf***********************所查学生信息如下************************\n;printf学期班级学号姓名计算机英语总分平均分\n;printf***************************************************************\n;fori=0;in;i++{ifstrcmpnumberstud[i].xq!=0continue;ifi=n{printf没有找到该学期信息!\n;return;}elseprintf%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\t%
3.1f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].englishstud[i].computer+stud[i].english/2;}}voidquery/*按班级对学生信息查询*/{structstudentstud[N];charnumber
[20];intin;n=readsstud;printf\n请输入待查询的学生班级号按回车键确认\nnumber;scanf%snumber;printf***************************所查学生信息如下**********************\n;printf班级学期学号姓名计算机英语总分平均分\n;printf*****************************************************************\n;fori=0;in;i++{ifstrcmpnumberstud[i].cla!=0continue;ifi=n{printf没有找到该班级信息!\n;return;}elseprintf%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\t%
3.1f\nstud[i].clastud[i].xqstud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].englishstud[i].computer+stud[i].english/2;}}voidsort1/*按总成绩排序*/{structstudentstud[N]temp;intijn;n=readsstud;fori=0;in-1;i++forj=0;jn-1-i;j++{ifstud[j].english+stud[j].computerstud[j+1].english+stud[j+1].computer{temp=stud[j];stud[j]=stud[j+1];stud[j+1]=temp;}}j=1;printf*************************总成绩排序结果如下**************************\n\n;printf名次学期班级学号姓名英语计算机总成绩\n;printf*********************************************************************\n;fori=0;in;i++//输出结果并排名{ifstud[i].english+stud[i].computer==stud[i+1].english+stud[i+1].computerprintf%d\t%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\njstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english;elseprintf%d\t%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\nj++stud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english;}getch;}voidsort2/*按平均成绩排序*/{structstudentstud[N]temp;intijn;n=readsstud;fori=0;in-1;i++forj=0;jn-1-i;j++{ifstud[j].english+stud[j].computer/2stud[j+1].english+stud[j+1].computer/2{temp=stud[j];stud[j]=stud[j+1];stud[j+1]=temp;}}j=1;printf***********************平均成绩排序结果如下*************************\n\n;printf名次学期班级学号姓名英语计算机平均成绩\n;printf***************************************************************************\n;fori=0;in;i++//输出结果并排名{ifstud[i].english+stud[i].computer==stud[i+1].english+stud[i+1].computerprintf%d\t%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\njstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english/2;elseprintf%d\t%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\nj++stud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english/2;}getch;}voidbujige/*统计成绩不及格学生信息*/{structstudentstud[N];intin;n=readsstud;printf***************成绩不及格学生信息如下************\n\n;printf学期班级学号姓名计算机英语\n;printf**************************************************\n;fori=0;in;i++ifstud[i].computer60||stud[i].english60printf%s\t%s\t%s\t%s\t%
3.1f\t%
3.1f\nstud[i].xqstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].english;}voidcjdan/*按班级显示学生成绩单*/{structstudentstud[N];charnumber
[20];intinj=1;n=readsstud;printf\n请输入待查询的学生班级号按回车键确认\nnumber;scanf%snumber;printf*********************所查班级信息如下*******************\n;printf名次班级学号姓名计算机英语总分\n;printf********************************************************\n;fori=0;in;i++{ifstrcmpnumberstud[i].cla!=0continue;ifi=n{printf没有找到该班级信息!\n;return;}else{ifstud[i].english+stud[i].computer==stud[i+1].english+stud[i+1].computerprintf%d\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\njstud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english;elseprintf%d\t%s\t%s\t%s\t%
3.1f\t%
3.1f\t%
3.1f\nj++stud[i].clastud[i].numstud[i].namestud[i].computerstud[i].englishstud[i].computer+stud[i].english;}}getch;}file.___文件内容2009信工1班101杜永宁92792010信工2班102段楠91802009信工1班103冯红61752008信工3班104郝苇62782009信工1班105胡龙63652009信工1班106金士鹏12532010信工1班107李芳87702008信工2班108刘朝阳86752010信工1班109刘英玫88682009信工3班110卢明30652008信工2班111马立涛86612009信工2班112孙林92802010信工3班113田佳莉88722009信工3班___王传华73602008信工3班115__36602009信工2班116王小萌84792009信工3班117杨柳青31502010信工2班118殷泳84752010信工2班119英平42612008信工1班120张力华9862。