学生成绩统计系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生成绩统计系统
集团文件版本号:(M928-T898-M248-WU2669-I2896-DQ586-M1988)
目录
一、问题描述 (1)
二、基本要求 (1)
三、系统分析和设计 (2)
四、结构图 (2)
五、流程图 (2)
六、源程序代码 (6)
七、测试数据 (8)
八、软件说明 (11)
九、小结与体会 (11)
十、参考资料 (11)
C语言课程设计实验报告
一、问题描述
编辑一个学生成绩统计软件
二、基本要求
1)每条记录由学号、姓名、若干门课程的成绩组成;
2)能计算每个学生的总分和平均分并显示;
3)能按平均分统计各分数段的人数,并以分布图显示,如右图所
示。
4)在此基础上,可进行文件操作。
三、系统分析和设计
函数的设计,其最终目的是要实现所需要的功能。本例中,是用main函数调用两个子函数来实现的!
1)文件的建立:
要想实现对学生成绩的统计,首先要建立一个文件用来存放学生信息,要用到FILE文件指针fp1=fopen("file1","w+")
2)程序的设计:
学生的信息放在结构体数组struct student_score s[N]中。
通过for循环,调用子函数getdata,从键盘接收学生信息(num,name,score[0],score[1],score[2],score[3]),并计算总分与平均分,返回学生信息return st到调用处。用fprintf函数向文件中逐一写入学生的信息,通过rewend(fp1)函数使文件指针回到文件头,用fscanf读学生信息,并显示在屏幕上。同时根据所读学生信息,统计各分数段的人数s1++,s2++,s3++,s4++,s5++,然后调用一个子函数putsgraph用来输出图表!
四、结构图
主函数
五、流程图
六、源程序代码
#define N 8
#include
#include
struct student_score
{
long num;
char name[20];
float score[4];
float total;
float aver;
}s[N];
void main()
{
FILE *fp1;
struct student_score getdata(struct student_score st,int x); int putsgraph(int sa, int sb,int sc,int sd,int se);
int i,s1=0,s2=0,s3=0,s4=0,s5=0;
if((fp1=fopen("file1","w+"))==NULL)
{printf("cannot open file %s\n",fp1);
exit(0);}
for(i=0;i s[i]=getdata(s[i],i); for(i=0;i fprintf(fp1,"%-9ld%- 10s%10.1f%10.1f%10.1f%10.1f%10.1f%10.1f\n",s[i].num,s[i].name,s [i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].tot al,s[i].aver); rewind(fp1); { long num; char name[20]; float e,f,g,h,total,aver; for(i=0;i { fscanf(fp1,"%ld%s%f%f%f%f%f%f\n",&num,name,&e,&f,&g,&h,&total,& aver); printf("%-9ld%-20s%10.1f%10.1f\n",num,name,total,aver); if(aver<60) s1++; else if(aver<70) s2++; else if(aver<80) s3++; else if(aver<90) s4++; else if(aver<=100) s5++; } } fclose(fp1); putsgraph(s1,s2,s3,s4,s5); } struct student_score getdata(struct student_score st,int x) { int y; printf("\nEnter student%d\'s num:\n",x+1); scanf("%ld",&st.num); getchar(); printf("\nEnter name:\n"); gets(); st.total=0; printf("\nEnter 4 scores:\n"); for(y=0;y<4;y++) { scanf("%f",&st.score[y]); getchar(); st.total+=st.score[y]; } st.aver=st.total/4; return st; } int putsgraph(int sa, int sb,int sc,int sd,int se)