航空客运售票服务系统.docx

上传人:b****6 文档编号:12103939 上传时间:2023-06-04 格式:DOCX 页数:29 大小:288.24KB
下载 相关 举报
航空客运售票服务系统.docx_第1页
第1页 / 共29页
航空客运售票服务系统.docx_第2页
第2页 / 共29页
航空客运售票服务系统.docx_第3页
第3页 / 共29页
航空客运售票服务系统.docx_第4页
第4页 / 共29页
航空客运售票服务系统.docx_第5页
第5页 / 共29页
航空客运售票服务系统.docx_第6页
第6页 / 共29页
航空客运售票服务系统.docx_第7页
第7页 / 共29页
航空客运售票服务系统.docx_第8页
第8页 / 共29页
航空客运售票服务系统.docx_第9页
第9页 / 共29页
航空客运售票服务系统.docx_第10页
第10页 / 共29页
航空客运售票服务系统.docx_第11页
第11页 / 共29页
航空客运售票服务系统.docx_第12页
第12页 / 共29页
航空客运售票服务系统.docx_第13页
第13页 / 共29页
航空客运售票服务系统.docx_第14页
第14页 / 共29页
航空客运售票服务系统.docx_第15页
第15页 / 共29页
航空客运售票服务系统.docx_第16页
第16页 / 共29页
航空客运售票服务系统.docx_第17页
第17页 / 共29页
航空客运售票服务系统.docx_第18页
第18页 / 共29页
航空客运售票服务系统.docx_第19页
第19页 / 共29页
航空客运售票服务系统.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

航空客运售票服务系统.docx

《航空客运售票服务系统.docx》由会员分享,可在线阅读,更多相关《航空客运售票服务系统.docx(29页珍藏版)》请在冰点文库上搜索。

航空客运售票服务系统.docx

航空客运售票服务系统

学生实习报告

课程名称_数据结构与数据处理应用训练

题目名称航空客运售票服务系统

学生学院

专业班级

学号

学生姓名

指导教师

 

2012年2月16日

航空客运售票服务系统

【摘要】21世纪是一个高速、快捷的年代。

在这个高速发展的年代里,速度成了我们追求的目标;二是提高工作效率;三是降低成本。

而且这样的系统势必让用户易学、易用,满足客户需求。

因此,办公自动化的高速度、高效率、高便捷、低成本便成了我们的目的,为此开发了这个“机场售票管理系统”。

本系统是采用C++开发的一个管理系统。

本系统要解决的是机场售票中所要解决的问题,包括售票退票功能、预约等待功能、查询航线功能、浏览航线客户功能等。

在整个系统中采用队列、线性链表、数组等存储方法。

在整个系统设计过程中,严格按照软件工程设计标准来设计系统。

【关键词】飞机信息,队列,线性链表,数据结构

1内容与要求

【问题描述】

航空客运订票的业务活动包括:

查询航线、机票预订和办理退票等。

试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

【具体要求】

设民航售票处的计算机系统可以为客户提供下列各项服务:

1.查询航线:

根据旅客提出的终点站名输出下列信息:

航班号、飞机号、星期几飞行,最近一天航班的日期和余票额。

2.承办订票业务:

根据客户提出的要求(日期、航班号、订票数额)查询该航班票额情况,若尚有余额,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需要重新询问客户要求。

若需要,可预约登记排队等候。

3.承办退票业务:

根据客户提供的情况(日期、航班、退票数额),为客户办理退票手续,然后查询该航班是否有人预约登记,首先询问排在第一的客户,若所退票数能满足他的要求,则为他办理订票手续,否则依次询问其他排队预约的客户。

【实现提示】

每条航线应包含的信息有:

终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票额、已订票的客户名单(包括姓名、订票额、座位号)和预约登记的客户名单(包括日期、姓名、所需票额)。

这最后两项显然是一个线性表和一个队列。

为查找方便、已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。

由于预约人数无法预料,队列也应以链表作存储结构。

整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。

每条航线是这张表上的一个记录,包含上述八个域,其中乘员名单域为指向乘员名单链表的头指针,预约登记客户名单域为分别指向队头和队尾的指针。

【测试数据】

自己设计,但报告上要求写出多批数据测试结果。

【选做内容】

当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其它航线情况。

大家还可以充分发挥自己的想象力,增加你的系统的功能和其它服务项目。

2总体设计

本系统的总体设计分为售票退票功能、预约等待功能、查询航线功能、浏览航线客户功能等。

具体请看该流程图:

查询航线:

voidchaxun(charzdzhan[10],intn,mainlistA)

订票业务:

voiddingpiao(intday,inthangbanhao,intdingpiaoe,intn,mainlistA)

退票业务:

voidtuipiao(intday,inthangbanhao,inttuipiaoe,charname[],intn,mainlistA)

浏览订票情况:

voidliulan(intn)

线性链表:

初始化链表:

voidInitList(LNode*&H)

清除链表:

voidClearList(LNode*&H)

计算链表长度:

intLengthList(LNode*H)

判断链表是否为空:

boolEmptyList(LNode*H)

根据POS值取出值:

kehuGetList(LNode*H,intpos)

查找链表中的数据:

boolFindList(LNode*H,kehuitem)

遍历链表:

voidTraverseList(LNode*H)

链表中插入数据:

boolInsertList(LNode*&H,kehuitem,intpos)

链表中删除数据:

boolDeleteList(LNode*&H,kehu&item,intpos)

队列:

voidInitQueue(Queue&Q)//初始化循环队列Q

intEmptyQueue(QueueQ)//判断队列是否为空,空返回1,否则返回0

voidEnQueue(Queue&Q,dengdaiitem)//进队列

dengdaiOutQueue(Queue&Q)//出队列

dengdaiPeekQueue(QueueQ)//取出队列中第一个数据

voidClearQueue(Queue&Q)//清除该队列

3详细设计

结构定义:

typedefstruct{

charname[10];//客户姓名

intdingpiaoe;//订票额

}dengdai;//预约等待的客户

typedefstruct{

charname[10];//客户姓名

intdingpiaoe;//订票额

intzuoweihao;//座位号

}kehu;//订到票的客户

typedefstruct{

charzdzhan[10];//终点站名

inthangbanhao;//航班号

intweek;//星期

intday;//日期

intyupiao;//余票

intdinge;//成员定额

LNode*pass;//订到票的客户

Queuewait;//等待预约的客户

}ElemType;

插入航线:

先提示要输入的航线数量,再用一个FOR循环将所有输入的数据存入数组;

查询航线:

用一个FOR循环,将输入的要查询的信息与数组中的所有航线信息作比较,若找到相同的终点站,则全部将他们输出。

订票业务:

用一个FOR循环,将输入的要订票的信息与数组中的所有航线信息作比较,若找到与输入信息相同的航线,则输出“找到您所要订的航班!

”,之后再输入客户姓名,再将以上输入信息放入2个结构:

预约等待的客户和订票客户。

再判断该航班是否有那么多票够该客户买,若够则输出座位号,若不够,则输出:

“该航班余票不足,是否预约登记排队等候,请选择YES/NO”,若客户选择YES,则将该客户信息放入队列。

若客户选择NO,则返回选择菜单。

如果在循环结束后,还未找到该航班,则输出:

“找不到您所要订的航班!

退票业务:

用一个FOR循环,将输入的要退票的信息与数组中的所有航线信息作比较,若找到与输入信息相同的航线,则输出“找到了您的航班!

”,再判断输入的退票额是否符合他的订票额,若大于订票额,则输出:

“您要退的票大于您订的票,退票不成功!

请重新输入退票额”并返回选择菜单。

若不大于,则输出“退票成功!

”并输出他剩余的票数。

若票数为0,则删除该客户信息。

退票结束后,询问在预约等待的顾客,从队列头开始,查找与余票额相符的顾客信息,找到则输出“XX客户的座位号为X”,找不到则让他们继续等待。

如果在循环结束后,还未找到该航班,则输出:

“您没有该航班的票!

浏览订票情况:

首先让使用者输入要查询的航线信息(日期、航班号)。

然后利用线性链表的的遍历功能,输出要查询航班客户信息。

4程序测试

测试数据:

航线信息:

终点站航班号星期日期

hangzhou1120120101

hangzhou2220120102

hangzhou3320120103

beijing4120120101

beijing5320120103

tianjing6420120104

tianjing7620120106

hangzhou8120120101

hangzhou9320120103

sichuan10220120102

sichuan11720120107

jiangsu12120120108

jiangsu13220120109

chongqin14520120105

chongqin15620120106

运行正确:

菜单输入错误:

订票时找不到航班:

退票时找不到航班:

输入的退票额大于订票额:

5总结

基本上能安全的运行,具备的功能符合题目的要求。

程序写的还算简练,结构清晰,各个模块的分工和功能明确。

21世纪是一个高速、快捷的年代。

在这个高速发展的年代里,速度成了我们追求的目标;二是提高工作效率;三是降低成本。

而且这样的系统势必让用户易学、易用,满足客户需求。

因此,办公自动化的高速度、高效率、高便捷、低成本便成了我们的目的,为此开发了这个“机场售票管理系统”。

本系统可以大大简化售票,订票,查询,统计等十分繁琐的工作,各个部门相互协调,简化办公环节,提高工作效率,便于管理,各种数据可以一目了然。

这次系统的设计从最开始的需求分析,可行性研究,到系统的整体设计,包括概要设计和详细设计的一个整体过程,本人真正明白了要做一个软件的难度,特别是要做一个真正可用的软件,就更难了。

经过这一个星期的实践编程,我收获很多,不仅巩固了以前的知识:

特别是像队列、链表、线性表、数组等等,还从同学、网上学到了很多其他知识,并且对调试更加熟悉。

不过这次的编程还是比较顺利的,没有出现特别大的错误,特别是那种出一点错就要改很久的错误。

这次实践过程中主要遇到的错误有以下一些:

1.一开始编的线性链表的头文件是带表头附加结点的,但是在调用存入客户的座位号的时候,是不需要表头附加结点的,不然出现的错误就是每个人的座位号错误,尤其是第一个客户,是个非常大的负数。

所以为了修改该错误,就要重新编写一个不带表头附加结点的线性链表。

2.一开始将数组mainlistA,定义成局部变量。

但是由于在子函数中要多次使用A,有时候又会忘记定义,所以就把A当作全局变量。

3.有时候也会出现一些不常用的小错误,就是做比较的时候还是很习惯的用“==”,“>”“<”等,但是在这个结构很多的程序里,很多都是字符型的,所以要记得使用STRING的功能去做比较和赋值等。

4.还有这次编程的一个难点,就是处理预约等待的客户。

后来从找资料和询问同学的想法之后知道了可以用一个新的队列,在询问预约等待的客户时不符合的就放入新的队列,符合就进入订票的链表,有了思路之后完成的就能很快了。

参考文献

[1]徐孝凯,《数据结构实用教程》[M],清华大学出版社,2006年9月

[2]牛义德.带刺的红玫瑰.航空电子售票系统.中国电子商务,2000

[3]伍俊良.VisualFoxpro.闵红梅.课程设计与系统开发案例.北京:

清华大学出版社,2003

[4]张龙.school著.晏海华译.软件工程导论第四版.北京清华大学出版,2003.11-13,25Judy

[5]c++编程--从问题分析到程序设计实验指导书.电子工业出版社

附录

test0.cpp:

#include

#include

#include

#include

typedefstruct{

charname[10];//客户姓名

intdingpiaoe;//订票额

}dengdai;//预约等待的客户

typedefstruct{

charname[10];//客户姓名

intdingpiaoe;//订票额

intzuoweihao;//座位号

}kehu;//订到票的客户

#include"Queue.h"

#include"LinkList.h"

typedefstruct{

charzdzhan[10];//终点站名

inthangbanhao;//航班号

intweek;//星期

intday;//日期

intyupiao;//余票

intdinge;//成员定额

LNode*pass;//订到票的客户

Queuewait;//预约等待的客户

}ElemType;

constintMaxSize=200;

typedefElemTypemainlist[MaxSize];

mainlistA;

#include"a.h"

voidmain()

{

intn=0,i,j,day,hangbanhao,dingpiaoe,tuipiaoe,k;

charzdzhan[10],name[10];//终点站名

while

(1){

printf("*********欢迎使用航空客运售票服务系统*********\n");

printf("**请选择相关服务项目**\n");

printf("**1.插入航线**\n");

printf("**2.查询航线**\n");

printf("**3.订票业务**\n");

printf("**4.退票业务**\n");

printf("**5.浏览订票情况**\n");

printf("**0.退出**\n");

printf("**********************************************\n");

cin>>j;

if(j==1){

cout<<"请输入您想插入的航线信息数:

";

cin>>k;

cout<<"请依次输入航线信息:

终点站名、航班号、星期几、日期"<

for(i=0;i

cin>>A[i].zdzhan;

cin>>A[i].hangbanhao;

cin>>A[i].week;

cin>>A[i].day;

A[i].yupiao=50;

A[i].dinge=50;

InitQueue(A[i].wait);

InitList(A[i].pass);

}

n=n+k;

}

elseif(j==2){

cout<<"请输入你想去的终点名:

";

cin>>zdzhan;

chaxun(zdzhan,n,A);

}

elseif(j==3){

cout<<"请输入您想订票的日期、航班号、订票额"<

cin>>day>>hangbanhao>>dingpiaoe;

dingpiao(day,hangbanhao,dingpiaoe,n,A);

}

elseif(j==4){

cout<<"请输入您想退票的日期、航班号、退票额、姓名"<

cin>>day>>hangbanhao>>tuipiaoe>>name;

tuipiao(day,hangbanhao,tuipiaoe,name,n,A);

}

elseif(j==5){

liulan(n);

}

elseif(j==0)

break;

else

printf("输入错误!

\n");

}

}

a.h:

voidchaxun(charzdzhan[10],intn,mainlistA)

{

inti,j=0;

printf("终点站名\t航班号\t星期几\t日期\t余票\n");

for(i=0;i

if(strcmp(A[i].zdzhan,zdzhan)==0)

cout<

<

}

}

voiddingpiao(intday,inthangbanhao,intdingpiaoe,intn,mainlistA)

{

inti,count;

kehutemp;

dengdaiitem;

chark[10];

for(i=0;i

if(day==A[i].day&&hangbanhao==A[i].hangbanhao){

cout<<"找到您所要订的航班!

"<

temp.dingpiaoe=dingpiaoe;

item.dingpiaoe=dingpiaoe;

cout<<"请输入您的姓名:

";

cin>>temp.name;

strcpy(item.name,temp.name);

if(dingpiaoe<=A[i].yupiao){

count=A[i].dinge-A[i].yupiao+1;

printf("您的座位号为%d\n",count);

temp.zuoweihao=count;

A[i].yupiao=A[i].yupiao-dingpiaoe;

InsertList(A[i].pass,temp,0);

}

else{

cout<<"该航班余票不足,是否预约登记排队等候,请选择YES/NO"<

cin>>k;

if(strcmp(k,"YES")==0)

EnQueue(A[i].wait,item);

else

return;

}

break;

}

}

if(i>=n)

cout<<"找不到您所要订的航班!

"<

}

voidtuipiao(intday,inthangbanhao,inttuipiaoe,charname[],intn,mainlistA)

{

inti,count;

Queuetemp;

dengdaiitem;

kehuitem1;

LNode*p;

InitQueue(temp);

for(i=0;i

{

if((day==A[i].day)&&(hangbanhao==A[i].hangbanhao))

{

p=A[i].pass;

while(p)

{

if(!

strcmp(name,p->data.name))

{

cout<<"找到了您的航班!

"<

if(tuipiaoe>p->data.dingpiaoe)

{

cout<<"您要退的票大于您订的票,退票不成功!

请重新输入退票额"<

return;

}

else

{

A[i].yupiao=A[i].yupiao+tuipiaoe;

count=p->data.dingpiaoe-tuipiaoe;

printf("退票成功,您还有%d张票\n",count);

if(p->data.dingpiaoe)

p->data.dingpiaoe=count;

else

DeleteList(p,item1,-1);

}

while(!

EmptyQueue(A[i].wait))

{

item=PeekQueue(A[i].wait);

if(item.dingpiaoe>A[i].yupiao)

{

EnQueue(temp,OutQueue(A[i].wait));

}

else

{

item1.dingpiaoe=item.dingpiaoe;

strcpy(item1.name,item.name);

item1.zuoweihao=A[i].dinge-A[i].yupiao+1;

InsertList(A[i].pass,item1,0);

OutQueue(A[i].wait);

A[i].yupiao-=item.dingpiaoe;

cout<

"<

}

}

A[i].wait=temp;

return;

}

p=p->next;

}

}

}

if(i>=n)

cout<<"您没有该航班的票!

"<

}

voidliulan(intn)

{

intday,hangbanhao;

cout<<"请输入您要查询的航线信息(日期、航班号):

";

cin>>day>>hangbanhao;

for(intt=0;t

{

if((day==A[t].day)&&(hangbanhao==A[t].hangbanhao))

{

printf("客户号\t订票额\n");

TraverseList(A[t].pass);

}

}

}

LinkList.h:

typedefstructNode{

kehudata;

structNode*next;

}LNode;

voidInitList(LNode*&H)

{

H=NULL;

}

voidClearList(LNode*&H)

{//释放动态申请的内存空间

LNode*cp,*np;//当前结点指针与后继结点指针

cp=H;

while(cp!

=NULL)//按顺序遍历单链表,释放每个结点

{

np=cp->next;//保存下一个结点

free(cp);

cp=np;//使下一个结点成为当前结点

}

H=NULL;//置单链表为空

}

intLengthList(LNode*H)

{

LNode*p=H;//用来遍历链表结点

inti=0;//用来统计结点个数

while(p!

=NULL)

{

i++;

p=p->next;

}

returni;

}

boolEmptyList(LNode*H)

{

re

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2