学生成绩统计系统

学生成绩统计系统
学生成绩统计系统

学生成绩统计系统

集团文件版本号:(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(https://www.360docs.net/doc/9b9060230.html,);

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]='-';

graph[0][j]='-';

graph[15][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]);

}

七、测试数据

七软件说明

本程序采用宏定义方式定义学生人数,增加程序的通用性,文件的路径为fp1=fopen("file1","w+"),当运行结束后,可在dos状态下,本程序基本实现了要求的内容: 能计算每个学生的总分和平均成绩,能按

平均分统计各分数段的学生人数,并以分布图显示,在此基础上可以进行文件操作。

八小结与体会

此次课程设计,初步锻炼了我运用所学基础知识解决实际问题的能力,掌握软件开发的基本过程和基本方法,培养在软件开发中相互合作的团队意识。

通过此次课程设计,我对C语言有了更深入的了解,同时也促进了我对书本知识的深入学习,在设计的过程中遇到了这样那样的问题。这些问题促进了我对于知识点的深入挖掘。也让我懂得了程序设计要:细心,耐心,恒心并用。否则,一个小小的字符,也可能让程序功亏一篑。其实,不仅是做程序,做任何事情都要有强烈的责任心,和良好的态度。

九参考资料

谭浩强,《C程序设计教程》,清华大学出版社,2007年

相关主题
相关文档
最新文档