#ifdef WIN32
#pragma warning (disable: 4514 4786)
#endif
#ifndef _TIMETABLE
#define _TIMETABLE
#ifndef _INTERFACE
#define _INTERFACE
#include<iostream>
#include<fstream>
#include<string>
#include<set>
#include<iomanip>
using namespace std;
class Timetable
{
protected:
string checi;/*车次*/
string shifadi;/*始发地*/
string mudidi;/*目的地*/
string shijianbiao; /*时间表*/
string price;/*价格*/
int yupiaoshu;/*余票数*/
string bianhao;
public:
Timetable(string cc,string sfd,string mdd,string sjb,string p,int yps,string bianhao);/*构造函数*/
string GetCheci();/*返回车次*/
string GetShifadi();/*返回始发地*/
string GetMudidi();/*返回目的地*/
string GetShijianbiao();/*返回时间表*/
string GetPrice();/*返回价格*/
int GetYupiaoshu();/*返回余票数*/
string GetBianhao();/*返回编号*/
bool operator<(Timetable tb)const;/*重载<运算,set容器要求元素之间满足该关系*/
};
#endif
Timetable::Timetable(string cc,string sfd,string mdd,string sjb,string p,int yps,string bianha)//构造函数实现
{
checi=cc;
shifadi=sfd;
mudidi=mdd;
shijianbiao=sjb;
price=p;
yupiaoshu=yps;
bianhao=bianha;
}
string Timetable::GetCheci()
{
return checi;
}
string Timetable::GetShifadi()
{
return shifadi;
}
string Timetable::GetMudidi()
{
return mudidi;
}
string Timetable::GetShijianbiao()
{
return shijianbiao;
}
string Timetable::GetPrice()
{
return price;
}
int Timetable::GetYupiaoshu()
{
return yupiaoshu;
}
string Timetable::GetBianhao()
{
return bianhao;
}
bool Timetable::operator<(Timetable tb)const/*重载<运算,set容器要求元素之间满足该关系*/
{
if(checi<tb.checi)
return true;
else
return false;
}
class Interface//管理员界面类
{
protected:
set<Timetable>tt;/*数据集*/
public:
Interface()
{ReadFile();}
void Display();/*输出界面信息*/
void Run();/*运行界面主体功能*/
void Insert();/*插入数据*/
void Delete();/*删除数据*/
void Change();/*修改数据*/
void Search();/*查询数据*/
void Output();/*输出所有数据*/
void ReadFile();/*从文件中读取数据*/
void Save();/*将数据保存到文件*/
void PrintOne(set<Timetable>::iterator t);
};/*输出单条数据*/
#endif
void Interface::Display()//输出界面信息实现
{
cout<<endl;
cout<<"▂▃▅▆██▆▅▃▂"<<endl;
cout<<"┌一一一一一一一一┐"<<endl;
cout<<"︱ 管理员系统 ︱"<<endl;
cout<<"︱ 0.退 出 ︱"<<endl;
cout<<"︱ 1.插入时刻表 ︱"<<endl;
cout<<"︱ 2.删除时刻表 ︱"<<endl;
cout<<"︱ 3.修改时刻表 ︱"<<endl;
cout<<"︱ 4.查询时刻表 ︱"<<endl;
cout<<"︱ 5.显示时刻表 ︱"<<endl;
cout<<"└一一一一一一一一┘"<<endl;
}
void Interface::Run()/*运行界面主体功能*/
{
int choice;
do
{
Display();
cout<<"请选择需要的功能:";
cin>>choice;
switch(choice)
{
case 0:
break;
case 1:
Insert();
break;
case 2:
Delete();
break;
case 3:
Change();
break;
case 4:
Search();
break;
case 5:
Output();
break;
}
}while(choice);
Save();
}
void Interface::Save()/*将数据保存到文件*/
{
ofstream out("d:\\火车时刻表.txt");
if(!out)
{
cout<<"Cannot open the file\n";
return;
}
set<Timetable>::iterator t=tt.begin();
while(t!=tt.end())
{
out<<t->GetCheci()<<' '<<t->GetShifadi()<<' '<<t->GetMudidi()<<' '<<t->GetShijianbiao()<<' '<<t->GetPrice()<<' '<<t->GetYupiaoshu()<<' '<<t->GetBianhao()<<' ';
t++;
}
out.close();
return;
}
void Interface::Insert()/*插入数据*/
{
string checi;
string shifadi;
string mudidi;
string shijianbiao;
string price;
int yupiaoshu;
string bianhao;
char ch;
Output();
do
{
cout<<"是否选择插入?(Y/N)"<<endl;
cin>>ch;
if(ch=='y'||ch=='Y')
{
system("cls");
cout<<"请输入以下信息:";
cout<<"车次:";
cin>>checi;
cout<<"始发地:";
cin>>shifadi;
cout<<"目的地:";
cin>>mudidi;
cout<<"时间表:";
cin>>shijianbiao;
cout<<"价格:";
cin>>price;
cout<<"余票数:";
cin>>yupiaoshu;
cout<<"编号:";
cin>>bianhao;
Timetable tb(checi,shifadi,mudidi,shijianbiao,price,yupiaoshu,bianhao);
tt.insert(tb);
cout<<"\n";
system("cls");
cout<<"是否继续插入:(Y/N)"<<endl;
cin>>ch;
}
}while(ch=='y'||ch=='Y');
}
void Interface::Delete()/*删除数据*/
{
string checi;
char ch;
Output();
cout<<"是否选择删除?(Y/N)"<<endl;
cin>>ch;
if(ch=='Y'||ch=='y')
{
system("cls");
Output();
cout<<"请输入要删除的车次:"<<endl;
cin>>checi;
set<Timetable>::iterator t=tt.begin();
while(t!=tt.end())
{
if(t->GetCheci()==checi)
{
tt.erase(t++);
cout<<"删除成功:"<<endl;
}
else
t++;
}
}
return;
}
void Interface::Change()/*修改数据*/
{
string checi;
string shifadi;
string mudidi;
string shijianbiao;
string price;
int yupiaoshu;
string bianhao;
char ch;
int choice;
Output();
cout<<"是否选择修改?(Y/N)"<<endl;
cin>>ch;
if(ch=='Y'||ch=='y')
{
system("cls");
Output();
cout<<"请输入要修改的车次:"<<endl;
cin>>checi;
set<Timetable>::iterator t=tt.begin();
while(t!=tt.end())
{
if(t->GetCheci()==checi)
{
cout<<"***0.退 出***"<<endl;
cout<<"***1.时间表***"<<endl;
cout<<"***2.价 格***"<<endl;
cout<<"***3.余票数***"<<endl;
cout<<"请选择需要修改的选项:"<<endl;
cin>>choice;
system("cls");
switch(choice)
{
case 0:break;
case 1:{
cout<<"请输入修改时间:";
cin>>shijianbiao;
Timetable tb(t->GetCheci(),t->GetShifadi(),t->GetMudidi(),shijianbiao,t->GetPrice(),t->GetYupiaoshu(),t->GetBianhao());
tt.erase(t++);
tt.insert(tb);
}
break;
case 2:{
cout<<"请输入修改价格:";
cin>>price;
Timetable tb(t->GetCheci(),t->GetShifadi(),t->GetMudidi(),t->GetShijianbiao(),price,t->GetYupiaoshu(),t->GetBianhao());
tt.erase(t++);
tt.insert(tb);}
break;
case 3:{
cout<<"请输入修改余票数:";
cin>>yupiaoshu;
Timetable tb(t->GetCheci(),t->GetShifadi(),t->GetMudidi(),t->GetShijianbiao(),t->GetPrice(),yupiaoshu,t->GetBianhao());
tt.erase(t++);
tt.insert(tb);}
break;
}
}
t++;
}
}
return;
}
void Interface::Search()/*查询数据*/
{
string checi;
char ch;
cout<<"是否选择查询?(Y/N)"<<endl;
cin>>ch;
if(ch=='Y'||ch=='y')
{
system("cls");
cout<<"请输入要查询的车次:"<<endl;
cin>>checi;
set<Timetable>::iterator t=tt.begin();
while(t!=tt.end())
{
if(t->GetCheci()==checi)
break;
t++;
}
if(t==tt.end())
cout<<"没有此车次的信息!\n";
else
{
cout<<"车次\t始发地\t目的地\t时间表 \t价格 \t余票数\t编号\n";
PrintOne(t);
}
}
}
void Interface::PrintOne(set<Timetable>::iterator t)/*输出单条数据*/
{
cout<<t->GetCheci()<<'\t'<<t->GetShifadi()<<'\t'<<t->GetMudidi()<<'\t'<<t->GetShijianbiao()<<'\t'<<t->GetPrice()<<'\t'<<t->GetYupiaoshu()<<'\t'<<t->GetBianhao()<<'\n';
}
void Interface::Output()/*输出所有数据*/
{
system("cls");
cout<<"车次\t始发地\t目的地\t时间表 \t价格 \t余票数\t编号\n";
set<Timetable>::iterator t=tt.begin();
while(t!=tt.end())
{
PrintOne(t);
t++;
}
}
void Interface::ReadFile()/*从文件中读取数据*/
{
ifstream in("d:\\火车时刻表.txt");
if(!in)
{
cout<<"Cannot open the file\n";
return;
}
string checi;
string shifadi;
string mudidi;
string shijianbiao;
string price;
int yupiaoshu;
string bianhao;
set<Timetable>::iterator t=tt.begin();
in>>checi>>shifadi>>mudidi>>shijianbiao>>price>>yupiaoshu>>bianhao;
while(!in.eof())
{
Timetable tb(checi,shifadi,mudidi,shijianbiao,price,yupiaoshu,bianhao);
tt.insert(tb);
in>>checi>>shifadi>>mudidi>>shijianbiao>>price>>yupiaoshu>>bianhao;
}
in.close();
return;
}
class Person//乘客信息累
{
protected:
string name;//姓名
string shenfenzheng;//身份证
int num;//数量
string b