航空客运订票系统实验报告.docx

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

航空客运订票系统实验报告.docx

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

航空客运订票系统实验报告.docx

航空客运订票系统实验报告

实习报告

题目:

设计一个包括查询航线、客票预订和办理退票等业务的航空客运订票系统

班级:

姓名:

学号:

完成日期:

一、需求分析

1.每条航线所涉及的信息有:

终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);

2.全部数据可以只放在内存中;

3.系统能实现的操作和功能如下:

a)查询航线:

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

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

b)承办订票业务:

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,

输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。

若需要,可登记排队候补;

c)退票业务:

根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询

问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。

4.测试数据:

1.查看航线信息

2.办理订票业务:

航班号:

5订票数量:

5姓名:

1舱位等级:

1

3.办理订票业务:

航班号:

5订票数量:

6是否候票:

y姓名:

2

4.办理订票业务:

航班号:

5订票数量:

3是否候票:

y姓名:

3

5.办理退票业务:

航班号:

5姓名:

1

6.查询航线:

终点站名:

haerbin

7.查看已定票客户信息:

航班号:

5

8.查询航线:

终点站名:

shanghai

详细测试数据见调试分析。

二、概要设计

1.本程序含有订票客户结构体,候补队列,航线结构体等3个主要模块。

Main和菜单menu也是重要模块。

客户结构采用链表存储,主要操作有插入insert;队列采用链队列存储,主要操作有插入add,航线结构采用顺序存储。

2.功能模块说明

(1)显示已初始化的全部航线信息利用airlinelist()函数。

(2)浏览已订票客户信息利用Viewlink()函数。

(3)根据客户提出的终点站名,调用search()函数输出航线信息。

(4)order()办理订票业务:

根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。

(5)refund()办理退票业务:

调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。

退票成功后,重新将航线名单域指向订票单链表的头指针。

根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。

(6)退出本系统

三、详细设计

1.主程序中需要的全程量

#defineFLIGHT_NUMBER5/*给定5条航线*/

#defineMAX200/*给定座位号最大为200*/

intseat[MAX]={0,0};/*初始化每条航线200个座位号为0,即未被预定*/

intseat_num[MAX];/*暂时存放已发给客户的座位号,为存放到客户名单域的媒介*/

2.链队列类型

(1)结点类型

typedefstructQNode

{charname[10];/*等候替补客户姓名*/

intWnumber;/*订票量*/

structQNode*next;

}QNode,*Queueptr;

(2)队列类型

typedefstructWaitQueue

{Queueptrfront;/*等候替补客户名单域的头指针*/

Queueptrrear;/*等候替补客户名单域的属指针*/

}LinkQueue;/*等候替补客户用链队列存储*/

LinkQueueAddQueue(LinkQueueq,charname[],intamount)

returnq;返回等候替补的客户名单域为分别指向队头和队尾的指针

3.链表类型

typedefstructLNode/*定义已定票客户的线性链表结构*/

{charname[10];/*客户姓名*/

intBook_num;/*订票量*/

intgrade;/*舱位等级*/

intnum[MAX];/*订票客户的座位号*/

structLNode*next;

}LinkList;

LinkList*InsertLink(LinkList*head,intamount,charname[],intgrade,int*seat_num)

returnhead返回链表头指针

4.线性表类型

typedefstructairline/*定义航线的结构*/

{charterminus[10];/*终点站名*/

charflight_num[10];/*航班号*/

charplane_num[10];/*飞机号*/

charday[7];/*飞行周日(星期几)*/

inttotal_num;/*乘员定额数量*/

intremain_num;/*余票量*/

intseat[MAX];/*每条航线的座位数额为MAX设定大于乘员定额数量*/

LinkList*order;/*乘员名单域,指向乘员名单链表的头指针*/

LinkQueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/

}SqList;

structairline*first;/*定义指向航线结构的指针*/

5程序伪码:

#include

#include

#include

#include

#defineFLIGHT_NUMBER5/*给定5条航线*/

#defineMAX200/*给定座位号最大为200*/

intseat[MAX]={0,0};/*初始化每条航线200个座位号为0,即未被预定*/

intseat_num[MAX];/*暂时存放已发给客户的座位号,为存放到客户名单域的媒介*/

typedefstructQNode

{charname[10];/*等候替补客户姓名*/

intWnumber;/*订票量*/

structQNode*next;

}QNode,*Queueptr;

typedefstructWaitQueue

{Queueptrfront;/*等候替补客户名单域的头指针*/

Queueptrrear;/*等候替补客户名单域的属指针*/

}LinkQueue;/*等候替补客户用链队列存储*/

typedefstructLNode/*定义已定票客户的线性链表结构*/

{charname[10];/*客户姓名*/

intBook_num;/*订票量*/

intgrade;/*舱位等级*/

intnum[MAX];/*订票客户的座位号*/

structLNode*next;

}LinkList;

typedefstructairline/*定义航线的结构*/

{charterminus[10];/*终点站名*/

charflight_num[10];/*航班号*/

charplane_num[10];/*飞机号*/

charday[7];/*飞行周日(星期几)*/

inttotal_num;/*乘员定额数量*/

intremain_num;/*余票量*/

intseat[MAX];/*每条航线的座位数额为MAX设定大于乘员定额数量*/

LinkList*order;/*乘员名单域,指向乘员名单链表的头指针*/

LinkQueuewait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/

}SqList;

structairline*first;/*定义指向航线结构的指针*/

voiddisplay(structairline*info)/*输出每条航线的基本信息*/

{printf("%8s\t%3s\t%4s\t%5s\t\t%5d\t%12d\n",info->terminus,info->flight_num,info->plane_num,info->day,info->total_num,info->remain_num);

}

voidairlinelist()/*显示全部航线信息*/

{structairline*info;/*定义指向航线结构的指针*/

inti=0;

info=first;/*将指向第一条航线的指针赋给info*/

printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

while(i

display(info);

info++;/*指向下一条航线的指针,即查找下一条航线*/

i++;

}//while

printf("\n\n");

}//airlinelist

voidsearch()/*搜索客户提出的终点站名,若存在,则输出该航线基本信息*/

{structairline*info;

charname[10];

inti=0;

intj=0;/*j用来记录与客户提出的终点站名相同的航线条数*/

info=first;/*将指向第一条航线的指针赋给info*/

printf("请输入终点站名:

");

scanf("%s",name);

while(i

if(!

strcmp(name,info->terminus)){

if(j==0)printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");

display(info);

j++;

info++;

i++;

}//if

else{info++;i++;

}

}//while

if(j==0)printf("Sorry,没有该终点站!

\n");

}//search

structairline*find()/*根据客户提出的航班号查询并以指针形式返回*/

{structairline*info;

charnumber[10];

inti=0;

info=first;

printf("请输入航班号:

");

scanf("%s",number);

while(i

if(!

strcmp(number,info->flight_num))returninfo;

info++;

i++;

}//while

returnNULL;

}//find

voidViewlink()/*显示订票乘员名单域的客户名单信息*/

{LinkList*p;

structairline*info;

info=find();/*将find()函数返回的指针赋给info*/

if(info==NULL)printf("对不起,没有该航班号!

\n");

else{

p=info->order;

if(p!

=NULL){

printf("客户姓名订票数额舱位等级\n");

while(p){

printf("%s\t%8d\t%d\n",p->name,p->Book_num,p->grade);

p=p->next;

}//while

}//if

else

printf("该航线没有客户信息!

!

\n");

}

}//Viewlink

LinkList*InsertLink(LinkList*head,intamount,charname[],intgrade,int*seat_num)

/*增加订票乘员名单域的客户信息*/

{LinkList*q,*p;

intj;

q=head;

p=(LinkList*)malloc(sizeof(LinkList));/*向系统要空间存放新增的乘员名单域*/

if(!

p){

printf("\nOutofmemory!

!

\n");

returnNULL;

}

strcpy(p->name,name);

p->Book_num=amount;

p->grade=grade;

p->next=NULL;

for(j=0;j

{p->num[j]=(*seat_num)++;/*记录该乘员座位号,若其退票则可以回收对应的座位号*/

}

if(head==NULL)/*若原无订票客户信息*/

{head=p;p->next=NULL;}

else{/*新增订票客户从订票乘员链表前面插入*/

head=p;

p->next=q;

}

returnhead;/*返回链表头指针,该头指针此时指向新增乘员名单域*/

}

LinkQueueAddQueue(LinkQueueq,charname[],intamount)

/*增加排队等候的客户名单域*/

{Queueptrp;

p=(Queueptr)malloc(sizeof(QNode));/*向系统要空间存储排队客户*/

strcpy(p->name,name);

p->Wnumber=amount;

p->next=NULL;

if(q.front==NULL)/*若原排队等候客户名单域为空*/

q.front=p;

else

q.rear->next=p;

q.rear=p;

returnq;

}

voidorder()/*办理订票业务*/

{structairline*info;

intamount,grade;

charname[10];

info=find();

if(info==NULL){printf("对不起,没有该航班号");return;}/*根据客户提供的航班号进行查询,如为空,退出该模块*/

printf("请输入你订票所需要的数量:

");

scanf("%d",&amount);

if(amount>info->total_num)/*若客户订票额超过乘员定票总额,退出*/

{printf("\n对不起,您输入的票的数量已经超过乘员定额!

");

return;

}

if(amount<=info->remain_num)/*若客户订票额末超过余票量,订票成功并等记信息*/

{

inti,j;

j=0;

printf("请输入您的姓名(订票客户):

");

scanf("%s",name);

printf("请输入%s票的舱位等级:

",name);

scanf("%d",&grade);

for(i=1;i<=info->total_num;i++)/*依次输出该订票客户的座位号*/

{if(j>=amount)break;

while(info->seat[i]==0){/*查找未被定去的座位号*/

info->seat[i]=info->seat[i-1]+1;

printf("%s的座位号是:

%d\n",name,info->seat[i]);/*将还没被订走的座位号发给订票客户*/

seat_num[j]=info->seat[i];/*将刚发出的座位号存放到数组seat_num[]再存放到订票乘员名单域中,为其退票回收座位号做准备*/

j++;

}

}

info->order=InsertLink(info->order,amount,name,grade,seat_num);/*在订票乘员名单域中添加客户信息*/

info->remain_num-=amount;/*该航线的余票量应减掉该客户的订票量*/

printf("\n订票成功,祝你乘坐愉快!

\n");

}

else/*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/

{charr;

printf("\n已经没有更多的票,您需要排队等候吗?

(Y/N)");

r=getch();

printf("%c",r);

if(r=='Y'||r=='y')

{printf("\n请输入您的姓名(排队订票客户):

");

scanf("%s",name);

info->wait=AddQueue(info->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/

printf("\n注册成功!

\n");

}

elseprintf("\n欢迎您下次再次订购!

\n");

}

}

voidrefund()/*退票模块*/

{structairline*info;

QNode*m,*back,*n,*p;

intgrade;

LinkList*p1,*p2,*head;

charcusname[10];

info=find();

if(info==NULL){printf("对不起,没有该航班号");return;}/*调用查询函数,根据客户提供的航线进行搜索*/

head=info->order;

p1=head;

printf("请输入你的姓名(退票客户):

");

scanf("%s",cusname);

while(p1!

=NULL){/*根据客户提供的姓名到订票客户名单域进行查询*/

if(!

strcmp(cusname,p1->name))break;

p2=p1;p1=p1->next;

}

if(p1==NULL){printf("对不起,你没有订过票!

\n");return;}/*若未找到,退出本模块*/

else{/*若信息查询成功,删除订票客户名单域中的信息*/

intj,k;

for(j=0;jBook_num;j++)/*将退票座位号初始为0即未被预定*/

{k=p1->num[j];info->seat[k]=0;

}

if(p1==head)head=p1->next;

elsep2->next=p1->next;

info->remain_num+=p1->Book_num;

grade=p1->grade;

printf("%s成功退票!

\n",p1->name);

free(p1);

}

info->order=head;/*重新将航线名单域指向订票单链表的头指针*/

n=(info->wait).front;/*n指向排队等候名单队列的头结点*/

p=(info->wait).rear;/*p指向排队等候名单队列的尾结点*/

m=n;/*m为当前满点条件的排队候补名单域*/

while(m)

{if(m==(info->wait).front){

if(info->remain_num>=info->wait.front->Wnumber){/*若满足条件者为头结点*/

inti,j;

info->wait.front=m->next;

printf("%s订票成功!

\n",m->name);

for(i=1,j=0;i<=info->total_num;i++)/*依次输出该等候替补客户的座位号*/

{if(j>=m->Wnumber)break;

while(info->seat[i]==0){

info->seat[i]=info->seat[i-1]+1;

printf("%s的座位号是:

%d\n",m->name,info->seat[i]);

seat_num[j]=info->seat[i];

j++;

}/*while*/

}/*for*/

info->remain_num-=m->Wnumber;

info->order=InsertLink(info->order,m->Wnumber,m->name,grade,seat_num);/*插入到订票客户名单链表中*/

free(m);

m=info->wait.front;

}/*if*/

else{

back=m;

m=m->next;

}

}/*if*/

else{

if((info->remain_num)>=(m->Wnumber))/*若满足条件者不为头结点*/

{inti,j;

back->next=m->next;

printf("%s订票成功!

\n",m->name);

for(i=1,j=0;i<=info->total_num;i++)/*依次输出该替补订票客户的座位号*/

{if(j>=m->Wnumber)break;

while(info->seat[i]==0){info->seat[i]=info->seat[i-1]+1;

printf("%s的座位号是:

%d\n",m->name,info->seat[i]);

seat_num[j]=info->seat[i];

j++;

}/*while*/

}/*for*/

info->remain_num-=m->Wnumber;

info->order=InsertLink(info->order,m->Wnumber,m->name,grade,seat_num);/*插入到订票客户名单链表中*/

free(m);

m=back->next;

}/*if*/

else{

back=m;

m=m->next;

}/*else*/

}/*elseif*/

}/*while*/

}/*refund*/

intmenu()/*菜单界面*/

{inta;

charb[20];

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

printf("=========================================\n");

printf("1.查看航线信息:

|\n");

printf("2.查看已订票客户信息:

|\n");

printf("3.查询航线:

|\n");

printf("4.办理订票业务:

|\n");

printf("5.办理退票业务:

|\n");

printf("6.退出系统:

|\n");

printf("=========================================\n");

do{

printf("请选择你需要的功能(例如:

你想办理订票

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

当前位置:首页 > 工程科技 > 能源化工

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

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