当前位置:文档之家› C语言课程设计-学生成绩统计软件

C语言课程设计-学生成绩统计软件

C语言课程设计实验报告一问题描述:学生成绩统计软件二基本要求:1)每条记录由学号、姓名、若干门课程的成绩组成;2)能计算每个学生的总分和平均分并显示;3)能按平均分统计各分数段的人数,并以分布图显示,如图;4)再此基础上能够进行文件操作。

三系统分析与设计:由于程序要求对文件进行操作,所以需要建立一个文件存储学生信息并且能从文件中读取并输出。

学生信息从键盘输入,根据提示并以ENTER结束每条信息的输入。

1总体设计:程序通过main()函数调用两个模块函数来实现要求。

两个模块分别是输入和计算的getdata函数和输出图表的putsgraph函数。

2 详细设计:1)文件建立:因为要求对文件进行操作,所以首先建立一个文件存放学生的信息,用到FILE 文件指针,fp1=fopen(“file1”,”w+”);2)学生的信息存放在结构体数组中,struct student_score s[N];并且通过for循环,调用子函数getdata,从键盘接受学生信息并且计算总分和平均分,用return返回主函数,并用fprintf 写入文件中,用rewind返回文件头,用fscanf读出信息并显示在屏幕上,统计各平均分段的人数,通过调用putsgraph输出图表。

四结构图:主函数五流程图六程序清单#define N 5#include<stdio.h>#include<stdlib.h>struct student_score{long num;char name[20];float score[4];float total;float aver;}s[N];struct name{char a[10];}n[8];void main(){FILE *fp1;struct student_score getdata(struct student_score st,int x);struct name n[8]={"NUMBER","NAME","SCORE1","SCORE2","SCORE3","SCORE4","TOTAL","A VERA GE"};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<N;i++)s[i]=getdata(s[i],i);printf("|%-11s|%-15s|%7s|%7s|%7s|%7s|%7s|%8s\n",n[0].a,n[1].a,n[2].a,n[3].a,n[4].a,n[5].a,n[6].a ,n[7].a);for(i=0;i<N;i++)fprintf(fp1,"%-11ld%-15s%7.1f%7.1f%7.1f%7.1f%7.1f%7.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].total,s[i].aver);rewind(fp1);{long num;char name[20];float e,f,g,h,total,aver;for(i=0;i<N;i++){fscanf(fp1,"%ld%s%f%f%f%f%f%f\n",&num,name,&e,&f,&g,&h,&total,&aver);printf("|%-11ld|%-15s|%7.1f|%7.1f|%7.1f|%7.1f|%7.1f|%7.1f\n",num,name,e,f,g,h,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){int i,j;char graph[16][80];for(i=0;i<16;i++){for(j=0;j<79;j++) graph[i][j]=' ';graph[i][79]='\0';}for(j=0;j<79;j++) graph[11][j]='-';for(j=3;j<=15;j+=4){ graph[12][j]='<';graph[12][j+2]='0';}graph[12][4]='6';graph[12][8]='7';graph[12][12]='8';graph[12][16]='9';graph[12][19]='<';graph[12][20]='=';graph[12][21]='1';graph[12][22]='0'; graph[12][23]='0';for(i=10;i>(10-sa);i--) graph[i][4]='I';for(i=10;i>(10-sb);i--) graph[i][8]='I';for(i=10;i>(10-sc);i--) graph[i][12]='I';for(i=10;i>(10-sd);i--) graph[i][16]='I';for(i=10;i>(10-se);i--) graph[i][22]='I';for(i=0;i<16;i++) puts(graph[i]); }七测试数据Enter student1’s num:1Enter name:aEnter 4 scores:75849564Enter student1’s num:2Enter name:bEnter 4 scores:74659481Enter student1’s num:3Enter name:cEnter 4 scores:78946892Enter student1’s num:4Enter name:dEnter 4 scores:74956875Enter student1’s num:5Enter name:eEnter 4 scores:84649281NUMBER NAME SCORE1 SCORE2 SCORE3 SCORE4 TOTAL A VERAGE1 a 75.0 84.0 95.0 64.0 318.0 79.52 b 74.0 65.0 94.0 81.0 314.0 78.53 c 78.0 94.0 68.0 92.0 332.0 83.04 d 74.0 95.0 68.0 75.0 312.0 78.05 e 84.0 64.0 92.0 81.0 321.0 80.2II II I-------------------------------------------------------------------------------<60 <70 <80 <90 <=100八小结与体会此次课程设计,初步锻炼了我运用所学基础知识解决实际问题的能力,掌握软件开发的基本过程和基本方法。

通过此次课程设计,我对C语言有了更深入的了解,同时也促进了我对书本知识的深入学习,在设计的过程中遇到了这样那样的问题。

这些问题促进了我对于知识点的深入挖掘。

也让我懂得了程序设计要:细心,耐心,恒心并用。

否则,一个小小的字符,也可能让程序功亏一篑。

其实,不仅是做程序,做任何事情都要有强烈的责任心,和良好的态度。

九参考资料《C语言程序设计教程》刘瑞兰曹建春沈淑娟等编著《标准C语言基础教程》(第四版)[美]Gary J.Bronson 著。

相关主题