📄 fiy.cpp
字号:
//fly.cpp
//////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include "fiy.h"
using namespace std;
//初始化航班信息:if,for的嵌套完成信息的输入
void Addplane()
{//初始化航班信息
if(!csh)
{
cout<<"请输入航班数:";cin>>k;
for(int j=0;j<k;j++)
{
cout<<"请输入航班号:";cin>>fly[j].plane;
if(fly[j].plane==fly[j-1].plane) //判断若重复输入航班,再重新输入
{cout<<"重复输入!请重新输入!"<<endl;
Addplane();
}
fly[j].seat=plane_seat;
cout<<"终点站: ";cin>>fly[j].endfly;
cout<<"时间:";cin>>fly[j].date;
cout<<endl;
csh=1;
}
}
}
//功能的连接:操作的管理,用switch实现的。
void choose()
{
int flag;
cout<<"请选择操作: ";
cin>>flag;
switch(flag)
{
case 1:Addplane();choose();
case 2:findfly();choose();
case 3:dingpiao();choose();
case 4:Show_wait();choose();
case 5:show_lvke();choose();
case 6:tuipiao();choose();
case 7:list_menu();choose();
case 8:banben();choose();
case 0:exit(1);
default: cout<<endl<<"输入错误!"<<endl<<endl;choose();
}
}
//界面菜单的设计。
void list_menu()
{
cout<<" ***********************************************************"<<endl;
cout<<" && 航空售票系统 &&"<<endl;
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<<" && 8. 系统版本信息 && "<<endl;
cout<<" && 0. 退出系统 && "<<endl;
cout<<" && 此系统为罗君改编完美版 谢谢您的使用 && "<<endl;
cout<<" *********************************************************** "<<endl;
cout<<endl;
}
//查询航班信息的实现:通过循环比较找出航班信息和判断是否又该班次。
void find()
{//查询航班信息函数
int c; bool bl=0;
string end;int num;//查询的终点站/航班号
cout<<"======================"<<endl;
cout<<"按航班查询请输入1 "<<endl;
cout<<"按终点站查询请输入2 "<<endl;
cout<<"======================"<<endl;
cout<<"请按画面提示选择查询方式:"<<endl;
cin>>c;
if(c==1)
{cout<<"请输入您要查询的航班:";
cin>>num;}
else
if(c==2)
{
cout<<"请输入要查询的终点站:"<<endl;
cin>>end;
}
else
{cout<<endl<<"输入错误!"<<endl;
bl=1;
find();
}
for(int f=0;f<k;f++)
{
if(fly[f].plane==num || fly[f].date==end)
{ bl=1;
cout<<"航班号:"<<fly[f].plane<<" ";
cout<<"终点站:"<<fly[f].endfly<<" ";
cout<<"余票:"<<fly[f].seat-n<<endl;
}
}
if(!bl)
{cout<<endl<<"没有这个航班!"<<endl<<endl;
find();}
}
void Createlistlvke()
{//建立一个空链表
head = new listlvke;
pl = new listlvke;
head->next=NULL;
pl->next=NULL;
}
//定购机票。
void dingpiao()
{
//订票函数
int pla,left; //定义一个变量left来存放剩余票数
char yd;
find();
cout<<"=============================="<<endl;
cout<<"您要订票按“y”,其他键退出!! "<<endl;
cout<<"=============================="<<endl;
cin>>yd;
if(yd=='y')
{ cout<<"您要预定的航班: ";
cin>>pla;
for(int j=0;j<k;j++)
{
if(fly[j].plane==pla)
{left=fly[j].seat-n; //剩余票数=固定票数-已售出的票数
break;}
else
{cout<<'\n'<<"没有这个航班!"<<endl<<endl;
choose();}
}
cout<<"你要订几张票?请输入票数:";
cin>>m;
if(left<m)
{cout<<"余票不足!"<<endl;
waitplane=pla; //把输入的航班号附值给候票人所需航班
ifwait(); //调用等待函数入列
}
else
{ n+=m;
for (int j=0;j<m;j++)
{ b=1;
listlvke *p2= new listlvke;
p2->data.plane=pla;
cout<<"请输入您的姓名: ";cin>>p2->data.name;
cout<<"请输入日期: ";cin>>p2->data.date;
p2->next = pl->next; //把顾客信息包括姓名和日期的结点插入链表中
pl->next =p2;
cout<<" 预定成功!"<<endl;
}
}
}
}
//浏览指定航班的所有旅客信息
void show_lvke()
{ //显示航班信息
int pla;
if (!b)
{cout<<"该航班尚未有人订票"<<endl<<endl;
choose();
}
cout<<"请输入您要查询的航班:";
cin>>pla;
cout<<endl<<"航班"<<pla<<"旅客信息如下:"<<endl;
listlvke *itr= pl; //定义一个新指针,把pl指针赋给它,并用itr来指向链表
bool flag=false;
while (itr->next!=NULL)
{
if(itr->next->data.plane==pla)
{
cout<<"姓名:"<<itr->next->data.name<<" 日期:"<<itr->next->data.date<<endl;
flag=true;
}
itr = itr->next;
}
if(!flag)
cout<<endl<<"没有这个航班!"<<endl;
}
//退票的实现
void tuipiao()
{//退票函数
string str,strname;
int backpla;
cout<<"请输姓名:";
cin>>strname;
cout<<"请输入航班:";
cin>>backpla;
bool flag=false;
listlvke *q,*itr;
q=itr= pl;
while (itr->next != NULL)
{
if(itr->next->data.plane==backpla && itr->next->data.name==strname )
{
flag=true;
q=itr->next; //删除链表中的结点
itr->next=q->next;
free(q); //从内存中释放该结点
cout<<endl<<"退票成功!"<<endl<<endl;
for(int j=0;j<k;j++)
{
if(fly[j].plane==backpla)
n-=1;
}
askwait(); //调用该函数,问排队的顾客是否需要补票
break;
}
itr = itr->next;
}
if(!flag)
cout<<endl<<"没有这张票!"<<endl<<endl;
}
//已经有票提示质询候票人
void askwait()
{
char yn;
if(front==rear)
cout<<'\n'<<"尚未有人候票!"<<endl<<endl;
else
{
Qwait *q=front;
Qwait *pf=front;
do
{
for(int j=0;j<k;j++)
{
if(q->next->data.plane==fly[j].plane)
break;
}
if(fly[j].seat-n >= q->next->data.piao)
{//如果出现
cout<<"航班"<<q->next->data.plane<<"余票额满足候票人:"<<q->next->data.name<<"需求!"<<endl;
cout<<"联系电话:"<<q->next->data.phone<<endl;
cout<<"请询问"<<q->next->data.name<<"是否现在订票?(Y/N)";
cin>>yn;
if(yn=='y')
{ listlvke *p2= new listlvke;
p2->data.plane=q->next->data.phone;
p2->data.name=q->next->data.name;
p2->data.date=q->next->data.date;
p2->next = pl->next;
pl->next =p2;
cout<<endl<<"预定成功!"<<endl;
pf=q->next;
q->next=pf->next ; //修改头指针始终指向队首元素
free (pf); //释放队首结点
break;
}
}
q=q->next;
}while(q!=rear);
}
choose();
}
void CreateQwait()
{//建立队列
front=rear=new Qwait;
if (!front) exit (1); //存储分配失败
front->next =rear->next=NULL;
}
//暂时没票是否候票的实现
void ifwait()
{ //需要排队等待就调用此函数
char g;
cout<<"=============================="<<endl;
cout<<" 您要等待订票请按“y”?"<<endl;
cout<<"=============================="<<endl;
cin>>g;
if(g=='y')
{
p = new Qwait;
if (!p) exit (1); //存储分配失败
cout<<"请输入姓名:";cin>>p->data.name;cout<<endl;
p->data.plane=waitplane;
p->data.piao=m;
cout<<"请留下您的电话:";cin>>p->data.phone;cout<<endl;
cout<<"请输入日期:";cin>>p->data.date;cout<<endl;
p->next =NULL; //生成新结点
rear->next =p; //插入队尾
rear=p;
cout<<"谢谢,有人退票我们将会通知您!"<<endl<<endl;
choose();
}
else
{cout<<"谢谢,再见!"<<endl;
choose();}
}
//浏览候票者的信息的实现。
void Show_wait()
{//显示等待排队的顾客信息
if(front==rear)
cout<<"尚未有人候票!"<<endl<<endl;
else
{
Qwait *q=front->next;//从队头找到队尾
do
{
cout<<"姓名:"<<q->data.name<<" ";
cout<<"电话:"<<q->data.phone<<" ";
cout<<"票数:"<<q->data.piao<<" ";
cout<<"日期:"<<q->data.date<<" ";
cout<<"航班号:"<<q->data.plane<<endl;
if(q->next!=NULL)
q=q->next;
}while(q!=rear);
}
}
//航班信息及该航班定票人信息浏览的实现。
void findfly()
{ //浏览航班信息
int findpla;
bool flag;
cout<<"请输入您要浏览的航班:";cin>>findpla;cout<<endl;
for(int f=0;f<k;f++)
{
if(fly[f].plane==findpla)
{
flag=1;
cout<<"航班号:"<<fly[f].plane<<" ";
cout<<"终点站:"<<fly[f].endfly<<" ";
cout<<"余票:"<<fly[f].seat-n<<endl;
}
}
if(!b)
{cout<<"尚未有人定票!"<<endl;
choose();}
listlvke *itr= pl;
while (itr->next!=NULL) //遍历链表输入链表中的信息
{
if(itr->next->data.plane==findpla)
{cout<<"该航班的乘客信息如下:"<<endl;
cout<<"姓名:"<<itr->next->data.name<<" 日期:"<<itr->next->data.date<<endl;
}
itr = itr->next;
}
if(front==rear)
cout<<"没有该航班!"<<endl<<endl;
else
{
Qwait *q=front->next;
do
{
if(q->data.plane==findpla) //输入侯票顾客的信息
{cout<<"该航班的候票旅客如下:"<<endl;
cout<<"姓名:"<<q->data.name<<" "<<endl;
cout<<"电话:"<<q->data.phone<<" "<<endl;
cout<<"票数:"<<q->data.piao<<" "<<endl;
cout<<"日期:"<<q->data.date<<" "<<endl;
cout<<"航班号:"<<q->data.plane<<endl;
}
if(q->next!=NULL)
q=q->next;
}while(q!=rear); //从队头指到队尾
}
}
void banben()
{
cout<<" ***********************************************************"<<endl;
cout<<" && 航空售票系统版本信息 &&"<<endl;
cout<<" ***********************************************************"<<endl;
cout<<" && 制作时间 : && "<<endl;
cout<<" && 2007年7月8日 && "<<endl;
cout<<" && 制作人 : && "<<endl;
cout<<" && 罗君 && "<<endl;
cout<<" && 制作人博客: && "<<endl;
cout<<" && menglidefeng.51.com && "<<endl;
cout<<" && 修改时间 : && "<<endl;
cout<<" && 2007年7月11日 && "<<endl;
cout<<" && qq : && "<<endl;
cout<<" && 153564724 && "<<endl;
cout<<" && 此系统为罗君改编完美版 谢谢您的使用 && "<<endl;
cout<<" *********************************************************** "<<endl;
cout<<endl;
}
//主函数
int main()
{
CreateQwait();
Createlistlvke();
list_menu();
choose();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -