1、问题描述
学生信息包括:学号、姓名、性别、年龄、班级等信息。
小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。
中学生除了包括小学生所有信息外,还包括地理、历史成绩、家庭住址等信息。
大学生除了包括学生所有信息外,还包括专业、家庭地址、联系方式等信息。
2、功能要求
(1)添加功能:程序能够添加不同学生的记录,提供选择界面供用户选择所要添加的类别,要求学号要唯一,如果添加了重复学号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据学号、姓名等信息对已添加的学生记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有学生的记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意学号的唯一性。
(5)删除功能:主要实现对已添加的学生记录进行删除。如果当前系统中没有相应的记录,则提示“记录为空!”并返回操作。
(6)统计功能:能根据多种参数进行统计。能统计学生人数、按性别统计、按年龄统计等。
(7)保存功能:可将当前系统中各类记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
#include<iostream>
#include<string>
#include<string.h>
#include<fstream>
#include<iomanip>
using namespace std;
#define N 1000
#define M 2000
class student
{
public:
student(){}
~student(){}
void setnum(long long int nu) {num=nu;}
long long int getnum() {return num;}
void setname(char na[]) {strcpy(name,na);}
char * getname() {return name;}
void setsex(char se[]) {strcpy(sex,se);}
char * getsex() {return sex;}
void setage(int ag) {age=ag;}
int getage() {return age;}
void setgrade (char gra[] ){strcpy(grade,gra);}
char * getgrade(){return grade;}
void setb_del(int n){b_del=n;}
int getb_del(){return b_del;}
int b_del;
private:
long long int num;
char name[15];
char sex[5];
int age;
char grade[15];
};
void input(student &p)
{
char na[15];
char se[5];
int as;
char g[15];
cout<<"请输入姓名:" ;
cin>>na;
cout<<"请输入性别:" ;
cin>>se;
cout<<"请输入年龄:" ;
cin>>as;
cout<<"请输入班级:" ;
cin>>g;
p.setname(na);
p.setsex(se);
p.setage(as);
p.setgrade(g);
p.setb_del(1);
}
class xiao:public student
{
private:
int ying,shu,yu;
public:
xiao(){}
~xiao(){}
void set1(int a,int b,int c){ying=a;shu=b;yu=c;}
int getying() {return ying;}
int getshu() {return shu;}
int getyu() {return yu;}
};
class zhong:public xiao
{
private:
int di,li;
char home[15];
public:
zhong(){}
~zhong(){}
void set2(int a,int b){di=a;li=b;}
int getdi() {return di;}
int getli() {return li;}
void sethome(char hom[]) {strcpy(home,hom);}
char * gethome(){return home;}
};
class da:public student
{
private:
char home[15];
char major[15];
char pnum[12];
public:
da(){}
~da(){}
void sethome(char hom[]) {strcpy(home,hom);}
char * gethome(){return home;}
void setmajor(char maj[]) {strcpy(major,maj);}
char * getmajor(){return major;}
void setpnum(char p[]) {strcpy(pnum,p);}
char * getpnum(){return pnum;}
};
class studentmanager
{
public:
xiao a[50];
zhong b[50];
da c[50];
int x;
int top1,top2,top3;
public:
studentmanager()
{
xiao a1;
zhong b1;
da c1;
fstream file1("xiao.txt",ios::in);
fstream file2("zhong.txt",ios::in);
fstream file3("da.txt",ios::in);
top1=-1;
top2=-1;
top3=-1;
while(1)
{
file1.read((char*)&a1,sizeof(a1));
if(!file1) break;
top1++;
a[top1]=a1;
file2.read((char*)&b1,sizeof(b1));
if(!file2) break;
top2++;
b[top2]=b1;
file3.read((char*)&c1,sizeof(c1));
if(!file3) break;
top3++;
c[top3]=c1;
}
file1.close();
file2.close();
file3.close();
}
~studentmanager()
{
fstream file1("xiao.txt",ios::out);
for(int i=0;i<=top1;i++)
{
if(a[i].getb_del()==1)
file1.write((char *)&a[i],sizeof(a[i]));
}
file1.close();
fstream file2("zhong.txt",ios::out);
for(int i=0;i<=top2;i++)
{
if(b[i].getb_del()==1)
file2.write((char *)&b[i],sizeof(b[i]));
}
file2.close();
fstream file3("da.txt",ios::out);
for(int i=0;i<=top3;i++)
{
if(c[i].getb_del()==1)
file3.write((char *)&c[i],sizeof(c[i]));
}
file3.close();
}
void addstudent()
{
cout<<"********************"<<endl;
cout<<"请你选择添加类别"<<endl;
cout<<"1.小学生"<<endl;
cout<<"2.中学生"<<endl;
cout<<"3.大学生"<<endl;
cout<<"********************"<<endl;
int x;
cin>>x;
if(x==1)
{
xiao ak;
long long int n;
int yi;
int s;
int y;
bool f1=true;
cout<<"请输入学号:" ;
cin>>n;
for(int i=0;i<=top1;i++)
{
if(a[i].getnum()==n&&a[i].getb_del()==1)
{
f1=false;
cout<<"添加重复,取消添加 "<<endl;
break;
}
}
if(f1)
{
input(ak);
cout<<"请输入英语成绩:" ;
cin>>yi;
cout<<"请输入数学成绩:" ;
cin>>s;
cout<<"请输入语文成绩:" ;
cin>>y;
ak.setnum(n);
ak.set1(yi,s,y);
top1++;
a[top1]=ak;
}
}
if(x==2)
{
zhong bk;
long long int n1;
char na1[15];
char se1[5];
int a1;
char g1[15];
char ho[15];
int yi1;
int s1;
int y1;
int d;
int l;
bool f2=true;
cout<<"请输入学号:" ;
cin>>n1;
for(int i=0;i<=top2;i++)
{
if(b[i].getnum()==n1&&b[i].getb_del()==1)
{
f2=false;
cout<<"添加重复,取消添加 "<<endl;
break;
}
}
if(f2)
{
cout<<"请输入姓名:" ;
cin>>na1;
cout<<"请输入性别:" ;
cin>>se1;
cout<<"请输入年龄:" ;
cin>>a1;
cout<<"请输入班级:" ;
cin>>g1;
cout<<"请输入家庭住址:";
cin>>ho;
cout<<"请输入英语成绩:" ;
cin>>yi1;
cout<<"请输入数学成绩:" ;
cin>>s1;
cout<<"请输入语文成绩:" ;
cin>>y1;
cout<<"请输入地理成绩:" ;
cin>>d;
cout<<"请输入历史成绩:" ;
cin>>l;
bk.setnum(n1);
bk.setname(na1);
bk.setsex(se1);
bk.setage(a1);
bk.setgrade(g1);
bk.sethome(ho);
bk.set1(yi1,s1,y1);
bk.set2(d,l);
bk.setb_del(1);
top2++;
b[top2]=bk;
}
}
if(x==3)
{
da ck;
long long int n3;
char ho1[15];
char ma1[15];
char p1[12];
bool f3=true;
cout<<"请输入学号:" ;
cin>>n3;
for(int i=0;i<=top3;i++)
{
if(c[i].getnum()==n3&&c[i].getb_del()==1)
{
f3=false;
cout<<"添加重复,取消添加 "<<endl;
break;
}
}
if(f3)
{
input(ck);
cout<<"请输入家庭住址:";
cin>>ho1;
cout<<"请输入专业:";
cin>>ma1;
cout<<"请输入电话号码:";
cin>>p1;
ck.setnum(n3);
ck.sethome(ho1);
ck.setmajor(ma1);
ck.setpnum(p1);
top3++;
c[top3]=ck;
}
}
}
int findstudent()
{
cout<<"********************"<<endl;
cout<<" 查询方式 "<<endl;
cout<<" (1) 学号 "<<endl;
cout<<" (2) 姓名 "<<endl;
cout<<"********************"<<endl;
int x;
cout<<"请你选择查询方式:";
cin>>x;
if(x==1)
{
long long int pi;
bool flag=false;
cout<<"请你输入学号:";
cin>>pi;
for(int i=0;i<=top1;i++)
{
if((a[i].getnum()==pi)&&a[i].getb_del()==1)
{
flag=true;
cout<<"学号:"<<a[i].getnum()<<" 姓名:"<<a[i].getname()<<" 性别:"<<a[i].getsex()<<" 年龄:"<<a[i].getage()<<" 班级:"<<a[i].getgrade()<<endl;
cout<<"英语成绩:"<<a[i].getying()<<" 数学成绩:"<<a[i].getshu()<<" 语文成绩:"<<a[i].getyu()<<endl;
return i;
break;
}
}
for(int i=N;i<=N+top2;i++)
{
if((b[i-N].getnum()==pi)&&b[i-N].getb_del()==1)
{
flag=true;
cout<<"学号:"<<b[i-N].getnum()<<" 姓名:"<<b[i-N].getname()<<" 性别:"<<b[i-N].getsex()<<" 年龄:"<<b[i-N].getage()<<" 班级:"<<b[i-N].getgrade();
cout<<" 家庭住址:"<<b[i-N].gethome()<<endl<<"英语成绩:"<<b[i-N].getying()<<" 数学成绩:"<<b[i-N].getshu()<<" 语文成绩:"<<b[i-N].getyu();
cout<<" 地理成绩:"<<b[i-N].getdi()<<" 历史成绩:"<<b[i-N].getli()<<endl;
return i;
break;
}
}
for(int i=M;i<=M+top3;i++)
{
if((c[i-M].getnum()==pi)&&c[i-M].getb_del()==1)
{
flag=true;
cout<<"学号:"<<c[i-M].getnum()<<" 姓名:"<<c[i-M].getname()<<" 性别:"<<c[i-M].getsex()<<" 年龄:"<<c[i-M].getage()<<" 班级:"<<c[i-M].getgrade()<<endl;
cout<<"家庭住址:"<<c[i-M].gethome()<<" 专业:"<<c[i-M].getmajor()<<" 电话号码:"<<c[i-M].getpnum()<<endl;
return i;
break;
}
}
if(!flag)
{
cout<<"查无此人"<<endl;
}
return -1;
}
else if(x==2)
{
char p1[15];
bool fla=false;
cout<<"请你输入姓名:";
cin>>p1;
for(int i=0;i<=top1;i++)
{
if((strcmp(a[i].getname(),p1)==0)&&a[i].getb_del()==1)
{
fla=true;
cout<<"学号:"<<a[i].getnum()<<" 姓名:"<<a[i].getname()<<" 性别:"<<a[i].getsex()<<" 年龄:"<<a[i].getage()<<" 班级:"<<a[i].getgrade()<<endl;
cout<<"英语成绩:"<<a[i].getying()<<" 数学成绩:"<<a[i].getshu()<<" 语文成绩:"<<a[i].getyu()<<endl;
return i;
break;
}
}
for(int i=N;i<=N+top2;i++)
{
if((strcmp(b[i-N].getname(),p1)==0)&&b[i-N].getb_del()==1)
{
fla=true;
cout<<"学号:"<<b[i-N].getnum()<<" 姓名:"<<b[i-N].getname()<<" 性别:"<<b[i-N].getsex()<<" 年龄:"<<b[i-N].getage()<<" 班级:"<<b[i-N].getgrade();
cout<<" 家庭住址:"<<b[i-N].gethome()<<endl<<"英语成绩:"<<b[i-N].getying()<<" 数学成绩:"<<b[i-N].getshu()<<" 语文成绩:"<<b[i-N].getyu();
cout<<" 地理成绩:"<<b[i-N].getdi()<<" 历史成绩:"<<b[i-N].getli()<<endl;
return i;
break;
}
}
for(int i=M;i<=M+top3;i++)
{
if((strcmp(c[i-M].getname(),p1)==0)&&c[i-M].getb_del()==1)
{
fla=true;
cout<<"学号:"<<c[i-M].getnum()<<" 姓名:"<<c[i-M].getname()<<" 性别:"<<c[i-M].getsex()<<" 年龄:"<<c[i-M].getage()<<" 班级:"<<c[i-M].getgrade()<<endl;
cout<<"家庭住址:"<<c[i-M].gethome()<<" 专业:"<<c[i-M].getmajor()<<" 电话号码:"<<c[i-M].getpnum()<<endl;
return i;
break;
}
}
if(!fla)
{
cout<<"查无此人"<<endl;
}
return -1;
}
else{
cout<<"输入错误!" ;
return -1;
}
}
void showstudent()
{
cout<<"**********************"<<endl;
cout<<" 显示人员 "<<endl;
cout<<" (1) 小学生 "<<endl;
cout<<" (2) 中学生 "<<endl;
cout<<" (3) 大学生 "<<endl;
cout<<"***********************"<<endl;
int x;
cin>>x;
if(x==1)
{
cout<<"学号"<<" 姓名"<<" 性别"<<" 年龄"<<" 班级"<<" 英语成绩"<<" 数学成绩"<<" 语文成绩"<<endl;
for(int i=0;i<=top1;i++)
{
if(a[i].getb_del()==1)
{
cout<<a[i].getnum()<<setw(8)<<a[i].getname()<<setw(5)<<a[i].getsex()<<setw(5)<<a[i].getage()<<setw(5)<<a[i].getgrade();
cout<<setw(10)<<a[i].getying()<<setw(10)<<a[i].getshu()<<setw(10)<<a[i].getyu()<<endl;
}
}
}
else if(x==2)
{
cout<<"学号"<<" 姓名"<<" 性别"<<" 年龄"<<" 班级"<<" 家庭住址"<<" 英语成绩"<<" 数学成绩"<<" 语文成绩"<<" 地理成绩"<<" 历史成绩"<<endl;
for(int i=0;i<=top2;i++)
{
if(b[i].getb_del()==1)
{
cout<<b[i].getnum()<<setw(8)<<b[i].getname()<<setw(5)<<b[i].getsex()<<setw(5)<<b[i].getage()<<setw(6)<<b[i].getgrade();
cout<<setw(8)<<b[i].gethome()<<setw(10)<<b[i].getying()<<setw(10)<<b[i].getshu()<<setw(10)<<b[i].getyu();
cout<<setw(10)<<b[i].getdi()<<setw(9)<<b[i].getli()<<endl;
}
}
}
else if(x==3)
{
cout<<"学号"<<" 姓名"<<" 性别"<<" 年龄"<<" 班级"<<" 家庭住址"<<" 专业"<<" 电话号码"<<endl;
for(int i=0;i<=top3;i++)
{
if(c[i].getb_del()==1)
{
cout<<c[i].getnum()<<setw(8)<<c[i].getname()<<setw(5)<<c[i].getsex()<<setw(5)<<c[i].getage()<<setw(5)<<c[i].getgrade();
cout<<setw(10)<<c[i].gethome()<<setw(8)<<c[i].getmajor()<<setw(14)<<c[i].getpnum()<<endl;
}
}
}
else{cout<<"输入错误!"<<endl;}
}
void editstudent()
{
int x;
x=findstudent();
if(x==-1)
return ;
cout<<"请输入编辑信息"<<endl;
if(x>=0&&x<=top1)
{
char na[15];
char se[5];
int ap;
char g[15];
int yi;
int s;
int y;
cout<<"请输入英语成绩:" ;
cin>>yi;
cout<<"请输入数学成绩:" ;
cin>>s;
cout<<"请输入语文成绩:" ;
cin>>y;
a[x].setname(na);
a[x].setsex(se);
a[x].setage(ap);
a[x].setgrade(g);
a[x].set1(yi,s,y);
a[x].setb_del(1);
}
if(x>=N&&x<=N+top2)
{
char na1[15];
char se1[5];
int a1;
char g1[15];
char ho[15];
int yi1;
int s1;
int y1;
int d;
int l;
cout<<"请输入姓名:" ;
cin>>na1;
cout<<"请输入性别:" ;
cin>>se1;
cout<<"请输入年龄:" ;
cin>>a1;
cout<<"请输入班级:" ;
cin>>g1;
cout<<"请输入家庭住址:";
cin>>ho;
cout<<"请输入英语成绩:" ;
cin>>yi1;
cout<<"请输入数学成绩:" ;
cin>>s1;
cout<<"请输入语文成绩:" ;
cin>>y1;
cout<<"请输入地理成绩:" ;
cin>>d;
cout<<"请输入历史成绩:" ;
cin>>l;
b[x-N].setname(na1);
b[x-N].setsex(se1);
b[x-N].setage(a1);
b[x-N].setgrade(g1);
b[x-N].sethome(ho);
b[x-N].set1(yi1,s1,y1);
b[x-N].set2(d,l);
b[x-N].setb_del(1);
}
if(x>=M&&x<=M+top3)
{
char na3[15];
char se3[5];
int a3;
char g3[15];
char ho1[15];
char ma1[15];
char p1[12];
cout<<"请输入姓名:" ;
cin>>na3;
cout<<"请输入性别:" ;
cin>>se3;
cout<<"请输入年龄:" ;
cin>>a3;
cout<<"请输入班级:" ;
cin>>g3;
cout<<"请输入家庭住址:";
cin>>ho1;
cout<<"请输入专业:";
cin>>ma1;
cout<<"请输入电话号码:";
cin>>p1;
c[x-M].setname(na3);
c[x-M].setsex(se3);
c[x-M].setage(a3);
c[x-M].setgrade(g3);
c[x-M].sethome(ho1);
c[x-M].setmajor(ma1);
c[x-M].setpnum(p1);
c[x-M].setb_del(1);
}
}
void delstudent()
{
long long int n;
bool f=false;
cout<<"请你输入所要删除学生学号:";
cin>>n;
for(int i=0;i<=top1;i++)
{
if((a[i].getnum()==n)&&a[i].getb_del()==1)
{
a[i].setb_del(2);
f=true;
break;
}
}
for(int i=0;i<=top2;i++)
{
if((b[i].getnum()==n)&&b[i].getb_del()==1)
{
b[i].setb_del(2);
f=true;
break;
}
}
for(int i=0;i<=top3;i++)
{
if((c[i].getnum()==n)&&c[i].getb_del()==1)
{
c[i].setb_del(2);
f=true;
break;
}
}
if(!f)
cout<<"记录为空!"<<endl;
}
void sortstudent()
{
cout<<"********************"<<endl;
cout<<" 统计方式 "<<endl;
cout<<" (1) 性别 "<<endl;
cout<<" (2) 年龄 "<<endl;
cout<<"********************"<<endl;
int x;
cout<<"请你选择统计方式:";
cin>>x;
if(x==1)
{
int s1=0,s2=0;
for(int i=0;i<=top1;i++)
{
if(strcmp(a[i].getsex(),"nan")==0&&a[i].getb_del()==1)
s1++;
if(strcmp(a[i].getsex(),"nan")!=0&&a[i].getb_del()==1)
s2++;
}
for(int i=0;i<=top2;i++)
{
if(strcmp(b[i].getsex(),"nan")==0&&b[i].getb_del()==1)
s1++;
if(strcmp(b[i].getsex(),"nan")!=0&&b[i].getb_del()==1)
s2++;
}
for(int i=0;i<=top3;i++)
{
if(strcmp(c[i].getsex(),"nan")==0&&c[i].getb_del()==1)
s1++;
if(strcmp(c[i].getsex(),"nan")!=0&&c[i].getb_del()==1)
s2++;
}
cout<<"男生人数:"<<s1<<endl;
cout<<"女生人数:"<<s2<<endl;
}
else if(x==2)
{
int p;
cout<<"请你输入所要统计年龄:";
cin>>p;
int s1=0,s2=0;
for(int i=0;i<=top1;i++)
{
if(a[i].getage()>=p&&a[i].getb_del()==1)
s1++;
if(a[i].getage()<p&&a[i].getb_del()==1)
s2++;
}
for(int i=0;i<=top2;i++)
{
if(b[i].getage()>=p&&b[i].getb_del()==1)
s1++;
if(b[i].getage()<p&&b[i].getb_del()==1)
s2++;
}
for(int i=0;i<=top3;i++)
{
if(c[i].getage()>=p&&c[i].getb_del()==1)
s1++;
if(c[i].getage()<p&&c[i].getb_del()==1)
s2++;
}
cout<<"大于及等于"<<p<<"岁人数:"<<s1<<endl;
cout<<"小于"<<p<<"岁人数:"<<s2<<endl;
}
else
cout<<"输入错误!"<<endl;
}
};
#include<iostream>
#include"Mytype.h"
#include<Cstdlib>
using namespace std;
void huanying()
{
cout<<" ***************************************"<<endl;
cout<<" *** 欢迎进入学生信息管理系统 ***"<<endl;
cout<<" ***************************************"<<endl;
}
void jiemian()
{
cout<<endl;
cout<<"|----------------------------------|"<<endl;
cout<<" (1)添加信息 "<<endl;
cout<<" (2)查询信息 "<<endl;
cout<<" (3)显示信息 "<<endl;
cout<<" (4)编辑信息 "<<endl;
cout<<" (5)删除信息 "<<endl;
cout<<" (6)统计信息 "<<endl;
cout<<" (7)退出 "<<endl;
cout<<"|-----------------------------------|"<<endl;
cout<<endl;
}
int main()
{
char in;
int x=1;
studentmanager rm;
huanying();
char s[6];
cout<<" Password: ";
cin>>s;
if(strcmp(s,"201708")!=0)
cout<<"密码错误!请你退出系统,重新登录。";
else
{
system("cls");
huanying();
do
{
if(x%3==0)
system("cls");
jiemian();
x++;
cin>>in;
switch (in)
{
case '1':
rm.addstudent();
break;
case '2':
rm.findstudent();
break;
case '3':
rm.showstudent();
break;
case '4':
rm.editstudent();
break;
case '5':
rm.delstudent();
break;
case '6':
rm.sortstudent();
break;
case '7':
break;
default:cout<<"输入错误,请重新输入。"<<endl;
}
}while(in!='7');
}
return 0;
}