数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)讲课稿_第1页
数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)讲课稿_第2页
数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)讲课稿_第3页
数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)讲课稿_第4页
数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)讲课稿_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计:飞机订票系统设计与实现(里面附有源代码!)精品文档课程设计题目 飞机订票系统院 系 *******专 业 ***************姓 名 ******学 号 *********指导教师 ***2012年7月收集于网络,如有侵权请联系管理员删除精品文档需求分析1.1 问题描述基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。本课程设计的题目为:飞机订票系统。1.2 基本要求 输入的形式和输入值的范围录入航班信息时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型( float);还需要输入航班是否满仓,值为整型int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息)。客户订票时,需要输入起飞抵达城市,然后选择航班进行查询,选择航班时需要输入航班号,值为字符串。客户退票时,需要输入姓名,证件号进行退票操作,值为字符串。查询某个航班的情况时,需要输入航班号,值为字符串;在查询某个航线的情况时,还可以通过输入起飞抵达城市来查询,值为字符串。查询某个订单时,需要输入订单号,值为整型(int);或者需要输入客户姓名和证件号,值为字符串。修改航班时,需要输入字符型数据选择进行何种修改操作;增加航班时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录收集于网络,如有侵权请联系管理员删除精品文档入航班信息,“0”表示停止录入航班信息);删除航班时,需要输入要删除的航班的航班号;修改航班时间时,需要输入要修改的航班的航班号,修改后的航班起飞时间和抵达时间。 输出形式在所有操作后的输出中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。录入航班情况时,输出显示添加航班信息是否成功。客户订票时,当客户输入起飞抵达城市后,输出可供客户选择的航班信息;客户选择了航班后,输入提示信息告知用户订票是否成功。客户退票时,输出客户退票成功或者无此客户,无法退票。查询航班时,输出显示对应的航班信息,或者输出提示信息告知没有相应的航班信息。查询订单时,输出显示对应的订单信息,或者输出提示信息告知没有相应的订单信息。修改航班时,输出对应的提示的信息,提示操作是否成功。 功能要求(1)可以录入航班情况,数据存储在一个数据文件中;(2)可以查询某个航线的情况:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞抵达城市,查询飞机航班情况;(3)可以订票,订票情况存在一个数据文件中(如果该航班已经无票,提供相关可选航班);(4)可退票并且退票后修改相关数据文件;收集于网络,如有侵权请联系管理员删除精品文档(5)客户资料:姓名,证件号,订票数量及航班情况,订单要有编号;(6)修改航班信息,当航班信息改变可修改航班数据文件;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。概要设计2.1 数据结构(1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项:航班号起飞降落起飞抵达航班空座数票价票价时间时间城市城市是否满仓折扣字符串字符串字符串字符串字符串整数整数浮点数浮点数(int)(int)(float)(float)单链表如下:h D1 D2 D3 ^每个结点包括数据域和指针域:数据域 指针域语言描述如下:typedefstructflightnode{charair_num[10];//航班号charstart_time[15];//起飞时间charend_time[15];//抵达时间charstart_place[20];//起飞城市收集于网络,如有侵权请联系管理员删除精品文档charend_place[20];//降落城市intleft; //空座数floatprice; //票价floatprice_discount;//票价折扣intisFull; //航班是否满仓structflightnode*next;//指向下一个结点}flightnode;//航班结点(2)客户的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号、航班号、订票数量和订单号五个数据项:姓名 证件号 航班号 订票数量 订单号字符串 字符串 字符串 整数(int) 整数(int)每个结点包括数据域和指针域:数据域 指针域语言描述如下:typedefstructpassengernode{//定义客户资料结点charname[20]; //姓名charID_num[20];//证件号charflight_num[10];//航班号intorder_num; //订单号intticket_num; //订票数量structpassengernode*next;//指向下一个结点}passengernode;(3)客户链表:每个数据元素包括头指针和尾指针两个数据项:收集于网络,如有侵权请联系管理员删除精品文档每个结点包括两个指针域:头指针域 尾指针域语言描述如下:typedefstructpassengerList{passengernode*head;passengernode*rear;}passengerList;2.2 程序模块 录入航班信息模块voidadd_flight(flightnode*&h)调用voidinsert_flight(flightnode*&h,char*flight_num,char*start_place,char*end_place,char*start_time,char*end_time,intleft,floatprice,floatprice_discount,intisFull)函数,将新航班结点插入航班链表中。 客户订票模块intbook(flightnode*&h,passengerList*&PList)函数调用intinsert_passenger(passengernode*&h,char*name,char*ID_num,char*flight_num,intticket_num,intorder_num)函数,将新客户结点插入客户链表中。 客户退票模块voidcancel(passengerList*&PList,flightnode*&h)函数调用intdelete_passenger(passengerList*&PList,flightnode*&h,char*name,char*ID_num)函数,将相应的顾客结点删除,并修改相应的航班信息。 查询航班模块voidflight_check(flightnode*h)调用voidcheck_all_flight(flightnode*h)函数进行所有航班信息浏览,调用 intplace_check(flightnode*h,char*start_place,char*end_place)函数按起收集于网络,如有侵权请联系管理员删除精品文档飞抵达城市对航班进行查询,调用 intflight_num_check(flightnode*h,char*flight_num)按航班号对航班进行查询。 查询订单模块voidpassenger_check(passengerList*PList)调用voidcheck_all_passenger(passengerList*PList)函数进行所有订单信息浏览,调用 intorder_num_check(passengerList*PList,intorder_num)函数按订单号对订单进行查询,调用 intID_name_check(passengerList*PList,char*name,char*ID_num)按客户姓名和证件号对订单进行查询。 修改航班模块增加航班时,voidmodify_flight(flightnode*&h,passengerList*&PList) 函数调用voidadd_flight(flightnode*&h)函数,将新航班信息结点插入航班链表中。删除航班时,voidmodify_flight(flightnode*&h,passengerList*&PList) 函数调用voiddelete_flight(flightnode*&h,passengerList*&PList)函数将相应的航班信息删除 ,并删除相应的订单信息。修改航班时间时,voidmodify_flight(flightnode*&h,passengerList*&PList) 函数修改指定航班的起飞抵达时间。2.3 各模块之间的调用关系以及算法设计 各模块之间的调用关系收集于网络,如有侵权请联系管理员删除精品文档主函录入 订票 退票 查询航 查询订 修改航班信 退出浏 按 按 浏 按 按 增 删 修览 航 起 览 订 客 加 除 改班 飞 单 户 航抵 姓 算法设计voidinit_flight(flightnode*&h) :要建立一个以 h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表。voidinit_passengerList(passengerList*&pList):建立一个带有头指针和尾指针的空链表,存储带有顾客信息的结点。voidsave_flight(flightnode*h):保存航班信息到指定数据文件中。voidload_flight(flightnode*&h):从存储航班信息的文件导入航班信息到航班链表中。voidsave_passenger(passengerList*PList):保存客户信息到指定数据文件中。voidload_passenger(passengerList*&PList):从存储客户信息的文件导入客户信息到客户链表中。voidadd_flight(flightnode*&h):录入航班信息后调用 insert_flight函数增加航班。收集于网络,如有侵权请联系管理员删除精品文档voidinsert_flight(flightnode*&h,char*flight_num,char*start_place,char*end_place,char*start_time,char*end_time,intleft,floatprice,floatprice_discount,intisFull):在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中。intbook(flightnode*&l,passengerList*&PList):要完成客户订票,将客户结点插入客户链表中,并修改相应的航班信息。voidinsert_passengerList(flightnode*&h,passengerList*&PList,char*name,char*ID_num,char*flight_num,intticket_num):在顾客订票后,将该顾客结点插入到顾客链表中,并修改相应的航班信息。voidfind_same_flight(flightnode*l,char*flight_num):在客户订票时,当客户输入的航班号对应的航班已满仓时,提供其他可选航班并输出显示。voidcancel(passengerList*&PList,flightnode*&h):完成客户退票,将客户的订单从客户链表中删除,并修改相应的航班信息。intdelete_passenger(passengerList*&PList,flightnode*&h,char*name,char*ID_num):按照要退票的顾客的姓名和证件号查找该顾客结点 ,进行删除操作。voidflight_check(flightnode*h):选择使用何种方式对航班信息进行查询。voidcheck_all_flight(flightnode*l):浏览所有航班信息。intplace_check(flightnode*l,char*start_place,char*end_place):按照起飞抵达城市查询航班信息。intflight_num_check(flightnode*l,char*flight_num):按照航班号查询航班信息。voidpassenger_check(passengerList*PList):选择使用何种方式对订单信息进行查询。voidcheck_all_passenger(passengerList*PList):浏览所有订单信息。intorder_num_check(passengerList*PList,intorder_num):按订单号查询订单信息。收集于网络,如有侵权请联系管理员删除精品文档intID_name_check(passengerList*PList,char*name,char*ID_num):按客户姓名和证件号查询订单信息。voidmodify_flight(flightnode*&h,passengerList*&PList) :修改航班信息,包括添加航班信息,删除航班信息,修改航班起飞抵达时间。voiddelete_flight(flightnode*&h,passengerList*&PList):按照某个航班号删除航班结点。详细设计3.1 录入航班信息模块在主函数中输入“1”,调用voidadd_flight(flightnode*&h)函数,此函数将航班指针 *p指向已存在航班链表*h的头结点,利用for(;p->next!=NULL;p=p->next){} 使*p指向航线链表的最后一个结点,然后让用户输入航班信息,然后调用 voidinsert_flight(flightnode*&h,char*flight_num,char*start_place,char*end_place,char*start_time,char*end_time,intleft,floatprice,floatprice_discount,intisFull)函数,用malloc函数申请一个航班结点,并用收集于网络,如有侵权请联系管理员删除精品文档指针*q指向,将航班信息赋到新申请的结点中, p->next=q;p=p->next;该操作将该结点插入航班链表中。流程图如下:开始flightnode*p=h;Np-Yp=p->nextNmark==Y输入航班信息调用insert_flight函是否继续录入航班信息结束3.2 顾客订票模块在主函数中输入“2”,调用intbook(flightnode*&h,passengerList*&PList)函数完成客户的订票。用航班指针*p指向已存在航班链表*h的头结点的下一个结点,请客户输入起飞抵达城市,分别存于 start_place和end_place中。调用intplace_check(flightnode*l,char收集于网络,如有侵权请联系管理员删除精品文档*start_place,char*end_place)函数,如果函数返回“1”则请客户输入要订的航班号,如果输入的航班号不存在,输出提示信息,如果航班存在则提示客户输入订的票数、客户的姓名和证件号,调用 voidinsert_passengerList(flightnode*&h,passengerList*&PList,char*name,char*ID_num,char*flight_num,intticket_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;该操作将该结点插入客户链表中。如果该航班已满仓或该航班的空座数不够,输出可供选择的航班,让客户选择,之后调用voidinsert_passengerList(flightnode*&h,passengerList*&PList,char*name,char*ID_num,char*flight_num,intticket_num)函数将客户结点插入客户链表中 .开始flightnode*p=h->next;输入起飞抵达城市,分别存于place_check(h,star Nt_place,end_place)Y输入航班号,存入flight_num

NY航班号不为空!输入航班号,存入 flight_numNp!=NULYstrcmp(p- N收集于网络,如有侵权请联系管理员删除>flight_num,精品文档接上页:NID_num==NUYLL证件号不为空!输入证件号,存入 ID_numNticket_num==NULLY订票数不为输入订票数,存入p->left>0&&Np-Y显示其他可选航调用insert_passengerList班函数调用insert_passengerList函数p=p->next收集于网络,如有侵权请联系管理员删除返回“1” 返回“0”精品文档3.3 顾客退票模块在主函数中输入“3”,调用voidcancel(passengerList*&PList,flightnode*&h)函数完成客户的退票。提示客户输入客户的姓名和证件号以及要退的航班号,此函数再调用 intdelete_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、调用delete_passenger函数完成客户的退票结束开始delete_passenger函数的流程图:passengernode*pr=PList->headNp!=NULLYstrcmp(name,p- N>name)==0&&收strcmp(ID集于网络,如_有num,p侵权请联-系管理员删除>ID_num)==精品文档3.4 查询航班模块在主函数中输入“4”,调用voidflight_check(flightnode*h)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“ 1”,则调用intflight_num_check(flightnode*l,char*flight_num)函数按航班号对航班进行查询,提示客户输入航班号,存于 flight_num中;如客户输入“2”,则调用intplace_check(flightnode*l,char*start_place,char*end_place)函数按起飞抵达城市对航班进行查询,提示客户输入起飞抵达城市,分别存于 start_place和end_place中;如客户输入“3”,则调用voidcheck_all_flight(flightnode*l)函数浏览全部航班信息。在intflight_num_check(flightnode*l,char*flight_num)函数中,定义航班指针*p=h,使用for循环匹配flight_num和p->flight_num,找到匹配的航班节点后,输出该航班的所有信息。收集于网络,如有侵权请联系管理员删除精品文档在intplace_check(flightnode*l,char*start_place,char*end_place)函数中,定义航班指针*p=h,使用for循环寻找匹配start_place和start_place的结点,找到匹配的航班结点后,输出该航班的所有信息。在voidcheck_all_flight(flightnode*l)函数中,定义航班指针*p=h,使用for循环输出所有航班信息。开始请客户选择查询方a==1根据a的值进行选a==3a==2调用flight_num_c调用check_all_fl调用heck函数进行查询ight函数进行查询place_chec结束flight_num_check函数的流程图:开始flightnodeNp!=NULYstrcmp(p- N>flight_num,Yp=p->next输出航班信息,返回“1” 返回“0”结束3.5 查询订单模块在主函数中输入“5”,调用voidpassenger_check(passengerList*PList)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“ 1”,则调用int收集于网络,如有侵权请联系管理员删除精品文档ID_name_check(passengerList*PList,char*name,char*ID_num)函数按客户的姓名和证件号对订单进行查询,提示客户输入姓名和证件号,分别存于 name和ID_num中;如客户输入“2”,则调用intorder_num_check(passengerList*PList,intorder_num)函数按订单号对订单进行查询,提示客户输入订单号,存于 order_num中;如客户输入“3”,则调用voidcheck_all_passenger(passengerList*PList)函数浏览全部订单信息。在intID_name_check(passengerList*PList,char*name,char*ID_num)函数中,定义客户指针*p=PList->head->next,使用for循环寻找匹配name和ID_num的结点,找到匹配的订单节点后,输出该订单的所有信息。在intorder_num_check(passengerList*PList,intorder_num)函数中,定义客户指针*p=PList->head->next,使用for循环寻找匹配order_num的结点,找到匹配的订单结点后,输出该订单的所有信息。在voidcheck_all_passenger(passengerList*PList)函数中,定义客户指针*p=PList->head->next,使用for循环输出所有订单信息。开始请客户选择查询方a==1根据a的值进行选a==3a==2调用调用check_all_pas调用name_ID_chesenger函数进行查询order_num_ch结束order_num_check函数的流程图: 开始passengernode*p=PList->head-Np!=NULYNp-收集>order于网络,_如num有侵权请联系管理员删除Y精品文档3.6 修改航班模块在主函数中输入“6”,调用voidmodify_flight(flightnode*&h,passengerList*&PList) 函数对航班信息进行修改。提示客户输入修改模式,如客户输入“ 1”,则调用voidadd_flight(flightnode*&h)函数添加航班信息;如客户输入“2”,则调用voiddelete_flight(flightnode*&h,passengerList*&PList)函数删除指定的航班信息,提示客户输入航班号,存于 flight_num中;如客户输入“3”,则示客户输入航班号,如果该航班号存在,则提示用户输入修改后的起飞抵达时间。在voiddelete_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==1a==2a==3调用add_flight输入航班号,调用函存delete_fliflight_num_check输入修改后的起飞抵达时间,flightnode*p=h-收集p!=NUL于网络,如有侵权请联系管理员删除精品文档测试与分析4.1 合法数据的测试(1)编译链接后显示菜单(2)输入菜单号“1”,开始航班信息的录入收集于网络,如有侵权请联系管理员删除精品文档(3)输入菜单号“2”,进入订票模块(4)输入菜单号“3”,进入退票模块(5)输入菜单号“4”,查询航班信息输入菜单号“1”,按航班号查询航班信息收集于网络,如有侵权请联系管理员删除精品文档输入菜单号“2”,按起飞抵达城市查询航班信息输入菜单号“3”,浏览全部航班信息(6)输入菜单号“5”,查询订单信息输入菜单号“1”,按客户姓名和证件号查询订单信息输入菜单号“2”,按订单号查询订单信息输入菜单号“3”,浏览全部订单信息收集于网络,如有侵权请联系管理员删除精品文档(7)输入菜单号“6”,进入航班修改模块输入菜单号“1”,增加航班输入菜单号“2”,删除航班输入菜单号“3”,修改航班时间(8)输入菜单号“0”,退出本系统。收集于网络,如有侵权请联系管理员删除精品文档4.2 非法数据的测试(1)在主菜单中输入错误号码后,系统自动跳转到主菜单,继续让用户输入。(2)选择订票服务后,输入了没有开通航班的城市(3)选择订票服务后,输入了系统中没有的航班号(4)选择退票服务后,输入了没有订票的客户姓名和证件号(5)选择航班查询服务后,输入了没有开通航班的城市收集于网络,如有侵权请联系管理员删除精品文档(6)选择航班查询服务后,输入了系统中不存在的航班号(7)选择订单查询服务后,输入了没有订票的客户姓名和证件号(8)选择订单查询服务后,输入了系统中不存在的订单号(9)选择删除航班服务后,输入了系统中不存在的航班号(10)选择修改航班时间服务后,输入了系统中不存在的航班号用户使用说明5.1 运行环境Windowsxp;MicrosoftVisualC++6.05.2 主要功能飞机订票系统系统功能模块如下:收集于网络,如有侵权请联系管理员删除精品文档主要功能包括录入航班信息、客户订票、客户退票、查询航班信息、查询订单信息、修改航班信息六个模块;其中查询航班信息模块包括按航班号查询、按起飞抵达城市查询和浏览全部航班信息;其中查询订单信息模块包括按订单号查询、按客户姓名和证件号查询以及浏览全部订单信息;其中修改航班信息模块包括添加航班信息、删除航班信息和修改航班起飞抵达时间。5.3 操作注意事项用户在使用飞机订票系统之前,应注意以下事项:用户在输入数据时,飞机航班号、起飞抵达城市、起飞抵达时间、客户姓名、证件号等为字符串形式;空座数、订票数量、航班是否满仓等为整型( int);票价、票价折扣等为浮点型(float);其他形式的输入,请按输入提示进行操作,以免引起不必要的故障。5.4 业务流程输入相应的选择信息,便可进入相应的模块中。(1)输入“1”,进入【录入航班信息】模块,输入航班的相关信息,完成航班信息的录入。(2)输入“2”,进入【客户订票】模块,输入客户的信息、要订的票数和要订的航班号,完成客户的订票操作。(3)输入“3”,进入【客户退票】模块,输入客户的信息、要退的航班号,完成客户的退票操作。(4)输入“4”,进入【查询航班信息】模块,可以浏览或查询航班的相关信息。(5)输入“5”,进入【查询订单信息】模块,可以浏览或查询订单的相关信息。收集于网络,如有侵权请联系管理员删除精品文档(6)输入“6”,进入【修改航班信息】模块,可以添加航班信息、删除航班信息和修改航班的起飞抵达时间。总结经过这两周的数据结构课程设计,我收获很大,在实现系统功能的过程中,也遇到很多问题,分工协作,设计修改,编写调试,每一步都渗透着沟通和分析,每一次沟通之后,都会对系统功能有更深层次的理解和阐述,这也促使我们一步步完成了整个系统,并使之可以运行。两周的时间太短暂了,我们无法把全部学到的知识运用到具体的系统实现中,深深感受到数据结构这门课程的重要性,以及它在实际应用中的广泛性。本系统由于种种原因仍然存在需要改进,需要完善的地方,我对于这个系统的认识和对数据结构这门课程的理解已经更加深入了。在今后的学习和工作中,会更加深入地把知识和思想体会更广泛地应用到其他相关领域。本系统在人性化的方面做得还不够,对于另类的输入错误,还不能很好地应对,这也体现出本系统不够健壮,会在今后的学习中加以改进和完善;在功能模块方面还可以增加更多相关模块,是系统更加完善。在实现系统的过程中,我感受到自己的知识的薄弱零散,经过这次做系统,我觉得自己的知识得到巩固和整合,知识体系更加系统化。我也深深体会到实践检验真理,只有实践中,才能出真知。我懂得了学习不只是纸上谈兵,更重要的是实践,就比如平常我们在学习中经常会遇到一些问题,看似无关紧要跳过去,不求甚解,在得知答案的时候,总是感觉心领神会,久而久之,对于的知识点就模棱两可,形成知识漏洞。但这次课程设计所要编写的程序很长,涉及的知识点也很多,选择此题目的时候我心里面还底气十足,自认为没什么问题,对于程序的步骤仿佛了然于胸,但在实际操作中才发现并收集于网络,如有侵权请联系管理员删除精品文档非如此,在编写程序的过程中,我不断地查阅相关资料进行学习,积极地思考该怎样实现系统的每一个功能。通过这次数据结构的课程设计,我巩固和加深对数据结构基本知识的理解,锻炼了综合运用课本知识的能力,自己也真正地完整而系统地设计并编写了一个程序,使得自己的编程能力大为提高。通过对我所选择飞机订票系统的设计和编写,我初步掌握简单软件的分析方法和设计方法,更深的领悟了“纸上得来终觉浅,觉知此事要躬行”的重要意义,第一次体会到了数据结构编程知识在实际生活中的重要性和应用的广泛性。参考文献谭浩强C程序设计(第四版)北京:清华大学出版社,2006李春葆数据结构教程(第二版)北京:清华大学出版社,2007附录:程序源代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>typedefstructflightnode{charflight_num[10];//航班号charstart_time[10];//起飞时间charend_time[10]; //抵达时间charstart_place[20];//起飞城市charend_place[20];//抵达城市intleft; //空座数floatprice; //票价floatprice_discount;//票价折扣intisFull; //航班是否满仓structflightnode*next;//指向下一个结点}flightnode;//航班结点typedefstructpassengernode{charname[20]; //姓名charID_num[20]; //证件号charflight_num[10];//航班号收集于网络,如有侵权请联系管理员删除精品文档intorder_num; //订单号intticket_num; //订票数量structpassengernode*next;//指向下一个结点}passengernode;//客户结点typedefstructpassengerList{passengernode*head;passengernode*rear;}passengerList;voidinit_flight(flightnode*&h)// 目的是要建立一个以 h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表{h=(flightnode*)malloc(sizeof(flightnode));//申请头结点的空间if(h==NULL)exit(0);h->next=NULL;//将头结点h的指针域置为空}voidinit_passengerList(passengerList*&pList){pList=(passengerList*)malloc(sizeof(passengerList));pList->head=(passengernode*)malloc(sizeof(passengernode));//创建头结点pList->rear=pList->head;pList->rear->order_num=0;//订单号从0开始计数pList->head->next=NULL;}voidsave_passenger(passengerList*PList){FILE*fp=fopen("passenger.dat","wb");if(fp==NULL)return;passengernode*temp=PList->head->next;while(temp!=NULL){fwrite(temp,sizeof(passengernode),1,fp);temp=temp->next;};fclose(fp);}voidload_passenger(passengerList*PList){FILE*fp=fopen("passenger.dat","rb");if(fp==NULL)return;passengernode*q;intn;while(!feof(fp)){q=(passengernode*)malloc(sizeof(passengernode));=fread(q,sizeof(passengernode),1,fp);if(n!=1)收集于网络,如有侵权请联系管理员删除精品文档break;PList->rear->next=q;PList->rear=q;}PList->rear->next=NULL;fclose(fp);}voidsave_flight(flightnode*h){FILE*fp=fopen("flightList.dat","wb");if(fp==NULL)return;flightnode*temp=h->next;while(temp!=NULL){fwrite(temp,sizeof(flightnode),1,fp);temp=temp->next;};fclose(fp);}voidload_flight(flightnode*&h){flightnode*pt=h;FILE*fp=fopen("flightList.dat","rb");if(fp==NULL)return;flightnode*q;intn;while(!feof(fp)){q=(flightnode*)malloc(sizeof(flightnode));n=fread(q,sizeof(flightnode),1,fp);if(n!=1)break;pt->next=q;pt=q;}pt->next=NULL;fclose(fp);}intfind_same_flight(flightnode*h,char*flight_num){flightnode*t=h->next,*p=h->next;intmark=0;printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","折扣","是否满仓","空座数");while(t!=NULL&&strcmp(t->flight_num,flight_num)!=0)t=t->next;while(p!=NULL){if((strcmp(t->start_place,p->start_place)==0)&&(strcmp(t->end_place,p->end_place)==0)&&(strcmp(t->flight_num,p->flight_num)!=0))收集于网络,如有侵权请联系管理员删除精品文档{printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->price_discount,p->isFull,p->left);mark=1;}p=p->next;}if(mark==0){printf("\t\t抱歉,没有可选的航班!\n");return0;}return1;}voidinsert_flight(flightnode*&h,char*flight_num,char*start_place,char*end_place,char*start_time,char*end_time,intleft,floatprice,floatprice_discount,intisFull)//在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中{flightnode*q;//定义q为新增加的航班结点的指针的形参flightnode*p=h;q=(flightnode*)malloc(sizeof(flightnode));//为q结点申请空间strcpy(q->flight_num,flight_num);strcpy(q->start_place,start_place);strcpy(q->end_place,end_place);strcpy(q->start_time,start_time);strcpy(q->end_time,end_time);q->left=left;q->price=price;q->price_discount=price_discount;q->isFull=isFull;//以上是用strcpy函数将新增加航班的各种信息复制到q结点中q->next=p->next;//将q结点的指针域置为空p->next=q;p=p->next;//将指针后移}voidinsert_passengerList(flightnode*&h,passengerList*&PList,char*name,char*ID_num,char*flight_num,intticket_num)//客户订票后,将客户结点插入客户链表中,并修改相应的航班信息。{flightnode*p=h->next;for(;p!=NULL;p=p->next)if(strcmp(p->flight_num,flight_num)==0){p->left=p->left-ticket_num;if(p->left==0)p->isFull=1;}收集于网络,如有侵权请联系管理员删除精品文档passengernode*q=(passengernode*)malloc(sizeof(passengernode));//新建结点,存放新的客户订单信息strcpy(q->name,name);strcpy(q->ID_num,ID_num);strcpy(q->flight_num,flight_num);q->ticket_num=ticket_num;q->next=NULL;//将新订单连接到链表中PList->rear->next=q;q->order_num=PList->rear->order_num+1;//生成订单号PList->rear=q;}voiddelete_flight(flightnode*&h,passengerList*&PList)//目的要按照某个航班号删除航班结点{flightnode*p,*pr;passengernode*q,*qr;charflight_num[10];intmark=1;qr=PList->head;//pr为顾客链表的头结点q=qr->next;//用p作为中间指针对顾客链表中要删除的顾客结点进行查找pr=h;//pr为航线链表的头结点p=pr->next;//用p作为指针对航线链表中要删除的航班结点进行查找printf("\t\t请输入你要删除的航班号:");scanf("%s",flight_num);while(p!=NULL)//要删除的航班存在,下面进行删除操作{if(strcmp(flight_num,p->flight_num)==0){pr->next=p->next;//移动指针找着要删除的航班结点free(p);//删除操作printf("\t\t删除%s航班成功!\n",flight_num);mark=0;p=NULL;}if(pr->next!=NULL){pr=pr->next;p=pr->next;}}if(mark==1)printf("\t\t无此航班,无法删除!\n");else{while(q!=NULL)//要删除的顾客存在,下面进行删除操作{收集于网络,如有侵权请联系管理员删除精品文档if(strcmp(flight_num,q->flight_num)==0){qr->next=q->next;//移动指针找着要删除的顾客结点free(q);q=NULL;}if(qr->next!=NULL){qr=qr->next;q=qr->next;}}}}intdelete_passenger(passengerList*&PList,flightnode*&h,char*name,char*ID_num)//目的是按照要退票的顾客的姓名查找该顾客结点,进行删除操作{passengernode*p,*pr=PList->head;//pr指向顾客链表的头结点p=pr->next;while(p!=NULL){if(strcmp(name,p->name)==0&&strcmp(ID_num,p->ID_num)==0){for(flightnode*f=h->next;f!=NULL;f=f->next)if(strcmp(p->flight_num,f->flight_num)==0){f->left=f->left+p->ticket_num;f->isFull=0;break;}pr->next=p->next;free(p);printf("\t\t顾客%s,%s退票成功!\n",name,ID_num);return1;}pr=pr->next;p=pr->next;}printf("\t\t无此顾客,无法退票!\n");return0;}voidadd_flight(flightnode*&h)//录入航班信息后调用 insert_flight函数增加航班{flightnode*p=h;charflight_num[10],start_time[10],end_time[10],start_place[20],end_place[20];intleft,isFull,mark=1;floatprice,price_discount;for(;p->next!=NULL;p=p->next){}// 移动指针,找到最后一个结点while(mark==1)收集于网络,如有侵权请联系管理员删除精品文档{printf("\t\t请输入你要增加的航班号 :");scanf("%s",flight_num);printf("\t\t请输入出发地:");scanf("%s",start_place);printf("\t\t请输入目的地:");scanf("%s",end_place);printf("\t\t请输入起飞时间:");scanf("%s",start_time);printf("\t\t请输入抵达时间:");scanf("%s",end_time);printf("\t\t请输入票价:");scanf("%f",&price);printf("\t\t请输入折扣:");scanf("%f",&price_discount);printf("\t\t请输入剩余座位数:");scanf("%d",&left);printf("\t\t请输入是否满仓(0表示没有满仓1以满仓):");scanf("%d",&isFull);insert_flight(p,flight_num,start_place,end_place,start_time,end_time,left,price,price_discount,isFull);printf("\t\t增加航班%s成功!\n",flight_num);printf("\t\t是否继续录入航班信息(1表示继续录入;0表示停止录入).\n");printf("\t\t请输入:");scanf("%d",&mark);}}intflight_num_check(flightnode*h,char*flight_num)//用航班号进行查询{flightnode*p=h;printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","折扣","是否满仓","空座数");for(;p!=NULL;p=p->next){if(strcmp(p->flight_num,flight_num)==0){printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->price_discount,p->isFull,p->left);return1;}}printf("\t\t抱歉,没有航班号为%s的航班信息!\n",flight_num);return0;}intplace_check(flightnode*h,char*start_place,char*end_place)//用起飞抵达城市进行查询{收集于网络,如有侵权请联系管理员删除精品文档flightnode*p=h;intmark=0;printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","折扣","是否满仓","空座数");for(;p!=NULL;p=p->next){if(strcmp(p->start_place,start_place)==0&&strcmp(p->end_place,end_place)==0){printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->price_discount,p->isFull,p->left);mark=1;}}if(mark==0){printf("\t\t抱歉,没有从%s到%s的航班信息!\n",start_place,end_place);return0;}return1;}voidcheck_all_flight(flightnode*h){flightnode*p=h;intm=0;printf("%-8s%-12s%-12s%-10s%-10s%-8s%-6s%-10s%-8s\n","航班号","起飞城市","抵达城市","起飞时间","抵达时间","价格","折扣","是否满仓","空座数");for(;p!=NULL;p=p->next){printf("%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8d\n",p->flight_num,p->start_place,p->end_place,p->start_time,p->end_time,p->price,p->price_discount,p->isFull,p->left);m=1;}if(m==0)printf("\t\t航班信息为空!\n");}voidflight_check(flightnode*h)//选择使用哪一个函数进行查询{flightnode*p=h->next;charflight_num[10],start_place[20],end_place[20];chara;printf("\t\t请选择航班查询方式:\n");printf("\t\t1表示按航班号进行查询;\n");printf("\t\t2表示按起飞抵达城市进行查询;\n");printf("\t\t3表示浏览全部航班信息.\n\t\t请选择输入:");a=getch();printf("%c\n",a);if(a=='1')收集于网络,如有侵权请联系管理员删除精品文档{printf("\t\t请输入航班号:");scanf("%s",flight_num);flight_num_check(p,flight_num);}elseif(a=='2'){printf("\t\t请输入起飞城市:");scanf("%s",start_place);printf("\t\t请输入抵达城市:");scanf("%s",end_place);place_check(p,start_place,end_place);}elseif(a=='3')check_all_flight(p);elsereturn;}intID_name_check(passengerList*PList,char*name,char*ID_num){passengernode*p=PList->head->next;intmark=0;printf("%-8s%-20s%-20s%-10s%-8s%\n","订单号","姓名","证件号","航班号","订票数量");for(;p!=NULL;p=p->next){if(strcmp(p->ID_num,ID_num)==0&&strcmp(p->name,name)==0){printf("%-8d%-20s%-20s%-10s%-8d%\n",p->order_num,p->name,p->ID_num,p->flight_num,p->ticket_num);mark=1;}}if(mark==0){printf("\t\t抱歉,没有%s,%s的订单信息!\n",name,ID_num);return0;}return1;}intorder_num_check(passengerList*PList,intorder_num){passengernode*p=PList->head->next;printf("%-8s%-20s%-20s%-10s%-8s%\n","订单号","姓名","证件号","航班号","订票数量");for(;p!=NULL;p=p->next){if(p->order_num==order_num){收集于网络,如有侵权请联系管理员删除精品文档printf("%-8d%-20s%-20s%-10s%-8d%\n",p->order_num,p->name,p->ID_num,p->flight_num,p->ticket_num);return1;}}printf("\t\t抱歉,没有订单号为%d的订单信息!\n",order_num);return0;}voidcheck_all_passenger(passengerList*PList){passengernode*p=PList->head->next;intm=0;printf("%-8s%-20s%-20s%-10s%-8s%\n","订单号","姓名","证件号","航班号","订票数量");for(;p!=NULL;p=p->next){printf("%-8d%-20s%-20s%-10s%-8d%\n",p->order_num,p->name,p->ID_num,p->flight_num,p->ticket_num);m=1;}if(m==0)printf("\t\t订单信息为空!\n");}voidpassenger_check(passengerList*PList){charname[20],ID_num[15];intorder_num;chara;printf("\t\t请选择订单查询方式:\n");printf("\t\t1表示按客户姓名和证件号进行查询;\n");printf("\t\t2表示按订单号进行查询;\n");printf("\t\t3表示查看全部订单信息.\n\t\t请选择输入:");a=getch();printf("%c\n",a);if(a=='1'){printf("\t\t请输入客户姓名:");scanf("%s",name);printf("\t\t请输入证件号:");scanf("%s",ID_num);ID_name_check(PList,name,ID_num);}elseif(a=='2'){printf("\t\t请输入订单号:");scanf("%d",&order_num);order_num_check(PList,order_num);}elseif(a=='3')收集于网络,如有侵权请联系管理员删除精品文档check_all_passenger(PList);elsereturn;}voidmodify_flight(flightnode*&h,passengerList*&PList){flightnode*p=h->next;charflight_num[10],start_time[10],end_time[10];chara;printf("\t\t************ 航线信息修改*************\n");printf("\t\t*************************************\n");printf("\t\t*增加航班-------1*\n");printf("\t\t*删除航班-------2*\n");printf("\t\t*修改航班时间---3*\n");printf("\t\t*************************************\n");printf("\t\t请选择:");a=getch();printf("%c\n",a);if(a=='1')add_flight(h);elseif(a=='2')delete_flight(h,PList);elseif(a=='3'){printf("\t\t请输入要修改的航班的航班号 :");scanf("%s",flight_num);if(flight_num_check(p,flight_num)==1){printf("\t\t请输入修改后的起飞时间 :");scanf("%s",start_time);printf("\t\t请输入修改后的抵达时间 :");scanf("%s",end_time);for(;p!=NULL;p=p->next)if(strcmp(flight_num,p->flight_num)==0){strcpy(p->start_time,start_time);strcpy(p->end_time,end_time);printf("\t\t航班%s时间修改成功!\n",flight_num);}}}elsereturn;}intbook(flightnode*&h,passengerList*&PList){charname[20]; //姓名收集于网络,如有侵权请联系管理员删除精品文档charID_num[20]; //证件号charflight_num[10];//航班号charstart_place[20];//起飞城市charend_place[20];//抵达城市intticket_num; //订票数量intk;flightnode*p=h->next;printf("\t\t请输入信息:\n");printf("\t\t请输入起飞城市:");scanf("%

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论