基于c++学生成绩管理系统Word格式.docx
《基于c++学生成绩管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《基于c++学生成绩管理系统Word格式.docx(19页珍藏版)》请在冰点文库上搜索。
根据上面的需求分析,可以将这个系统分为以下模块:
输入模块,修改模块,删除模块,查询模块,显示模块.
学生成绩管理系统
数据输入
数据显示
数据修改
数据删除
数据查询
五、概要设计
1、主函数
主函数一般设计得比较简单,只提供输入,处理和输出部分的函数调用,其中各功能模块用菜单方式选择
.
流程图:
显示一系列功能模块
输入n,判断n是否是A--F
N
根据n的值调用各功能模块函数
Y
程序如下:
voidmain()
{
charchoice;
//菜单选择项
charclassname[6];
//输入的班级名称
intnumb;
//输入的学号
do{
printf("
\t\t**********************\n"
"
\t\t*学生信息管理*\n"
\t\t**********************\n\n"
\t┏━━━━━━━━━━━━━━━━━━┓\n"
\t┃1.录入学生基本信息┃\n"
\t┃2.录入成绩信息┃\n"
\t┃┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┃\n"
\t┃3.修改学生成绩┃\n"
\t┃4.删除学生全部信息┃\n"
\t┃5.按[班级]查询学生基本信息┃\n"
\t┃6.按[班级]查询成绩┃\n"
\t┃7.显示通过考试的学生信息┃\n"
\t┃8.退出┃\n"
\t┗━━━━━━━━━━━━━━━━━━┛\n\n"
请输入您的选择(数字1-8):
);
scanf("
\n%c"
&
choice);
system("
cls"
switch(choice)
{
case'
1'
:
\t\t录入学生基本信息\n\n"
addinfo();
//录入学生基本信息
break;
2'
\t\t录入学生成绩\n\n"
请先输入班级名称:
"
%5s"
classname);
addscore(classname);
//录入成绩信息
3'
\t\t修改学生成绩\n\n"
请先输入要修改的班级名称和学号:
%5s%d"
classname,&
numb);
updatescore(classname,numb);
4'
\t\t删除学生全部信息\n\n"
请先输入要删除的班级名称和学号:
deleteall(classname,numb);
5'
\t\t按[班级]查询学生信息\n\n"
queryclass();
//按[班级]查询学生基本信息
6'
\t\t按[班级]查询成绩\n\n"
queryclassscore();
//按[班级]查询成绩
7'
\t\t显示通过考试的学生信息\n\n"
querypass();
//显示通过考试的学生信息
8'
程序退出。
\t谢谢使用!
)\n\n"
exit(0);
default:
您的输入有误,请重试!
\n\n"
fflush(stdin);
}
\n按任意键返回......"
getch();
}while(choice!
='
}
2、输入模块
单独看各数据信息,学号,姓名是字符型,可以采用字符型数组;
分数为整数,采用整数;
数据信息存放在文件中,一条记录对应一个学生,既符合习惯又方便信息管理.
voidaddinfo()
charflag;
//是否继续输入
charclas[6];
intnewno;
if((fpinfo=fopen("
info.dat"
"
ab+"
))==NULL)//以追加方式打开学生信息表"
文件打开失败.\n"
exit
(1);
do
{
请输入学生基本信息"
\n\t学生所在班级名称:
&
clas);
if(strlen(clas)<
1)
请输入班级名称.\n"
;
return;
newno=0;
rewind(fpinfo);
//文件指针置于文件开始位置
while(fread(&
stu,sizeof(stuinfo),1,fpinfo)==1)//从文件中查找是否已经存在该班级的记录,如果存在找出最大学号
if(strcmp(stu.classes,clas)==0)
if(newno<
stu.numb)
newno=stu.numb;
}
strcpy(stu.classes,clas);
\t班内学号:
stu.numb=newno+1;
//自动生成该班级的学号=最大学号+1
%d"
newno+1);
\n\t学生姓名:
%19s"
stu.name);
if(strlen(stu.name)<
请输入学生名字.\n"
stu.avgscore=0.0;
//向文件中追加记录时,平均成绩默认值为0
fwrite(&
stu,sizeof(stuinfo),1,fpinfo);
//将输入的结构体数据保存到文件中
继续输入吗?
<
y/n>
flag);
}while(flag=='
Y'
||flag=='
y'
fclose(fpinfo);
/****************************************/
/*录入学生成绩信息*/
//首先输入要录入班级名称,且该班级必须在info.dat中存在,然后再输入相应数据
voidaddscore(charname[])
charflag,flagname='
n'
flagnumbi='
flagnumbs='
//是否继续输入,是否班级名称存在,info.dat是否学号存在,score.dat是否学号存在
rb+"
))==NULL)//打开学生基本信息文件"
info.dat文件打开失败.\n"
while(fread(&
stu,sizeof(stuinfo),1,fpinfo)==1)
if(strcmp(name,stu.classes)==0)//通过循环在文件"
中查找是否有该班级的记录
flagname='
//如果文件"
中存在该班级的记录,则flagname='
,循环结束
else
if(flagname=='
)//如果文件"
中不存在该班级的记录,关闭文件,函数结束
info.dat文件中没有%s班级.\n"
name);
if((fpscore=fopen("
score.dat"
))==NULL)//如果文件"
中存在该班级的记录,以追加方式打开成绩文件"
\n\t请输入学号:
//输入学号
//numb=atoi(cnumb);
//"
文件指针指向文件开始位置
stu,sizeof(stuinfo),1,fpinfo)==1)
if((strcmp(name,stu.classes)==0)&
&
stu.numb==numb)//判断"
文件中是否存在该班级该学号的记录
flagnumbi='
rewind(fpscore);
//如果存在,"
score,sizeof(structallscores),1,fpscore)==1)//循环判断"
文件中是否已经存在该学号的记录
if((strcmp(name,score.classes)==0)&
score.numb==numb)
flagnumbs='
//如果"
文件中存在该班级该学号的记录,flagnumbs='
if(flagnumbi=='
||(flagnumbi=='
&
flagnumbs=='
))//如果"
,"
文件都存在,则不允许向"
追加成绩信息
info.dat文件中没有学号为%d学生信息,或者score.dat文件中已经存在改学号学生的成绩\n"
numb);
fclose(fpscore);
strcpy(score.classes,name);
//给结构score的classes成员赋值--班级名称
score.numb=numb;
//学号
\n\t请输入C语言的成绩:
%f"
score.c_score);
//C语言的成绩
\t请输入SQL语言的成绩:
score.sql_score);
//SQL语言的成绩
\t请输入VB语言的成绩:
score.vb_score);
//VB语言的成绩
stu.avgscore=(score.c_score+score.sql_score+score.vb_score)/3.0f;
//计算平均成绩
fseek(fpinfo,-1L*(long)sizeof(stuinfo),SEEK_CUR);
//修改"
中该班级该学号的记录
fseek(fpinfo,0,SEEK_CUR);
//SEEK_CUR当前位置
score,sizeof(structallscores),1,fpscore);
//向"
文件追加记录
3、修改模块
用户输入要修改学生的成绩,根据学生的学号和班级名称信息查找学生记录,并提示用户修改该记录的哪部分信息.根据用户选择修改相应的信息.
输入要修改的成绩
YN
voidupdatescore(charname[],intnumb)
charflaginfo='
flagscore='
if(strcmp(name,stu.classes)==0&
stu.numb==numb)//通过循环在文件"
flaginfo='
))==NULL)//以读写方式打开学生基本信息文件"
score.dat文件打开失败.\n"
score,sizeof(structallscores),1,fpscore)==1)
flagscore='
if(flaginfo=='
flagscore=='
)
\n\t请重新输入C语言的成绩:
\t请重新输入SQL语言的成绩:
\t请重新输入VB语言的成绩:
fseek(fpscore,-1L*(long)sizeof(structallscores),SEEK_CUR);
文件追加记录
fseek(fpscore,0,SEEK_CUR);
\t恭喜您!
!
成绩修改成功!
四、删除模块
该模块的功能是,用户输入要删除的学生的信息,根据学生学号和班级查找记录并删除.