C语言课程设计学生成绩统计设计报告.docx
《C语言课程设计学生成绩统计设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生成绩统计设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![C语言课程设计学生成绩统计设计报告.docx](https://file1.bdocx.com/fileroot1/2023-4/24/5add547e-490b-4be7-9743-f081171c93c8/5add547e-490b-4be7-9743-f081171c93c81.gif)
C语言课程设计学生成绩统计设计报告
C语言课程设计学生成绩统计设计报告
课程设计
2013年11月3日
设计题目:
学生成绩统计
设计条件:
掌握C语言的基本知识,能够熟练地应用顺序结构、选择结构、循环结构,能够善于应用结构体数组和对文件的输入输出。
设计内容:
【问题描述】
学期考试结束,统计有N个班某班每个人的平均成绩,每门课的平均成绩,并按个人平均成绩从高到低的顺序输出成绩,输出不及格人名单。
输入、输出格式自定。
【实现提示】
假设某班有:
30人(姓名自定)
考试课程有:
高等数学、物理、外语、C语言、德育5门课程。
将所有同学的成绩保留在文件中,对文件中的数据处理,输出所要求的内容,程序的功能主要包括3方面:
1输入成绩到文件中
2输出成绩
3输出不及格学生名单
4成绩排序
5修改记录
6删除记录
7插入记录等
主函数中对3个功能选择(菜单),调用对应的函数完成。
下达日期:
2013年10月
完成日期:
2013年11月
一、前言····································4
二、设计思想································4
三、设计过程································4
四、程序流程图······························7
五、程序清单································8
六、总结····································8
附录1.用户文档·····························10
附录2.技术文档·····························13
参考文献···································13
一、前言
本课程设计提供了一个既动手又动脑,自学,查资料,独立实践的机会。
将课本上的理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C语言系统编程有一个大致的了解。
本课程设计——学生成绩统计,在日常的教学过程中具有较高的应用价值。
当老师批改完一大批试卷后,需要统计成绩得出相应结果时,“学生成绩统计”就能够发挥其重要作用。
设计这个程序,主要用到结构体数组和文件两个知识点,再结合顺序、循环、选择、函数······来实现功能。
二、设计思想
首先编译预处理,输入头文件;再之全局声明;对函数进行定义。
再建立一个student结构体,把结构体里面的内容写入一个文件中。
然后先把主函数main()写好,再把子函数完善好,最后测试、修改,直到达到最终功能和界面美观为止。
三、设计过程
1、根据设计要求做好分析,把主要框架设计罗列出来。
考虑到此程序主要有3大方面的内容,所以主函数里分为3大模块,模块里面再根据要求执行相应的内容。
2、根据主要的框架,确定没有问题后,编写主函数如下:
#include
#include
#include
#defineN3000
intsystem(constchar*string);
structstudent//声明结构体类型structstudent
{//以下4行为结构体的成员
charname[20];
floatscore[5];
floataver;
intcla;
};
voidinput(structstudentstu[]);
voidprint(structstudentstu[]);
voidprinot(structstudentstu[]);
voidlist(structstudentstu[]);
voidchanges(structstudentstu[]);
voiddel(structstudentstu[]);
voidser(structstudentstu[]);
voidbian();
voidprin();
intM;
FILE*fp;//定义一个指向文件的指针变量fp
structstudentstu[4],*p=stu;
voidmain()
{
charchoice,zlq='y';
intover=0;
while(!
over)//循环语句
{
if(zlq=='Y'||zlq=='y')
{
printf("***************功能选择****************\n");
printf("1.输入成绩到文件中\n");
printf("2.输出成绩\n");
printf("3.编辑\n");
printf("***************************************\n");
printf("你的选择(1-3):
");
do{
scanf("%c",&choice);
}while(choice=='\n');
printf("\n");
switch(choice)//用switch来进行选择
{
case'1':
input(p);break;
case'2':
prin();break;
case'3':
bian();break;
default:
printf("输入错误!
\n");
continue;
}
if(!
over)//在每次运行完选项后,选择退出还是继续
{
printf("\n\n\n返回主菜单吗?
\n(请输入Y或者N,Y代表是,N代表不是.)\n");
scanf("%s",&zlq);
system("CLS");
}
}
if(zlq=='N'||zlq=='n')
{
printf("欢迎下次使用.\n");
over=1;
}
if(zlq!
='Y'&&zlq!
='N'&&zlq!
='y'&&zlq!
='n')
{
printf("\n输入错误!
将退出~\n");
over=1;
}
}
}
输入1后,按enter,会出现如下主菜单:
3、确定好主函数后,再根据要求撰写执行“输入成绩到文件中”之后相对应的“返回主菜单”程序,检查是否会出现错误。
4、待检查无错误之后,开始写下一步:
“输出成绩”程序。
输出程序里面又包含有4个子程序语句,分别为“排序”、“输出成绩”、“输出不及格名单”、“返回”,查找与之相对应的函数的资料,然后撰写相应程序。
5、与第4步相似地进行撰写“编辑”程序下的“修改”、“删除”、“插入”、“返回”程序。
6、运行程序,看是否出现错误,如有错误,根据相关提示修改错误,例如一些字符漏写或者函数类型错误等等。
7、等修改完,再次运行,根据功能选择,输入相应数字,运行看看能否执行相应要求的功能。
输入一些假设结果,验证程序设置的正确性。
8、完善所有之后,就正式宣告课程设计结束,并撰写设计报告。
四、程序流程图
五、程序清单
各函数的功能和实现:
1、输入某班的所有学生的成绩。
输入信息包括:
班级,姓名,高等数学、物理、外语、C语言、德育5门课程成绩并写入文件“stud”中;可用函数voidinput(structstudentstu[])来实现。
2、输出模块:
函数voidprint()里嵌套4个函数用于排序、输出成绩、输出不及格名单、返回;
排序:
函数voidlist(structstudentstu[])只是实现排序个功能,需要输出名单得需再次选择选项“2”。
输出:
输出学生的信息以及成绩——voidprint(structstudentstu[]):
通过输入班级来查看某个班的相关情况。
输出平均分不及格的名单:
用函数voidprinot(structstudentstu[])来实现输出所以平均分不及格的学生的班级及姓名。
返回:
返回到主界面。
3、编辑模块:
函数voidbian()中应用4个函数加于循环选择,可以进行选择修改、删除、插入、返回;
修改:
在函数voidchanges(structstudentstu[])里面输入需要修改的学生的班级、姓名以及成绩,就可以对某班某个学生的成绩进行修改。
删除:
用函数voiddel(structstudentstu[])实现。
删除某班某个学生的成绩。
插入:
用函数voidser(structstudentstu[])实现。
实现在某班中插入某些同学的相关信息。
4、判断是否返回主菜单:
用判断语言if。
六、总结
回顾起此次C语言课程设计,我感慨颇多,从拿到题目到完成整个编程、调试到撰写报告,从理论到实际,在将近一个月的时间里,我学到了很多知识,攻破了以前的一些知识盲点。
在这之中,我不仅可以巩固了以前学习的知识,而且学习到了很多在书本上所没有学到过的知识,拓宽了知识面。
通过此次课程设计,我懂得了理论和实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中,算是困难重重吧。
在编写时,遇到不少问题,低级错误是主要的问题。
特别在整合时,问题更多。
比如因float误用作int而导致的错误,花费了我好长的时间。
由其得到,错误或许就出在最根本处。
由于本课题中的很多知识点都没有学过,要自己去翻看书里后面几章的内容去熟悉理解,并且通过查找课外的相关资料。
小到一个术语,大到一个函数、一个逻辑关系,都需要在这过程中理解。
开始设计出来的程序存在着很多错误,修改了很多次都没有出现可观的迹象,询问了周围的同学研究了之后才得到解决。
设计出来的菜单也不是预想的那样,而是整个窗口出现混乱。
解决这个问题就是调整。
一个系统的菜单和信息的提示语句是非常重要的。
如果没有这些用户根本不知道怎么用你设计的这个系统,在设计的调试过程中也无法顺利地完成调试工作。
有了一个清晰明了的菜单和一些提示信息之后,调试过程完成得非常顺利。
在本次实习过程中碰到的编译、连接的错误主要有:
1、定义变量时:
变量不容易联系起来,经常会写错变量名,但是在错误信息的提示下一般还是很容易找到。
但是在写各个函数时,发现一个变量名,只要不是全局变量就可以无数次定义,只要分开在不同的函数中就可以了。
不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。
在编写程序时要安静,才不会出现低级错误。
2、语法错误:
语法错误在通过书本参考下能够修改,并且在上机的错误提示中得到修改,但是由于书本是C语言,不是C++的。
所以在使用时要注意在主函数和一些定义变量跟声明函数时有些不同,这不是语法的错误,而是作为一个程序员必须要注意到的,要体会两种语言的区别,由于平时看书不仔细、没有经过仔细的思考造成的。
如没有注意具体数据使用是有一定的范围限定。
在本次调试过程中我还碰到了一些以前上机过程中从未碰到过的错误。
逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。
这种错误的查找是最难的,需要编程序的人有相当的耐心和细心去把问题找出来。
这也是本次程序编辑过程中碰到的最大的难题。
因此我使用的是一个一个函数的检查,并通过调试修改。
通过此次课程设计,我还得到了一些有用的教训:
写程序时必须要细心,不能输错一个字符标点,就连全角半角也得注意。
在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过这次课程设计之后,我一定把以前所学过的知识重新温故。
刚开始做的时候,一点感觉都没有,到后来就越有感觉了,开始慢慢懂了!
曾记得有个同学说过“有问题找XX”,这次刚好派上用场了,在做程序设计的过程中,不懂的就上网搜索,真的学到挺多东西的!
我想接下来的日子也得好好补补C语言,好为以后的课程打下基础。
做课程设计的日子是辛苦的,但是当完成一项工程后,那种欣喜是油然而生的。
连续奋战了几个星期,尤其在临近上交期限的时候,我连续几晚待在电脑前,一待就是几个小时,敲击着代码,测试着每个语句,然后上网查找资料,看书里的内容。
这种生活虽然很累,很枯燥,但是感觉世界很安静,键盘的声响是一种心里知识的书写。
尤其是最后的这段期间,说起一件有趣的事情,大家为了老师交代的格式和字数拼命查找资料而且为了赶在验收日期前做好,一天除了上课睡觉之外,吃完饭就开工了。
昨晚宿舍还集体为了测试程序而到11点都还没人洗澡,然后就是集体晚睡了。
这都是此次课程设计过程中发生的趣事。
不过这种生活也是很难得,难得因为这样的一件事大家能够那么集中地做事情。
挺难得的一段经历,C语言,以后要再翻出来看看,而且,要努力准备下次的二级C考试。
附录1.用户文档
●调试与测试
主要程序运行结果:
v运行开始
v选择1输入成绩
输入完成后
选择Y返回(输入Y或y都可以)
v选择2,输出
选择1对成绩进行排序后,再选择2输出成绩
输入3,输出不及格名单
v返回主菜单,选择3进行编辑
选择1,修改a的成绩
返回主菜单,选择2输出,检查是否修改成功
选择2,删除b的信息
选择3,插入d的信息
附录2.技术文档
●主要函数
1、input()
该函数主要用来创建新数据文件,当第一次使用该程序或者原创建的文件的内容无效,需建立一个新的文件的时候,可通过该函数来实现。
2、print()
使用该函数可以显示所有的操作员自己输入的所有的学生数据记录。
它只用到了简单的printf(“”)语句,当需先打开数据文件时,读取其中的数据记录,然后将这些记录按一定的形式打印在屏幕上。
2、insert()
该函数可对文件的数据进行插入。
在进行添加的时候需要首先打开原来的数据文件,在该函数中调用了input()函数将数据文件打开。
再调用input()函数文件之后同input()中一样的形式输入数据,输入完之后进行保存,对插入的数据进行保存前要先确定插入的地点,insert()函数在设计时将插入点放在了文件末尾,即将添加的数据加到文件的最后。
Insert()函数与创建新数据文件的input()函数除保存及被功能上的使用时间不同外,其他功能基本相同。
3、delete()
该函数用来删除不需要的数据记录。
4、changs()
该函数用来修改程序中的某些数据。
5、bian()
该函数用来编辑,指使下一步的“删除”、“修改”、“插入”要求。
6、list()
该函数用来罗列出程序输入的名单。
7、main()
一个程序主函数不能少。
当以上的函数均编完之后,要实现各个功能操作的连接,还必须有主函数将它们联系起来,这样才能达到理想的结果。
参考文献
1.谭浩强《C程序设计》(第四版)清华大学出版社,2010
2.马靖善秦玉平《C语言等程序设计》清华大学出版社,2005
3.王士元《C高级实用程序设计》清华大学出版社,1995
4.哈比森(徐波译)《C语言参考手册》机械工业出版社,2008
5.[美]BradleyL.Jones《21天学通C语言》电子工业出版社,2003