学生成绩管理系统开发实验.docx
《学生成绩管理系统开发实验.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统开发实验.docx(14页珍藏版)》请在冰豆网上搜索。
![学生成绩管理系统开发实验.docx](https://file1.bdocx.com/fileroot1/2022-10/29/7a1fedde-d301-4f71-aacd-08a6de21beb5/7a1fedde-d301-4f71-aacd-08a6de21beb51.gif)
学生成绩管理系统开发实验
“学生成绩管理系统”开发
——实验报告
(一)实验目的
1.学习c程序设计、算法选择和设计,以及数据类型的选择和数据结构的设计;
2.加深对程序设计方法的理解,并运用c程序解决较复杂的问题;
3.培养团队协作的精神。
(二)实验内容和要求
1.实验内容:
①开发一个小型的软件系统,以学生成绩管理为背景,系统具有常用的学生成绩管理功能,程序能够运行并演示所有的功能。
②学生成绩管理系统的基本功能:
成绩输入、查询、打印成绩单、统计分析。
③系统约束:
系统能够处理n(0④根据课堂讨论结果,每小组自行定义各自的系统功能、设计和实现方法,并形成书面文档。
2.实验要求:
①输入成绩:
任课教师通过键盘输入学生成绩,每门的学生成绩由三部分组成:
平时成绩、期中成绩和期末成绩。
②查询指定学生的成绩;查询指定课程的成绩。
③打印个人和班级成绩单:
在显示屏上输出个人成绩单和班级成绩单。
④成绩排名:
按成绩分类输出成绩单。
⑤成绩分析报告:
至少包含平时成绩、最高成绩、最低成绩、按分数段输入成绩。
⑥用文件存储成绩基础数据:
基础数据包含:
学生姓名、学号、课程名称、平时成绩、期中成绩、期末成绩。
(3)成员分工
略
(四)主要仪器设备
仪器:
计算机
实验环境:
Windows:
XP/7/8Devc++
(五)源代码及注释:
#include
#include
#include
structstudent
{//储存学生信息
intid;
doubleusual,mid,final,score,gpa;
charname[20];
}st[10000];
voidsave(charc[],intn,structstudentst[])
{//将学生信息保存到文件中
inti;
FILE*fp;
if(!
(fp=fopen(c,"wb")))//打开或创建文件名为c的文件
{//若打开失败
printf("\t抱歉,无法建立该文件。
请重试!
\n");
return;
}
for(i=0;ifwrite(&st[i],sizeof(structstudent),1,fp);
fclose(fp);
}
intcomp(constvoid*a,constvoid*b)
{//qsort中的比较函数
if(((structstudent*)a)->score!
=((structstudent*)b)->score)//成绩不同时比较成绩
return((structstudent*)b)->score-((structstudent*)a)->score;
return((structstudent*)a)->id-((structstudent*)b)->id;//成绩相同时比较学号
}
intfind(charc[])
{//打开相应文件,提取学生信息
FILE*fp;
inti;
if(!
(fp=fopen(c,"rb")))//打开名为c的文件
{//若名为c的文件不存在
printf("无法查询到该课程!
\n");
return-1;
}
rewind(fp);
for(i=0;!
feof(fp);++i)//文件存在,读取信息
fread(&st[i],sizeof(structstudent),1,fp);
fclose(fp);
returni-1;//返回学生人数
}
doublegpa(doublescore)
{//计算gpa(成绩统一上取整)
if(score<=59)
return0;
if(score<=62)
return1.0;
if(score<=65)
return1.3;
if(score<=69)
return1.7;
if(score<=72)
return2.0;
if(score<75)
return2.3;
if(score<=79)
return2.7;
if(score<=82)
return3.0;
if(score<=85)
return3.3;
if(score<=89)
return3.7;
return4.0;
}
voidinsert()
{//输入学生成绩及信息
charc[20];
inti,x,y,z;//x、y、z分别表示平时、期中、期末成绩所占比例
system("cls");//清屏
printf("\t请输入课程名称(如需退出请输stop):
");
scanf("%s%*c",c);//使用%*c是为了防止对后续输入有影响
if(!
strcmp(c,"stop"))
return;
do{
printf("\t平时期中期末所占比例和为100%%\n\n");
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("\n\t请输入学生学号(若结束录入,请输0):
");
scanf("%d",&st[i].id);
if(!
(st[i].id))
break;
printf("\t请输入学生姓名:
");
scanf("%s",st[i].name);
printf("\t请输入平时成绩:
");
scanf("%lf",&st[i].usual);
printf("\t请输入期中成绩:
");
scanf("%lf",&st[i].mid);
printf("\t请输入期末成绩:
");
scanf("%lf",&st[i].final);
st[i].score=st[i].usual*x/100+st[i].mid*y/100+st[i].final*z/100;
st[i].gpa=gpa(st[i].score);
}
save(c,i,st);//保存
system("pause");
}
voidamend()
{//修改学生成绩及信息
inti,n,num,x,y,z;
charc[20];
system("cls");//清屏
for(n=-1;n<0;){
printf("\t请输入课程名(退出请输入stop):
");
scanf("%s%*c",c);
if(!
strcmp(c,"stop"))
return;
n=find(c);//打开相应文件
}
do{
printf("\t平时期中期末所占比例和为100%%\n\n");
printf("\t请输入平时成绩所占比例(%%):
");
scanf("%d",&x);
printf("\t请输入期中成绩所占比例(%%):
");
scanf("%d",&y);
printf("\t请输入期末成绩所占比例(%%):
");
scanf("%d",&z);
}while(x+y+z!
=100);
while
(1){
printf("\t请输入需修改学生学号(若结束录入,请输0):
");
scanf("%d",&num);
if(!
num)
break;
for(i=0;iif(st[i].id==num){//找到之后,重新输入成绩
printf("\t请输入平时成绩:
");
scanf("%lf",&st[i].usual);
printf("\t请输入期中成绩:
");
scanf("%lf",&st[i].mid);
printf("\t请输入期末成绩:
");
scanf("%lf",&st[i].final);
st[i].score=st[i].usual*x/100+st[i].mid*y/100+st[i].final*z/100;
st[i].gpa=gpa(st[i].score);
break;//成绩更新后停止查找
}
}
if(i==n)//查找了所有学号,均不符
printf("\t抱歉,查无此人!
\n");
}
save(c,n,st);//重新保存文件,并覆盖之前的数据
system("pause");
}
voidseek()
{//个人成绩查询
inti,n,num;
charc[20];
system("cls");
printf("请输入学生学号:
");
scanf("%d",&num);
while
(1){
for(n=-1;n<0;){
printf("请输入课程名称(结束请输stop):
");
scanf("%s%*c",c);//c为相应文件名
if(!
strcmp(c,"stop"))
return;
n=find(c);//n为学生人数
}
for(i=0;iif(num==st[i].id){//找到之后,输出成绩
printf("\t姓名:
%s\t学号:
%d\n\t平时成绩:
%6.1lf\t期中成绩:
%6.1lf\t期末成绩:
%6.1lf\n\t总成绩:
%6.1lf\t\tGPA:
%6.1lf\n",st[i].name,st[i].id,st[i].usual,st[i].mid,st[i].final,st[i].score,st[i].gpa);
break;
}
if(i==n)//查找了所有学号,均不符
printf("抱歉,查无此人!
\n");
}
system("pause");
}
voidrank()
{//班级成绩排名
inti,n;
charc[20];
while
(1){
system("cls");
printf("\t请输入课程名(如结束请输入stop):
");
scanf("%s%