Advertisement

航班售票系统设计与实现

阅读量:
一、基本功能要求:
1)假设该民航有若干航班,要求实现增加航班和取消某个航班的,修改航 班功能。 2)查询:根据用户提出的终点站查询航班号、售票情况等航班信息;也可 根据航班号,列出该航班已订票的乘客名单。 3)订票:根据航班号为客户订票,如该航班有余票,则为客户订票;如该 航班已满员,则显示相应信息。 4)退票:按乘客要求退出已预定的机票。 5)飞行时刻查询:显示航班的起飞降落时间。
提示:
航班信息:航班号、到达港、总座位数、余票额、乘客名单; 乘客信息:乘客姓名、证件号码、座位号。
技术要求:
1、使用类; 2、使用向量 3、数据存储在文件中。 4、DOS 版 / WINDOWS 版

/文件名称:Time.h

/文件名称:Time.h

功能描述

详细信息

/文件名称:Time.cpp
/功能介绍:实现了时间类成员
作者:lonely
///
#include"Time.h"
#include
using namespace std;
重载函数:<<//
ostream &operator<<(ostream &output,Time &p)
{
output<<p.hour<<":"<<p.minute<<":"<<p.second;
return output;
}
//重载函数:>>//
istream &operator>>(istream &input,Time &p)
{
input>>p.hour>>p.minute>>p.second;
while(p.second<0||p.second>60)
{
cout<<"输入的秒数有误,请重新输入:";
input>>p.second;
}
if(p.second==60)
{
p.second=0;
p.minute++;
}
while(p.minute<0||p.minute>60)
{
cout<<"输入的分钟有误,请重新输入:";
input>>p.minute;
}
if(p.minute==60)
{
p.minute=0;
p.hour++;
}
while(p.hour<0||p.hour>24)
{
cout<<"输入的分钟有误,请重新输入:";
input>>p.hour;
}
if(p.hour==24)
p.hour=0;
return input;
}
//重载函数:=//
Time &Time::operator=(const Time &p)
{
hour=p.hour;
minute=p.minute;
second=p.second;
return *this;
}
//重载函数:>//
bool Time::operator>(const Time &right)const
{
if(hour>right.hour)
return true;
else if(hour==right.hour&&minute>right.minute)
return true;
else if(hour==right.hour&&minute==right.minute&&second>right.second)
return true;
return false;
}

/文件名称:Cnode.h
/功能介绍:定义了乘客类
乘客信息:乘客姓名、证件号码、座位号。
作者:lonely
///
#pragma once
#include
using namespace std;
class Cnode
{
public:
Cnode();//构造函数
Cnode(string n,string id,int seat);//构造函数
//friend ostream &operator<<(ostream& output,Cnode &p);//重载函数:<<
//friend istream &operator>>(istream& input,Cnode &p);//重载函数:>>
string getName(){return name;}
int getSeat(){return seatno;}
string getIDcard(){return idcard;}
private:
string name;//乘客姓名
string idcard;//证件号码
int seatno;//座位号
};

/文件名称:Cnode.cpp
/功能介绍:实现了乘客类成员
作者:lonely
///
#include"Cnode.h"
#include
using namespace std;
Cnode::Cnode()//构造函数
{
name="\n";
idcard="\n";
seatno=0;
}
Cnode::Cnode(string n,string id,int seat)//构造函数
{
name=n;
idcard=id;
seatno=seat;
}
/ostream &operator<<(ostream &output,Cnode &p)//重载函数:<<
{
cout<<"乘客姓名:"<<p.name<<endl;
cout<<"证件号码:"<<p.idcard<<endl;
cout<<"座位号:"<<p.seatno<<endl;
return output;
}
/
/istream &operator>>(istream &input,Cnode &p)//重载函数:>>
{
cin>>p.name;
cin>>p.idcard;
cin>>p.seatno;
return input;
}
/

/文件名称:Pnode.h
/功能介绍:定义了航班类
航班基本信息:航班号、到达港、总座位数、余票额、乘客名单;
作者:lonely
///
#pragma once
#include"Cnode.h"
#include"Time.h"
#include
#include
#include
using namespace std;
class Flight:public Time//航班类,公有继承时间类
{
private:
int no;//航班编号
string destin;//到达港
int limit,rest;//总座位数,余票额
vector cname;//乘客名单向量
Time fly;//起飞时间
Time reach;//到达时间
public:
Flight();//公有函数
Flight(int n,string s,int l,Time f,Time r);//公有函数
Flight(int n,string s,int l,int rt,Time f,Time r);//公有函数
int getNo(){return no;}
void setNO(int n){no=n;}
string getDestin(){return destin;}
void setDestin(string de){destin=de;}
int getLimit(){return limit;}
void setLimit(int l){limit=l;}
int getRest(){return rest;}
void setRest(int r){rest=r;}
int getcnameSize(){return cname.size();}
string getcnameNameData(int i){return cname[i].getName();}
string getcnameIDcardData(int i){return cname[i].getIDcard();}
int getcnameSeatnoData(int i){return cname[i].getSeat();}
void setcnameData(Cnode c){cname.push_back(c);}
Time getFlyTime(){return fly;}
void setFlyTime(Time f){fly=f;}
int getFlyTimeHour(){return fly.getHour();}
int getFlyTimeMinute(){return fly.getminute();}
int getFlyTimeSecond(){return fly.getsecond();}
Time getReachTime(){return reach;}
void setReachTime(Time r){reach=r;}
int getReachTimeHour(){return reach.getHour();}
int getReachTimeMinute(){return reach.getminute();}
int getReachTimeSecond(){return reach.getminute();}
Flight &operator=(const Flight &p);//重载函数,重载符号:=
friend ostream &operator<<(ostream& output,Flight &p);//重载函数,重载符号:《
void OutputPassageName();//输出乘客姓名
bool BookTicket();//订票
bool CheckSeat(int i,int &x);//根据给出的座位号i查询该座位号是否存在
bool RefundTicket();//退票
bool IsEmpty();//判断航班是否没有乘客
bool IsFull();//判断航班是否满人
void OutputFlightTime();//输出航班起飞降落时间
};

/文件名称:Pnode.cpp
/功能介绍:实现了航班类成员
作者:lonely
///
#include"Pnode.h"
#include
#include
#include
using namespace std;
Flight::Flight()//构造函数
{
no=0;
destin="\n";
limit=0;
rest=0;
}
Flight::Flight(int n,string s,int l,Time f,Time r)//构造函数
{
no=n;
destin=s;
limit=l;
rest=l;
fly=f;
reach=r;
}
Flight::Flight(int n,string s,int l,int rt,Time f,Time r)//构造函数
{
no=n;
destin=s;
limit=l;
rest=rt;
fly=f;
reach=r;
}
ostream &operator<<(ostream &output,Flight &p)//重载函数:<<
{
cout<<"航班号:"<<p.no<<endl;
cout<<"终点站:"<<p.destin<<endl;
cout<<"总座位数:"<<p.limit<<endl;
cout<<"余票数:"<<p.rest<<endl;
cout<<"起飞时间:"<<p.fly<<endl;
cout<<"降落时间:"<<p.reach<<endl;
/for(int i=0;i<p.cname.size();i++)//乘客名单暂不输出
cout<<p.cname[i]<<endl;
/
return output;
}
Flight &Flight::operator=(const Flight &p)//重载函数:=
{
no=p.no;
destin=p.destin;
limit=p.limit;
rest=p.rest;
fly=p.fly;
reach=p.reach;
return *this;
}
void Flight::OutputPassageName()//输出乘客名单函数
{
if(cname.size()==0)//判断向量是否空
cout<<"No Passage!"<<endl;
for(int i=0;i<cname.size();i++)
cout<<cname[i].getName()<<endl;
}
bool Flight::BookTicket()//订票
{
if(IsFull())//判断是否满人
{
cout<<"该航班已经满人!"<<endl;
return false;
}
string n;
string id;
int seat;
int i=1;
int x;
cout<<"请输入乘客姓名:";
cin>>n;
cout<<"请输入乘客证件号码:";
cin>>id;
while(i)
{
cout<<"请输入座位号:";
cin>>seat;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!CheckSeat(seat,x))//查询座位号
i=0;
else
cout<<"该座位已经有乘客,请重新弄输入:";
}
if(seat>limit)
{
cout<<"该座位号不存在!"<<endl;
return false;
}
Cnode c(n,id,seat);
cname.push_back(c);
rest--;
return true;
}
bool Flight::CheckSeat(int i,int &x)//查询座位号
{
for(int n=0;n<cname.size();n++)
if(cname[n].getSeat()==i)
{
x=n;
return true;
}
return false;
}
bool Flight::RefundTicket()//退票操作
{
if(IsEmpty())//判断该航班是否存放乘客
{
cout<<"该航班没有乘客,不能退票!"<<endl;
return false;
}
string n;
string id;
int seat;
int x;
cout<<"请输入乘客姓名:";
cin>>n;
cout<<"请输入乘客证件号码:";
cin>>id;
cout<<"请输入座位号:";
cin>>seat;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!CheckSeat(seat,x))
{
cout<<"退票失败,该座位没有乘客!"<<endl;
return false;
}
if(cname[x].getName()!=n||cname[x].getIDcard()!=id)//核对退票乘客信息
{
cout<<"退票失败!"<<endl;return false;
}
cname.erase(cname.begin()+x);//退票操作
rest++;
return true;
}
bool Flight::IsEmpty()//判断航班是否存在乘客
{
if(limit==rest)
return true;
return false;
}
bool Flight::IsFull()//判断航班乘客是否满员
{
if(rest==0)
return true;
return false;
}
void Flight::OutputFlightTime()//输出起飞降落时间
{
cout<<"起飞时间:"<<fly<<endl;
cout<<"降落时间:"<<reach<<endl;
}

/文件名称:PDataBase.h
/功能介绍:定义了航班维护类
作者:lonely
///
#pragma once
#include"Pnode.h"
#include"Cnode.h"
class PDataBase
{
public:
PDataBase();//构造函数
~PDataBase();//析构函数
bool addPnode();//增加航班
bool Locate(int i,int &x);//查找航班号i查找航班号是否存在
bool delPnode();//取消航班
bool resetPnode();//修改航班
bool checkPnode();//查找航班
bool checkPassage();//查找乘客
bool Book();//订票
bool Refund();//退票
bool chenkTime();//查询起飞降落时间
void Massage();//航班库维护
private:
vector p_array;//航班向量
};

/文件名称:PDataBase.cpp
/功能介绍:实现了航班航班维护类
作者:lonely
///
#include"Cnode.h"
#include"Pnode.h"
#include"PDataBase.h"
#include
#include
#include
#include
using namespace std;
PDataBase::PDataBase()//构造函数,读文件
{
int i=0;//航班数量
int i1=0;//乘客数量
int n1=0;
int n=0;//航班编号
string de;//到达港
int l=0;//座位数
int rt=0;//余票额
int h1=0;//起飞时
int m1=0;//起飞分
int s1=0;//起飞秒
int h2=0;//降落时
int m2=0;//降落分
int s2=0;//降落秒
string name;//乘客姓名
string id;//证件号码
int seat=0;//座位数
ifstream file("flight information.txt",ios::in);
if(file)
{
file>>i;
while(i)
{
file>>n>>de>>l>>rt>>h1>>m1>>s1>>h2>>m2>>s2;
Time f(h1,m1,s1);
Time r(h2,m2,s2);
Flight flight(n,de,l,rt,f,r);
p_array.push_back(flight);
file>>i1;
while(i1)
{
file>>name>>id>>seat;
Cnode c(name,id,seat);
p_array[n1].setcnameData(c);
i1--;
}
i--;
n1++;
}
}
file.close();//关闭文件
}
PDataBase::~PDataBase()//析构函数,写文件
{
fstream file;
file.open("flight information.txt",ios::out);
file<<p_array.size()<<" ";//写入航班数量
for(int i=0;i<p_array.size();i++)
{
//写入航班信息//
file<<p_array[i].getNo()<<" "<<p_array[i].getDestin()<<" "
<<p_array[i].getLimit()<<" "<<p_array[i].getRest()<<" ";
file<<p_array[i].getFlyTimeHour()<<" "
<<p_array[i].getFlyTimeMinute()<<" "
<<p_array[i].getFlyTimeSecond()<<" ";
file<<p_array[i].getReachTimeHour()<<" "
<<p_array[i].getReachTimeMinute()<<" "
<<p_array[i].getReachTimeSecond()<<" ";
file<<p_array[i].getcnameSize()<<" ";//写入乘客数量
//写入乘客信息
for(int j=0;j<p_array[i].getcnameSize();j++)
file<<p_array[i].getcnameNameData(j)<<" "
<<p_array[i].getcnameIDcardData(j)<<" "
<<p_array[i].getcnameSeatnoData(j)<<" ";
}
file.close();//关闭文件
}
bool PDataBase::Locate(int i,int &x)//根据航班号查找航班位置信息
{
if(i<0)return false;//判断输入航班号
for(int n=0;n<p_array.size();n++)
if(p_array[n].getNo()==i)
{
x=n;
return true;
}
return false;
}
bool PDataBase::addPnode()//增加航班
{
int n;
string de;
int l;
int i;
Time f;
Time r;
cout<<"请输入新增航班编号:";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入新增航班终点站:";
cin>>de;
cout<<"请输入总座位数:";
cin>>l;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入起飞时间:";
cin>>f;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入降落时间:";
cin>>r;
while(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
while(f>r)
{
cout<<"起飞时间不如迟于降落时间!,请重新输入:";
cout<<"请输入起飞时间:";
cin>>f;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入降落时间:";
cin>>r;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
}
if(Locate(n,i)||l<=0)//判断航班号是否存在航班和判断输入的总座位数是否有误
{
cout<<"航班号已经存在航班或你输入的总座位数有误!"<<endl;
return false;
}
Flight p(n,de,l,f,r);
p_array.push_back(p);
return true;
}
bool PDataBase::delPnode()//取消航班
{
int n;
int i;
cout<<"请输入要取消的航班编号:"<<endl;
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(Locate(n,i))
{
p_array.erase(p_array.begin()+i);
cout<<"取消航班成功!"<<endl;
return true;
}
return false;
}
bool PDataBase::resetPnode()//修改航班
{
int n;
string de;
int l;
int i;
Time f;
Time r;
cout<<"请输入要修改的航班编号(修改前):";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!Locate(n,i))
return false;
cout<<"该航班信息如下:"<<endl;
cout<<p_array[i];
cout<<""<<endl;
cout<<"//请选择要修改的信息:"<<endl;
cout<<"//1.航班号"<<endl;
cout<<"//2.到达港"<<endl;
cout<<"//3.总座位数"<<endl;
cout<<"//4.起飞时间"<<endl;
cout<<"//5.降落时间"<<endl;
cout<<"//6.全部"<<endl;
cout<<"//7.退出"<<endl;
cout<<"//请选择(1~7):";
cout<<""<<endl;
cin>>n;
switch(n)
{
case 1:
cout<<"请输入要修改的航班编号(修改后):";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(n<=0)
{cout<<"输入有误!"<<endl;return false;}
if(Locate(n,i))
{cout<<"该航班号上已经存在航班,不能同时存在相同编号的不同航班!"<<endl;return false;}
p_array[i].setNO(n);
cout<<"修改成功,修改后的信息如下:"<<endl;
cout<<p_array[i];
break;
case 2:
cout<<"请输入修改航班终点站:";
cin>>de;
p_array[i].setDestin(de);
cout<<"修改成功,修改后的信息如下:"<<endl;
cout<<p_array[i];break;
case 3:
cout<<"请输入修改总座位数:";
cin>>l;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(l<p_array[i].getcnameSize())
{cout<<"修改失败,总座位数不能少于乘客数量"<<endl;return false;}
p_array[i].setLimit(l);
p_array[i].setRest(l-p_array[i].getcnameSize());
cout<<"修改成功,修改后的信息如下:"<<endl;
cout<<p_array[i];break;
case 4:
cout<<"请输入起飞时间:";
cin>>f;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(f>p_array[i].getReachTime())
{cout<<"输入有误,起飞时间不能迟于降落时间!"<<endl;return false;}
p_array[i].setFlyTime(f);
cout<<"修改成功,修改后的信息如下:"<<endl;
cout<<p_array[i];break;
case 5:
cout<<"请输入降落时间:";
cin>>r;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(p_array[i].getFlyTime()>r)
{cout<<"输入有误,降落时间不然能早于起飞时间!"<<endl;return false;}
p_array[i].setReachTime(r);
cout<<"修改成功,修改后的信息如下:"<<endl;
cout<<p_array[i];break;
case 6:
{
cout<<"请输入要修改的航班编号(修改后):";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入修改航班终点站:";
cin>>de;
cout<<"请输入修改总座位数:";
cin>>l;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入起飞时间:";
cin>>f;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
cout<<"请输入降落时间:";
cin>>r;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(n<=0)
{cout<<"输入有误!"<<endl;return false;}
if(Locate(n,i))
{cout<<"该航班号上已经存在航班,不能同时存在相同编号的不同航班!"<<endl;return false;}
if(l<p_array[i].getcnameSize())
{cout<<"修改失败,总座位数不能少于乘客数量"<<endl;return false;}
if(f>r)
{cout<<"修改失败,起飞时间不能迟于降落时间!"<<endl;return false;}
Flight p(n,de,l,f,r);
p_array[i]=p;
break;
}
case 7:
default:break;
}
return true;
}
bool PDataBase::checkPnode()//查找航班信息
{
string de;
cout<<"请输入查询航班终点站:";//根据到达港查找
cin>>de;
for(int n=0;n<p_array.size();n++)
if(p_array[n].getDestin()==de)
{
cout<<p_array[n];
return true;
}
return false;
}
bool PDataBase::checkPassage()//查找乘客信息
{
int n;
int i;
cout<<"请输入要查找乘客的航班编号:";//根据航班号查找
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!Locate(n,i))
return false;
p_array[i].OutputPassageName();
return true;

}
bool PDataBase::Book()//订票
{
int n;
int i;
cout<<"请输入要订票的航班编号:";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!Locate(n,i))
return false;
if(p_array[i].BookTicket())
return true;
return false;
}
bool PDataBase::Refund()//退票
{
int n;
int i;
cout<<"请输入要退票的航班编号:";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!Locate(n,i))
return false;
if(p_array[i].RefundTicket())
return true;
return false;
}
bool PDataBase::chenkTime()//查询起飞降落时间
{
int n;
int i;
cout<<"请输入要查找起飞降落时间的航班编号:";
cin>>n;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
if(!Locate(n,i))
return false;
p_array[i].OutputFlightTime();
return true;
}
void PDataBase::Massage()//航班信息库维护
{
int finish=0;//循环结束标志
int choice=0;//选择服务
string tips[2]={"false","true"};
while(!finish)
{
cout<<"欢迎航班信息维护********"<<endl;
cout<<"\t1.增加航班\n";
cout<<"\t2.取消某航班\n";
cout<<"\t3.修改某航班\n";
cout<<"\t4.查询某航班信息\n";
cout<<"\t5.列出某航班已订票客名的乘单\n";
cout<<"\t6.查询某航班的起飞降落时间\n";
cout<<"\t7.退出\n";
cout<<"*********************************************************"<<endl;
cout<<endl;
cout<<"请输入你所需要的服务编号(1~7):";
cin>>choice;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
switch(choice)
{
case 1:
if(addPnode())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 2:
if(delPnode())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 3:
if(resetPnode())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 4:
if(checkPnode())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 5:
if(checkPassage())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 6:
if(chenkTime())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 7:
default:finish=1;break;
}
}
}

///
/航班售票系统设计与实现
//一、基本功能要求:
//1)假设该民航有若干航班,要求实现增加航班和取消某个航班的,修改航
//班功能。
//2)查询:根据用户提出的终点站查询航班号、售票情况等航班信息;也可
//根据航班号,列出该航班已订票的乘客名单。
//3)订票:根据航班号为客户订票,如该航班有余票,则为客户订票;如该
//航班已满员,则显示相应信息。
//4)退票:按乘客要求退出已预定的机票。
//5)飞行时刻查询:显示航班的起飞降落时间。
//
#include"Cnode.h"
#include"Pnode.h"
#include"PDataBase.h"
#include
using namespace std;
int main()
{
int finish=0;//循环结束标志
int choice=0;//选择服务
PDataBase aviatuion;
string tips[2]={"false","true"};
while(!finish)
{
cout<<"欢迎使用航班售票系统********"<<endl;
cout<<"\t1.航班信息维护\n";
cout<<"\t2.订票\n";
cout<<"\t3.退票\n";
cout<<"\t4.退出\n";
cout<<"*********************************************************"<<endl;
cout<<endl;
cout<<"请输入你所需要的服务编号:";
cin>>choice;
if(cin.fail())
{
cout<<"输入有误!,强制结束程序。。。";exit(1);
}
switch(choice)
{
case 1:
aviatuion.Massage();break;
case 2:
if(aviatuion.Book())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 3:
if(aviatuion.Refund())
{
cout<<tips[1]<<endl;break;
}
cout<<tips[0]<<endl;break;
case 4:
default:finish=1;break;
}
}
cout<<"感谢你的使用!"<<endl;
return 0;
}

全部评论 (0)

还没有任何评论哟~