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