航空客运订票系统.docx

上传人:b****3 文档编号:26480245 上传时间:2023-06-19 格式:DOCX 页数:24 大小:208.50KB
下载 相关 举报
航空客运订票系统.docx_第1页
第1页 / 共24页
航空客运订票系统.docx_第2页
第2页 / 共24页
航空客运订票系统.docx_第3页
第3页 / 共24页
航空客运订票系统.docx_第4页
第4页 / 共24页
航空客运订票系统.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

航空客运订票系统.docx

《航空客运订票系统.docx》由会员分享,可在线阅读,更多相关《航空客运订票系统.docx(24页珍藏版)》请在冰豆网上搜索。

航空客运订票系统.docx

航空客运订票系统

 

航空客运订票系统

设计报告

姓名:

班级:

学号:

学院:

专业:

指导:

 

2013.6.20

 

1.需求分析

该项目是制作一个航空客运订票系统,编写系统需求分析的目的是明确软件的功能、界面,使得系统分析人员及软件开发人员能清楚地了解用户的需求,方便开发工作。

1.1概述

随着出行人数越来越多,航空客运所占的比例越来越多,机场的售票压力越来越大,此软件意在解决机场的售票问题让更多的人在家就能购买机票,减轻机场负担。

1.2数据需求

两个客户名单可分别由线性表和队列实现。

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

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

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

每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。

1.3功能性需求

1.主界面模块:

供用户选择使用本系统的各个功能。

2.录入航线信息模块:

可以录入飞行目的地、航线号、飞机号、时间、一等舱数量、二等舱数量、三等舱数量。

为以后的模块提供数据。

3.查询模块:

用户输入目的地后,会显示飞往该地的航班、飞机号、起飞时间、一等舱剩余票数、二等舱剩余票数、三等舱剩余票数。

4.订票模块:

用户输入目的地后,会显示飞往该地的航班、飞机号、起飞时间、一等舱剩余票数、二等舱剩余票数、三等舱剩余票数。

提示用户是否订票,旅客订票成功后会显示订票成功。

不成功会提示旅客进入排队等票。

5.退票模块:

用户输入目的地后,会显示飞往该地的航班、飞机号、起飞时间、一等舱剩余票数、二等舱剩余票数、三等舱剩余票数。

提示用户是否退票,旅客退票成功后会显示退票成功。

1.4其他需求

①界面简洁,美观

②程序实用交互性好

2.概要设计

本系统主要使用动态链表保存机票信息,使用队列保存排队的客人信息。

其中包含有航线号、飞机号、时间、一等舱票数、二等舱票数、三等舱票数、旅客的姓名和订票信息。

采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。

划分出来的模块相对独立但又相关,且容易理解。

2.1数据结构定义

抽象数据类型

1.等候队列类型

ADTWQUEUE

{

数据对象:

D={ai∈乘客信息,I=1,2,…,n,n≥0}

数据关系:

R={|ai-1,ai∈D,i=2,…,n}

基本操作:

InitQueue(WQueue&Q)

初始条件:

Q为WQueue类型

操作结果:

构造一个空的队列Q

EnQueue(WQueue&Q,ElemTypepa)

初始条件:

队列Q已存在。

操作结果:

pa入队列

DeQueue(WQueue&Q,ElemTypep)

初始条件:

Q为非空队列。

操作结果:

删除Q的队头元素。

}ADTWQUEUE

链表类型

ADTLinklist

{数据对象:

D={ai∈信息,I=1,2,…,n,n≥0}

数据关系:

R={|ai-1,ai∈D,i=2,…,n}

基本操作:

InitLink(passenger&Pa)

操作结果:

构造一个空的链表Pa

InsertList(passengerL,ElemTypepa)

初始条件:

动态链表L已存在。

操作结果:

pa插入链表。

search_delet(passengerL,ElemTypepa)

初始条件:

线性链表L已经存在且非空。

操作结果:

删除L中pa内容相同的元素。

}ADTLinklist

数组类型

Enter(ALAirline[MAX])

操作结果:

构建AL类型的Airline数组

订票类型

Book(AL&line)

操作结果:

P=N退出订票;

P=Y确认订票;

Q=N退出排队;

Q=Y确认排队;

3.详细设计

本节介绍了首相数据类型的计算机实现,其中包括ADT的种类,功能的种类及实现,数据结构的定义,常量的定义,函数原型声明及伪代码算法。

还介绍了每个功能所对应的操作算法的实现。

3.1系统模块图

 

3.2数据结构定义

structseat

{

intfirst;//一等舱

intsecond;//二等舱

intthird;//三等舱

};/

structElemType

{

charname;//姓名

seatticket;//舱位

};//ElemType

typedefstructLNode

{

charname;//姓名

seatticket;//舱位

structLNode*next;//定义指针保存下一项地址

}LNode,*passenger;

typedefstructWQueue

{

passengerfront;//队头指针

passengerrear;//队尾指针

}WQueue;

structAL

{

charEPlace;//终点站

intFNo;//航班号

intPNo;//飞机号

intTime;//时间

seatTicket;//总票量,用结构体seat

passengerBPassenger;//已经订票的乘客,next存放已经订票的乘客链表的表地址

seatRTicket;//剩余的票额

passengerwait;//候补队列,next存放队头地址

};

 

3.3主要模块算法描述

1.数据的输入和保存

 

2.查询

 

3.订票

 

4.退票

 

4.系统实现

本节介绍了系统实现的开发环境,包括硬件环境,软件环境,以及运行界面展示。

最后显示了该系统实现后每个功能的实现结果。

4.1开发环境

硬件环境

电脑型号:

笔记本

处理器:

英特尔Corei5

主板:

华硕

显卡:

NVIDIA

软件环境

操作系统:

Windows7旗舰版64位(DirectX11)。

开发软件:

MicrosoftVisualC++6.0。

4.2测试用例

4.3测试结果

4.2运行界面

选择4录入航班信息:

选择1查询航班:

 

选择2订票:

选择3退票

 

4.3测试用例

输入a,1,10,1,3,5,10b,2,20,2,3,5,10c,3,30,3,3,5,10

当输出“请输入目的地”时,请任意输入一个一个字符的地名,会输出终点站、飞机号、航班号以及一、二、三等舱的余票额。

接下来,程序输出“是否需要订票”,如果要,请输入“Y”,程序会输出“请输入名字和票数:

”请输入你的姓名(一个字符)和订票额(一等、二等、三等),订票成功后会输出“订票成功,感谢使用。

如果不要订票,请输入“N”,程序将输出“感谢使用。

”当程序输出“是否退票。

”时,操作与订票基本一致。

5.总结

这次课程设计进行了整整两个星期,虽然一整天都在电脑房里对着电脑,很枯燥,也很辛苦,但是我觉得还是很有收获的。

这是我们第一次自己去设计一个比较系统的程序,对我们来说也是一个很好的锻炼。

首先,为了能写出程序,我将以前所学都好好的巩固了一遍,并且努力的去灵活的运用。

起码现在对结构体,链表的操作还是熟练了很多。

以前一些很模糊的知识点,通过这次练习,很多都清楚起来。

其次,平时都是编写一些单个的操作,这次需要自己写出一个可以实现几个功能的系统性的程序,刚开始时是一头雾水,但经过大家的讨论,自己的摸索,也慢慢找到了方法。

这让我体会到,在编写程序时,不仅需要扎实的知识,还要有细心周到的考虑,同学之间的合作也是很重要的。

在这两个星期里,我觉得发现了自己还有很多很多的不足,也深刻的体会到了自己还有很多东西要学,而且要真的掌握,还得多用心,多用脑。

计算机的确不好学,但只要努力就会有收获。

这次程序是写了不少,但还是没能运行出一个正确的结果,不过我相信,经过以后的学习和努力,是肯定能做出一个好的程序来的!

6.参考文献

[1]数据结构(C语言版)

[2]C语言程序设计(第四版)

7.源程序

#include

#include

#include

#include

#defineMAX3

#defineN10

#defineM10

#defineOK1

#defineERROR0

structseat

{

intfirst;

intsecond;

intthird;

};//舱位

structElemType

{

charname;

seatticket;

};//ElemType

typedefstructLNode

{

charname;

seatticket;

structLNode*next;

}LNode,*passenger;

typedefstructWQueue

{

passengerfront;

passengerrear;

}WQueue;//候补队列

structAL

{

charEPlace;//终点站

intFNo;//航班号

intPNo;//飞机号

intTime;//时间

seatTicket;//总票量,用结构体seat

passengerBPassenger;//已经订票的乘客,next存放已经订票的乘客链表的表地址

seatRTicket;//剩余的票额

passengerwait;//候补队列,next存放队头地址

};

 

intInitLink(passenger&Pa)

{

Pa=(passenger)malloc(sizeof(LNode));

if(!

Pa)returnERROR;

Pa->name=0;

Pa->ticket.first=0;

Pa->ticket.second=0;

Pa->ticket.third=0;

Pa->next=NULL;

returnOK;

}//建立乘客链表

intInitQueue(WQueue&Q)

{

Q.front=Q.rear=(passenger)malloc(sizeof(LNode));

if(!

Q.front)

returnERROR;

Q.front->next=NULL;

returnOK;

}//建立候补队列

 

intEnQueue(WQueue&Q,ElemTypepa)

{

passengerp;

p=(passenger)malloc(sizeof(LNode));

if(!

p)returnERROR;

p->name=pa.name;

p->ticket.first=pa.ticket.first;

p->ticket.second=pa.ticket.second;

p->ticket.third=pa.ticket.third;

p->next=NULL;

Q.rear->next=p;

Q.rear=p;

returnOK;

}//入队列

intInsertList(passengerL,ElemTypepa)

{

passengerp,q;

p=L;

while(p->next&&p)

p=p->next;

q=(passenger)malloc(sizeof(LNode));

q->name=pa.name;

q->ticket.first=pa.ticket.first;

q->ticket.second=pa.ticket.second;

q->ticket.third=pa.ticket.third;

q->next=NULL;

p->next=q;

returnOK;

}//乘客链表的插入

intDeQueue(WQueue&Q,ElemTypep)

{

passengerq;

if(Q.front==Q.rear)

returnERROR;

q=Q.front->next;

p.name=q->name;

p.ticket.first=q->ticket.first;

p.ticket.second=q->ticket.second;

p.ticket.third=q->ticket.third;

Q.front->next=q->next;

if(Q.rear==q)

Q.front=Q.rear;

returnOK;

}//出队列

intsearch_delet(passengerL,ElemTypepa)

{

passengerp,q;

p=L;

while(p->next)

{

if(p->next->name==pa.name)

break;

elsep=p->next;

}

q=p->next;

p->next=q->next;

free(q);

returnOK;

}//乘客链表删除

 

intEnter(ALAirline[MAX])

{

inti;

printf("请依次输入目的地,航班号,飞机号,时间,一等舱票数,二等舱票数,三等舱票数\n");

for(i=0;i

{

scanf("%c,%d,%d,%d,%d,%d,%d",&Airline[i].EPlace,&Airline[i].FNo,&Airline[i].PNo,&Airline[i].Time,&Airline[i].Ticket.first,&Airline[i].Ticket.second,&Airline[i].Ticket.third);

passengerPa=0;

InitLink(Pa);

Airline[i].BPassenger=Pa;

WQueueQ;

InitQueue(Q);

Airline[i].wait=Q.rear;

Airline[i].RTicket.first=Airline[i].Ticket.first;

Airline[i].RTicket.second=Airline[i].Ticket.second;

Airline[i].RTicket.third=Airline[i].Ticket.third;

fflush(stdin);

}

returnOK;

}//输入航线信息

 

intSearch(charplace,ALAirline[MAX])

{

inti;

for(i=0;i

{

if(place==Airline[i].EPlace)

{

printf("EPlace:

%c\nPNo:

%d\nFNo:

%d\nTime:

%d\n",Airline[i].EPlace,Airline[i].PNo,Airline[i].FNo,Airline[i].Time);

printf("剩余票数:

\n");

printf("first:

%dsecond:

%dthird:

%d\n",Airline[i].RTicket.first,Airline[i].RTicket.second,Airline[i].RTicket.third);

break;

}

}

returni;

}//查找

 

intBook(AL&line)

{

charp,q;

WQueueQ;

Q.rear=line.wait;

passengerPa=line.BPassenger;

ElemTypepa;

printf("是否需要订票(y/n)?

\n");

fflush(stdin);

scanf("%c",&p);

if(p=='n')

printf("感谢使用。

\n");

else

{

if(line.RTicket.first<=0||line.RTicket.second<=0||line.RTicket.third<=0)

{

printf("是否排队(y/n)?

\n");

fflush(stdin);

scanf("%c",&q);

if(q=='n')

printf("感谢使用。

\n");

elseprintf("请输入名字和票数等待排队:

");

fflush(stdin);

scanf("%c,%d,%d,%d",&pa.name,&pa.ticket.first,&pa.ticket.second,&pa.ticket.third);

EnQueue(Q,pa);

printf("排队成功。

\n");

}

else

{

printf("请输入姓名和票数:

:

\n");

scanf("%c,%d,%d,%d",&pa.name,&pa.ticket.first,&pa.ticket.second,&pa.ticket.third);

InsertList(Pa,pa);

line.RTicket.first=line.RTicket.first-pa.ticket.first;

line.RTicket.second=line.RTicket.second-pa.ticket.second;

line.RTicket.third=line.RTicket.third-pa.ticket.third;

}

}

returnOK;

}//Book

 

intReturn(AL&line)

{

ElemTypepa,pb;

printf("是否退票。

\n");

charp;

WQueueQ;

Q.rear=line.wait;

fflush(stdin);

scanf("%c",&p);

if(p=='y')

{

printf("请输入名字和票数:

");

fflush(stdin);

scanf("%c,%d,%d,%d",&pa.name,&pa.ticket.first,&pa.ticket.second,&pa.ticket.third);

search_delet(line.BPassenger,pa);

line.RTicket.first=line.RTicket.first+pa.ticket.first;

line.RTicket.second=line.RTicket.second+pa.ticket.second;

line.RTicket.third=line.RTicket.third+pa.ticket.third;

}

elseprintf("感谢使用。

\n");

returnOK;

}//退票

 

voidprintf_mian()

{

printf("|—————————————————|\n");

printf("|航空客运订票系统|\n");

printf("|—————————————————|\n");

printf("||\n");

printf("||\n");

printf("|请选择您需要的服务:

|\n");

printf("|1.查询航班|\n");

printf("|2.订票系统|\n");

printf("|3.退票系统|\n");

printf("|4.航线编辑|\n");

printf("|5.退出系统|\n");

printf("|—————————————————|\n");

}

 

intmain()

{

charEplace;

intn;

ALpa;

ALp[MAX];

do

{

printf_mian();

scanf("%d",&n);

inti;

switch(n)

{

case1:

printf("请输入目的地:

");fflush(stdin);scanf("%c",&Eplace);i=Search(Eplace,p);printf("\n\n查询完毕,3秒后返回主菜单。

\n\n");Sleep(3000);break;

case2:

printf("请输入目的地:

");fflush(stdin);scanf("%c",&Eplace);i=Search(Eplace,p);Book(p[i]);printf("\n\n订票成功,3秒后返回主菜单。

\n\n");Sleep(3000);break;

case3:

printf("请输入目的地:

");fflush(stdin);scanf("%c",&Eplace);i=Search(Eplace,p);Return(p[i]);printf("\n\n退票成功,3秒后返回主菜单。

\n\n");Sleep(3000);break;

case4:

fflush(stdin);Enter(p);printf("\n\n航线编辑完毕,3秒后返回主菜单。

\n\n");Sleep(3000);break;

default:

exit(0);

}

fflush(stdin);

}while(n==1||n==2||n==3||n==4);

}

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

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1