学生成绩管理系统开发实验Word格式文档下载.docx
《学生成绩管理系统开发实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统开发实验Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
平时成绩、期中成绩和期末成绩。
②查询指定学生的成绩;
查询指定课程的成绩。
③打印个人和班级成绩单:
在显示屏上输出个人成绩单和班级成绩单。
④成绩排名:
按成绩分类输出成绩单。
⑤成绩分析报告:
至少包含平时成绩、最高成绩、最低成绩、按分数段输入成绩。
⑥用文件存储成绩基础数据:
基础数据包含:
学生姓名、学号、课程名称、平时成绩、期中成绩、期末成绩。
(3)成员分工
略
(四)主要仪器设备
仪器:
计算机
实验环境:
Windows:
XP/7/8Devc++
(五)源代码及注释:
#include<
stdio.h>
stdlib.h>
string.h>
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;
i<
n;
++i)//若打开成功
fwrite(&
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[])
{//打开相应文件,提取学生信息
rb"
)))//打开名为c的文件
{//若名为c的文件不存在
printf("
无法查询到该课程!
return-1;
}
rewind(fp);
for(i=0;
!
feof(fp);
++i)//文件存在,读取信息
fread(&
returni-1;
//返回学生人数
doublegpa(doublescore)
{//计算gpa(成绩统一上取整)
if(score<
=59)
return0;
=62)
return1.0;
=65)
return1.3;
=69)
return1.7;
=72)
return2.0;
75)
return2.3;
=79)
return2.7;
=82)
return3.0;
=85)
return3.3;
=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是为了防止对后续输入有影响
strcmp(c,"
stop"
))
do{
\t平时期中期末所占比例和为100%%\n\n"
\t请输入平时成绩所占比例(%%):
scanf("
%d"
&
x);
\t请输入期中成绩所占比例(%%):
y);
\t请输入期末成绩所占比例(%%):
z);
}while(x+y+z!
=100);
;
++i){
\n\t请输入学生学号(若结束录入,请输0):
scanf("
st[i].id);
if(!
(st[i].id))
break;
\t请输入学生姓名:
%s"
st[i].name);
\t请输入平时成绩:
%lf"
st[i].usual);
\t请输入期中成绩:
st[i].mid);
\t请输入期末成绩:
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);
//保存
pause"
voidamend()
{//修改学生成绩及信息
inti,n,num,x,y,z;
//清屏
for(n=-1;
0;
){
\t请输入课程名(退出请输入stop):
return;
n=find(c);
//打开相应文件
while
(1){
\t请输入需修改学生学号(若结束录入,请输0):
num);
if(!
num)
for(i=0;
++i){//依据学号查找此学生
if(st[i].id==num){//找到之后,重新输入成绩
printf("
scanf("
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抱歉,查无此人!
save(c,n,st);
//重新保存文件,并覆盖之前的数据
voidseek()
{//个人成绩查询
inti,n,num;
printf("
请输入学生学号:
scanf("
for(n=-1;
printf("
请输入课程名称(结束请输stop):
scanf("
//c为相应文件名
if(!
return;
n=find(c);
//n为学生人数
++i)//依据学号查找此学生
if(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);
抱歉,查无此人!
voidrank()
{//班级成绩排名
inti,n;
while
(1){
system("
\t请输入课程名(如结束请输入stop):
%s%