?? 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 + -