📄 abc.cpp
字号:
#include <list>
#include <iostream>
#include <fstream>
using namespace std ;
#include "student.h"
#include "graduated.h"
#include "doctor.h"
typedef list<Doctor> LISTDOCTOR;
typedef list<Graduated> LISTGRADUATED;
typedef list<Student> LISTSTUDENT;
LISTDOCTOR dlist;
LISTGRADUATED glist;
LISTSTUDENT slist;
void DisplayMenu();
int Load();
void look();
void ReSearch();
void Add();
void Edit();
void Delete();
void Save();
void main(void)
{
char ch;
DisplayMenu();
if (Load()!=0)
return;
cout<<"#";
cin>>ch;
while (ch!='q')
{
switch (ch)
{
case 'h':DisplayMenu();
break;
case 'l':look();
break;
case 'a':Add();
break;
case 'e':Edit();
break;
case 'd':Delete();
break;
case 'r':ReSearch();
break;
case 's':Save();
break;
default:break;
}
cout<<endl<<"#";
cin>>ch;
}
}
//显示菜单
void DisplayMenu()
{
cout<<"#系统主菜单:"<<endl;
cout<<" h帮助"<<endl
<<" l显示"<<endl
<<" a增加"<<endl
<<" e编辑"<<endl
<<" d删除"<<endl
<<" r查找"<<endl
<<" s保存"<<endl
<<" q退出"<<endl;
}
//读取文件
int Load()
{
//打开文件
ifstream infile("学生信息.txt");
if (infile.fail())
{
cout<<"学生信息文件打开错误!"<<endl;
return -1;
}
//读列信息数据
char info[1023];
infile.getline(info,sizeof(info));
while(!infile.eof())
{
infile>>info;
//博士生
if (strcmp(info,"D")==0)
{
//存储数据
Doctor dstu;
infile>>info;
strcpy(dstu.name,info);
infile>>info;
strcpy(dstu.ID,info);
infile>>info;
dstu.age = atoi(info);
infile>>info;
strcpy(dstu.depart,info);
infile>>info;
strcpy(dstu.lab,info);
infile>>info;
dstu.paper = atoi(info);
dlist.insert(dlist.end(),dstu);
}
//硕士生
if (strcmp(info,"M")==0)
{
//存储数据
Graduated gstu;
infile>>info;
strcpy(gstu.name,info);
infile>>info;
strcpy(gstu.ID,info);
infile>>info;
gstu.age = atoi(info);
infile>>info;
strcpy(gstu.depart,info);
infile>>info;
strcpy(gstu.lab,info);
glist.insert(glist.end(),gstu);
}
//本科生
if (strcmp(info,"B")==0)
{
//存储数据
Student sstu;
infile>>info;
strcpy(sstu.name,info);
infile>>info;
strcpy(sstu.ID,info);
infile>>info;
sstu.age = atoi(info);
infile>>info;
strcpy(sstu.depart,info);
slist.insert(slist.end(),sstu);
}
}
infile.close();
return 0;
}
//显示数据
void look()
{
LISTDOCTOR::iterator i;
LISTGRADUATED::iterator j;
LISTSTUDENT::iterator k;
Doctor dstu;
Graduated gstu;
Student sstu;
//显示博士生
cout<<"博士生:"<<dlist.size()<<endl;
for (i = dlist.begin(); i != dlist.end(); ++i)
{
dstu=*i;
dstu.display();
}
//显示硕士生
cout<<"硕士生:"<<glist.size()<<endl;
for (j = glist.begin(); j != glist.end(); ++j)
{
gstu=*j;
gstu.display();
}
//显示本科生
cout<<"本科生:"<<slist.size()<<endl;
for (k = slist.begin(); k != slist.end(); ++k)
{
sstu=*k;
sstu.display();
}
}
//添加数据
void Add()
{
char ch;
char info[256];
cout<<"输入学生类别,D博士 M硕士 B本科:";
cin>>ch;
Doctor dstu;
Graduated gstu;
Student sstu;
switch(ch)
{
case 'D':
cout<<"输入学生姓名:";
cin>>info;
strcpy(dstu.name,info);
cout<<"输入学生学号:";
cin>>info;
strcpy(dstu.ID,info);
cout<<"输入学生年龄:";
cin>>info;
dstu.age = atoi(info);
cout<<"输入学生系别:";
cin>>info;
strcpy(dstu.depart,info);
cout<<"输入学生实验室:";
cin>>info;
strcpy(dstu.lab,info);
cout<<"输入学生发表文章数:";
cin>>info;
dstu.paper = atoi(info);
dlist.insert(dlist.end(),dstu);
break;
case 'M':
cout<<"输入学生姓名:";
cin>>info;
strcpy(gstu.name,info);
cout<<"输入学生学号:";
cin>>info;
strcpy(gstu.ID,info);
cout<<"输入学生年龄:";
cin>>info;
gstu.age = atoi(info);
cout<<"输入学生系别:";
cin>>info;
strcpy(gstu.depart,info);
cout<<"输入学生实验室:";
cin>>info;
strcpy(gstu.lab,info);
glist.insert(glist.end(),gstu);
break;
case 'B':
cout<<"输入学生姓名:";
cin>>info;
strcpy(sstu.name,info);
cout<<"输入学生学号:";
cin>>info;
strcpy(sstu.ID,info);
cout<<"输入学生年龄:";
cin>>info;
sstu.age = atoi(info);
cout<<"输入学生系别:";
cin>>info;
strcpy(sstu.depart,info);
slist.insert(slist.end(),sstu);
break;
default:
cout<<"输入学生类别错误!"<<endl;
}
cout<<"输入结束!"<<endl;
}
//编辑数据
void Edit()
{
LISTDOCTOR::iterator i;
LISTGRADUATED::iterator j;
LISTSTUDENT::iterator k;
Doctor dstu;
Graduated gstu;
Student sstu;
char info[256];
char ch;
cout<<"要编辑的学生姓名或学号:";
cin>>info;
for (i = dlist.begin(); i != dlist.end(); ++i)
{
dstu=*i;
if ((strcmp(dstu.name,info)==0) ||(strcmp(dstu.ID,info)==0))
{
dlist.erase(i);
dstu.display();
cout<<"选择要编辑的字段:0退出1姓名2学号3年龄4系别5实验室6文章"<<endl;
cin>>ch;
while (ch!='0')
{
switch(ch)
{
case '1':cout<<"输入学生姓名:";
cin>>info;
strcpy(dstu.name,info);
break;
case '2':cout<<"输入学生学号:";
cin>>info;
strcpy(dstu.ID,info);
break;
case '3':cout<<"输入学生年龄:";
cin>>info;
dstu.age = atoi(info);
break;
case '4':cout<<"输入学生系别:";
cin>>info;
strcpy(dstu.depart,info);
break;
case '5':cout<<"输入学生实验室:";
cin>>info;
strcpy(dstu.lab,info);
break;
case '6':cout<<"输入学生发表文章数:";
cin>>info;
dstu.paper = atoi(info);
break;
default:break;
}
cout<<"选择要编辑的字段:0退出1姓名2学号3年龄4系别5实验室6文章"<<endl;
cin>>ch;
}
dlist.insert(dlist.end(),dstu);
return;
}
}
for (j = glist.begin(); j != glist.end(); ++j)
{
gstu=*j;
if ((strcmp(gstu.name,info)==0) ||(strcmp(gstu.ID,info)==0))
{
gstu.display();
glist.erase(j);
cout<<"选择要编辑的字段:0退出1姓名2学号3年龄4系别5实验室"<<endl;
cin>>ch;
while (ch!='0')
{
switch(ch)
{
case '1':cout<<"输入学生姓名:";
cin>>info;
strcpy(gstu.name,info);
break;
case '2':cout<<"输入学生学号:";
cin>>info;
strcpy(gstu.ID,info);
break;
case '3':cout<<"输入学生年龄:";
cin>>info;
gstu.age = atoi(info);
break;
case '4':cout<<"输入学生系别:";
cin>>info;
strcpy(gstu.depart,info);
break;
case '5':cout<<"输入学生实验室:";
cin>>info;
strcpy(gstu.lab,info);
break;
default:break;
}
cout<<"选择要编辑的字段:0放弃1姓名2学号3年龄4系别5实验室"<<endl;
cin>>ch;
}
glist.insert(glist.end(),gstu);
return;
}
}
for (k = slist.begin(); k != slist.end(); ++k)
{
sstu=*k;
if ((strcmp(sstu.name,info)==0) ||(strcmp(sstu.ID,info)==0))
{
sstu.display();
slist.erase(k);
cout<<"选择要编辑的字段:0放弃1姓名2学号3年龄4系别"<<endl;
cin>>ch;
while (ch!='0')
{
switch(ch)
{
case '1':cout<<"输入学生姓名:";
cin>>info;
strcpy(sstu.name,info);
break;
case '2':cout<<"输入学生学号:";
cin>>info;
strcpy(sstu.ID,info);
break;
case '3':cout<<"输入学生年龄:";
cin>>info;
sstu.age = atoi(info);
break;
case '4':cout<<"输入学生系别:";
cin>>info;
strcpy(sstu.depart,info);
break;
default:break;
}
cout<<"选择要编辑的字段:0放弃1姓名2学号3年龄4系别"<<endl;
cin>>ch;
}
slist.insert(slist.end(),sstu);
return;
}
}
cout<<"指定的学生已删除!"<<endl;
}
//删除数据
void Delete()
{
LISTDOCTOR::iterator i;
LISTGRADUATED::iterator j;
LISTSTUDENT::iterator k;
Doctor dstu;
Graduated gstu;
Student sstu;
char info[256];
cout<<"要删除的学生姓名或学号:";
cin>>info;
for (i = dlist.begin(); i != dlist.end(); ++i)
{
dstu=*i;
if ((strcmp(dstu.name,info)==0) ||(strcmp(dstu.ID,info)==0))
{
dstu.display();
dlist.erase(i);
return;
}
}
for (j = glist.begin(); j != glist.end(); ++j)
{
gstu=*j;
if ((strcmp(gstu.name,info)==0) ||(strcmp(gstu.ID,info)==0))
{
gstu.display();
glist.erase(j);
return;
}
}
for (k = slist.begin(); k != slist.end(); ++k)
{
sstu=*k;
if ((strcmp(sstu.name,info)==0) ||(strcmp(sstu.ID,info)==0))
{
sstu.display();
slist.erase(k);
return;
}
}
cout<<"指定的学生已删除!"<<endl;
}
//查询数据
void ReSearch()
{
LISTDOCTOR::iterator i;
LISTGRADUATED::iterator j;
LISTSTUDENT::iterator k;
Doctor dstu;
Graduated gstu;
Student sstu;
char info[256];
cout<<"要查询的学生姓名或学号:";
cin>>info;
for (i = dlist.begin(); i != dlist.end(); ++i)
{
dstu=*i;
if ((strcmp(dstu.name,info)==0) ||(strcmp(dstu.ID,info)==0))
{
dstu.display();
return;
}
}
for (j = glist.begin(); j != glist.end(); ++j)
{
gstu=*j;
if ((strcmp(gstu.name,info)==0) ||(strcmp(gstu.ID,info)==0))
{
gstu.display();
return;
}
}
for (k = slist.begin(); k != slist.end(); ++k)
{
sstu=*k;
if ((strcmp(sstu.name,info)==0) ||(strcmp(sstu.ID,info)==0))
{
sstu.display();
return;
}
}
}
//保存数据
void Save()
{
LISTDOCTOR::iterator i;
LISTGRADUATED::iterator j;
LISTSTUDENT::iterator k;
Doctor dstu;
Graduated gstu;
Student sstu;
//打开文件
ofstream outfile("学生信息.txt");
if (outfile.fail())
{
cout<<"学生信息文件保存错误!"<<endl;
return ;
}
outfile<<"类别"<<"\t"<<"姓名"<<"\t"
<<"学号"<<"\t"<<"年龄"<<"\t"
<<"系别"<<"\t"<<"实验室"<<"\t"
<<"文章"<<endl;
//写入博士数据
for (i = dlist.begin(); i != dlist.end(); ++i)
{
dstu=*i;
outfile<<'D'<<"\t"
<<dstu.name<<"\t"
<<dstu.ID<<"\t"
<<dstu.age<<"\t"
<<dstu.depart<<"\t"
<<dstu.lab<<"\t"
<<dstu.paper<<endl;
}
//写入硕士数据
for (j = glist.begin(); j != glist.end(); ++j)
{
gstu=*j;
outfile<<'M'<<"\t"
<<gstu.name<<"\t"
<<gstu.ID<<"\t"
<<gstu.age<<"\t"
<<gstu.depart<<"\t"
<<gstu.lab<<endl;
}
//写入本科生数据
for (k = slist.begin(); k != slist.end(); ++k)
{
sstu=*k;
outfile<<'B'<<"\t"
<<sstu.name<<"\t"
<<sstu.ID<<"\t"
<<sstu.age<<"\t"
<<sstu.depart<<endl;
}
outfile.close();
cout<<"学生信息文件已保存!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -