学生成绩分布统计

更新时间:2023-07-24 08:15:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学生成绩分布统计

一、课程设计时间

2011年第2学期第15周,即6月13日~6月17日,共计1周,20学时。

二、课程设计内容

用C语言编写软件完成以下任务:

用C语言编写软件模拟数字化成绩管理,用户界面中的菜单至少包括“读取数据、”“按学号或姓名查询、”“统计各分数段人数、”“退出”4项;

读取数据:C语言其中考试成绩保存在文件file29.text中,数据格式为:学号,姓名,成绩;

按学号和姓名查询:实现成绩查询

统计各分数段人数:分数段指不及格、及格、中等、良好、优秀5种成绩,能够统计个分数段的人数。

沈阳航空航天大学设计用纸

目录

一、需求分析 ........................... 1

二、设计分析 ........................... 2

三、主要界面截图 ....................... 7

四、技术要点 ........................... 8

五、个人总结 .......................... 11

六、参考文献 .......................... 11

七、源程序 ............................ 12

一、需求分析

根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。

1、安全性分析

这个系统涉及到学生的信息比较大,其中包括学生的学号及学生的姓名。是一些比较隐私的信息。能够实现很多学生信息的查询。这里就涉及到学生信息的安全性问题,所以我这个程序要很好的把安全性做好。

2、 稳定性分析

这个系统涉及到的信息量比较大,如果操作者得步骤不正确。那么系统间就会不好用,整个程序就会功亏一篑,所以我们要保证操作者操作的正确性,整个程序才能正确稳定的进行。

3、经过对程序的分析研究,可知这个程序有四个功能,读取数据、按学号或姓名查询、统计个分数段人数、退出等

4、读取数据需要一个函数,我把它定义为“duqu”它要实现的是从电脑的磁盘中吧需要的数据读取出来。

5、 按学号和姓名的查询,在这里我有需要一个查

询函数,我定义它为“chaxun”,当输入学号或姓名是要有结果。

6、统计各个分数段的人数,需要一个计数函数,她要用到我们所学的“switch case”循环这里你要统计出不及格、及格、中、良好、优秀的人数

二、设计分析

有分析可知。我所设计的这个程序有四部分组成,每一部分都采用了一个自定义函数来完成。也就是有三个自定义函数来完成它。最后是退出。

自定义函数duqu,他是的功能是从电脑的磁盘中读取出来所需的数据

自定义函数chaxun是要是想查询的功能,也就是说当输入学号或姓名是能在知道他的成绩

自定义函数all是进行人数统计的,也就是,不及格、及格、中、良好、优秀的人数。

1 、程序总体结构图

2、N-S结构框图

3、主要功能模块框图

(1)读取学生信息

(2)学生成绩查询

图2学生信息查询

3)统计学生成绩

图3

三、主要界面截图

图1

程序主界面及读取界面

图2成绩查询及统计界面

1、 结构体的应用来描述学生的基本信息。具体程序段

如下:

struct student/*定义结构体*/

{ char num[10];

char name[20];

int score;

}stud[ren];

2、 文件的读取

主要就是充分运用老师所给的数据,来完成我的整个程序,那么我是运用已有的函数来打开这个文件的。这个函数是fopen函数。它主要的功能就是从计算机中读取数据。如下就是我的读取文件的程序。在这里指针文件指向我用文件的地址,用来方便寻找文件。文件是以只读的形式打开的。

int i;

FILE *fp; /*定义一个变量指向FILE*/

fp=fopen("d:\\file29.txt","r"); /*以只读的形式打开文件*/ for(i=0;i<ren;i++)

{ fscanf(fp,"%s\t%s\t%d\n",stud[i].num,stud[i].name,&stud[i].score);

printf("%s\t%s\t%d\n",stud[i].num,stud[i].name,stud[i].score); }fclose(fp)

3、 成绩的查询

在这里主要的功能是实现对学生成绩的查询,在这里由两种方法可以查询成绩,第一种通过数日学生的学号对成绩的查询,另一种方法是通过输入学生的姓名对成绩进行查询。这两种方法是独立的,是不互相影响的,在这里我只要运用的是switch ..case多分枝结构选择的运用。那么下面就是我的程序,在这里可以实现对学生成绩的学号查询和姓名查询。这样也是程序更加的合理化,更加的简单,明了。

{int i,flag=0,a;char b[100],x[20];

printf("请选择:1.学号 2.姓名\n");

scanf("%d",&a);

switch(a) /*选择语句*/

{ case 1:printf("输入学号:\n");scanf("%s",x);

for(i=0;i<25;i++)

if(strcmp(stud[i].num,x)==0)

{ printf("分数:%d\n",stud[i].fen);

flag=1;

}

if(flag==0) printf("没有此人!\n");break;

case 2:printf("输入姓名:\n"); scanf("%s",b);

for(i=0;i<25;i++)

if (strcmp(stud[i].name,b)==0)

{ printf("%d\n",stud[i].fen);

flag=1;break;

}

if(flag==0) printf("没有此人!\n");break;

}

4、 成绩的统计

我要统计该班级有多少人是优秀,多少人是良好,多少人是中等,多少人及格,多少人不及格。这样是班级的成绩更加明了,但是这一步也是非常的麻烦,一不小心就会出错,所以这部我选择了比较保险的步骤,if .else结构。这样我的程序就是顺次向下执行,如果成绩符合大于90那么优秀的人增加一个,否则继续向下执行,知道判断玩这个人在进行下一个人的判断,直到最后出现我要的结果。下面就是我的程序

int i,a=0,b=0,c=0,d=0,e=0;

for(i=0;i<25;i++)

{ if(stud[i].score>=90) a++;

else if(stud[i].score>=80) b++;

else if(stud[i].score<80) c++;

else if(stud[i].score<70) d++;

else if(stud[i].score<60) e++;

}

printf(">=90 优秀的人数:\t%d\n<90,>=80良好的人数:

\t%d\n<80,>=70中等的人数:\t%d\n<70,>=60几个的人数:\t%d\n<60 不及格的人数:\t%d\n",a,b,c,d,e);

这样下来我的程序基本就完成了,整个过程我运用了最基本的c语言知识,其中包括for循环,switch case分支结构,if else选择语句。

五、个人总结

通过这一周的C语言课程设计,我又进一步的学习了C语言知识,也学会了真正的去编写一个实际应用的程序,真正的吧课堂学到的东西运用到现实生活中,虽然编程的过程很困难,很愁人,但是当我真的编写出来、运行出来心里那份满足感是无法用语言来形容的,说不出来,但是真的很开心。当然在这个过程中我也遇到了很多的困难,有的也真是我自己解决不了的,在这里也费城感谢那些给我帮助的老师同学。有了你们我的课设才会这么顺利。

六、参考文献

1 谭浩强.C程序设计.北京:清华大学出版社,2005 2 刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006

七、源程序

#include"stdio.h"

#include"string.h"

#include"stdlib.h"

#define ren 25

struct student/*定义结构体*/

{ char num[10];

char name[20];

int score;

}stud[ren];

void duqu() /*读取函数*/

{ int i;

FILE *fp; /*定义一个变量指向FILE*/

fp=fopen("d:\\file29.txt","r"); /*以只读的形式打开文件*/ for(i=0;i<ren;i++)

{ fscanf(fp,"%s\t%s\t%d\n",stud[i].num,stud[i].name,&stud[i].score); printf("%s\t%s\t%d\n",stud[i].num,stud[i].name,stud[i].score); }fclose(fp);

}

void chaxun() /*查询函数*/

{ int i,flag=0,a;char b[100],x[20];

printf("请选择:1.学生学号 2.学生姓名\n");

scanf("%d",&a);

switch(a) /*选择语句*/

{ case 1:printf("输入学生学号:\n");scanf("%s",x);

for(i=0;i<25;i++)

if(strcmp(stud[i].num,x)==0)

{ printf("分数:%d\n",stud[i].score);

flag=1;

}

if(flag==0) printf("查询没有此人!\n");break;

case 2:printf("输入学生姓名:\n"); scanf("%s",b);

for(i=0;i<25;i++)

if (strcmp(stud[i].name,b)==0)

{ printf("%d\n",stud[i].score);

flag=1;break;

}

if(flag==0) printf("查询没有此人!\n");break;

}

}

void all() /*统计函数*/

{ int i,a=0,b=0,c=0,d=0,e=0;

for(i=0;i<25;i++)

{ if(stud[i].score>=90) a++;

else if(stud[i].score>=80) b++;

else if(stud[i].score<80) c++;

else if(stud[i].score<70) d++;

else if(stud[i].score<60) e++;

}

printf(">=90 优秀的人数:\t%d\n<90,>=80良好的人数:\t%d\n<80,>=70中等的人数:\t%d\n<70,>=60几个的人数:\t%d\n<60 不及格的人数:\t%d\n",a,b,c,d,e);

}

void main() /*主函数*/

{ printf("************************************************\n"); printf("***&&&*** 欢迎您进入学生成绩分布系 ***&&&***\n"); printf("***&*&*** 1:读取数据 ***&*&***\n"); printf("***&&&*** 2:按学号或姓名查询成绩***&&&***\n"); printf("***&&&*** 3:统计各分数段人数 ***&&&***\n"); printf(" 4:退出系统 \n");

printf("************************************************\n"); while(1)

{ int ch;

printf("输入你的选择:\n");

scanf("%d",&ch);

switch(ch) /*选择语句*/ { case 1:duqu();break;

case 2:chaxun ();break;

case 3:all ();break;

case 4:exit (0);break;

default: printf("错误,请按任意键继续!\n");break; }

}

}

本文来源:https://www.bwwdw.com/article/1gkm.html

Top