| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1676 人关注过本帖
标题:刚编的 《航空售票系统》 数据结构 大家一起讨论
只看楼主 加入收藏
江水泛滥
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-7-2
收藏
 问题点数:0 回复次数:6 
刚编的 《航空售票系统》 数据结构 大家一起讨论

头文件fly.h
///////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
using namespace std;
#define LEN sizeof(listlvke)
#define plane_seat 5//每架飞机5张票
int k; //每天的航班数
int n; //已售票数
int i=0; //返回订票旅客链表的长度
int m;//候票人所需票数
int waitplane;//候票人所需航班
bool b=0; //判断是否有人候票
bool csh=0; //判断航班是否已进行初始化
struct lvke
{
string name;
int plane;
string date;

};

typedef struct listlvke
{
lvke data;
listlvke *next;
}listlvke;

listlvke *head,*pl;

struct wait
{
string name;
long phone;
int plane;
int piao;
string date;

};

typedef struct Qwait
{
wait data;
Qwait *next;
}Qwait;
Qwait *p,*front,*rear;


struct Allfly
{int plane;//航班号
int seat;//座位数
int yupiao;
string endfly;//终点站
string date;//起航时间
}fly[5];

void dingpiao();//订票
void list_menu();//菜单
void ifwait(); //是否候票
void find(); //查询指定航班的航班信息及剩余座位数
void findfly(); //浏览某个航班所有信息(包括find()信息,乘客,后票人)
void Show_wait();//浏览等待机票的旅客信息
void show_lvke();//浏览指定航班的所有旅客信息
void choose();// 选择操作
void Createlistlvke();
void tuipiao();
void askwait();


fly.cpp
//////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
#include "fly.h"
using namespace std;

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;
}

}
}


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 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<<" && 0. 退出系统 && "<<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\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); //从队头指到队尾
}
}

int main()
{
CreateQwait();
Createlistlvke();
list_menu();
choose();
return 0;
}

题目是:
13、售票处的服务系统(***)
【问题描述】
航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【系统要求】
设民航售票处的计算机系统可以为客户提供下列各项服务:
1. 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
2. 承办订票业务:根据客户提出的要求(日期、航班号、订票数额)查询该航班票额情况,若尚有余额,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需要重新询问客户要求。若需要,可预约登记排队等候。
3.承办退票业务:根据客户提供的情况(日期、航班、退票数额),为客户办理退票手续,然后查询该航班是否有人预约登记,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队预约的客户。
【测试数据】
由学生任意指定,但报告上要求写出多批数据测试结果。
【实现提示】
每条航线应包含的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票额、已订票的客户名单(包括姓名、订票额、座位号)和预约登记的客户名单(包括日期、姓名、所需票额)。这最后两项显然是一个线性表和一个队列。为查找方便、已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预料,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述八个域,其中乘员名单域为指向乘员名单链表的头指针,预约登记客户名单域为分别指向队头和队尾的指针。
【选做内容】
当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其它航线情况。
大家还可以充分发挥自己的想象力,增加你的系统的功能和其它服务项目。


搜索更多相关主题的帖子: 数据结构 航空 订票 int 系统 
2007-07-03 17:30
江水泛滥
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-7-2
收藏
得分:0 
回复:(江水泛滥)刚编的 《航空售票系统》 数据结构...

有没有朋友给我支持点意见啊

2007-07-06 12:32
fangfangff
Rank: 1
等 级:新手上路
威 望:2
帖 子:479
专家分:0
注 册:2006-12-22
收藏
得分:0 
不错,但是个人感觉还是一点小问题
好象提示不是很清晰............

千里冰封---My Love 尽管相隔千里 , 依然拥有冰封
2007-07-06 12:59
guiding
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-15
收藏
得分:0 
回复:(fangfangff)不错,但是个人感觉还是一点小问题...

choose()函数中switch部分应该加写break吧

2007-07-06 13:28
guiding
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-15
收藏
得分:0 
回复:(guiding)回复:(fangfangff)不错,但是个人...
还有一个错误
findfly()中if(!b) 应该是if(!flag)吧
2007-07-06 13:59
mjh_abc
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-7-7
收藏
得分:0 
为什么不使用面向对象的方式设计程序?
你的程序各个模块之间联系太多,模块之间太依赖实现细节,不易扩展和理解。
不易调试。

[此贴子已经被作者于2007-7-7 9:27:29编辑过]

2007-07-07 09:23
江水泛滥
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-7-2
收藏
得分:0 
回复:(mjh_abc)为什么不使用面向对象的方式设计程序...
choose( )中if(!b) 而不是if(!false)是采用过程化的一种缺点,太依赖细节了!

面向对象编程我还不会。。。。

我也想用啊
2007-07-19 19:09
快速回复:刚编的 《航空售票系统》 数据结构 大家一起讨论
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043836 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved