#include <iostream>
#include <string>
#include<iomanip>
#include <fstream>
using namespace std;
#define N 20
class Bus
{
public:
Bus();
Bus(int nu, string na, string ty, string st, string te);
~Bus() { }
int number; //编号
string name; //名称(即路线)
string type; //车型
string start; //起点站
string terminal;//终点站
};
Bus::Bus()
{
number = 0;
name = '0';
type = '0';
start = '0';
terminal = '0';
}
Bus::Bus(int nu, string na, string ty, string st, string te)
{
number = nu;
name = na;
type = ty;
start = st;
terminal=te;
}
class Busline
{
public:
int size;
Bus* bus[N];
Bus* bus1;
void busline();
~Busline() { cout << "destrtctor" << endl; }
void welcome();
void Keyboard_entry();
void AddBus();
bool AddBus1(int number, string name, string type, string start, string terminal);
void DeleteBus();
bool DeleteBus1(int number);
void Find();
void Alter();
bool FindBusNum1(int number);
bool FindBusNam1(char* name1);
bool FindBusStart1(char* start1);
bool FindBusterminal1(char* terminal1);
void showall();
void show();
void Check_station();
void Save_file();
void File_input(); //从文件读取
};
void Busline::busline()
{
size = 0;
for (int i = 0; i < N; i++)
{
bus+ = NULL;
}
}
void Busline::welcome() //欢迎界面,主菜单
{
int choose;
cout << "------------------------------" << endl;
cout << " 欢迎使用公交车管理系统 " << endl;
cout << "------------------------------" << endl << endl;
cout << "请选择数据来源:" << endl;
cout << "1、从文件输入 2、键盘录入" << endl;
cin >> choose;
switch (choose)
{
case 1:File_input(); break;
case 2:Keyboard_entry(); break;
default:cout << "输入有误!请重新输入" << endl;
welcome(); break;
}
}
void Busline::Keyboard_entry()
{
int order;
cout << "=======公交线路管理系统=======" << endl;
cout << " 1、添加公交线路信息 " << endl;
cout << " 2、删除公交线路信息 " << endl;
cout << " 3、修改公交线路线路信息 " << endl;
cout << " 4、显示全部线路信息 " << endl;
cout << " 5、查找线路信息 " << endl;
cout << " 6、查看所有车站信息 " << endl;
cout << " 7、存储到文件 " << endl;
cout << " 8、退出公交线路管理系统 " << endl;
cout << "请选择你需要实现的功能(1~8)" << endl;
cin >> order;
switch (order)
{
case 1:AddBus(); break;
case 2:DeleteBus(); break;
case 3:Alter(); break;
case 4:showall(); break;
case 5:Find(); break;
case 6:Check_station(); break;
case 7:Save_file(); break;
case 8:cout << "您已退出程序!" << endl;
exit(1); break;
default:cout << "输入错误,请重新输入" << endl;
Keyboard_entry();
}
}
void Busline::File_input()
{
int i = 0;
Bus* BB;
ifstream infile("Busline.txt", ios::in);
if (!infile)
{
cerr << "open error!" << endl;
exit(1);
}
for (i = 0; i < size; i++)
{
BB = bus+;
infile >> BB->number >> BB->name >> BB->start >> BB->terminal;
cout << "添加公交车 " << BB->name << "成功" << endl;
}
cout << "读取到" << i << "组数据" << endl;
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
bool Busline::AddBus1(int number, string name,string type,string start, string terminal)
{
int i;
Bus* bb;
bb = new Bus(number, name, type, start, terminal);
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->name==name)
{
if (bus1->type==type)
{
if (bus1->start==start)
{
if (bus1->terminal==terminal)
{
cout << "此公交车信息已存在,录入失败!" << endl;
return false;
}
}
}
}
}
if (i == size)
{
bus[size] = bb;
size++;
cout << "车辆信息录入成功!" << endl;
return true;
}
else
return false;
}
void Busline::AddBus()
{
int number2, type, n, i;
string ty, type2, name2, start2, terminal2;
cout << "*****************添加车辆*****************" << endl;
cout << "您正在增加车辆..." << endl;
cout << "请输入你要添加车辆的总数;" << endl;
cin >> n;
for (i = 0; i < n; i++)
{
cout << "请输入车辆编号:" << endl;
cin >> number2;
cout << "请输入车辆名称:" << endl;
cin >> name2;
cout << "请输入车辆类型:" << endl;
cout << "0-其他 1-普通车 2-空调车 3-双层车" << endl;
cin >> type;
switch (type)
{
case 0:type2 =="其他类型" ; break;
case 1:type2 == "普通车";break;
case 2:type2 == "空调车";break;
case 3:type2 == "双层车";break;
default:
cout << "输入有误,请重新输入!" << endl;
AddBus();
}
cout << "请输入车辆起点:" << endl;
cin >> start2;
cout << "请输入车辆终点:" << endl;
cin >> terminal2;
AddBus1(number2, name2, type2, start2, terminal2);
}
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
bool Busline::DeleteBus1(int number)
{
int i;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
for (int j = i; j < size; j++)
{
bus1 = bus[j];
(bus1->number)--;
bus[j] = bus[j + 1];
if (j == size - 1)
number = bus1->number;
}
cout << "该车信息已删除!" << endl;
size--;
return true;
}
}
if (i == size)
{
cout << "未找到该车信息,无法删除!" << endl;
return false;
}
return false;
}
void Busline::DeleteBus()
{
int num;
cout << "*****************删除车辆*****************" << endl;
show();
cout << "请选择要删除的车辆的编号:" << endl;
cin >> num;
DeleteBus1(num);
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
void Busline::Alter()//修改公交线路信息
{
int num, account,number,i,num11;
char name11[10], start11[10], terminal11[10],type11[10];
cout << "*****************修改信息*****************" << endl;
show();
cout << "请输入要修改的车辆编号:";
cin >> number;
cout << "请选择你要修改的内容:" << endl;
cout << "1、修改公交车编号" << endl;
cout << "2、修改公交车名称" << endl;
cout << "3、修改起点站" << endl;
cout << "4、修改终点站" << endl;
cout << "5、修改公交车类型" << endl;
cin >> account;
cout << "您正在修改中..." << endl;
switch (account)
{
case 1:
cout << "请输入新的车牌编号" << endl;
cin >> num11;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
bus1->number = num11;
cout << bus1->number << "号公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
}break;
case 2: cout << "请输入新的公交名称" << endl;
cin >> name11;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
bus1->name = name11;
cout << bus1->number << "号公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
}break;
case 3: cout << "请输入新的起始站" << endl;
cin >> start11;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
bus1->start == start11;
cout << bus1->number << "号公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
}break;
case 4: cout << "请输入新的终端站" << endl;
cin >> terminal11;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
bus1->terminal == terminal11;
cout << bus1->number << "号公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
}break;
case 5:cout << "请输入新的型号" << endl;
cin >> type11;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
bus1->type == type11;
cout << bus1->number << "号公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
}break;
default:cout << "输入错误!请重新选择" << endl;
Alter(); break;
}
cout << "你修改的内容已保存!" << endl;
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
void Busline::Find() //判断车辆信息是否存在,查找车辆
{
int account;
int num;
char name11[10], start11[10], terminal11[10];
cout << "请选择查找车辆的方式:" << endl;
cout << "1、按名称查找" << endl;
cout << "2、按编号查找" << endl;
cout << "3、按始发站查找" << endl;
cout << "4、按终点站查找" << endl;
cin >> num;
switch (num)
{
case 1: cout << "请输入要查找的车辆编号:";
cin >> account;
FindBusNum1(account); break;
case 2: cout << "请输入要查找车辆的名称:" << endl;
cin >> name11;
FindBusNam1(name11); break;
case 3:
cout << "请输入要查找车辆的始发站:" << endl;
cin >> start11;
FindBusStart1(start11); break;
case 4: cout << "请输入要查找车辆的终点站:" << endl;
cin >> terminal11;
FindBusterminal1(terminal11); break;
default:cout << "输入错误!请重新选择" << endl;
Find(); break;
}
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
bool Busline::FindBusNum1(int number)
{
int i;
for (i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->number == number)
{
cout << bus1->number << "号公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" <<'\t' << "编号" << '\t' << "名称" << '\t' << "类型"
<< '\t' << "起点站" << '\t' << "终点站" << "*" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
return true;
}
}
if (i == size)
{
cout << "无该车任何信息!" << endl;
return false;
}
return false;
}
bool Busline::FindBusNam1(char* name1)
{
for (int i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->name==name1)
{
cout << "路线名称为" << bus1->name << "的公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << "编号" << '\t' << "名称" << '\t' << "类型"
<< '\t' << "起点站" << '\t' << "终点站" << "*" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
return true;
}
if (i == size)
{
cout << "无该车任何信息!" << endl;
return false;
}
return false;
}
}
bool Busline::FindBusStart1(char* start1)
{
for (int i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->start==start1)
{
cout << "始发站为" << bus1->start << "的公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << "编号" << '\t' << "名称" << '\t' << "类型"
<< '\t' << "起点站" << '\t' << "终点站" << "*" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
return true;
}
if (i == size)
{
cout << "无该车任何信息!" << endl;
return false;
}
return false;
}
}
bool Busline::FindBusterminal1(char* terminal1)
{
for (int i = 0; i < size; i++)
{
bus1 = bus+;
if (bus1->terminal==terminal1)
{
cout << "终点站为" << bus1->terminal << "的公交车的信息为:" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << "编号" << '\t' << "名称" << '\t' << "类型"
<< '\t' << "起点站" << '\t' << "终点站" << "*" << endl;
cout << setiosflags(ios::left) << "*" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
return true;
}
if (i == size)
{
cout << "无该车任何信息!" << endl;
return false;
}
return false;
}
}
void Busline::showall() //显示全部车辆
{
cout << setiosflags(ios::left) << " *" << '\t' << "编号" << '\t' << "名称" << '\t' << "类型" <<
'\t' << "起点站" << '\t' << "终点站" << "*" << endl;
for (int i = 0; i < size; i++)
{
bus1 = bus+;
cout << setiosflags(ios::left) << " *" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
cout << endl;
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
void Busline::show() //显示车辆信息,用于删除车辆
{
cout << " *" << '\t' << "编号" << '\t' << "名称" << '\t' << "类型" <<
'\t' << "起点站" << '\t' << "终点站" << "*" << endl;
for (int i = 0; i < size; i++)
{
bus1 = bus+;
cout << " *" << '\t' << bus1->number << '\t' << bus1->name << '\t'
<< bus1->type << '\t' << bus1->start << '\t' << bus1->terminal << '\t' << "*" << endl;
}
cout << endl;
}
void Busline::Check_station() //查看所有车站
{
cout << "所有公交车站有:" << endl;
for (int i = 0; i < size; i++)
{
bus1 = bus+;
cout << bus1->start << ", " << bus1->terminal << " ";
}
cout << endl << endl;
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
void Busline::Save_file() //存储到文件
{
ofstream outfile("Busline.txt", ios::out);
if (!outfile)
{
cerr << "open error!" << endl;
exit(1);
}
for (int i = 0; i < size; i++)
{
outfile << bus+ << endl;
}
outfile.close();
cout << "读入文件成功" << endl << endl;
cout << "请按任意键继续..." << endl;
Keyboard_entry();
}
int main()
{
Busline bus;
bus.welcome();
system("pause");
return 0;
}
05-31
08-22
302