数据结构课程设计:飞机订票系统设计与实现 (里面附有源代码!)

顾客订票模块

在主函数中输入“2”,调用int book(flightnode *&h,passengerList *&PList)函数完成客户的订票。用航班指针*p指向已存在航班链表*h的头结点的下一个结点,请客户输入起飞抵达城市,分别存于start_place和end_place中。调用int place_check(flightnode *l,char *start_place,char *end_place)函数,如果函数返回“1”则请客户输入要订的航班号,如果输入的航班号不存在,输出提示信息,

如果航班存在则提示客户输入订的票数、客户的姓名和证件号,调用void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函数,定义航班指针*p=h->next,使用for循环匹配flight_num和p->flight_num,找到后,执行p->left=p->left-ticket_num,修改相应航班的空座数。用malloc函数申请一个客户结点,并用指针*q指向,将客户信息和航班号赋到新申请的结点中,PList->rear->next=q;PList->rear=q;该操作将该结点插入客户链表中。

如果该航班已满仓或该航班的空座数不够,输出可供选择的航班,让客户选择,之后调用void insert_passengerList(flightnode *&h,passengerList *&PList,char *name,char *ID_num,char *flight_num,int ticket_num)函数将客户结点插入客户链表中.

开始 flightnode *p=h->next; 输入起飞抵达城市,分别存于 start_place和end_place

N place_check(h,start_p

lace,end_place)==1

Y

输入航班号,存入flight_num

N flight_num

==NULL

Y

航班号不为空!

输入航班号,存入flight_num

N p!=NULL Y

N strcmp(p->flight_num, flight_num)==0 Y 输入姓名、证件号、订票数,分别存入name、ID_num、ticket_num

接上页: ID_num==NULL Y 证件号不为空! 输入证件号,存入ID_num N N ticket_num==NULL Y 订票数不为空! 输入订票数,存入ticket_num p->left>0&& p->left>=ticket_num Y 调用insert_passengerList函数 完成客户订票 调用insert_passengerList函数 完成客户订票 N 显示其他可选航班 供客户选择 p=p->next 返回“1” 返回“0” 顾客退票模块 在主函数中输入“3”,调用void cancel(passengerList *&PList,flightnode *&h)函数完成客户的退票。提示客户输入客户的姓名和证件号以及要退的航班号,此函数再调用int

结束 delete_passenger(passengerList *&PList,flightnode *&h,char *name,char *ID_num,char *flight_num)函数,用客户结点指针*pr等于已存在客户链表结点Plist的头指针,相当于将*pr指向客户链表的头结点,用客户结点指针*p指向pr的下一个结点。使用while循环寻找匹配姓名、证件号、航班号的客户结点,找到后定义航班指针*f=h->next,使用for循环找到匹配航班号的航班结点,执行f->left=f->left+p->ticket_num,修改退票后相应航班结点

的空座数,之后执行pr->next=p->next;free(p);删除要退票的客户订单信息。如果没有找到匹配的客户结点,输出提示信息。 开始 输入姓名、证件号、航班号,分别存 于name、ID_num、flight_num

调用delete_passenger函数

完成客户的退票

结束

开始 delete_passenger函数的流程图: passengernode *pr=PList->head passengernode *p=pr->next N p!=NULL

Y

strcmp(name,p->name)==0&& N

strcmp(ID_num,p->ID_num)==

0&&strcmp(flight_num,p->

Y

flightnode *f=h->next

N f!=NULL

Y

N strcmp(flight_num, f->flight_num)==0 Y

f=f->next f->left=f->left+p->ticket_num;

pr->next=p->next

free(p) pr=pr->next; p=pr->next; 返回“1” 返回“0”

结束

查询航班模块

在主函数中输入“4”,调用void flight_check(flightnode *h)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“1”,则调用int flight_num_check(flightnode *l,char *flight_num)函数按航班号对航班进行查询,提示客户输入航班号,存于flight_num

中;如客户输入“2”,则调用int place_check(flightnode *l,char *start_place,char *end_place)函数按起飞抵达城市对航班进行查询,提示客户输入起飞抵达城市,分别存于start_place和end_place中;如客户输入“3”,则调用void check_all_flight(flightnode *l)函数浏览全部航班信息。

在int flight_num_check(flightnode *l,char *flight_num)函数中,定义航班指针*p=h,使用for循环匹配flight_num和p->flight_num,找到匹配的航班节点后,输出该航班的所有信息。 在int place_check(flightnode *l,char *start_place,char *end_place)函数中,定义航班指针*p=h,使用for循环寻找匹配start_place和start_place的结点,找到匹配的航班结点后,输出该航班的所有信息。

在void check_all_flight(flightnode *l)函数中,定义航班指针*p=h,使用for循环输出所有航班信息。 开始

请客户选择查询方

式,存于a中

根据a的值进行选择 a==1 a==2 a==3

调用place_chec 调用check_all_fl 调用flight_num_c heck函数进行查询 ight函数进行查询 k函数进行查询 结束

flight_num_check函数的流程图:

开始

flightnode *p=h N p!=NULL Y N strcmp(p->flight_num,

flight_num)==0 Y p=p->next 返回“0” 输出航班信息,返回“1”

结束

查询订单模块

在主函数中输入“5”,调用void passenger_check(passengerList *PList)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“1”,则调用int ID_name_check(passengerList *PList,char *name,char *ID_num)函数按客户的姓名和证件号对订单进行查询,提示客户输入姓名和证件号,分别存于name和ID_num中;如客户输

联系客服:779662525#qq.com(#替换为@)