1、学生成绩分布统计沈 阳 航 空 工 业 学 院 课程设计学 号 200604021024班 级 6402101姓 名 任杰指导教师 王晓岩2007年 9月 14日沈阳航空工业学院课程设计任务书院系: 电子 专业: 电子信息工程专业 班级:6402101班 学号200604021024 题目:学生成绩分布统计一、课程设计时间2007年9月10日起至2007年9月14日,共计一周,20学时。二、课程设计内容:用C语言编写软件完成以下任务:C语言其中考试成绩保存在文件file29. txt,数据格式为:学号,姓名,成绩。请编程序,具体如下的功能:(1)、按学号或姓名查询成绩。(2)、修改指定姓名或学
2、号的学生的成绩并保存。(3)、统计出不及格、及格、中等、良好、优秀5个分数段的人数。三、课程设计要求:1、程序质量: 贯彻结构化的程序设计思想。 用户界面友好,功能明确,操作方便;。 用户界面中的菜单至少应包括“读取数据”、“按学号或姓名查询成绩”、“修改成绩”、“统计各分数段认输”、“退出”5项。 代码应适当缩进,并给出必要的注释,以增强程序的可读性。2、课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下: 封面 课程设计任务书 目录 需求分析(分析题目的要求) 程序流程图(总体流程图和主要功能模块流程图) 核心技术的实现说明及相应程序段 个人总结 参考资料 源程序
3、及适当的注释指导教师: 学生签名:五、说明书成绩六、教师评语目录一、需求分析 4二、程序流程图 4read( )的框图 6check()的框图 7change()的框图 8statistic()的框图 9三、核心技术及注释 10四、个人总结 11五、参考文献 2六、源程序 2一、需求分析解决本题首先要解决两个问题:首先是读取文件,读取文件这一步我参照并套用了书上 FILE *fp=fopen()打开的方式,但是这一步又是非常麻烦,稍有不慎很可能就不能打开。其次;在读取文件时要先做一个循环,再构造一个主菜单的程序,即在用户界面首页输出简单的操作界面,为了能使用户在使用更加明了方便,可再构造子菜单
4、。本题除了读取文件较为困难外,其它所要编写程序都较为容易。再有就是编写程序时要尽量考虑到程序简洁明了,为程序编写出现错误时修改提供方便,这也是非常重要的。二、程序流程图 1、程序整体流程图 read( )的框图 check()的框图change()的框图statistic()的框图三、核心技术及注释首要问题是解决读取文件file29.txt的问题,这个读取并不简单,我套用了书本教材的读取,就明白简单了。int i; FILE *fp; fp=fopen(file29.txt,r); for(i=0;iN;i+) fscanf(fp,%st%st%dn,studi.num,studi.name,
5、&studi.mark); printf(%st%st%dn,studi.num,studi.name,studi.mark); fclose(fp);另外,在查询和修改前的判断用的switch语句也很重要且是难点。switch(a) case 1:printf(请输入查询的学号_!n); scanf(%s,x); for(i=0;i25;i+) if(strcmp(studi.num,x)=0) printf(学号%sn姓名%sn成绩%dn,studi.num,studi.name,studi.mark); f=1; break; if(f=0) printf(没有这个学号,请重新输入学号!
6、T_Tn); break;最后一个难点就是统计了,先定义a b c d e,用循环做,在符合的对应位置加一,最后输出。void statistic()/*成绩分布统计*/ int i,a=0,b=0,c=0,d=0,e=0; for(i=0;i=90) a+; else if(studi.mark=80) b+; else if(studi.mark=70&studi.mark=60&studi.mark70) d+; else if(studi.mark=90:tt%d(优秀)n=80:t%d(良好)n=70:t%d(中等)n=60:t%d(及格)n60:tt%d(不及格)n,a,b,c,d
7、,e); printf(*n);最后就是注意在一些子函数中采用较好的表达方式使程序整体显得简洁准确,以及由于程序的繁琐而注意编程过程中的语法问题等如果能够解决好这几个问题,这个程序就能够编好了。我认为以上几点是编写本程序过程中的关键。四、个人总结通过这次课程设计,使我又进一步熟悉和掌握了通过用C语言软件编写一个实际应用的程序,对一些文件打开等细节的程序函数进行了复习和熟悉,顺便也了解了一些WORD中没有了解的例如目录搜索等方法,而且我深深的体会到编程是一个需要谨慎与严密精神的工作,同时我也感觉到做一名优秀程序员的不易。在编程序过程中,我积极的和同学讨论,请教老师一些困难的问题和难点,最终编好和
8、完善了程序。使程序基本能完成编好和完善了程序,而且用户界面也比较友好,用了全中文的形式,使界面更容易别用户接受,在运行过程中输出内容明了,循环顺畅,退出方便,很好的完成了任务。五、参考文献1 谭浩强C程序设计北京:清华大学出版社,2005六、源程序#includestdio.h#includestring.h#includestdlib.h#define N 25 struct student char num10; char name30; int mark; studN; void read()/*读取数据*/ int i; FILE *fp; fp=fopen(file29.txt,r)
9、; for(i=0;iN;i+) fscanf(fp,%st%st%dn,studi.num,studi.name,&studi.mark); printf(%st%st%dn,studi.num,studi.name,studi.mark); fclose(fp); void check()/*确认查询是按学号还是姓名*/ int i,f=0,a; char b100,x20; printf(请选择你的查询方式n按1按学号查询n按2按姓名查询n); scanf(%d,&a); switch(a) case 1:printf(请输入查询的学号_!n); scanf(%s,x); for(i=0
10、;i25;i+) if(strcmp(studi.num,x)=0) printf(学号%sn姓名%sn成绩%dn,studi.num,studi.name,studi.mark); f=1; break; if(f=0) printf(没有这个学号,请重新输入学号!T_Tn); break; case 2:printf(请输入查询的姓名_!n); scanf(%s,b); for(i=0;i25;i+) if (strcmp(studi.name,b)=0) printf(学号%sn姓名%sn成绩%dn,studi.num,studi.name,studi.mark); f=1; break
11、; if(f=0) printf(没有这个学生姓名,请重新输入!T_Tn); break; void change()/*按学号或者姓名修改*/ int i,f=0,a; char name30,num10; int m;char b100,x20; FILE*fp; fp=fopen(file29.txt,w) ; printf(请选择你的查询方式n按1按学号查询n按2按姓名查询n); scanf(%d,&a); switch(a) case 1:printf(请输入查询的学号_!n); scanf(%s,x); for(i=0;i25;i+) if(strcmp(studi.num,x)=
12、0) printf(请输入新的成绩_!n); scanf(%d,&a); studi.mark=a; for(i=0;i25;i+) fprintf(fp,%st%st%dn,studi.num,studi.name,studi.mark); fclose(fp); printf(修改成功,请继续别的操作!); f=1; break; if(f=0) printf(没有这个学号,请重新输入学号!T_Tn);/*错误提醒*/ break;case 2:printf(请输入查询的姓名_!n); scanf(%s,b); for(i=0;i25;i+) if (strcmp(studi.name,b)=0) printf(请输入新的成绩_!n); scanf(%d,&a); studi.mark=a; for(i=0;i25;i+) fprintf(fp,%st%st%dn,studi.num,studi.name,studi.mark); fclose(fp); printf(修改成功,请继续别的操作!); f=1; break; if(f=0) printf(没有这个学生姓名,请重新输入!T_Tn); break; void statistic()/*成绩分布统计*/ int i,a=0,b=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1