1小型学生信息系统11.docx
《1小型学生信息系统11.docx》由会员分享,可在线阅读,更多相关《1小型学生信息系统11.docx(20页珍藏版)》请在冰点文库上搜索。
![1小型学生信息系统11.docx](https://file1.bingdoc.com/fileroot1/2023-6/15/2f3c854b-f9c4-488f-a456-d6c2cd053c35/2f3c854b-f9c4-488f-a456-d6c2cd053c351.gif)
1小型学生信息系统11
/************************************************************************/
/*
Author:
Tiger
Date:
6/15/2018
Function:
小型信息管理系统
Version:
1.1
1、增加了学生成绩输入范围的检查。
2、优化部分代码。
*/
/************************************************************************/
#include
#include
#include
//学生基类
classStudent
{
protected:
charname[20]。
//姓名
floatscore1,score2,score3。
//成绩1、2、3、
public:
voidgetname(chara[]>。
//得到学生的姓名,用于查询
voidset(>。
//设置学生信息
voidshow(>。
//显示学生信息
voidaverage(>。
//计算并输出平均成绩
floatcheck_score(inti,floatsc>。
//输入学生的第i门的成绩,分数在<0---100)
}。
floatStudent:
:
check_score(inti,floatsc>
{
cout<<"成绩"<
"<cin>>sc。
if(sc<0||sc>100>
{
cout<<"输入成绩有误!
"<check_score(i,sc>。
}
returnsc。
}
voidStudent:
:
getname(chara[]>
{
strcpy(a,name>。
}
voidStudent:
:
show(>
{
cout<<"学生姓名:
"<<<"成绩1:
"<<<"成绩2:
"<<<"成绩3:
"<}
voidStudent:
:
set(>
{
cout<<"学生姓名:
"。
cin>>name。
//输入并检查成绩的范围
floattemp_sc=0。
score1=check_score(1,temp_sc>。
score2=check_score(2,temp_sc>。
score3=check_score(3,temp_sc>。
}
voidStudent:
:
average(>
{
cout<<"姓名:
"<cout<<"平均成绩:
"<<(score1+score2+score3>/3<}
//中学生类
classMiddle_school_student:
publicStudent
{
protected:
charhouseholder[20]。
//家长
public:
Middle_school_student(>。
voidset(>。
voidshow(>。
}。
Middle_school_student:
:
Middle_school_student(>
{
strcpy(name,"张三">。
score1=0。
score2=0。
score3=0。
strcpy(householder,"李四">。
}
voidMiddle_school_student:
:
set(>
{
Student:
:
set(>。
cout<<"家长:
"。
cin>>householder。
}
voidMiddle_school_student:
:
show(>
{
Student:
:
show(>。
cout<<"家长:
"<}
//大学生类
classUniversity_student:
publicStudent
{
charprofession[20]。
//专业
public:
University_student(>。
voidset(>。
voidshow(>。
}。
University_student:
:
University_student(>
{
strcpy(name,"张三">。
score1=0。
score2=0。
score3=0。
strcpy(profession,"无">。
}
voidUniversity_student:
:
set(>
{
Student:
:
set(>。
cout<<"专业:
"。
cin>>profession。
}
voidUniversity_student:
:
show(>
{
Student:
:
show(>。
cout<<"专业:
"<}
//研究生类
classPostgraduate:
publicStudent
{
chartutor[20]。
public:
Postgraduate(>。
voidset(>。
voidshow(>。
}。
Postgraduate:
:
Postgraduate(>
{
strcpy(name,"张三">。
score1=0。
score2=0。
score3=0。
strcpy(tutor,"李四">。
}
voidPostgraduate:
:
set(>
{
Student:
:
set(>。
cout<<"导师:
"。
cin>>tutor。
}
voidPostgraduate:
:
show(>
{
Student:
:
show(>。
cout<<"导师:
"<}
//菜单界面
intmenu(>
{
intx。
cout<<"*************欢迎使用*************"<cout<<"*******小型学生信息管理系统*******"<cout<<"1、输入学生信息"<<'\n'<<"2、查询学生信息并显示"<<'\n'
<<"3、计算平均成绩并显示"<<'\n'<<"4、退出"<<'\n'<<"请您选择<1-4):
"。
cin>>x。
returnx。
}
//管理界面
intmanage(>
{
intx。
cout<<"**********按学生类别进行管理**************"<cout<<"***************学生类别选择***************"<cout<<"1中学生类"<<'\n'<<"2大学生类"<<'\n'
<<"3研究生类"<<'\n'<<"4退出"<<'\n'<<"请您选择学生类别:
"。
cin>>x。
returnx。
}
//创建一个Middle_school_student
Middle_school_studentnewmiddle(>
{
Middle_school_studentm。
m.set(>。
returnm。
}
//将Middle_school_student对象写进D:
\\middle.txt
voidwriteMiddle(Middle_school_student&m>
{
fstreamfo。
fo.open("D:
\\middle.txt",ios:
:
out|ios:
:
app>。
if(!
fo>
{
cout<<"不能打开文件!
"<return。
}
fo.write((char*>&m,sizeof(Middle_school_student>>。
fo.close(>。
}
//读取一个Middle_school_student对象
voidreadMiddle(intj>/*j=1进入查询学生信息、j=2查询学生平均成绩*/
{
Middle_school_students。
fstreamfr。
chartemp1[20],temp2[20]。
cout<<"请输入要查询的学生名:
"。
cin>>temp1。
fr.open("D:
\\middle.txt",ios:
:
in>。
if(!
fr>
{
cout<<"不能打开文件!
"<return。
}
//计算Middle_school_student记录的个数Num
fr.seekp(0,ios:
:
end>。
longNum=fr.tellp(>/sizeof(Middle_school_student>。
for(inti=0。
ii++>
{
fr.seekp(sizeof(Middle_school_student>*i>。
fr.read((char*>&s,sizeof(Middle_school_student>>。
s.getname(temp2>。
inttbb=strcmp(temp1,temp2>。
if(!
tbb>
{
if(j==1>{s.show(>。
return。
}
elseif(j==2>{s.average(>。
return。
}
else{cout<<"错误!
"<return。
}
}
}
cout<<"没有该学生!
"<fr.close(>。
}
//创建一个University_student
University_studentnewuniversity(>
{
University_studentu。
u.set(>。
returnu。
}
//将University_student对象写进D:
\\university.txt
voidwriteUniversity(University_student&u>
{
fstreamfo。
fo.open("D:
\\university.txt",ios:
:
out|ios:
:
app>。
if(!
fo>
{
cout<<"不能打开文件!
"<return。
}
fo.write((char*>&u,sizeof(University_student>>。
fo.close(>。
}
//读取一个University_student对象
voidreadUniversity(intj>/*j=1进入查询学生信息、j=2查询学生平均成绩*/
{
University_students。
fstreamfr。
chartemp1[20],temp2[20]。
cout<<"请输入要查询的学生名:
"。
cin>>temp1。
fr.open("D:
\\university.txt",ios:
:
in>。
if(!
fr>
{
cout<<"不能打开文件!
"<return。
}
//计算University_student记录的个数
fr.seekp(0,ios:
:
end>。
longNum=fr.tellp(>/sizeof(University_student>。
for(inti=0。
ii++>
{
fr.seekp(sizeof(University_student>*i>。
fr.read((char*>&s,sizeof(University_student>>。
s.getname(temp2>。
inttbb=strcmp(temp1,temp2>。
if(!
tbb>
{
if(j==1>{s.show(>。
return。
}
elseif(j==2>{s.average(>。
return。
}
else{cout<<"错误!
"<return。
}
}
}
cout<<"没有该学生!
"<fr.close(>。
}
//创建一个Postgraduate
Postgraduatenewpostgraduate(>
{
Postgraduatep。
p.set(>。
returnp。
}
//将Postgraduate对象写进D:
\\postgraduate.txt
voidwritePostgraduate(Postgraduate&p>
{
fstreamfo。
fo.open("D:
\\postgraduate.txt",ios:
:
out|ios:
:
app>。
if(!
fo>
{
cout<<"不能打开文件!
"<return。
}
fo.write((char*>&p,sizeof(Postgraduate>>。
fo.close(>。
}
//读取一个Postgraduate对象
voidreadPostgraduate(intj>/*j=1进入查询学生信息、j=2查询学生平均成绩*/
{
Postgraduates。
fstreamfr。
chartemp1[20],temp2[20]。
cout<<"请输入要查询的学生名:
"。
cin>>temp1。
fr.open("D:
\\postgraduate.txt",ios:
:
in>。
if(!
fr>
{
cout<<"不能打开文件!
"<return。
}
//计算Postgraduate记录的个数
fr.seekp(0,ios:
:
end>。
longNum=fr.tellp(>/sizeof(Postgraduate>。
for(inti=0。
ii++>
{
fr.seekp(sizeof(Postgraduate>*i>。
fr.read((char*>&s,sizeof(Postgraduate>>。
s.getname(temp2>。
inttbb=strcmp(temp1,temp2>。
if(!
tbb>
{
if(j==1>{s.show(>。
return。
}
elseif(j==2>{s.average(>。
return。
}
else{cout<<"错误!
"<return。
}
}
}
cout<<"没有该学生!
"<fr.close(>。
}
voidfunc1(inti,intt>。
//判断函数、判断是否继续输入
voidcheck_enter(inti>/*i的取值决定输入的学生的类型*/
{
charce。
cout<<"信息存储成功!
是否继续输入"。
cin>>ce。
if(ce=='y'>
{
switch(i>
{
case1:
writeMiddle(newmiddle(>>。
check_enter(i>。
break。
case2:
writeUniversity(newuniversity(>>。
check_enter(i>。
break。
case3:
writePostgraduate(newpostgraduate(>>。
check_enter(i>。
break。
default:
cout<<"错误!
"<break。
}
}elseif(ce=='n'>return。
elsecout<<"输入错误!
"<}
//判断函数、判断是否继续查询
voidcheck_find(inti>/*i的值决定查询的学生的类型*/
{
charcf。
cout<<"是否继续查询"<cin>>cf。
if(cf=='y'>
{
func1(i,1>。
}elseif(cf=='n'>return。
elsecout<<"输入错误!
"<}
//判断函数、判断是否继续查询
voidcheck_average(inti>/*i的值决定查询的学生的类型*/
{
charca。
cout<<"是否继续查询"<cin>>ca。
if(ca=='y'>
{
func1(i,2>。
}elseif(ca=='n'>return。
elsecout<<"输入错误!
"<}
//函数,t=1查询学生信息t=2查询平均成绩,i代表学生类型
voidfunc1(inti,intt>
{
if(t==1>
{
switch(i>
{
case1:
readMiddle(t>。
check_find(i>。
break。
case2:
readUniversity(t>。
check_find(i>。
break。
case3:
readPostgraduate(t>。
check_find(i>。
break。
case4:
break。
default:
cout<<"错误!
"<break。
}
}elseif(t==2>
{
switch(i>
{
case1:
readMiddle(t>。
check_average(i>。
break。
case2:
readUniversity(t>。
check_average(i>。
break。
case3:
readPostgraduate(t>。
check_average(i>。
break。
case4:
break。
default:
cout<<"错误!
"<break。
}
}
elsecout<<"错误!
"<}
//
voidfunc2(inti>
{
switch(i>
{
case1:
writeMiddle(newmiddle(>>。
check_enter(i>。
break。
case2:
writeUniversity(newuniversity(>>。
check_enter(i>。
break。
case3:
writePostgraduate(newpostgraduate(>>。
check_enter(i>。
break。
case4:
break。
default:
cout<<"输入错误"<break。
}
}
//
voidwindow(>
{
switch(menu(>>
{
case1:
func2(manage(>>。
window(>。
break。
case2:
func1(manage(>,1>。
window(>。
break。
case3:
func1(manage(>,2>。
window(>。
break。
case4:
cout<<"已退出!
"<break。
default:
cout<<"输入错误"<break。
}
}
intmain(>
{
window(>。
return0。
}