C++实现飞机订票系统
用C++简单实现一个飞机订票系统,该系统将人群分为两类:管理员和客户。管理员能够录入航班信息、删除航班、修改航班、查询航班。客户能够订票、退票、查询(只能查询部分信息)。该系统用到了STL(标准模板库)利用vector容器存储数据。
目录
前言
飞机订票系统是充分运用C++相关知识,并结合STL(标准模板库)实现的一个简易飞机订票程序。该项目是学完C++后的一次综合练习,旨在让读者充分理解C++相关知识。
一、功能描述
1、将人群分为两类:管理员、客户。
2、管理员首次登录系统需要注册账号,然后就可以登录账号,登陆账号之后就可以进行录入、删除、修改、查询航班信息操作。
3、客户可直接进行订票、退票、查询航班操作,但是只能查询航班的部分信息。
4、录入:管理员可以录入航班的航班号、飞机编号、出发地、目的地、起飞时间、降落时间,航班票价,票价折扣,总票数、剩余票数这些信息。
5、客户订票:输入出发地、目的地,然后检索航班信息,打印这个区间的航班,客户选择出发时间,从而匹配航班号,存入订单信息;订单号需要在原有的基础上自动加一;状态标记为已购票。
6、客户退票函数:该趟航班的剩余数加一,状态标记为已退票。
二、功能实现
1、管理员注册账号
2、管理员登录账号

3、录入航班信息

4、查询航班信息

5、修改航班信息

6、订票


7、查询订单信息

三、功能代码
1、关键技术
1、该系统采取面向对象的思想,将每个模块封装成一个类:飞机类、管理员类、客户类。
2、采取vector容器来存储数据,由于vector容器存储的类型需要相同,所以我把飞机信息、管理员信息、客户信息分别单独封装成一个类。
2、飞机类
在录入航班函数、修改航班函数、删除航班函数里面,都需要读取文件并存入文件,因为容器内的数据发生了改变。
#include<iostream>
#include<fstream>
#include"ControlFlight.h"
using namespace std;
void ControlFlight::AddFlights()//添加航班信息
{
//获取原来文件中的数据
ReadfromFile_Flights();
while (true)
{
int flag = 1;//是否继续添加,默认为“是”
string flight_number;//航班号
string plane_number;//飞机编号
string place_of_departure; //出发地
string destination; //目的地
string departure_time; //起飞时间
string landing_time; //降落时间
double flight_fare; //航班票价
double discounted_fares; //票价折扣
int total_number_of_tickets; //总票数
int number_of_tickets_remaining; //剩余票数
cout << "请输入航班号:";
cin >> flight_number;
cout << "请输入飞机编号:";
cin >> plane_number;
cout << "请输入出发地:";
cin >> place_of_departure;
cout << "请输入目的地:";
cin >> destination;
cout << "请输入起飞时间:";
cin >> departure_time;
cout << "请输入降落时间:";
cin >> landing_time;
cout << "请输入航班票价:";
cin >> flight_fare;
cout << "请输入票价折扣(输入数字):";
cin >> discounted_fares;
cout << "请输入总票数:";
cin >> total_number_of_tickets;
number_of_tickets_remaining = total_number_of_tickets;//剩余票数等于总票数
Flight flight(flight_number, plane_number, place_of_departure,
destination, departure_time, landing_time,
flight_fare, discounted_fares, total_number_of_tickets,
number_of_tickets_remaining);//实例化一个flight对象
mv_Flights.push_back(flight);//存入容器
cout << "是否继续添加航班信息?1、继续;0、退出" << endl;
cin >> flag;
if (flag == 0)
{
cout << "添加成功!" << endl;
break;
}
}
//存入文件
WritetoFile_Flights();
system("pause");
system("cls");
}
void ControlFlight::DeleteFlights()//删除航班信息
{
//获取原来文件中的数据
ReadfromFile_Flights();
int i = 0;
int found = 0;//默认为没找到
string flight_number;//航班号
cout << "请输入需要删除的航班编号:";
cin >> flight_number;
for (i = 0; i < mv_Flights.size(); i++)
{
if (mv_Flights[i].m_Flight_Number == flight_number)
{
found = 1;
mv_Flights.erase(mv_Flights.begin() + i, mv_Flights.begin() + i + 1);//删除
cout << "删除成功!" << endl;
break;
}
}
if (found == 0)
{
cout << "未找到该航班!" << endl;
}
//存入文件
WritetoFile_Flights();
system("pause");
system("cls");
}
void ControlFlight::ModifyFlights()//修改航班信息
{
//获取原来文件中的数据
ReadfromFile_Flights();
int i = 0, found = 0, choice = -1;//默认为没找到
int flag = 0;
string flight_number;//航班号
string plane_number;//飞机编号
string place_of_departure; //出发地
string destination; //目的地
string departure_time; //起飞时间
string landing_time; //降落时间
double flight_fare; //航班票价
double discounted_fares; //票价折扣
int total_number_of_tickets; //总票数
int number_of_tickets_remaining; //剩余票数
cout << "请输入需要修改的航班编号:";
cin >> flight_number;
for (i = 0; i < mv_Flights.size(); i++)
{
if (mv_Flights[i].m_Flight_Number == flight_number)
{
found = 1;//找到了
//打印原来的信息
cout << "*****航班信息如下:*****" << endl;
cout << "************************" << endl;
cout << "航班编号:" << mv_Flights[i].m_Flight_Number << endl;
cout << "飞机编号:" << mv_Flights[i].m_Plane_Number << endl;
cout << "出发地:" << mv_Flights[i].m_Place_of_Departure << endl;
cout << "目的地:" << mv_Flights[i].m_Destination << endl;
cout << "起飞时间:" << mv_Flights[i].m_Departure_Time << endl;
cout << "降落时间:" << mv_Flights[i].m_Landing_Time << endl;
cout << "航班票价:" << mv_Flights[i].m_Flight_Fare << endl;
cout << "票价折扣:" << mv_Flights[i].m_Discounted_Fares << endl;
cout << "总票数:" << mv_Flights[i].m_Total_Number_of_Tickets << endl;
cout << "剩余票数:" << mv_Flights[i].m_Number_of_Tickets_Remaining << endl;
cout << "************************" << endl;
while (true)//通过循环,实现同一个航班信息的多次修改
{
cout << "================================" << endl;
cout << "=====请输入您要修改的信息:=====" << endl;
cout << "=====0、退出 =====" << 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 << "输入:";
cin >> choice;
switch (choice)
{
case 0://退出
flag = 1;
break;
case 1://飞机编号
cout << "请输入新的飞机编号:";
cin >> plane_number;
mv_Flights[i].m_Plane_Number = plane_number;
cout << "修改成功!" << endl;
system("pause");
break;
case 2://出发地
cout << "请输入新的出发地:";
cin >> place_of_departure;
mv_Flights[i].m_Place_of_Departure = place_of_departure;
cout << "修改成功!" << endl;
system("pause");
break;
case 3://目的地
cout << "请输入新的目的地:";
cin >> destination;
mv_Flights[i].m_Destination = destination;
cout << "修改成功!" << endl;
system("pause");
break;
case 4://起飞时间
cout << "请输入新的起飞时间:";
cin >> departure_time;
mv_Flights[i].m_Departure_Time = departure_time;
cout << "修改成功!" << endl;
system("pause");
break;
case 5://降落时间
cout << "请输入新的降落时间:";
cin >> landing_time;
mv_Flights[i].m_Landing_Time = landing_time;
cout << "修改成功!" << endl;
system("pause");
break;
case 6://航班票价
cout << "请输入新的航班票价:";
cin >> flight_fare;
mv_Flights[i].m_Flight_Fare = flight_fare;
cout << "修改成功!" << endl;
system("pause");
break;
case 7://票价折扣
cout << "请输入新的票价折扣:";
cin >> discounted_fares;
mv_Flights[i].m_Discounted_Fares = discounted_fares;
cout << "修改成功!" << endl;
system("pause");
break;
default:
cout << "输入错误,请重新输入!" << endl;
system("pause");
break;
}
if (flag == 1)
{
break;//退出while循环——退出修改环节
}
}
break;//退出查找的循环
}
}
if (found == 0)
{
cout << "未找到该航班!" << endl;
}
//存入文件
WritetoFile_Flights();
system("pause");
system("cls");
}
void ControlFlight::ReferFlights()//查询航班信息——后续还要添加客户信息
{
//获取原来文件中的数据
ReadfromFile_Flights();
int i = 0, found = 0, choice = -1;//默认为没找到
int flag = 0;
string flight_number;//航班号
string plane_number;//飞机编号
string place_of_departure; //出发地
string destination; //目的地
string departure_time; //起飞时间
string landing_time; //降落时间
double flight_fare; //航班票价
double discounted_fares; //票价折扣
int total_number_of_tickets; //总票数
int number_of_tickets_remaining; //剩余票数
cout << "*****航班编号信息如下:*****" << endl;
cout << "****************************" << endl;
for (i = 0; i < mv_Flights.size(); i++)
{
cout << mv_Flights[i].m_Flight_Number << endl;
}
cout << "****************************" << endl;
cout << "请输入您要查询的航班编号:";
cin >> flight_number;
for (i = 0; i < mv_Flights.size(); i++)
{
if (mv_Flights[i].m_Flight_Number == flight_number)
{
found = 1;//找到了
cout << "*****航班信息如下:*****" << endl;
cout << "************************" << endl;
cout << "航班编号:" << mv_Flights[i].m_Flight_Number << endl;
cout << "飞机编号:" << mv_Flights[i].m_Plane_Number << endl;
cout << "出发地:" << mv_Flights[i].m_Place_of_Departure << endl;
cout << "目的地:" << mv_Flights[i].m_Destination << endl;
cout << "起飞时间:" << mv_Flights[i].m_Departure_Time << endl;
cout << "降落时间:" << mv_Flights[i].m_Landing_Time << endl;
cout << "航班票价:" << mv_Flights[i].m_Flight_Fare << endl;
cout << "票价折扣:" << mv_Flights[i].m_Discounted_Fares << endl;
cout << "总票数:" << mv_Flights[i].m_Total_Number_of_Tickets << endl;
cout << "剩余票数:" << mv_Flights[i].m_Number_of_Tickets_Remaining << endl;
cout << "************************" << endl;
//break;
}
}
if (found == 0)
{
cout << "未找到该航班!" << endl;
}
system("pause");
system("cls");
}
//读文件,将信息存入容器
void ControlFlight::ReadfromFile_Flights()
{
mv_Flights.clear();//清空之前的容器
string flight_number;//航班号
string plane_number;//飞机编号
string place_of_departure; //出发地
string destination; //目的地
string departure_time; //起飞时间
string landing_time; //降落时间
double flight_fare; //航班票价
double discounted_fares; //票价折扣
int total_number_of_tickets; //总票数
int number_of_tickets_remaining; //剩余票数
fstream fs;
fs.open("flights.txt", ios::in);
if (!fs)
{
cout << "文件打开失败!" << endl;
exit(0);
}
while (fs >> flight_number && fs >> plane_number && fs >> place_of_departure
&& fs >> destination && fs >> departure_time && fs >> landing_time
&& fs >> flight_fare && fs >> discounted_fares && fs >> total_number_of_tickets
&& fs >> number_of_tickets_remaining)
{
Flight flight(flight_number, plane_number, place_of_departure,
destination, departure_time, landing_time,
flight_fare, discounted_fares, total_number_of_tickets,
number_of_tickets_remaining);//实例化一个flight对象
mv_Flights.push_back(flight);//存入容器
}
fs.close();
}
//写入文件
void ControlFlight::WritetoFile_Flights()
{
int i = 0;
fstream fs;
fs.open("flights.txt", ios::out);
if (!fs)
{
cout << "文件打开失败!" << endl;
exit(0);
}
for (i = 0; i < mv_Flights.size(); i++)
{
fs << mv_Flights[i].m_Flight_Number << " " << mv_Flights[i].m_Plane_Number << " "
<< mv_Flights[i].m_Place_of_Departure << " " << mv_Flights[i].m_Destination
<< " " << mv_Flights[i].m_Departure_Time << " " << mv_Flights[i].m_Landing_Time
<< " " << mv_Flights[i].m_Flight_Fare << " " << mv_Flights[i].m_Discounted_Fares
<< " " << mv_Flights[i].m_Total_Number_of_Tickets
<< " " << mv_Flights[i].m_Number_of_Tickets_Remaining << endl;
}
fs.close();
}
2.1读文件函数
1、在该函数的开头写了一行这个代码:
mv_Flights.clear();//清空之前的容器
因为我在录入航班函数、删除航班函数、修改航班函数、查询航班函数的时候都调用了读文件函数,为了避免重复读取数据到vector容器,因此这里写了一行vector容器提供的clear函数。
2、将文件中每一行读取下来之后,实例化了一个flight对象,然后将该flight存入容器
2.2写入文件函数
以只写方式写入文件,每一行的数据之间以空格隔开
2.3删除航班函数
vector容器提供了一对向容器任意位置插入和删除元素的函数insert()与erase()。insert()函数与erase()函数中的位置参数只能由begin(),end()等函数返回的迭代器指示,不能用纯粹的数字。
mv_Flights.erase(mv_Flights.begin() + i, mv_Flights.begin() + i + 1);//删除
3、管理员类
#include<iostream>
#include<fstream>
#include"ControlFlight.h"
#include"ManagerActions.h"
#include"ClientActions.h"
#include<string>
using namespace std;
//注册账号函数
void ManagerActions::RegisterAccount()
{
string account;//账号
string password;//密码
cout << "请设置您的账号名称:";
cin >> account;
cout << "请设置您的密码:";
cin >> password;
fstream fs;//创建输入输出流对象
fs.open("managers.txt", ios::app);//以追加方式打开文件
if (!fs)//文件打开失败
{
cout << "文件打开失败!" << endl;
exit(0);
}
fs << account << " " << password << endl;//存入文件
fs.close();
cout << "添加成功!" << endl;
system("pause");
system("cls");
}
void ManagerActions::EnterAccount()//登录账号函数
{
ReadfromFile_Managers();
string account;//账号
string password;//密码
int found = 0, i;
cout << "请输入您的账号:";
cin >> account;
cout << "请输入您的密码:";
cin >> password;
for (i = 0; i < mv_Managers.size(); i++)
{
if (account == mv_Managers[i].m_Account && password == mv_Managers[i].m_Password)
{
found = 1;//找到了
break;
}
}
if (found == 1)
{
cout << "登录成功!" << endl;
system("pause");
system("cls");
AdministrateFlight();//调用管理员管理航班函数
system("pause");
system("cls");
return;
}
else
{
cout << "密码或账号错误!" << endl;
system("pause");
system("cls");
return;
}
}
void ManagerActions::ReadfromFile_Managers()//读管理员信息文件函数
{
string account;//账号
string password;//密码
fstream fs;
fs.open("managers.txt", ios::in);
if (!fs)//文件打开失败
{
cout << "文件打开失败!" << endl;
exit(0);
}
while (fs >> account && fs >> password)
{
Manager manager(account, password);//将文件每一行解析为一个对象
mv_Managers.push_back(manager);//将管理员信息存入容器
}
fs.close();
}
void ManagerActions::AdministrateFlight()//管理员管理航班函数
{
int choice, flag = 0;
ControlFlight controlflight;//实例一个航班管理类对象
while (true)
{
cout << "请输入您要进行的操作:" << endl;
cout << "0、返回上级菜单" << endl;
cout << "1、录入航班" << endl;
cout << "2、删除航班" << endl;
cout << "3、修改航班" << endl;
cout << "4、查询航班" << endl;
cout << "输入:";
cin >> choice;
switch (choice)
{
case 0:
flag = 1;
break;
case 1://添加
controlflight.AddFlights();
break;
case 2://删除
controlflight.DeleteFlights();
break;
case 3:
controlflight.ModifyFlights();
break;
case 4://查询
ReferInformation();
break;
default:
cout << "输入错误,请重新输入!" << endl;
break;
}
if (flag == 1)
{
break;
return;
}
}
}
void ReferInformation()
{
ControlFlight controlflight;//实例一个航班管理类对象
ClientActions clientactions;
int a;
cout << "================================\n";
cout << "=====请选择您要查询的信息:=====\n";
cout << "=====1、航班信息 =====\n";
cout << "=====2、订单信息 =====\n";
cout << "输入:";
cin >> a;
if (a == 1)
{
controlflight.ReferFlights();
}
else if (a == 2)
{
clientactions.ShowOrder();
}
}
3.1注册账号函数
管理员注册账号并设置密码,以追加方式将信息存入文件。
3.2登录账号函数
遍历容器,找到匹配项。
3.3管理员管理航班函数
通过飞机类实例化一个飞机对象,这样就可以通过这个对象调用飞机类里的各种方法。
4、客户类
#include"ClientActions.h"
#include"ControlFlight.h"
#include<fstream>
using namespace std;
int C_OrderNumber = 0;//订单号全局变量,用来追踪订单号,方便后续订单号自加
//但是在每一个函数调用完后,都需要重置为0,因为我每一个
//函数里面都调用了读文件函数,而在读文件函数里面,我重新
//计算了C_OrderNumber的值
//读订单信息文件函数
void ClientActions::ReadfromFile_Orders()
{
mv_Orders.clear();//清空之前的数据,因为我在增删改查,每一个里面都调用了读文件函数
int ordernumber;//订单号
string name;//客户姓名
string id;//证件号
string flightnumber;//客户航班号
string status;//状态
fstream fs;
fs.open("order.txt", ios::in);
if (!fs)
{
cout << "文件打开失败!" << endl;
exit(0);
}
//完全可以不需要下面这段代码,因为全局变量一开始就是设置的0
////如果文件为空,则将订单号全局变量设为0
//if (!(fs >> ordernumber >> name >> id >> flightnumber >> status))//读取失败,即为空
//{
// cout << "读文件0" << endl;
// C_OrderNumber = 0;
//}
////如果文件不为空,那么每读一行,订单号全局变量也要加一
else
{
while (fs >> ordernumber && fs >> name && fs >> id && fs >> flightnumber
&& fs >> status)//读一行
{
Client client(ordernumber, name, id, flightnumber, status);//实例化一个client对象
C_OrderNumber++;
mv_Orders.push_back(client);//存入容器
}
}
fs.close();
}
//存入文件
void ClientActions::WritetoFile_Orders()
{
int i = 0;
fstream fs;
fs.open("order.txt", ios::out);//以只写方式开文件
if (!fs)
{
cout << "文件打开失败!" << endl;
exit(0);
}
for (i = 0; i < mv_Orders.size(); i++)//遍历容器,存入文件
{
fs << mv_Orders[i].mc_OrderNumber << " " << mv_Orders[i].mc_Name << " "
<< mv_Orders[i].mc_ID << " " << mv_Orders[i].mc_Flight_Number << " "
<< mv_Orders[i].mc_Status << endl;
}
fs.close();
}
//订票函数
void ClientActions::BookTicket()
{
ShowFlight();//先打印一下航班的简单信息
ControlFlight controlflight;//实例一个航班管理类对象
controlflight.ReadfromFile_Flights();//获取文件中的航班信息
ReadfromFile_Orders();//获取文件中的订单信息
int ordernumber;//订单号
string name;//客户姓名
string id;//证件号
string flightnumber;//客户航班号
string status;//状态
string place_of_departure; //出发地
string destination; //目的地
int found = 0, i = 0;//默认为没有找到
cout << "请输入您的出发地:";
cin >> place_of_departure;
cout << "请输入您的目的地:";
cin >> destination;
for (i = 0; i < controlflight.mv_Flights.size(); i++)//遍历容器,进行航班信息匹配
{
if (place_of_departure == controlflight.mv_Flights[i].m_Place_of_Departure)
{
found = 1;//找到了
cout << "*****航班信息如下:*****" << endl;
cout << "************************" << endl;
cout << "航班编号:" << controlflight.mv_Flights[i].m_Flight_Number << endl;
cout << "飞机编号:" << controlflight.mv_Flights[i].m_Plane_Number << endl;
cout << "出发地:" << controlflight.mv_Flights[i].m_Place_of_Departure << endl;
cout << "目的地:" << controlflight.mv_Flights[i].m_Destination << endl;
cout << "起飞时间:" << controlflight.mv_Flights[i].m_Departure_Time << endl;
cout << "降落时间:" << controlflight.mv_Flights[i].m_Landing_Time << endl;
cout << "航班票价:" << controlflight.mv_Flights[i].m_Flight_Fare << endl;
cout << "票价折扣:" << controlflight.mv_Flights[i].m_Discounted_Fares << endl;
cout << "总票数:" << controlflight.mv_Flights[i].m_Total_Number_of_Tickets << endl;
cout << "剩余票数:" << controlflight.mv_Flights[i].m_Number_of_Tickets_Remaining << endl;
cout << "************************" << endl;
}
}
if (found == 0)
{
cout << "没有找到有关的航班" << endl;
}
else
{
cout << "请输入您要选择的航班编号:";
cin >> flightnumber;
//匹配航班编号
for (int j = 0; j < controlflight.mv_Flights.size(); j++)
{
if (flightnumber == controlflight.mv_Flights[j].m_Flight_Number)
{
C_OrderNumber++;
ordernumber = C_OrderNumber;//订单号更新
cout << "请填写您的姓名:";
cin >> name;
cout << "请填写您的身份证号:";
cin >> id;
status = "已购票";
Client client(ordernumber, name, id, flightnumber, status);//实例化一个客户
controlflight.mv_Flights[j].m_Number_of_Tickets_Remaining--;
mv_Orders.push_back(client);//存入容器
cout << "购票成功!" << endl;
break;
}
}
}
WritetoFile_Orders();//存入文件
controlflight.WritetoFile_Flights();
C_OrderNumber = 0;//重新赋值为0
system("pause");
system("cls");
}
//退票函数
void ClientActions::ReturnTicket()
{
ControlFlight controlflight;//实例一个航班管理类对象
controlflight.ReadfromFile_Flights();//获取文件中的航班信息
ReadfromFile_Orders();//获取文件中的订单信息
int ordernumber;//订单号
string name;//客户姓名
string id;//证件号
string flightnumber;//客户航班号
string status;//状态
cout << "请输入您的订单号:";
cin >> ordernumber;
cout << "请输入您的姓名:";
cin >> name;
cout << "请输入您的身份证号:";
cin >> id;
cout << "请输入您的航班号:";
cin >> flightnumber;
int i = 0, found = 0;
for (i = 0; i < mv_Orders.size(); i++)
{
if ((mv_Orders[i].mc_OrderNumber == ordernumber) && (mv_Orders[i].mc_Name == name)
&& (mv_Orders[i].mc_ID == id) && (mv_Orders[i].mc_Flight_Number == flightnumber))
{
found = 1;//找到了
mv_Orders[i].mc_Status = "已退票";
cout << "退票成功!\n";
//遍历航班信息容器,让该航班剩余票数加一
for (int j = 0; j < controlflight.mv_Flights.size(); j++)
{
if (controlflight.mv_Flights[i].m_Flight_Number == flightnumber)
{
controlflight.mv_Flights[i].m_Number_of_Tickets_Remaining++;
break;
}
}
break;
}
}
if (found == 0)
{
cout << "您输入信息有误" << endl;
}
WritetoFile_Orders();//存入文件
controlflight.WritetoFile_Flights();
C_OrderNumber = 0;//重新赋值为0
system("pause");
system("cls");
}
//显示订单信息
void ClientActions::ShowOrder()
{
ReadfromFile_Orders();
int i = 0;
cout << "**********************\n";
cout << "订单信息如下:\n";
cout << "订单号\t姓名\t身份证号\t航班号\t状态\n";
for (i = 0; i < mv_Orders.size(); i++)
{
cout << mv_Orders[i].mc_OrderNumber << "\t" << mv_Orders[i].mc_Name << "\t"
<< mv_Orders[i].mc_ID << "\t\t" << mv_Orders[i].mc_Flight_Number << "\t"
<< mv_Orders[i].mc_Status << endl;
}
cout << "**********************\n";
C_OrderNumber = 0;//重新赋值为0
system("pause");
system("cls");
}
//查询订单信息
void ClientActions::ReferOrder()
{
ReadfromFile_Orders();
int ordernumber;//订单号
//string name;//客户姓名
//string id;//证件号
//string flightnumber;//客户航班号
//string status;//状态
cout << "请输入您的订单号:";
cin >> ordernumber;
int i = 0, found = 0;
cout << "*******************************\n";
cout << "您的订单信息如下:\n";
cout << "订单号\t姓名\t身份证号\t航班号\t状态\n";
for (i = 0; i < mv_Orders.size(); i++)
{
if (ordernumber == mv_Orders[i].mc_OrderNumber)
{
found = 1;
cout << mv_Orders[i].mc_OrderNumber << "\t" << mv_Orders[i].mc_Name << "\t"
<< mv_Orders[i].mc_ID << "\t\t" << mv_Orders[i].mc_Flight_Number << "\t"
<< mv_Orders[i].mc_Status << endl;
break;
}
}
if (found == 0)
{
cout << "未找到您的订单信息!\n";
}
cout << "*******************************\n";
C_OrderNumber = 0;//重新赋值为0
system("pause");
system("cls");
}
//显示航班信息(出发地、目的地)
void ClientActions::ShowFlight()
{
ControlFlight controlflight;//实例一个航班管理类对象
controlflight.ReadfromFile_Flights();//获取航班信息
int i = 0;
cout << " *****航班信息如下:***** " << endl;
cout << "***************************" << endl;
cout << "*****\t出发地\t目的地\t*****" << endl;
for (i = 0; i < controlflight.mv_Flights.size(); i++)
{
cout << "*****\t" << controlflight.mv_Flights[i].m_Place_of_Departure << "\t"
<< controlflight.mv_Flights[i].m_Destination << "\t" << "*****" << endl;
}
cout << "***************************" << endl;
}
我定义了一个订单号全局变量:C_OrderNumber,用来追踪订单号,方便后续订单号自加,但是在每一个函数调用完后,都需要重置为0,因为我每一个函数里面都调用了读文件函数,而在读文件函数里面,我重新计算了C_OrderNumber的值。
5、主函数
#include<iostream>
#include<fstream>
#include"ManagerActions.h"
#include"ClientActions.h"
using namespace std;
void MainMenu();//打印主菜单
void ManagerChoose();//管理员选择
void ClientChoose();//客户选择
void CreateFiles();//提前创建文件
int main()
{
CreateFiles();//提前创建文件
while (true)
{
MainMenu();
int choice;
cin >> choice;
switch (choice)
{
case 0:
cout << "欢迎您的使用!" << endl;
system("pause");
exit(0);
case 1://管理员
ManagerChoose();//调用管理员选择函数——登录/注册
break;
case 2:
ClientChoose();
break;
default:
cout << "输入错误,请重新输入!" << endl;
system("pause");
system("cls");
break;
}
}
return 0;
}
//打印主菜单
void MainMenu()
{
cout << "请选择您的身份:" << endl;
cout << "0、退出系统" << endl;
cout << "1、管理员" << endl;
cout << "2、客户" << endl;
cout << "输入:";
}
//提前创建文件
void CreateFiles()
{
fstream fs;//创建输入输出流对象,创建管理员信息文件
fs.open("managers.txt", ios::app);//以追加方式打开文件
if (!fs)//文件打开失败
{
cout << "文件打开失败!" << endl;
exit(0);
}
fs.close();
fstream fs2;//创建航班信息文件
fs2.open("flights.txt", ios::app);
if (!fs2)
{
cout << "文件打开失败!" << endl;
exit(0);
}
fs2.close();
fstream fs3;//创建订单信息文件
fs3.open("order.txt", ios::app);
if (!fs3)
{
cout << "文件打开失败!" << endl;
exit(0);
}
fs3.close();
}
//管理员选择
void ManagerChoose()
{
system("cls");
ManagerActions manageractions;//通过管理员行为类创建一个对象
int choice;
while (true)
{
//打印选项
int flag = 0;//用来标记是否返回上级菜单
cout << "请选择操作:" << endl;
cout << "0、返回上级菜单" << endl;
cout << "1、注册账号" << endl;
cout << "2、登录账号" << endl;
cout << "输入:" << endl;
cin >> choice;
switch (choice)
{
case 0:
flag = 1;//返回上级菜单
break;
case 1://注册账号
manageractions.RegisterAccount();//调用注册账号函数
break;
case 2://登录账号
manageractions.EnterAccount();
break;
default:
cout << "输入错误,请重新输入!" << endl;
break;
}
if (flag == 1)
{
break;
}
}
system("pause");
system("cls");
return;
}
void ClientChoose()
{
system("cls");
ClientActions clientactions;//通过客户行为类创建一个对象
int choice = 0;
while (true)
{
int flag = 0;//用来标记是否返回上级菜单
//打印选项
cout << "================================" << endl;
cout << "===== 欢迎选择本公司 =====" << endl;
cout << "=====请选择您要进行的操作:=====" << endl;
cout << "=====0、返回上级菜单 =====" << endl;
cout << "=====1、订票 =====" << endl;
cout << "=====2、退票 =====" << endl;
cout << "=====3、查询订单信息 =====" << endl;
cout << "================================" << endl;
cout << "输入:";
cin >> choice;
switch (choice)
{
case 0:
flag = 1;//返回上级菜单
break;
case 1:
clientactions.BookTicket();
break;
case 2:
clientactions.ReturnTicket();
break;
case 3:
clientactions.ReferOrder();
break;
default:
cout << "输入错误,请重新输入!" << endl;
break;
}
if (flag == 1)
{
break;
}
}
system("pause");
system("cls");
return;
}
主函数打印主界面菜单,并为管理员和客户提供进入的接口。
总结
今天的分享到这里就结束了,该系统比较基础,适合C++初学者拿来练手。该系统用到了STL(标准模板库),但是比较基础,如果您想要更进一步,建议抽一点时间系统地学习一下STL。
如果需要可以在我的gitee上找到,链接如下:
更多推荐



所有评论(0)