资源描述
课 程 设 计
11月 3 日
设计题目:学生成绩统计
设计条件:掌握C语言基础知识,能够熟练地应用次序结构、选择结构、循环结构,能够善于应用结构体数组和对文件输入输出。
设计内容:
【问题描述】
学期考试结束,统计有N个班某班每个人平均成绩,每门课平均成绩,并按个人平均成绩从高到低次序输出成绩,输出不及格人名单。输入、输出格式自定。
【实现提醒】
假设某班有:30人(姓名自定)
考试课程有:高等数学、物理、外语、C语言、德育5门课程。
将全部同学成绩保留在文件中,对文件中数据处理,输出所要求内容,程序功效关键包含3方面:
① 输入成绩到文件中
② 输出成绩
③ 输出不及格学生名单
④ 成绩排序
⑤ 修改统计
⑥ 删除统计
⑦ 插入统计等
主函数中对3个功效选择(菜单),调用对应函数完成。
下达日期:10月
完成日期:11月
目录
一、 序言····································4
二、 设计思想································4
三、 设计过程································4
四、 程序步骤图······························7
五、 程序清单································8
六、 总结····································8
附录1.用户文档·····························10
附录2.技术文档·····························13
参考文件···································13
一、 序言
本课程设计提供了一个既动手又动脑,自学,查资料,独立实践机会。将书本上理论知识和实际有机结合起来,锻炼学生实际分析问题和处理问题能力,提升学生适应实际、实践编程能力,使对C语言系统编程有一个大致了解。
本课程设计——学生成绩统计,在日常教学过程中含有较高应用价值。当老师批改完一大批试卷后,需要统计成绩得出对应结果时,“学生成绩统计”就能够发挥其关键作用。设计这个程序,关键用到结构体数组和文件两个知识点,再结合次序、循环、选择、函数······来实现功效。
二、 设计思想
首先编译预处理,输入头文件;再之全局申明;对函数进行定义。再建立一个student结构体,把结构体里面内容写入一个文件中。然后先把主函数main()写好,再把子函数完善好,最终测试、修改,直抵达成最终功效和界面美观为止。
三、 设计过程
1、 依据设计要求做好分析,把关键框架设计罗列出来。考虑到此程序关键有3大方面内容,所以主函数里分为3大模块,模块里面再依据要求实施对应内容。
2、 依据关键框架,确定没有问题后,编写主函数以下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 3000
int system(const char*string);
struct student //申明结构体类型struct student
{ //以下4行为结构体组员
char name[20];
float score[5];
float aver;
int cla;
};
void input(struct student stu[]);
void print(struct student stu[]);
void prinot(struct student stu[]);
void list(struct student stu[]);
void changes(struct student stu[]);
void del(struct student stu[]);
void ser(struct student stu[]);
void bian();
void prin();
int M;
FILE*fp; //定义一个指向文件指针变量fp
struct student stu[4],*p=stu;
void main()
{
char choice,zlq='y';
int over=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、 完善全部以后,就正式宣告课程设计结束,并撰写设计汇报。
四、 程序步骤图
开始
输出菜单
依据菜单输入choice值选择程序
输入
输出
编辑
排序
输出成绩
输出不及格名单
返回
修改
删除
插入
返回
是否返回主菜单?
结束
五、 程序清单
各函数功效和实现:
1、输入某班全部学生成绩。输入信息包含:班级,姓名,高等数学、物理、外语、C语言、德育5门课程成绩并写入文件“stud”中;可用函数void input(struct student stu[])来实现。
2、输出模块:函数void print()里嵌套4个函数用于排序、输出成绩、输出不及格名单、返回;
排序:函数 void list(struct student stu[])只是实现排序个功效,需要输出名单得需再次选择选项“2”。
输出:输出学生信息和成绩——void print(struct student stu[]):经过输入班级来查看某个班相关情况。
输出平均分不及格名单:用函数void prinot(struct student stu[])来实现输出所以平均分不及格学生班级及姓名。
返回:返回到主界面。
3、编辑模块:函数void bian()中应用4个函数加于循环选择,能够进行选择修改、删除、插入、返回;
修改:在函数void changes(struct student stu[])里面输入需要修改学生班级、姓名和成绩,就能够对某班某个学生成绩进行修改。
删除:用函数void del(struct student stu[])实现。删除某班某个学生成绩。
插入:用函数void ser(struct student stu[])实现。实现在某班中插入一些同学相关信息。
4、判定是否返回主菜单:用判定语言if。
六、 总结
回顾起此次C语言课程设计,我感慨颇多,从拿到题目到完成整个编程、调试到撰写汇报,从理论到实际,在快要30天时间里,我学到了很多知识,攻破了以前部分知识盲点。在这之中,我不仅能够巩固了以前学习知识,而且学习到了很多在书本上所没有学到过知识,拓宽了知识面。经过此次课程设计,我知道了理论和实际相结合是很关键,只有理论知识是远远不够,只有把所学理论知识和实际相结合起来,从理论中得出结论,才能真正为社会服务,从而提升自己实际动手能力和独立思索能力。
在设计过程中,算是困难重重吧。在编写时,碰到不少问题,低级错误是关键问题。尤其在整合时,问题更多。比如因float误用作int而造成错误,花费了我好长时间。由其得到,错误或许就出在最根本处。因为本课题中很多知识点全部没有学过,要自己去翻看书里后面几章内容去熟悉了解,而且经过查找课外相关资料。小到一个术语,大到一个函数、一个逻辑关系,全部需要在这过程中了解。开始设计出来程序存在着很多错误,修改了很数次全部没有出现可观迹象,问询了周围同学研究了以后才得四处理。设计出来菜单也不是预想那样,而是整个窗口出现混乱。处理这个问题就是调整。一个系统菜单和信息提醒语句是很关键。假如没有这些用户根本不知道怎么用你设计这个系统,在设计调试过程中也无法顺利地完成调试工作。有了一个清楚明了菜单和部分提醒信息以后,调试过程完成得很顺利。
在此次实习过程中碰到编译、连接错误关键有:
1、 定义变量时:
变量不轻易联络起来,常常会写错变量名,不过在错误信息提醒下通常还是很轻易找到。不过在写各个函数时,发觉一个变量名,只要不是全局变量就能够无数次定义,只要分开在不一样函数中就能够了。不过需要注意是在定义时候有些函数使用一样变量名而表示不一样作用,所以使用要很小心,定义及定义位置要尤其留心。在编写程序时要平静,才不会出现低级错误。
2、 语法错误:
语法错误在经过书本参考下能够修改,而且在上机错误提醒中得到修改,不过因为书本是C语言,不是C++。所以在使用时要注意在主函数和部分定义变量跟申明函数时有些不一样,这不是语法错误,而是作为一个程序员必需要注意到,要体会两种语言区分,因为平时看书不仔细、没有经过仔细思索造成。如没有注意具体数据使用是有一定范围限定。
在此次调试过程中我还碰到了部分以前上机过程中从未碰到过错误。逻辑上错误机器不易检验出来,这时需要对数据结果进行分析。这种错误查找是最难,需要编程序人有相当耐心和细心去把问题找出来。这也是此次程序编辑过程中碰到最大难题。所以我使用是一个一个函数检验,并经过调试修改。
经过此次课程设计,我还得到了部分有用教训:写程序时必需要细心,不能输错一个字符标点,就连全角半角也得注意。在修改时要有耐心,编译犯错后必需逐一错误去更正,绝不能心急浮躁,不然修改以后还会有新错误。在设计过程中发觉了自己不足之处,对以前所学过知识了解得不够深刻,掌握得不够牢靠。经过这次课程设计以后,我一定把以前所学过知识重新温故。
刚开始做时候,一点感觉全部没有,到以后就越有感觉了,开始慢慢懂了!曾记得有个同学说过“有问题找baidu”,这次刚好派上用场了,在做程序设计过程中,不懂就上网搜索,真学到挺多东西!我想接下来日子也得好好补补C语言,好为以后课程打下基础。
做课程设计日子是辛劳,不过当完成一项工程后,那种欣喜是油然而生。连续奋战了多个星期,尤其在临近上交期限时候,我连续几晚待在电脑前,一待就是多个小时,敲击着代码,测试着每个语句,然后上网查找资料,看书里内容。这种生活即使很累,很枯燥,不过感觉世界很平静,键盘声响是一个心里知识书写。尤其是最终这段期间,说起一件有趣事情,大家为了老师交代格式和字数拼命查找资料而且为了赶在验收日期前做好,一天除了上课睡觉之外,吃完饭就开工了。昨晚宿舍还集体为了测试程序而到11点全部还没人洗澡,然后就是集体晚睡了。这全部是此次课程设计过程中发生趣事。不过这种生活也是极难得,难得因为这么一件事大家能够那么集中地做事情。
挺难得一段经历,C语言,以后要再翻出来看看,而且,要努力准备下次二级C考试。
附录1.用户文档
l 调试和测试
关键程序运行结果:
v 运行开始
v 选择1输入成绩
输入完成后
选择Y返回(输入Y或y全部能够)
v 选择2,输出
选择1对成绩进行排序后,再选择2输出成绩
输入3,输出不及格名单
v 返回主菜单,选择3进行编辑
选择1,修改a成绩
返回主菜单,选择2输出,检验是否修改成功
选择2,删除b信息
选择3,插入d信息
附录2.技术文档
l 关键函数
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程序设计》(第四版)清华大学出版社,
2. 马靖善 秦玉平《C语言等程序设计》清华大学出版社,
3. 王士元《C高级实用程序设计》清华大学出版社,1995
4. 哈比森(徐波译)《C语言参考手册》机械工业出版社,
5. [美]Bradley L.Jones《21天学通C语言》电子工业出版社,
展开阅读全文