1、学生成绩管理系统开发实验“学生成绩管理系统”开发实验报告(一)实验目的1.学习c程序设计、算法选择和设计,以及数据类型的选择和数据结构的设计;2.加深对程序设计方法的理解,并运用c程序解决较复杂的问题;3.培养团队协作的精神。(二)实验内容和要求1.实验内容:开发一个小型的软件系统,以学生成绩管理为背景,系统具有常用的学生成绩管理功能,程序能够运行并演示所有的功能。学生成绩管理系统的基本功能:成绩输入、查询、打印成绩单、统计分析。系统约束:系统能够处理n(0n1000)名学生成绩,每名学生选修不得少于m(0m10)门课;每门课成绩由平时成绩、期中成绩和期末成绩三部分组成,所有成绩都为100分制
2、;成绩基本数据以文件方式保存;交互界面要有提示信息。根据课堂讨论结果,每小组自行定义各自的系统功能、设计和实现方法,并形成书面文档。2.实验要求:输入成绩:任课教师通过键盘输入学生成绩,每门的学生成绩由三部分组成:平时成绩、期中成绩和期末成绩。查询指定学生的成绩;查询指定课程的成绩。打印个人和班级成绩单:在显示屏上输出个人成绩单和班级成绩单。成绩排名:按成绩分类输出成绩单。成绩分析报告:至少包含平时成绩、最高成绩、最低成绩、按分数段输入成绩。用文件存储成绩基础数据:基础数据包含:学生姓名、学号、课程名称、平时成绩、期中成绩、期末成绩。(3)成员分工略(四)主要仪器设备仪器:计算机实验环境:Wi
3、ndows:XP/7/8 Dev c+(五)源代码及注释:#include#include#includestruct student /储存学生信息 int id; double usual,mid,final,score,gpa; char name20;st10000;void save(char c,int n,struct student st) /将学生信息保存到文件中 int i; FILE *fp; if ( !( fp=fopen(c,wb) ) ) /打开或创建文件名为c的文件 /若打开失败 printf (t抱歉,无法建立该文件。请重试!n); return ; for
4、(i=0;iscore != ( (struct student *)b)-score ) /成绩不同时比较成绩 return ( (struct student *)b)-score - ( (struct student *)a)-score; return ( (struct student *)a)-id - ( (struct student *)b)-id; /成绩相同时比较学号 int find(char c) /打开相应文件,提取学生信息 FILE *fp; int i; if ( !( fp=fopen(c,rb) ) ) /打开名为c的文件 /若名为c的文件不存在 prin
5、tf(无法查询到该课程!n); return -1; rewind(fp); for(i=0;!feof(fp);+i) /文件存在,读取信息 fread (&sti,sizeof(struct student),1,fp); fclose (fp); return i-1; /返回学生人数 double gpa(double score) /计算gpa (成绩统一上取整) if(score=59) return 0; if(score=62) return 1.0; if(score=65) return 1.3; if(score=69) return 1.7; if(score=72)
6、return 2.0; if(score75) return 2.3; if(score=79) return 2.7; if(score=82) return 3.0; if(score=85) return 3.3; if(score=89) return 3.7; return 4.0;void insert() /输入学生成绩及信息 char c20; int i,x,y,z; / x、y、z分别表示平时、期中、期末成绩所占比例 system(cls); /清屏 printf(t请输入课程名称(如需退出请输stop):); scanf(%s%*c,c); /使用%*c是为了防止对后续输
7、入有影响 if ( !strcmp(c,stop) ) return ; do printf(t平时期中期末所占比例和为100%nn); printf(t请输入平时成绩所占比例(%):); scanf(%d,&x); printf(t请输入期中成绩所占比例(%):); scanf(%d,&y); printf(t请输入期末成绩所占比例(%):); scanf(%d,&z); while ( x+y+z !=100); for (i=0; ;+i) printf (nt请输入学生学号(若结束录入,请输0):); scanf (%d,&sti.id); if ( !(sti.id) break;
8、printf (t请输入学生姓名:); scanf (%s,sti.name); printf (t请输入平时成绩:); scanf (%lf,&sti.usual); printf (t请输入期中成绩:); scanf (%lf,&sti.mid); printf (t请输入期末成绩:); scanf (%lf,&sti.final); sti.score = sti.usual*x/100 + sti.mid*y/100 + sti.final*z/100; sti.gpa = gpa(sti.score); save(c,i,st); /保存 system(pause);void ame
9、nd() /修改学生成绩及信息 int i,n,num,x,y,z; char c20; system(cls); /清屏 for (n=-1;n0;) printf (t请输入课程名(退出请输入stop):); scanf (%s%*c,c); if ( !strcmp(c,stop) ) return; n=find(c); /打开相应文件 do printf(t平时期中期末所占比例和为100%nn); printf(t请输入平时成绩所占比例(%):); scanf(%d,&x); printf(t请输入期中成绩所占比例(%):); scanf(%d,&y); printf(t请输入期末成
10、绩所占比例(%):); scanf(%d,&z); while ( x+y+z !=100); while (1) printf (t请输入需修改学生学号(若结束录入,请输0):); scanf (%d,&num); if (!num) break; for (i=0;in;+i) /依据学号查找此学生 if (sti.id=num) /找到之后,重新输入成绩 printf (t请输入平时成绩:); scanf (%lf,&sti.usual); printf (t请输入期中成绩:); scanf (%lf,&sti.mid); printf (t请输入期末成绩:); scanf (%lf,&
11、sti.final); sti.score = sti.usual*x/100 + sti.mid*y/100 + sti.final*z/100; sti.gpa=gpa(sti.score); break; /成绩更新后停止查找 if(i=n) /查找了所有学号,均不符 printf(t抱歉,查无此人!n); save(c,n,st); /重新保存文件,并覆盖之前的数据 system(pause);void seek() /个人成绩查询 int i,n,num; char c20; system(cls); printf (请输入学生学号:); scanf (%d,&num); while
12、 (1) for (n=-1;n0;) printf (请输入课程名称(结束请输stop):); scanf (%s%*c,c); /c为相应文件名 if ( !strcmp(c,stop) ) return ; n=find(c); /n为学生人数 for (i=0;in;+i) /依据学号查找此学生 if(num=sti.id) /找到之后,输出成绩 printf(t姓名:%st学号:%dnt平时成绩:%6.1lft期中成绩:%6.1lft期末成绩:%6.1lfnt总成绩: %6.1lfttGPA:%6.1lfn,sti.name,sti.id,sti.usual,sti.mid,sti.final,sti.score,sti.gpa); break; if(i=n) /查找了所有学号,均不符 printf(抱歉,查无此人!n); system(pause);void rank() /班级成绩排名 int i,n; char c20; while(1) system(cls); printf (t请输入课程名(如结束请输入stop):); scanf (%s%
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1