学生学籍信息管理系统C++.docx
《学生学籍信息管理系统C++.docx》由会员分享,可在线阅读,更多相关《学生学籍信息管理系统C++.docx(28页珍藏版)》请在冰豆网上搜索。
学生学籍信息管理系统C++
一、学生学籍信息管理系统设计
1、需求分析
学生基本信息、学生成绩基本信息要存入文件当中,因而要提供文件的输入输出操作;查询功能要求提供查找和显示操作;删除功能要求实现删除操作;排序功能要求实现排序操作;另外还应该提供键盘式选择菜单以实现功能选择。
2、总体设计
整个系统可以设计为数据录入模块、数据修改模块、数据查询模块、数据删除模块和数据排序模块。
成绩包括数学、英语、程序设计基础三门课成绩
基本信息存放在一个文件,成绩信息存放在另一个文件。
(1)数据录入模块
学生基本信息文件可以在磁盘建立,采用写文件方式录入学生基本信息、各门课程的成绩单。
综合成绩通过平时成绩和卷面成绩获得计算得到(平时30%,卷面70%)。
(2)数据修改模块
采用读文件方式读入学生成绩基本信息,进行修改后,以写文件方式写回原文件中。
修改时,首先询问要修改信息学生的姓名或学号,然后选择要修改的内容,并输入新的数据进行修改。
(3)查询模块
通过菜单选择查询功能,再选择学生基本情况查询和成绩查询,若选择前者,再通过菜单选择学号、姓名或宿舍号码,然后把查找结果输出。
若选择后者,则先查找学号对应的姓名,再查找该学生的课程情况,并统计科目和实得总学分,输出结果。
(3)删除模块
通过菜单选择删除学生的功能,输入要删除学生的学号,则分别在两个文件中查找该生信息,删除之。
(4)排序模块
通过菜单选择排序依据,采用排序算法(冒泡、插入、选择等)对数据进行排序并输出结果,排序标准包括总分、某课成绩、某课卷面成绩等。
(5)追加模块
追加学生信息
#include
#include
#include
#include
#include
#defineN80
structStuInfo
{
intstuNo;//学号
charname[20];//姓名
charsex[3];//性别
intdomNum;//宿舍号
chartel[12];//电话号码
};//学生基本信息结构体
structStuGraInfo{
charcourseName[10];//课程名称
intcourseNo;//课程编号
intcreditHour;//学分
structscore
{
intstuNo;//学号
floattriGrade;//平时成绩
floatexamGrade;//卷面成绩
floattotalGrade;//综合总评成绩
}score_talbe[N];
};//成绩单基本信息结构体
voidcreate();
voidsearch();
voidinsert();
voidrepin();
voiddel();
voidhelp();
voidrecreate();
StuGraInfop[3];
StuInfod[N];
intstuNum=0;
intmain()
{
charch;
do{
cout<cout<--------------"<cout<创建"<查询"<修改"<排序"<删除"<添加"<帮助"<退出"<cout<cout<<"请选择(0~7):
";
cin>>ch;
while(!
(ch<='7'&&ch>='0'))/*输入不在0到5之间无效*/
{
cout<<"数据输入错误,请重新选择(0~7):
";
cin>>ch;
}
switch(ch)
{
case'1':
create();break;
case'2':
search();break;
case'3':
insert();break;
case'4':
repin();break;
case'5':
del();break;
case'6':
recreate();break;
case'7':
help();
}
}while(ch!
='0');
return0;
}
voidcreate()
{//模块一录入学生信息
inti,j,t=0;
charm;
StuGraInfos[3]={{"数学",10,5},{"英语",11,4},{"程序设计",12,4}};
fstreamfile;
for(i=0;i{
cout<<"请输入学号"<cin>>d[i].stuNo;
for(intk=0;;k++)
{
for(j=0;j
if(d[i].stuNo==d[j].stuNo)
{
cout<<"此学号已存在,请重新输入!
"<t=1;
cin>>d[i].stuNo;
break;
}
if(d[i].stuNo==0)
{
cout<<"学号不能为0,请重新输入!
"<cin>>d[i].stuNo;
t=1;
break;
}
if(t==0)
break;
}
cout<<"请输入姓名"<cin>>d[i].name;
cout<<"请输入性别"<cin>>d[i].sex;
cout<<"请输入宿舍号"<cin>>d[i].domNum;
cout<<"请输入电话号"<cin>>d[i].tel;
stuNum++;
cout<<"是否继续?
是y,否n"<cin>>m;
if(m!
='y')
break;
}
//输入学生的成绩信息到内存s[i]中
for(i=0;i<3;i++)
{
cout<<"请开始输入"<
for(j=0;j{
cout<<"学号"<cin>>s[i].score_talbe[j].stuNo;
cout<
cin>>s[i].score_talbe[j].triGrade;
cout<
cin>>s[i].score_talbe[j].examGrade;
s[i].score_talbe[j].totalGrade=s[i].score_talbe[j].triGrade*0.3+s[i].score_talbe[j].examGrade*0.7;
}
}
//声明文件流对象
ofstreamoutFile;
//将基本信息写入文件test
outFile.open("D:
\\test.txt",ios:
:
out|ios:
:
binary);
if(!
outFile)//使用错误流对象输出错误信息
{
cout<<"文件无法打开"<abort();
}
else
{
//将内存中从a[i]地址开始的sizeof(d[i])的内容写入文件中
for(i=0;ioutFile.write((char*)&d[i],sizeof(StuInfo));
outFile.close();//关闭文件
}
outFile.open("D:
\\data.txt",ios:
:
out|ios:
:
binary);
if(!
outFile)//使用错误流对象输出错误信息
{
cout<<"文件无法打开"<abort();
}
else
{
for(i=0;i<3;i++)
outFile.write((char*)&s[i],sizeof(StuGraInfo));
outFile.close();//关闭文件
}
}
voidsearch()
{intn,k,i,j,sum=0,t=0;
charm,a[20];
ifstreaminfile;
cout<查询基本信息"<查询成绩"<退出"<cout<cin>>n;
while(!
(n<=3&&n>=1))/*输入不在1到3之间无效*/
{
cout<<"数据输入错误,请重新选择(1~3):
";
cin>>n;
}
infile.open("D:
\\test.txt",ios:
:
in|ios:
:
binary);
if(!
infile)
{
cout<<"test.txt文件不能打开"<abort();
}
else
{
for(i=0;infile.peek()!
=EOF;i++)//将文件中的数据读出放在d[i]
//从文件中读字节到指定的存储器区域。
infile.read((char*)&d[i],sizeof(StuInfo));
infile.close();//关闭文件
}
switch(n)
{
case1:
cout<<"按学号查询请输入a,按姓名查询输入b,按宿舍号查询输入c"<cin>>m;
if(m=='a')
{
cout<<"请输入学号"<cin>>k;
for(i=0;iif(d[i].stuNo==k)
{
cout<<"该学生学号:
"<cout<<"该学生姓名:
"<cout<<"该学生性别:
"<cout<<"该学生宿舍号:
"<cout<<"该学生电话:
"<t=1;
}
if(t==0)//容错处理
cout<<"没找到"<}
elseif(m=='b')
{
cout<<"请输入要查找学生的姓名"<cin>>a;
for(i=0;iif(strcmp(d[i].name,a)==0)
{
cout<<"该学生学号:
"<cout<<"该学生姓名:
"<cout<<"该学生性别:
"<cout<<"该学生宿舍号:
"<cout<<"该学生电话:
"<t=1;
}
if(t==0)//容错处理
cout<<"没找到"<}
else
{
cout<<"请输入好查找的学生的宿舍号"<cin>>k;
for(i=0;iif(d[i].domNum==k)
{
cout<<"该学生学号:
"<cout<<"该学生姓名:
"<cout<<"该学生性别:
"<cout<<"该学生宿舍号:
"<cout<<"该学生电话:
"<t=1;
}
if(t==0)//容错处理
cout<<"没找到"<}
break;
case2:
infile.open("D:
\\data.txt",ios:
:
in|ios:
:
binary);
if(!
infile)
{
cout<<"data.txt文件不能打开"<abort();
}
else
{
for(i=0;i<3;i++)//将文件中的数据读出放在p[i]内
//从文件中读字节到指定的存储器区域。
infile.read((char*)&p[i],sizeof(StuGraInfo));
infile.close();
cout<<"请输入要查找的学生的学号"<cin>>k;
for(i=0;iif(d[i].stuNo==k)
{
cout<<"该学生姓名为:
"<t=1;
}
if(t==0)//容错处理
cout<<"没找到"<for(i=0;i<3;i++)//找到该学生,输出成绩信息并记录实得学分
for(j=0;j{
if(p[i].score_talbe[j].stuNo==k)
{
cout<
"<
cout<<"\t"<<"卷面成绩:
"<
cout<<"\t"<<"总分:
"<
if(p[i].score_talbe[j].totalGrade>=60)
sum+=p[i].creditHour;//用sum记录及格科目的学分
}
}
cout<<"该学生实得学分为"<}
case3:
break;
}
}
voidinsert()
{
//模块三修改学生信息
fstreaminfile,outFile;
intn,i,j,t=0;
charcourse[10];
infile.open("D:
\\data.txt",ios:
:
in|ios:
:
binary);
if(!
infile)
{
cout<<"data.txt文件不能打开"<abort();
}
else
{
for(i=0;i<3;i++)//将文件中的数据读出放在p[i]内,并输出
//从文件中读字节到指定的存储器区域。
infile.read((char*)&p[i],sizeof(StuGraInfo));
infile.close();//关闭文件
cout<<"请输入要修改学生的学号:
"<cin>>n;
for(i=0;i<3;i++)
for(j=0;jif(p[i].score_talbe[j].stuNo==n)
{
t=1;
break;
}
if(t==0)
{
cout<<"找不到该学生!
"<return;
}
cout<<"输入要修改的科目的课程名称"<cout<<"课程包括数学、英语、程序设计"<cin>>course;
for(i=0;i<3;i++)
if(strcmp(p[i].courseName,course)==0)
{
t=0;
break;
}
if(t==1)//容错处理
{
cout<<"没找到该科目!
"<return;
}
for(j=0;jif(p[i].score_talbe[j].stuNo==n)
{
cout<<"请输入该学生平时成绩"<cin>>p[i].score_talbe[j].triGrade;
cout<<"请输入该学生卷面成绩"<cin>>p[i].score_talbe[j].examGrade;
p[i].score_talbe[j].totalGrade=p[i].score_talbe[j].triGrade*0.3+p[i].score_talbe[j].examGrade*0.7;
}
outFile.open("D:
\\data.txt",ios:
:
out|ios:
:
binary);//打开文件
if(!
outFile)//使用错误流对象输出错误信息
{
cout<<"文件无法打开"<abort();
}
else//输出数据到与对象outFile关联的文件中
{
//把新信息写入文件
for(i=0;i<3;i++)
outFile.write((char*)&p[i],sizeof(StuGraInfo));
outFile.close();//关闭文件
cout<<"修改成功!
"<}
}
}
voiddel()
{
intnum,i=0,j=0,t=0;
fstreaminfile,outFile;
cout<<"请输入要输入学生的学号"<cin>>num;
infile.open("D:
\\test.txt",ios:
:
in|ios:
:
binary);
if(!
infile)
{
cout<<"test.txt文件不能打开"<abort();
}
else
{
for(i=0;i<3;i++)//将文件中的数据读出放在p[i]内,并输出
//从文件中读字节到指定的存储器区域。
infile.read((char*)&d[i],sizeof(StuInfo));
infile.close();
for(i=0;iif(d[i].stuNo==num)
{
t=1;
d[i].stuNo=0;
d[i].domNum=0;
strcpy(d[i].sex,"\0");
for(j=0;j<12;j++)
d[i].tel[j]=0;
strcpy(d[i].name,"\0");
}
if(t==0)
{
cout<<"未找到该学生!
"<}
}
infile.open("D:
\\data.txt",ios:
:
in|ios:
:
binary);
if(!
infile)
{
cout<<"data.txt文件不能打开"<abort();
}
else
{
for(i=0;i<3;i++)//将文件中的数据读出放在p[i]内
//从文件中读字节到指定的存储器区域。
infile.read((char*)&p[i],sizeof(StuGraInfo));
infile.close();
for(i=0;i<3;i++)
for(j=0;jif(p[i].score_talbe[j].stuNo==num)
{
p[i].score_talbe[j].examGrade=0;
p[i].score_talbe[j].stuNo=0;
p[i].score_talbe[j].totalGrade=0;
p[i].score_talbe[j].triGrade=0;
}
}
outFile.open("D:
\\test.txt",ios:
:
out|ios:
:
binary);
if(!
outFile)//使用错误流对象输出错误信息
{
cout<<"文件无法打开"<abort();
}
else
{
//将内存中从d[i]地址开始的sizeof(d[i])的内容写入文件中
for(i=0;i<3;i++)
outFile.write((char*)&d[i],sizeof(StuInfo));
outFile.close();//关闭文件