#include "iostream"
#include "string"
using namespace std;
/*******************************定航空基本内容,用全局变量是为开发软件的方便!**********************************************************/
const string endPoint[10] = {"北京","上海","杭州","南京","南宁","武汉","南昌","夏门","安徽","长沙"}; //终点站
const string flightNum[10] = {"CZ01","CZ02","CZ03","CZ04","CZ05","CZ06","CZ07","CZ08","CZ09","CZ10"}; //航班号
const string planeNum[10] = {"SCUT01","SCUT02","SCUT03","SCUT04","SCUT05","SCUT06","SCUT07","SCUT08","SCUT09","SCUT10"}; //飞机号
const string flightDate[10] = {"2008-6-25","2008-6-25","2008-6-26","2008-6-25","2008-6-25","2008-6-25","2008-6-25","2008-6-25","2008-6-25","2008-6-25"};
const int ration = 300; //乘员定额
//定义航空链表
class Link
{
public:
string Name; //记录用户名字
int seatnum; //记录用户的座位号
Link *next;
Link(const string nam, int snum,Link* nextval=NULL) //用于舱位链表的操作
{
Name = nam;
seatnum = snum;
next = nextval;
}
Link(Link *nextval=NULL){ next = nextval; }
};
/***********************************定义侯票链表***********************************/
class waitLink
{
public:
string wName; //记录侯票客户名字
string wphoneNum; //记录侯票客户电话,主要是用于客户的侯票业务
string wEndP; //记录侯票客户的终点站
int wTicketNum; //用于记录客户侯票时的所需的座位数
int wBerth; //记录侯票客户的舱位
waitLink *wnext; //指向下一节点
waitLink *wprev; //指向前一节点
waitLink(const string name, string phonen, string endp,int ber, int ticket, waitLink *prevp = NULL, waitLink* nextval=NULL) //用于侯票链表的操作
{
wName = name;
wphoneNum = phonen;
wEndP = endp;
wBerth = ber;
wTicketNum = ticket;
wnext = nextval;
wprev = prevp;
}
waitLink(waitLink *prevp = NULL,waitLink *nextval=NULL)
{
wprev = prevp;
wnext = nextval;
}
};
/*********************************************定义航线类,是对不同航线下对应的不同舱位里面的座位链表********************************************/
/********************************** **********************************/
class airlineNode
{
public:
int bookseat[10][3]; //定义公有变量,记录每个舱位已定座位数
airlineNode()
{
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 3; j++)
{
fence[i][j] = tail[i][j] = head[i][j] = new Link;
bookseat[i][j] = 0;
fence[i][j]->seatnum = 0;
}
}
}
~airlineNode()
{
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 3; j++)
{
while(head[i][j] != NULL)
{
fence[i][j] = head[i][j];
head[i][j] = head[i][j]->next;
delete fence[i][j];
}
}
}
}
//回到结点起点
void setStart()
{
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 3; j++)
{
fence[i][j] = head[i][j];
}
}
}
void setEnd()
{
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 3; j++)
{
fence[i][j] = tail[i][j];
}
}
}
void next()
{
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < 3; j++)
{
if(fence[i][j] != tail[i][j])
{
fence[i][j] = fence[i][j]->next;
}
}
}
}
bool book(int endpnum, int t, int b); //订购机票的节点操作,主要进行的是插入和增加的操作
int remove(string nam, string endP); //删除节点
bool scanBerth( int n, int i); //遍历节点,因为定义的是每个舱位一条链表,所以根据舱位遍历
private:
Link *head[10][3]; //定义二维的指针数组,建立座位链表
Link *tail[10][3]; //表示10个航班,每个航班有3的舱位
Link *fence[10][3];
};
//查看舱位节点的定位信息
bool airlineNode :: scanBerth(int n, int i)
{
if (head[i][n]->next == NULL)
{
cout<<"该舱位暂无定位信息。"<<endl;
}
else
{
for (fence[i][n] = head[i][n]->next; fence[i][n] != NULL; fence[i][n] = fence[i][n]->next)
{
cout<<"座位"<<fence[i][n]->seatnum<<"\t"<<fence[i][n]->Name<<endl;
}
}
cout<<endl;
return true;
}
//订购机票
bool airlineNode :: book(int endpnum,int t, int b)
{
int stnums; //用于记录座位号的初值
int stnume[100]; //用于记录每个添加的座位号,方便输出
string nam;
int tnum = t; //记录所定机票的总数
cout<<"输入你的姓名:";
cin>>nam;
cout<<endl;
fence[endpnum][b] = head[endpnum][b];
if (tail[endpnum][b]->seatnum != bookseat[endpnum][b]) //当该舱位链表的尾节点记录的座位号和已定座位号不相等时,
{ //说明该链表前面有人退订了票,删除了节点,后面订票的人需插入
for (int j = 1 ; j < 100 && t != 0 ; j++) //从链表头开始查找,当查找到的节点记录的座位号与j(即累加的座位号)
{ //不相等时,则在该节点之前插入
if (fence[endpnum][b]->next != NULL && fence[endpnum][b]->next->seatnum != j)
{
stnume[tnum-t] = j;
Link *p = new Link(NULL); //新建个节点,记录所要插入节点的信息
p->seatnum = stnume[tnum-t];
p->Name = nam;
p->next = fence[endpnum][b]->next;
fence[endpnum][b]->next = p;
t--;
p = NULL;
bookseat[endpnum][b]++;
}
if (fence[endpnum][b]->next != NULL) //当查找到链表尾节点时,break,继续后面的增加节点的操作
{
fence[endpnum][b] = fence[endpnum][b]->next;
}
else break;
}
tail[endpnum][b] = fence[endpnum][b];
}
if(tail[endpnum][b]->seatnum == bookseat[endpnum][b]) //在链表尾节点增加节点
{
for (stnums = tail[endpnum][b]->seatnum;t > 0; t--)
{
tail[endpnum][b] = tail[endpnum][b]->next = new Link(nam,++stnums,NULL);
bookseat[endpnum][b]++;
stnume[tnum - t] = stnums;
}
}
/*进行输出订票信息的操作*/
cout<<"订位成功!你预订的飞机为:"<<endl;
cout<<"终点站:"<<endPoint[endpnum]<<" "<<"航班号:"<<flightNum[endpnum]<<" "<<"飞机号:"<<planeNum[endpnum]<<"日期:"<<flightDate[endpnum]<<endl;
cout<<"姓名:"<<nam<<endl;
cout<<"座位号:";
for(int i = 0; i < tnum; i++)
{
cout<<stnume[i]<<" ";
}
cout<<endl;
return true;
}
//删除座位节点
int airlineNode :: remove(string nam, string endP)
{
string n;
int berthn; //记录舱位号,用于侯票客户检查
int check1 = 0; //检查是否查找到该终点的航班
int check2 = 0; //检查是否查找到该用户的信息
int check3 = 0; //检查是否三个舱位都没有信息
berthn = 7; //随机初始化一个不在(0~3)范围的数字
for (int i = 0; i < 10; i++)
{
if (endP == endPoint[i])
{
check1 += 1;
for(int j = 0; j < 3; j++)
{
if(head[i][j]->next == NULL) check3++;
else
{
fen
航空客运订票系统(VC++)
4星 · 超过85%的资源 需积分: 10 122 浏览量
2009-02-17
19:51:42
上传
评论 2
收藏 446KB RAR 举报
gavinming
- 粉丝: 31
- 资源: 9
最新资源
- 信呼OA系统2.1.7版源码
- 3122080306 邹子轩 实验报告二.docx
- 基于STM32 NUCLEO板设计彩色LED照明灯(纯cubeMX开发)(大赛作品,文档完整,可直接运行)
- 发那科工业机器人保养大全
- Sphere.h
- REMD固有时间尺度分解信号分量可视化(Matlab完整源码和数据)
- 嵌入式系统双单片机STC89C52+STC15W104多功能学习板电路图可扩展 适用于单片机初学者和教学
- 基于STM32蓝牙控制小车系统设计(硬件+源代码+论文)大赛作品
- XILINXFPGA源码基于Spartan3火龙刀系列FPGA开发板VGA测试例程
- Java聊天室的设计与实现【尚学堂·百战程序员】
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈