📄 航空客运定票系统.cpp
字号:
#include "iostream.h"
#include "string.h"
#include <malloc.h>
#define MAX 100
//此结构体用来存储客户信息
typedef struct dkehu
{
char name[20]; //客户名
int count; //票数
struct dkehu *next; //指向下一个结点
}dkehu;
//队列存储定票客户的信息
typedef struct
{
struct dkehu *pre; //头指针
struct dkehu *tear; //尾指针
int len; //退票客户数
}linkQueue;
//此结构体用来存储一个航班的信息
typedef struct
{
char lastplace[20]; //目地地
int number; //总票额
int plane_num; //航班号
int fly_week; //起飞的日期
int left; //余下的票数
int saleout; //已卖出的票数
struct dkehu *p; //指向已定票链表的头
linkQueue Q; //退票队列
}airway;
//以顺序的存储结构存储各航班
airway hangxian[10];
//对各航班进行初始化
void init()
{
strcpy(hangxian[0].lastplace,"上海");
hangxian[0].number=0;
hangxian[0].plane_num=112;
hangxian[0].fly_week=1;
hangxian[0].saleout=0;
hangxian[0].left=100;
hangxian[0].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[0].p->name,"0");
hangxian[0].p->count=0;
hangxian[0].p->next=NULL;
hangxian[0].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[0].Q.tear=hangxian[0].Q.pre;
strcpy(hangxian[0].Q.pre->name,"0");
hangxian[0].Q.pre->count=0;
hangxian[0].Q.pre->next=NULL;
strcpy(hangxian[1].lastplace,"杭州");
hangxian[1].number=1;
hangxian[1].plane_num=123;
hangxian[1].fly_week=2;
hangxian[1].saleout=0;
hangxian[1].left=100;
hangxian[1].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[1].p->name,"0");
hangxian[1].p->count=0;
hangxian[1].p->next=NULL;
hangxian[1].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[1].Q.tear=hangxian[1].Q.pre;
strcpy(hangxian[1].Q.pre->name,"0");
hangxian[1].Q.pre->count=0;
hangxian[1].Q.pre->next=NULL;
strcpy(hangxian[2].lastplace,"北京");
hangxian[2].number=2;
hangxian[2].plane_num=217;
hangxian[2].fly_week=3;
hangxian[2].saleout=0;
hangxian[2].left=100;
hangxian[2].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[2].p->name,"0");
hangxian[2].p->count=0;
hangxian[2].p->next=NULL;
hangxian[2].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[2].Q.tear=hangxian[2].Q.pre;
strcpy(hangxian[2].Q.pre->name,"0");
hangxian[2].Q.pre->count=0;
hangxian[2].Q.pre->next=NULL;
strcpy(hangxian[3].lastplace,"天津");
hangxian[3].number=3;
hangxian[3].plane_num=145;
hangxian[3].fly_week=4;
hangxian[3].saleout=0;
hangxian[3].left=100;
hangxian[3].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[3].p->name,"0");
hangxian[3].p->count=0;
hangxian[3].p->next=NULL;
hangxian[3].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[3].Q.tear=hangxian[3].Q.pre;
strcpy(hangxian[3].Q.pre->name,"0");
hangxian[3].Q.pre->count=0;
hangxian[3].Q.pre->next=NULL;
strcpy(hangxian[4].lastplace,"宁波");
hangxian[4].number=4;
hangxian[4].plane_num=192;
hangxian[4].fly_week=5;
hangxian[4].saleout=0;
hangxian[4].left=100;
hangxian[4].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[4].p->name,"0");
hangxian[4].p->count=0;
hangxian[4].p->next=NULL;
hangxian[4].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[4].Q.tear=hangxian[4].Q.pre;
strcpy(hangxian[4].Q.pre->name,"0");
hangxian[4].Q.pre->count=0;
hangxian[4].Q.pre->next=NULL;
strcpy(hangxian[5].lastplace,"广州");
hangxian[5].number=5;
hangxian[5].plane_num=112;
hangxian[5].fly_week=6;
hangxian[5].saleout=0;
hangxian[5].left=100;
hangxian[5].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[5].p->name,"0");
hangxian[5].p->count=0;
hangxian[5].p->next=NULL;
hangxian[5].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[5].Q.tear=hangxian[5].Q.pre;
strcpy(hangxian[5].Q.pre->name,"0");
hangxian[5].Q.pre->count=0;
hangxian[5].Q.pre->next=NULL;
strcpy(hangxian[6].lastplace,"湖北");
hangxian[6].number=6;
hangxian[6].plane_num=112;
hangxian[6].fly_week=7;
hangxian[6].saleout=0;
hangxian[6].left=100;
hangxian[6].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[5].p->name,"0");
hangxian[6].p->count=0;
hangxian[6].p->next=NULL;
hangxian[6].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[6].Q.tear=hangxian[6].Q.pre;
strcpy(hangxian[5].Q.pre->name,"0");
hangxian[6].Q.pre->count=0;
hangxian[6].Q.pre->next=NULL;
strcpy(hangxian[7].lastplace,"哈尔滨");
hangxian[7].number=7;
hangxian[7].plane_num=112;
hangxian[7].fly_week=1;
hangxian[7].saleout=0;
hangxian[7].left=100;
hangxian[7].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[7].p->name,"0");
hangxian[7].p->count=0;
hangxian[7].p->next=NULL;
hangxian[7].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[7].Q.tear=hangxian[7].Q.pre;
strcpy(hangxian[7].Q.pre->name,"0");
hangxian[7].Q.pre->count=0;
hangxian[7].Q.pre->next=NULL;
strcpy(hangxian[8].lastplace,"新疆");
hangxian[8].number=8;
hangxian[8].plane_num=112;
hangxian[8].fly_week=2;
hangxian[8].left=100;
hangxian[8].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[8].p->name,"0");
hangxian[8].p->count=0;
hangxian[8].p->next=NULL;
hangxian[8].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[8].Q.tear=hangxian[8].Q.pre;
strcpy(hangxian[8].Q.pre->name,"0");
hangxian[8].Q.pre->count=0;
hangxian[8].Q.pre->next=NULL;
strcpy(hangxian[9].lastplace,"宁夏");
hangxian[9].number=9;
hangxian[9].plane_num=112;
hangxian[9].fly_week=5;
hangxian[9].saleout=0;
hangxian[9].left=100;
hangxian[9].p=(dkehu *)malloc(sizeof(dkehu));
strcpy(hangxian[9].p->name,"0");
hangxian[9].p->count=0;
hangxian[9].p->next=NULL;
hangxian[9].Q.pre=(dkehu *)malloc(sizeof(dkehu));
hangxian[9].Q.tear=hangxian[9].Q.pre;
strcpy(hangxian[9].Q.pre->name,"0");
hangxian[9].Q.pre->count=0;
hangxian[9].Q.pre->next=NULL;
}
//输入终点站代号对对应航班的情况进行查询
void chaxun()
{
int b;
cout<<"请输入终点站的代号:";
cin>>b;
switch(b) //对终点站代号进行判断
{
case 1:
cout<<"航班号是:"<<hangxian[0].number<<endl;
cout<<"飞机号是:"<<hangxian[0].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[0].fly_week<<endl;
cout<<"余票是:"<<hangxian[0].left<<endl;
break;
case 2:
cout<<"航班号是:"<<hangxian[1].number<<endl;
cout<<"飞机号是:"<<hangxian[1].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[1].fly_week<<endl;
cout<<"余票是:"<<hangxian[1].left<<endl;
break;
case 3:
cout<<"航班号是:"<<hangxian[2].number<<endl;
cout<<"飞机号是:"<<hangxian[2].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[2].fly_week<<endl;
cout<<"余票是:"<<hangxian[2].left<<endl;
break;
case 4:
cout<<"航班号是:"<<hangxian[3].number<<endl;
cout<<"飞机号是:"<<hangxian[3].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[3].fly_week<<endl;
cout<<"余票是:"<<hangxian[3].left<<endl;
break;
case 5:
cout<<"航班号是:"<<hangxian[4].number<<endl;
cout<<"飞机号是:"<<hangxian[4].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[4].fly_week<<endl;
cout<<"余票是:"<<hangxian[4].left<<endl;
break;
case 6:
cout<<"航班号是:"<<hangxian[5].number<<endl;
cout<<"飞机号是:"<<hangxian[5].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[5].fly_week<<endl;
cout<<"余票是:"<<hangxian[5].left<<endl;
break;
case 7:
cout<<"航班号是:"<<hangxian[6].number<<endl;
cout<<"飞机号是:"<<hangxian[6].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[6].fly_week<<endl;
cout<<"余票是:"<<hangxian[6].left<<endl;
break;
case 8:
cout<<"航班号是:"<<hangxian[7].number<<endl;
cout<<"飞机号是:"<<hangxian[7].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[7].fly_week<<endl;
cout<<"余票是:"<<hangxian[7].left<<endl;
break;
case 9:
cout<<"航班号是:"<<hangxian[8].number<<endl;
cout<<"飞机号是:"<<hangxian[8].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[8].fly_week<<endl;
cout<<"余票是:"<<hangxian[8].left<<endl;
break;
case 10:
cout<<"航班号是:"<<hangxian[9].number<<endl;
cout<<"飞机号是:"<<hangxian[9].plane_num<<endl;
cout<<"飞行日期是:"<<hangxian[9].fly_week<<endl;
cout<<"余票是:"<<hangxian[9].left<<endl;
break;
}
}
//实现定票的函数,如余票能满足客户需求将其插入航班的定票链表中,如不能满足,客户可以选择是否排队侯票,若是则将其插入侯票队列
void dingpiao(int x, int y)
{
int i,j;
struct dkehu *t;
struct dkehu *m;
char a[20];
char b[2];
for(i=0;i<10;i++) //找到客户需要的航班
if(hangxian[i].number==x)break;
if(y<=hangxian[i].left) //判断是否有足够的余票
{
cout<<"你的座位号是:";
for(j=1;j<=y;j++)
cout<<hangxian[i].saleout+j<<"、"; //输出客户的座位号
cout<<endl;
cout<<"请输入你的名字:";
cin>>a;
t=(dkehu *)malloc(sizeof(dkehu)); //动态开辟一个结点存放客户信息
strcpy(t->name,a);
t->count=y;
t->next=hangxian[i].p->next;
hangxian[i].p->next=t; //将此客户插如到定票链表中
hangxian[i].saleout=hangxian[i].saleout+y;//卖出的票做相应的改变
hangxian[i].left=hangxian[i].left-y; //剩下的票做相应的改变
}
else //余票额不能满足客户要求则选择是否侯票
{
cout<<"票额不足,是否要排队侯补(y/n)";
cin>>b;
if(strcmp(b,"y")==0) //选择是插入侯票队列中
{
cout<<"请输入你的名字:";
cin>>a;
hangxian[i].Q.len++; //队列的结点数加一
m=(dkehu *)malloc(sizeof(dkehu)); //动态开辟一个客户结点
strcpy(m->name,a);
m->count=y; //存入客户信息
m->next=NULL;
hangxian[i].Q.tear->next=m;
hangxian[i].Q.tear=m; //在队列尾部插入此客户
}
}
}
//实现退票的函数
void tuipiao()
{
char e[20];
int f;
int i,x,y;
struct dkehu *t,*q;
struct dkehu *s,*r;
cout<<"请输入日期、航班、姓名、票额:"; //退票客户输入信息
cin>>x;
cin>>y;
cin>>e;
cin>>f;
for(i=0;i<10;i++) //找到相应的航班
if(hangxian[i].fly_week==x && hangxian[i].number==y)break;
t=hangxian[i].p; //t指向此航班定票客户链表的头结点
while(strcmp(t->next->name,e)!=0 && t->next!=NULL) //找到要退票客户的结点
t=t->next;
q=t->next; //指向要退票客户的结点
while (f > q -> count) //判断要退的票额是否比所定的票额多
{
cout << "你的票额不足,请重新输入:" << endl; //若不能满足从新输入
cout<<"请输入日期、航班、姓名、票额:" << endl;
cin>>x;
cin>>y;
cin>>e;
cin>>f;
}
q->count=q->count-f; //退票后客户所剩的票数
if(q->count==0) //判断是否全额退票,是删除该结点
{
t->next=t->next->next; //将此结点从链表中删除
free(q); //释放此结点的空间
}
cout<<"退票成功!"<<endl;
s=hangxian[i].Q.pre; //指向侯票队列的头结点
hangxian[i].left=f+hangxian[i].left;
hangxian[i].saleout=hangxian[i].saleout-f;
while(hangxian[i].left>0 && s->next!=NULL) //询问侯票队列看是否能满足
{
if(s->next==NULL)break;
if(s->next->count<=hangxian[i].left) //判断余票额是否能满足侯票队列客户的要求
{
hangxian[i].left=hangxian[i].left-s->next->count;
hangxian[i].saleout=hangxian[i].saleout+s->next->count; //若满足余票额和定票额做相应的改变
cout<<"侯票队列中的"<<s->next->name<<"已定票"<<s->next->count<<"张"<<endl; //输出候补队列中客户的定票信息
r=s->next; //指向候补队列中满足要求的结点
s->next=s->next->next; //将此结点删除
r->next=hangxian[i].p->next;
hangxian[i].p->next=r; //将此结点插入到定票链表中
}
else
s=s->next; //若不满足指向下一个结点
}
}
void main()
{
int a;
int i,j;
init();
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<<"9.新疆"<<endl;
cout<<"10.宁夏"<<endl;
while(1)
{
cout<<"航线查询请按11,定票请按22,退票请按33:"<<endl;
cin>>a;
switch(a)
{
case 11:
chaxun();
break;
case 22:
cout<<"请输入航班号及定票数额:";
cin>>i;
cin>>j;
dingpiao(i,j);
break;
case 33:
tuipiao();
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -