C语言学生成绩管理系统.docx
《C语言学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统.docx(31页珍藏版)》请在冰豆网上搜索。
C语言学生成绩管理系统
一设计内容
1.需求分析
1.1项目需求概述
通过此系统可以实现如下功能:
1)数据信息的录入
2)学生、课程及成绩全部显示
3)查询功能
4)成绩修改及删除
5)成绩统计
6)退出系统
功能要求及说明
1、数据信息的录入
1)学生基本信息录入:
学号不允许重复录入信息保存在student文件中
2)课程信息的录入:
录入信息保存在course文件中
3)学生成绩录入:
成绩信息保存在score文件中
录入学生成绩信息时,综合成绩根据条件自动运算。
运算方法:
如果录入课程为公共课,则综合成绩=平时成绩*30%+卷面成绩*70%
如果录入课程为专业课,则综合成绩=平时成绩*40%+卷面成绩*70%.
说明:
课号S开头表示专业课,P开头表示公共基础课。
2、学生、课程及成绩显示:
输出所有的学生信息及成绩信息
3、查询功能
1)学生信息查询
输入一个学号或姓名(可实现选择),查出此学生的基本信息并显示输出。
输入性别、所在系名,可查询所有男生(女生)、本系所有的学生的基本信息并显示输出。
2)成绩查询:
输入一个学号时,查询出此学生的所有课程成绩信息并以列表显示,显示内容包括:
学号、课程名、平时成绩、卷面成绩、综合成绩
输入一个学生的姓名时,查询出此学生的所有课程成绩信息并以列表显示,显示内容包括:
学号、姓名、性别、所在系、课程名、综合成绩
输入一门课程名称,可查询出所有选修这门课程的学生成绩。
4、成绩修改(要求先输入密码)
在修改成绩之前必须输入正确的用户密码才能进入成绩修改菜单进行操作。
5、删除功能
当在student.txt中删除一个学生时,自动地在score.txt中删除此人所有信息。
6、成绩统计
显示每门课程成绩最高的学生的基本信息
显示每门课程的平均成绩
显示每门课程不及格(综合成绩小于60分)的学生信息,并统计出人数。
7、退出系统
2.概要设计
功能模块图:
详细设计3.系统流程描述2.1
2.2主要数据变量结构定义
本系统主要定义了三个结构体,分别用于存储学生基本信息(structstudent),课程信息(structcourse),学生成绩(structscore)
inf,struct
student(struct其中,学生基本信息和学生成绩分别定义了两个结构体变量
studentinf2[30]和structscoreinfs,structscoreinfs2[30])
具体的结构体定义如下:
structstudent
{//定义结构体名为student的结构变量inf
charnum[10];//学生学号
charname[10];//学生姓名
charsex[10];//学生性别
charage[10];//学生年龄
chardep[10];//department,所在系
};
structstudentinf;
structstudentinf2[30];
structcourse
{//定义结构体名为course的结构变量infc
charsnum[10];//课程编号
charsname[10];//课程名称
charteacher[10];//教课教师
};
structcourseinfc;
structscore
{//定义结构体名为score的结构变量infs
charnum[10];//学生学号
charsnum[10];//课程编号
floatpscore;//平时成绩
floatlscore;//卷面成绩
floatsscore;//综合成绩
};
structscoreinfs;
structscoreinfs2[30];
2.3系统所有主要功能的主要函数的设计流程图和代码
1)主菜单
inta;
printf(^-------欢迎进入学生成绩管理系统---------^\n);
printf(^^\n);
printf(^1.教学信息登入(请输入1)^\n);
printf(^2.查询学生信息(请输入2)^\n);
printf(^3.修改学生信息(请输入3)^\n);
printf(^4.学生信息统计(请输入4)^\n);
printf(^5.显示全部学生信息(请输入5)^\n);
printf(^6.删除学生信息(请输入6)^\n);
printf(^^\n);
printf(^----------退出本系统(请输入7)-----------^\n);
scanf(%d,&a);
选择函数进行调用switch(a)//
{
case1:
EI();
break;
case2:
SF();
break;
case3:
SR();
break;
case4:
SC();
break;
case5:
SS();
break;
case6:
SD();
break;
case7:
exit();
break;
default:
牰湩晴尨您输入有误,请重新输入\n);
MM();
break;
}
2)信息登入函数(以登入学生基本信息为例)
charx;
FILE*fp;
fp=fopen(student.txt,a);
x='y';
?
?
灦楲瑮?
灦尬学号姓名性别年龄所在系)
while(x=='y'||x=='Y')//判断是否继续循环输入
{
牰湩晴尨请输入学生学号\n);
scanf(%s,&inf.num);
牰湩晴尨请输入学生姓名\n);
scanf(%s,&inf.name);
牰湩晴尨请输入学生性别\n);
scanf(%s,&inf.sex);
牰湩晴尨请输入学生年龄\n);
scanf(%s,&inf.age);
牰湩晴尨请输入学生所在系\n);
scanf(%s,&inf.dep);
fprintf(fp,%-6s%-7s%-6s%-6s%-6s\n,inf.num,inf.name,inf.sex,inf.age,inf.dep);
牰湩晴尨继续输入吗?
是(y/Y)否(n/N)\n);
scanf(%S,&x);
}
fclose(fp);
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
chary;
scanf(%s,&y);
if(y=='y'||y=='Y')
EI();
else
exit();
3)信息查询函数(以根据学号或姓名进行查询的函数为例)
牰湩晴尨选择根据学号查询请输入1,选择根据姓名查询请输入2\n);
inta;
intflag=0;
FILE*op;
FILE*o;
scanf(%d,&a);
inti=0;
intj=0;
switch(a)
{
case1:
charn[10];
n[2]='\0';
op=fopen(student.txt,
);
牰湩晴尨请输入学号\n);
scanf(%s,&n);
while(!
feof(op))
{
fscanf(op,%s,&inf.num);
fscanf(op,%s,&inf.name);
fscanf(op,%s,&inf.sex);
fscanf(op,%s,&inf.age);
fscanf(op,%s,&inf.dep);
if(strcmp(n,inf.num)==0)
{
if(flag==0)
{
牰湩晴尨学号姓名性别年龄所在系\n);
printf(%-6s%-7s%-6s%-6s%-6s\n,inf.num,inf.name,inf.sex,inf.age,inf.dep);
flag=1;
}
}
i++;
}
fclose(op);
if(i==0)
printf(\
文件中无记录!
\n);
else
if(flag==0)
{
printf(文件中无此人,请重新输入\n);
SFIa();
}
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
chary;
scanf(%s,&y);
if(y=='y'||y=='Y')
SFI();
else
exit();
break;
case2:
charm[10];
牰湩晴尨请输入姓名\n);
scanf(%s,&m);
o=fopen(student.txt,
);
while(!
feof(o))
{
fscanf(o,%s,&inf.num);
fscanf(o,%s,&inf.name);
fscanf(o,%s,&inf.sex);
fscanf(o,%s,&inf.age);
fscanf(o,%s,&inf.dep);
if(strcmp(m,inf.name)==0)
{
if(flag==0)
{
牰湩晴尨学号姓名性别年龄所在系\n);
printf(%-6s%-7s%-6s%-6s%-6s\n,inf.num,inf.name,inf.sex,inf.age,inf.dep);
flag=1;
}
}
j++;
}
fclose(o);
if(j==0)
printf(\
文件中无记录!
\n);
else
if(flag==0)
{
printf(文件中无此人,请重新输入\n);
SFIa();
}
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
charx;
scanf(%s,&x);
if(x=='y'||x=='Y')
SFI();
else
exit();
break;
default:
牰湩晴尨您输入错误,请重新输入\n);
SFIa();
break;
}
4)登陆界面函数(输入用户名和密码,修改成绩前需使用)
printf(^-----------学生成绩修改界面-------------^\n);
printf(^^\n);
printf(^输入用户名及密码(请输入1)^\n);
printf(^^\n);
printf(^----------返回主菜单(请输入2)----------^\n);
inta;
charusername[10];
charpassword[10];
charb[10]=admin;
charc[10]=;0;
scanf(%d,&a);
switch(a)
{
case1:
牰湩晴尨请输入用户名\n);
scanf(%s,username);
牰湩晴尨请输入密码\n);
scanf(%s,password);
if(strcmp(b,username)==0&&strcmp(c,password)==0)
//{
?
?
牰湩晴尨输入正确\n);
sr();
//}
elseif(strcmp(b,username)!
=0)
{
牰湩晴尨用户名错误,请重新输入\n);
SR();
}
elseif(strcmp(c,password)!
=0)
{
牰湩晴尨密码错误,请重新输入\n);
SR();
}
break;
case2:
MM();
break;
default:
牰湩晴尨输入错误,请您重新输入\n);
SR();
break;
}
5)信息修改函数
charnum[10];
num[2]='\0';
charsnum[10];
intflag1=0;
intflag2=0;
floatps;
floatls;
floatss;
牰湩晴尨请输入您所要修改学生的学号\n);
scanf(%s,num);
FILE*op;
FILE*fp;
op=fopen(score.txt,
);
fp=fopen(score.txt,
+);
for(;;)
{
fscanf(op,%s,&infs.num);
fscanf(op,%s,&infs.snum);
fscanf(op,%s,&infs.pscore);
fscanf(op,%s,&infs.lscore);
fscanf(op,%s,&infs.sscore);
if(feof(op))break;
if(strcmp(num,infs.num)==0)
{
flag1=1;
牰湩晴尨请输入您所要修改的课程编号\n);
scanf(%s,snum);
if(strcmp(snum,infs.snum)==0)
{
flag2=1;
\n);
请输入修改后的平时成绩牰湩晴尨
scanf(%f,&ps);
牰湩晴尨请输入修改后的卷面成绩\n);
scanf(%f,&ls);
infs.pscore=ps;
infs.lscore=ls;
if(snum[0]=='P')
{
ss=0.7*ls+0.3*ps;
//infs.sscore=0.7*infs.lscore+0.3*infs.pscore;
infs.sscore=ss;
fp=fopen(score.txt,
+);
fprintf(fp,%-6s%-7s%-10.2f%-10.2f%-10.2f\n,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore);
}
elseif(snum[0]=='S')
{
ss=0.6*ls+0.4*ps;
//infs.sscore=0.6*infs.lscore+0.4*infs.pscore;
infs.sscore=ss;
fp=fopen(score.txt,
+);
fprintf(fp,%-6s%-7s%-10.2f%-10.2f%-10.2f\n,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore);
}
else
{
牰湩晴尨您输入错误请重新输入\n);
SCI();
}
}
}
}
fclose(op);
fclose(fp);
if(flag1==0)
{
牰湩晴尨您输入的学号错误,请重新输入\n);
sr();
}
if(flag2==0)
{
牰湩晴尨您输入的课程编号错误,请重新输入\n);
sr();
}
(n/N)\n);
不(y/Y),返回上一级菜单吗?
是牰湩晴尨
charp;
scanf(%s,&p);
if(p=='y'||p=='Y')
SR();
else
exit();
6)统计课程的平均成绩
牰湩晴尨请输入想要统计平均分的课程的课程编号\n);
scanf(%s,snum);
for(;;)
{
fscanf(op,%s,&infs.num);
fscanf(op,%s,&infs.snum);
fscanf(op,%f,&infs.pscore);
fscanf(op,%f,&infs.lscore);
fscanf(op,%f,&infs.sscore);
if(feof(op))break;
if(strcmp(snum,infs.snum)==0)
{
i++;
score=score+infs.sscore;
flag=1;
}
}
if(flag==1)
{
score=score/i;
牰湩晴尨该课程的平均分如下:
\n);
printf(%0.2f\n,score);
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
charp;
scanf(%s,&p);
if(p=='y'||p=='Y')
MM();
else
exit();
}
elseif(flag==0)
{
牰湩晴尨您输入错误,请重新输入\n);
SC();
}
fclose(op);
7)统计不及格的人数及分数
牰湩晴尨请输入想要统计不及格人数的课程的课程编号\n);
scanf(%s,snum);
for(;;)
{
fscanf(op,%s,&infs.num);
fscanf(op,%s,&infs.snum);
fscanf(op,%f,&infs.pscore);
fscanf(op,%f,&infs.lscore);
fscanf(op,%f,&infs.sscore);
if(feof(op))break;
if(strcmp(snum,infs.snum)==0)
{
if(infs.sscore<60)
{
i++;
牰湩晴尨学号课号平时成绩卷面成绩综合成绩\n);
printf(%-6s%-7s%-10.2f%-10.2f%-10.2f\n,infs.num,infs.snum,infs.pscore,infs.lscore,infs.sscore);
flag2=1;
}
flag=1;
}
}
if(flag2==1)
{
牰湩晴尨该课程未通过的人数如下:
\n);
printf(%d\n,i);
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
charq;
scanf(%s,&q);
if(q=='y'||q=='Y')
MM();
else
exit();
}
elseif(flag2==0)
{
牰湩晴尨您所选择的课程无未通过的人\n);
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
charr;
scanf(%s,&r);
if(r=='y'||r=='Y')
MM();
else
exit();
}
if(flag==0)
{
牰湩晴尨您输入的课程编号错误,请重新输入\n);
SC();
};
fclose(op);
8)统计最高分
牰湩晴尨请输入所要查找最高分的科目\n);
scanf(%s,snum);
for(;;)
{
fscanf(op,%s,&infs.num);
fscanf(op,%s,&infs.snum);
fscanf(op,%f,&infs.pscore);
fscanf(op,%f,&infs.lscore);
fscanf(op,%f,&infs.sscore);
if(feof(op))break;
if(strcmp(snum,infs.snum)==0)
{
strcpy(infs2[l].num,infs.num);
strcpy(infs2[l].snum,infs.snum);
infs2[l].pscore=infs.pscore;
infs2[l].lscore=infs.lscore;
infs2[l].sscore=infs.sscore;
}
}
for(j=0;;)
{
if(kk=infs2[j].sscore;
if(feof(op))break;
j++;
}
printf(%.2f\n,k);
牰湩晴尨返回上一级菜单吗?
是(y/Y),不(n/N)\n);
charv;
scanf(%s,&v);
if(v=='y'||v=='Y')
EI();
else
exit();
9)输出全部信息(包括学生基本信息,课程信息,学生成绩)
牰湩晴尨下面开始输出全部学生信息\n);
FILE*op;
op=fopen(student.txt,
);
intx=0;
for(x=0;x<1;)
{
fscanf(op,%s,&inf.num);
fscanf(op,%s,&inf.name);
fscanf(op,%s,&inf.sex);
fscanf(op,%s,&inf.age);
fscanf(op,%s,&inf.dep);
if(feof(op))break;
printf(%-6s%-7s%-6s%-6s%-6s\n,inf.num,inf.name,inf.sex,inf.age,inf.dep);
}
fclose(op);
牰湩晴尨下面开始输出全部课程信息\n);
FILE*fp;
fp=fopen(course.txt,
);
牰湩晴尨课号课名任课教师\n);
for(x=0;x<1;)
{
fscanf(fp,%s,&infc.snum);
fscanf(fp,%s,&infc.sname);
fscanf(fp,%s,&infc.teacher);
if(feof(fp))break;
printf(%-6s%-14s%-8s%\n,infc.snum,infc.sname,infc.teacher);
}
fclose(fp);
牰湩晴尨下面开始输出全部学生成绩\n