找匹配姓名、证件号、航班号的客户结点,找到后定义航班指针*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-> flight_num)==0
Y
flightnode *f=h->next
N f!=NULL
Y
N strcmp(flight_num, f->flight_num)==0
Y
f->left=f->left+p->ticket_num; f=f->next
pr->next=p->next free(p) pr=pr->next;
p=pr->next;
返回“1” 返回“0”
结束
3.4 查询航班模块
在主函数中输入“4”,调用void flight_check(flightnode *h)函数选择使用哪一种查询方
11
式进行查询。提示客户输入查询方式,如客户输入“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
调用flight_num_c 调用check_all_fl 调用place_chec heck函数进行查询 ight函数进行查询 k函数进行查询
结束
flight_num_check函数的流程图:
开始
flightnode *p=h p!=NULL Y
strcmp(p->flight_num, flight_num)==0 Y 输出航班信息,返回“1”
N N p=p->next 返回“0” 结束 3.5 查询订单模块
在主函数中输入“5”,调用void passenger_check(passengerList *PList)函数选择使用哪
12
一种查询方式进行查询。提示客户输入查询方式,如客户输入“1”,则调用int
ID_name_check(passengerList *PList,char *name,char *ID_num)函数按客户的姓名和证件号对订单进行查询,提示客户输入姓名和证件号,分别存于name和ID_num中;如客户输入“2”,则调用int order_num_check(passengerList *PList,int order_num)函数按订单号对订单进行查询,提示客户输入订单号,存于order_num中;如客户输入“3”,则调用void check_all_passenger(passengerList *PList)函数浏览全部订单信息。
在int ID_name_check(passengerList *PList,char *name,char *ID_num)函数中,定义客户指针*p= PList->head->next,使用for循环寻找匹配name和ID_num的结点,找到匹配的订单节点后,输出该订单的所有信息。
在int order_num_check(passengerList *PList,int order_num)函数中,定义客户指针
*p=PList->head->next,使用for循环寻找匹配order_num的结点,找到匹配的订单结点后,输出该订单的所有信息。
在void check_all_passenger(passengerList *PList)函数中,定义客户指针*p=PList->head->next,使用for循环输出所有订单信息。 开始
请客户选择查询方
式,存于a中
根据a的值进行选择 a==1 a==2 a==3
调用name_ID_che 调用check_all_pas 调用order_num_ch ck函数进行查询 senger函数进行查询 eck函数进行查询 结束
order_num_check函数的流程图: 开始
passengernode *p=PList->head->next
N p!=NULL Y N
p->order_num ==order_num
Y p=p->next 返回“0” 输出航班信息,返回“1”
结束
3.6 修改航班模块
在主函数中输入“6”,调用void modify_flight(flightnode *&h,passengerList *&PList)函
13
数对航班信息进行修改。提示客户输入修改模式,如客户输入“1”,则调用void add_flight(flightnode *&h)函数添加航班信息;如客户输入“2”,则调用void delete_flight(flightnode *&h,passengerList *&PList)函数删除指定的航班信息,提示客户输入航班号,存于flight_num中;如客户输入“3”,则示客户输入航班号,如果该航班号存在,则提示用户输入修改后的起飞抵达时间。
在void delete_flight(flightnode *&h,passengerList *&PList)函数中,定义航班指针*pr=h,定义航班指针p=pr->next,定义客户指针*qr=PList->head,定义客户指针*q=qr->next。使用while循环寻找匹配航班号的航班结点,找到后执行pr->next=p->next;free(p),删除指定的航班信息;使用while循环找到匹配航班号的订单结点,执行qr->next=q->next;free(q),删除对该航班订票的订单信息。如果没有找到匹配的航班结点,输出提示信息。 开始 请客户选择修改模 式,存于a中 根据a的值进行选择 a==1 a==3 a==2 调用add_flight函 输入航班号,存 调用delete_fli 数添加航班信息 入flight_num ght函数删除航班 flight_num_check (p,flight_num)==1 输入修改后的起飞抵达时间, 分别存入start_time和end_time flightnode *p=h->next p!=NULL strcmp(flight_num, p->flight_num)==0 strcpy(p->start_time,start_time) strcpy(p->end_time,end_time) p=p->next 结束
14
4. 测试与分析
4.1 合法数据的测试
(1) 编译链接后显示菜单
(2) 输入菜单号“1”,开始航班信息的录入
(3) 输入菜单号“2”,进入订票模块
15