您的当前位置:首页正文

学生成绩统计系统

2023-12-15 来源:好走旅游网
目录

一、问题描述 ····························· 1 二、基本要求 ···························· 1 三、系统分析和设计 ···················· 2 四、结构图 ······························· 2 五、流程图 ······························· 2 六、源程序代码 ························· 6 七、测试数据 ···························· 8 八、软件说明 ··························· 11 九、小结与体会 ······················· 11 十、参考资料 ························· 11

C语言课程设计实验报告

一 、问题描述

编辑一个学生成绩统计软件

二 、基本要求

1) 每条记录由学号、姓名、若干门课程的成绩组成; 2) 能计算每个学生的总分和平均分并显示;

3) 能按平均分统计各分数段的人数,并以分布图显示,如右图所示。

4) 在此基础上,可进行文件操作。

I I I I I I I I I I I I I I I I I <60 <70 <80 <90 ≤100 三 、系统分析和设计

函数的设计,其最终目的是要实现所需要的功能。本例中,是用main函数调用两个子函数来实现的! 1)文件的建立:

要想实现对学生成绩的统计,首先要建立一个文件用来存放学生信息,要用到FILE文件指针fp1=fopen(\"file1\2)程序的设计:

学生的信息放在结构体数组struct student_score s[N]中。

- 1 -

通过for循环,调用子函数getdata,从键盘接收学生信息(num,name,score[0],score[1],score[2],score[3]),并计算总分与平均分,返回学生信息return st到调用处。用fprintf函数向文件中逐一写入学生的信息,通过rewend(fp1)函数使文件指针回到文件头,用fscanf读学生信息,并显示在屏幕上。同时根据所读学生信息,统计各分数段的人数s1++,s2++,s3++,s4++,s5++,然后调用一个子函数putsgraph用来输出图表!

四、结构图

主函数

调用 返回 返回 调用 struct student_score getdata(struct student_score st ,int x) int putsgraph(int sa,int sb, int sc,int sd,int se)

五、流程图

- 2 -

开始 #define N 5 #include #include struct student_score s[N] fp1=fopen(\"file1\ 真 - 3 -

i=0 s[i]=getdata(s[i],i); i- 4 -

char graph[16][80]; 假 i=0 i<16 真 j=0 j=0 j<79 真 假 i++ graph[i][79]='\\0'; j++ graph[i][j]=' '; 真 j<79 假 j++; graph[11][j]='-'; graph[0][j]='-'; graph[15][j]='-'; 给graph[12][] 赋值: <60 <70 <80 <90 <=100 i=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][20]='I'; 将柱状图信息赋给graph[i] i<16 假 结束 i++; puts(graph[i]);

- 5 -

六、源程序代码

#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\{printf(\"cannot open file %s\\n\exit(0);}

for(i=0;ifprintf(fp1,\"%-9ld%-10s%10.1f%10.1f%10.1f%10.1f%10.1f%10.1f\\n\ame,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;ifscanf(fp1,\"%ld%s%f%f%f%f%f%f\\n\printf(\"%-9ld%-20s%10.1f%10.1f\\n\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);

- 6 -

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\ scanf(\"%ld\ printf(\"\\nEnter name:\\n\"); gets(st.name); st.total=0;

printf(\"\\nEnter 4 scores:\\n\"); for(y=0;y<4;y++) {

scanf(\"%f\ 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]='=';

- 7 -

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]); }

七、测试数据

- 8 -

- 9 -

- 10 -

七 软件说明

本程序采用宏定义方式定义学生人数,增加程序的通用性,文件的路径为fp1=fopen(\"file1\,当运行结束后,可在dos状态下,本程序基本实现了要求的内容: 能计算每个学生的总分和平均成绩,能按平均分统计各分数段的学生人数,并以分布图显示,在此基础上可以进行文件操作。

八 小结与体会

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

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

九 参考资料

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

- 11 -

因篇幅问题不能全部显示,请点此查看更多更全内容