数据结构课程设计之飞机订票系统文档

上传人:痛*** 文档编号:136444210 上传时间:2022-08-16 格式:DOC 页数:34 大小:762KB
收藏 版权申诉 举报 下载
数据结构课程设计之飞机订票系统文档_第1页
第1页 / 共34页
数据结构课程设计之飞机订票系统文档_第2页
第2页 / 共34页
数据结构课程设计之飞机订票系统文档_第3页
第3页 / 共34页
资源描述:

《数据结构课程设计之飞机订票系统文档》由会员分享,可在线阅读,更多相关《数据结构课程设计之飞机订票系统文档(34页珍藏版)》请在装配图网上搜索。

1、课 程 设 计题目 飞机订票系统 院 系 专 业 姓 名 学 号 年 月 日目 录1. 需求分析21.1 问题描述21.2 基本要求31.2.1 输入的形式和输入值的范围31.2.2 输出形式31.2.3 功能要求32. 概要设计32.1 数据结构32.2 程序模块32.2.1 录入航班信息模块32.2.2 客户订票模块32.2.3 客户退票模块32.2.4 查询航班模块32.2.5 查询订单模块错误!未定义书签。2.2.6 修改航班模块32.3 各模块之间的调用关系以及算法设计32.3.1 各模块之间的调用关系32.3.2 算法设计33. 详细设计33.1 录入航班信息模块33.2 顾客订票

2、模块33.3 顾客退票模块33.4 查询航班模块33.5 查询订单模块33.6 修改航班模块34. 测试与分析34.1 合法数据的测试34.2 非法数据的测试35. 用户使用说明35.1 运行环境35.2 主要功能35.3 操作注意事项35.4 业务流程36. 总结3参考文献3附录:程序源代码31. 需求分析1.1 问题描述任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(

3、订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票: 可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;1.2 基本要求1.2.1 输入的形式和输入值的范围录入航班信息时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班

4、信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息)。客户订票时,需要输入起飞抵达城市,然后选择航班进行查询,选择航班时需要输入航班号,值为字符串。客户退票时,需要输入姓名,证件号进行退票操作,值为字符串。查询某个航班的情况时,需要输入航班号,值为字符串;在查询某个航线的情况时,还可以通过输入起飞抵达城市来查询,值为字符串。修改航班时,需要输入字符型数据选择进行何种修改操作;增加航班时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0

5、”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息);删除航班时,需要输入要删除的航班的航班号;修改航班时间时,需要输入要修改的航班的航班号,修改后的航班起飞时间和抵达时间。1.2.2 输出形式在所有操作后的输出中都显示操作是否正确以及操作后单链表的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。录入航班情况时,输出显示添加航班信息是否成功。客户订票时,当客户输入起飞抵达城市后,输出可供客户选择的航班信息;客户选择了航班后,输入提示信息告知用户订票是否成功。客户退票时,输出客户退票成功或者无此客户,

6、无法退票。查询航班时,输出显示对应的航班信息,或者输出提示信息告知没有相应的航班信息。查询订单时,输出显示对应的订单信息,或者输出提示信息告知没有相应的订单信息。修改航班时,输出对应的提示的信息,提示操作是否成功。1.2.3 功能要求(1)可以录入航班情况,数据存储在一个数据文件中;(2)可以查询某个航线的情况:输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓;输入起飞抵达城市,查询飞机航班情况;(3)可以订票,订票情况存在一个数据文件中(如果该航班已经无票,提供相关可选航班);(4)可退票并且退票后修改相关数据文件;(5)客户资料:姓名,证件号,订票数量及航班情况

7、,订单要有编号;(6)修改航班信息,当航班信息改变可修改航班数据文件;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。2. 概要设计2.1 数据结构(1)航班的信息:航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞时间、降落时间、起飞城市、抵达城市、航班票价、票价折扣、确定航班是否满仓和空座数九个数据项:航班号起飞时间降落时间起飞城市抵达城市票价票价折扣航班是否满仓空座数字符串字符串字符串字符串字符串浮点数浮点数整数整数单链表如下:h1h2h3 p每个结点包括数据域和指针域:数据域指针域C语言描述如下typedef struct Pl

8、anechar plane20; /航班号char takeoff20; /起飞时间char arrive20; /抵达时间char from20; /起飞城市char to20; /抵达城市int rest; /空座数float price; /票价float discount; /票价折扣int isFull; /航班是否满仓struct Plane *next;/指向下一个结点Plane; /航班结点(2)客户的资料:为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号、航班号、订票号和订单数量五个数据项:姓名证件号航班号订票号订单数量字符串字符串字符串整数整数每

9、个结点包括数据域和指针域:数据域指针域C语言描述如下:typedef struct CusOrderchar cusname20; /姓名char IDcardnum20; /证件号char plane20; /航班号int ordernum; /订单号int ticketnum; /订票数量struct CusOrder *next; /指向下一个结点CusOrder;/客户结点(3)客户链表:每个数据元素包括头指针和尾指针两个数据项:每个结点包括两个指针域:头指针域尾指针域C语言描述如下:typedef struct CusList CusOrder*head; CusOrder*rear

10、;CusList;2.2 程序模块2.2.1 录入航班信息模块void add_Plane(Plane *&p)调用void insert_Plane(Plane *&p,char* plane,char* from,char*to,char* takeoff,char*arrive,int rest,float price,float discount,int isFull)函数,将新航班结点插入航班链表中。2.2.2 客户订票模块int book(flightnode *&h,passengerList *&PList)函数调用int insert_passenger(passengern

11、ode *&h,char *name,char *ID_num,char *flight_num,int ticket_num,int order_num)函数,将新客户结点插入客户链表中。2.2.3 客户退票模块void cancel(CusList *&CList,Plane *&p)函数调用int delete_Customer(CusList *&CList,Plane *&p,char *cusname,char *IDcardnum)函数,将相应的顾客结点删除,并修改相应的航班信息。2.2.4 查询航班模块void plane_Check(Plane *p)调用void check

12、_AllPlane (Plane *p)函数进行所有航班信息浏览,调用int place_Check(Plane *p,char *from,char *to)函数按起飞抵达城市对航班进行查询,调用int plane_Check(Plane *p,char *plane)按航班号对航班进行查询。2.2.5 修改航班模块增加航班时,void modify_Plane(Plane *&p,CueList *&CList)函数调用void add_Plane(Plane *&p)函数,将新航班信息结点插入航班链表中。删除航班时,void modify_Plane(Plane *&p,CusList

13、*&CList)函数调用void delete_Plane(Plane *&p,CusList *&CList)函数将相应的航班信息删除,并删除相应的订单信息。修改航班时间时,void modify_Plane(Plane *&p,CusList *&CList)函数修改指定航班的起飞抵达时间。2.3 各模块之间的调用关系以及算法设计2.3.1 各模块之间的调用关系2.3.2 算法设计void init_Plane(Plane*&p):要建立一个以h为头结点的空链表,录入航班信息和增加航班后将航班结点插入该链表。void init_CusList(CusList*&CList):建立一个带有头

14、指针和尾指针的空链表,存储带有顾客信息的结点。void save_Plane(Plane*p):保存航班信息到指定数据文件中。void load_Plane(Plane*&p):从存储航班信息的文件导入航班信息到航班链表中。void save_Customer(CusList*CList):保存客户信息到指定数据文件中。void load_Customer(CusList*&CList):从存储客户信息的文件导入客户信息到客户链表中。void add_Plane(Plane*&h):录入航班信息后调用insert_flight函数增加航班。void insert_Plane(Plane*&h,

15、char* plane,char* from,char* to,char* takeoff,char* arrive,int rest,float price,float discount,int isFull):在录入航班情况或增加新的航班后,将新的航班结点插入到航线链表中。int book(Plane*&l,CusList*&CList):要完成客户订票,将客户结点插入客户链表中,并修改相应的航班信息。void insert_CusList(Plane*&p,CusList*&CList,char *cusname,char *IDcardnum,char *plane,int ticke

16、tnum):在顾客订票后,将该顾客结点插入到顾客链表中,并修改相应的航班信息。void find_SaPlane(Plane*p,char *plane):在客户订票时,当客户输入的航班号对应的航班已满仓时,提供其他可选航班并输出显示。void cancel(CusList *&CList,Plane*&p):完成客户退票,将客户的订单从客户链表中删除,并修改相应的航班信息。int delete_Customer(CusList *&CList,Plane*&p,char *cusname,char *IDcardnum):按照要退票的顾客的姓名和证件号查找该顾客结点,进行删除操作。void

17、plane_CheckInquiry(Plane *p):选择使用何种方式对航班信息进行查询。void check_AllPlane(Plane*l):浏览所有航班信息。int place_Check(Plane*l,char *from,char *to):按照起飞抵达城市查询航班信息。int plane_Check(Plane*l,char *plane):按照航班号查询航班信息。void modify_Plane(Plane*&p,CusList*&CList):修改航班信息,包括添加航班信息,删除航班信息,修改航班起飞抵达时间。void delete_Plane(Plane*&h,Cu

18、sList*&CList):按照某个航班号删除航班结点。3. 详细设计3.1 录入航班信息模块在主函数中输入“1”,调用void add_Plane(Plane*&p)函数,此函数将航班指针*p指向已存在航班链表*h的头结点,利用for(;h-next!=NULL;h=h-next)使*p指向航线链表的最后一个结点,然后让用户输入航班信息,然后调用void insert_Plane(Plane*&p,char* plane,char* from,char* to,char* takeoff,char* arrive,int rest,float price,float discount,int

19、 isFull)函数,用malloc函数申请一个航班结点,并用指针*q指向,将航班信息赋到新申请的结点中,h-next=q;h=h-next;该操作将该结点插入航班链表中。流程图如下:YYPlane*h=p;h-next!=NULLh=h-nextmark=1输入航班信息调用insert_Plane函数完成航班信息的录入是否继续录入航班信息“是”输入“1”mark=1“否”输入“0”mark=0开始结束NN3.2 顾客订票模块在主函数中输入“2”,调用int book(Plane*&p,CusList*&CList)函数完成客户的订票。用航班指针*h指向已存在航班链表*p的头结点的下一个结点,

20、请客户输入起飞抵达城市,分别存于from和to中。调用int place_Check(Plane*l,char *from,char *to)函数,如果函数返回“1”则请客户输入要订的航班号,如果输入的航班号不存在,输出提示信息,如果航班存在则提示客户输入订的票数、客户的姓名和证件号,调用void insert_CusList(Plane*&p,CusList *&CList,char *cusname,char *IDcardnum,char *plane,int ticketnum)函数,定义航班指针*h=p-next,使用for循环匹配plane和h-plane,找到后,执行h-rest

21、=h-rest-ticketnum,修改相应航班的空座数。用malloc函数申请一个客户结点,并用指针*q指向,将客户信息和航班号赋到新申请的结点中,CList-rear-next=q;CList-rear=q;该操作将该结点插入客户链表中。如果该航班已满仓或该航班的空座数不够,输出可供选择的航班,让客户选择,之后调用void insert_CusList(Plane*&h,CusList *&CList,char *cusname,char *IDcardnum,char *plane,int ticketnum)函数将客户结点插入客户链表中.YN输入航班号,存入plane开始Plane*h

22、=p-next;输入起飞抵达城市,分别存于from和toplace_Check(p,from,to)=1N航班号不为空!输入航班号,存入planeplane=NULLYYNYh!=NULLstrcmp(h-plane,plane)=0N姓名、证件号、订票数,分别存入cusname、IDcardnum、ticketnumY航班号不为空!输入航班号,存入planename=NULLN接上页:返回“1”YN证件号不为空!输入证件号,存入IDcardnumIDcardnum=NULLNN订票数不为空!输入订票数,存入ticketnumticketnum=NULLY调用insert_CusrList函数

23、完成客户订票h-rest0&H-rest=ticketnumY显示其他可选航班供客户选择调用insert_CusList函数完成客户订票h=h-next返回“0”结束3.3 顾客退票模块在主函数中输入“3”,调用void cancel(CusList *&CList,Plane*&p)函数完成客户的退票。提示客户输入客户的姓名和证件号以及要退的航班号,此函数再调用int delete_Customer(CusList *&CList,Plane*&p,char *cusname,char *IDcardnum,char *plane)函数,用客户结点指针*co2等于已存在客户链表结点Clist

24、的头指针,相当于将*co2指向客户链表的头结点,用客户结点指针*co1指向co2的下一个结点。使用while循环寻找匹配姓名、证件号、航班号的客户结点,找到后定义航班指针*f=h-next,使用for循环找到匹配航班号的航班结点,执行f-left=f-left+co1-ticket_num,修改退票后相应航班结点的空座数,之后执行co2-next=co1-next;free(p);删除要退票的客户订单信息。如果没有找到匹配的客户结点,输出提示信息。开始姓名、证件号、航班号,分别存于cusname、IDcardnum、flightnum调用delete_Customer函数完成客户的退票结束开始

25、CusOrder*pr=CList-headCusOrder*p=pr-nextstrcmp(cusname,co1-name)=0&strcmp(IDcardnum,p-IDcardnum)=0&strcmp(flight_num,p-flight_num)=0NY返回“1”返回“0”结束Np-next=p-nextfree(p)p!=NULLpr=pr-next;p=pr-next;Plane*f=p-nextf!=NULL!YYNf=f-nextstrcmp(plane,f-plane)=0Nf-left=f-left+p-ticketnum;Ydelete_Customer函数的流程图

26、:3.4 查询航班模块在主函数中输入“4”,调用void plane_InquriyCheck(Plane*p)函数选择使用哪一种查询方式进行查询。提示客户输入查询方式,如客户输入“1”,则调用int plane_Check(Plane*l,char *plane)函数按航班号对航班进行查询,提示客户输入航班号,存于plane中;如客户输入“2”,则调用int place_Check(Plane*l,char *from,char *to)函数按起飞抵达城市对航班进行查询,提示客户输入起飞抵达城市,分别存于from和to中;如客户输入“3”,则调用void check_AllPlane(Pla

27、ne*l)函数浏览全部航班信息。在int plane_Check(Plane*h,char *plane)函数中,定义航班指针*p=h,使用for循环匹配plane和p-plane,找到匹配的航班节点后,输出该航班的所有信息。在int place_Check(Plane*h,char *from,char *to)函数中,定义航班指针*p=h,使用for循环寻找匹配from和to的结点,找到匹配的航班结点后,输出该航班的所有信息。开始请客户选择查询方式,存于a中根据a的值进行选择a=1a=3a=2调用plane_Check函数进行查询用check_AllPlane函数进行查询调用place_C

28、heck函数进行查询结束在void check_AllPlane(Plane*lh)函数中,定义航班指针*p=h,使用for循环输出所有航班信息。YN开始Plane*p=hp=p-nextp!=NULLstrcmp(p-plane,plane)=0输出航班信息,返回“1”返回“0”结束NYplane_Check函数的流程图:3.6 修改航班模块在主函数中输入“5”,调用void modify_Plane(Plane*&h,CusList*&CList)函数对航班信息进行修改。提示客户输入修改模式,如客户输入“1”,则调用void add_Plane(Plane*&h)函数添加航班信息;如客户输

29、入“2”,则调用void delete_Plane(Plane*&h,CueList*&CList)函数删除指定的航班信息,提示客户输入航班号,存于plane中;如客户输入“3”,则示客户输入航班号,如果该航班号存在,则提示用户输入修改后的起飞抵达时间。开始请客户选择修改模式,存于a中根据a的值进行选择a=1a=3a=2调用add_flight函数添加航班信息输入航班号,存入plane用delete_Plane函数删除航班结束Plane_check(p,plane)=1输入修改后的起飞抵达时间,分别存入takeoff和arrivePlane*p=h-nextstrcmp(plane,p-pla

30、ne)=0p!=NULLstrcpy(p-takeoff,takeoff)strcpy(p-arrive,arrive)p=p-next在void delete_Plane(Plane*&h,CueList*&CList)函数中,定义航班指针*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),删除对该航班订票的订单信

31、息。如果没有找到匹配的航班结点,输出提示信息。4. 测试与分析4.1 合法数据的测试(1) 编译链接后显示菜单(2) 输入菜单号“1”,开始航班信息的录入(3) 输入菜单号“2”,进入订票模块(4) 输入菜单号“3”,进入退票模块(5) 输入菜单号“4”,查询航班信息a. 输入菜单号“1”,按航班号查询航班信息b. 输入菜单号“2”,按起飞抵达城市查询航班信息c. 输入菜单号“3”,浏览全部航班信息(7) 输入菜单号“5”,进入航班修改模块a. 输入菜单号“1”,增加航班b. 输入菜单号“2”,删除航班c. 输入菜单号“3”,修改航班时间(8) 输入菜单号“0”,退出本系统。5. 用户使用说明

32、5.1 运行环境Windows xp;Microsoft Visual C+ 6.05.2 主要功能飞机订票系统系统功能模块如下:主要功能包括录入航班信息、客户订票、客户退票、查询航班信息、查询订单信息、修改航班信息六个模块;其中查询航班信息模块包括按航班号查询、按起飞抵达城市查询和浏览全部航班信息;其中查询订单信息模块包括按订单号查询、按客户姓名和证件号查询以及浏览全部订单信息;其中修改航班信息模块包括添加航班信息、删除航班信息和修改航班起飞抵达时间。5.3 操作注意事项用户在使用飞机订票系统之前,应注意以下事项:用户在输入数据时,飞机航班号、起飞抵达城市、起飞抵达时间、客户姓名、证件号等为

33、字符串形式;空座数、订票数量、航班是否满仓等为整型(int);票价、票价折扣等为浮点型(float);其他形式的输入,请按输入提示进行操作,以免引起不必要的故障。5.4 业务流程输入相应的选择信息,便可进入相应的模块中。(1)输入“1”,进入【录入航班信息】模块,输入航班的相关信息,完成航班信息的录入。(2)输入“2”,进入【客户订票】模块,输入客户的信息、要订的票数和要订的航班号,完成客户的订票操作。(3)输入“3”,进入【客户退票】模块,输入客户的信息、要退的航班号,完成客户的退票操作。(4)输入“4”,进入【查询航班信息】模块,可以浏览或查询航班的相关信息。(5)输入“5”,进入【查询订

34、单信息】模块,可以浏览或查询订单的相关信息。(6)输入“6”,进入【修改航班信息】模块,可以添加航班信息、删除航班信息和修改航班的起飞抵达时间。6. 总结经过这六周周末的数据结构课程设计,我收获很大,在实现系统功能的过程中,也遇到很多问题,设计修改,编写调试,每一步都渗透着分析,每一次分析之后,都会对系统功能有更深层次的理解和阐述,这也促使我们一步步完成了整个系统,并使之可以运行,深深感受到数据结构这门课程的重要性,以及它在实际应用中的广泛性。本系统由于种种原因仍然存在需要改进,需要完善的地方,我对于这个系统的认识和对数据结构这门课程的理解已经更加深入了。在今后的学习和工作中,会更加深入地把知

35、识和思想体会更广泛地应用到其他相关领域。本系统在人性化的方面做得还不够,对于另类的输入错误,还不能很好地应对,这也体现出本系统不够健壮,会在今后的学习中加以改进和完善;在功能模块方面还可以增加更多相关模块,是系统更加完善。在实现系统的过程中,我感受到自己的知识的薄弱零散,经过这次做系统,我觉得自己的知识得到巩固和整合,知识体系更加系统化。我也深深体会到实践检验真理,只有实践中,才能出真知。我懂得了学习不只是纸上谈兵,更重要的是实践,就比如平常我们在学习中经常会遇到一些问题,看似无关紧要跳过去,不求甚解,在得知答案的时候,总是感觉心领神会,久而久之,对于的知识点就模棱两可,形成知识漏洞。但这次课

36、程设计所要编写的程序很长,涉及的知识点也很多,选择此题目的时候我心里面还底气十足,自认为没什么问题,对于程序的步骤仿佛了然于胸,但在实际操作中才发现并非如此,在编写程序的过程中,我不断地查阅相关资料进行学习,积极地思考该怎样实现系统的每一个功能。通过这次数据结构的课程设计,我巩固和加深对数据结构基本知识的理解,锻炼了综合运用课本知识的能力,自己也真正地完整而系统地设计并编写了一个程序,使得自己的编程能力大为提高。通过对我所选择飞机订票系统的设计和编写,我初步掌握简单软件的分析方法和设计方法,更深的领悟了“纸上得来终觉浅,觉知此事要躬行”的重要意义,第一次体会到了数据结构编程知识在实际生活中的重

37、要性和应用的广泛性。参考文献1谭浩强 C程序设计(第四版) 北京:清华大学出版社,20062李春葆 数据结构教程 (第二版) 北京:清华大学出版社,20073附录:程序源代码/ PlaneCheck.cpp : 定义?控?制?台?应畖用?程序的?入?口点?。/#include stdafx.h#include #include #include #include typedef struct Planechar plane20; /航?班悒?号?char takeoff20; /起e飞?时骸?间?char arrive20; /抵?达?时骸?间?char from20; /起e飞?城?市篋ch

38、ar to20; /抵?达?城?市篋int rest; /空?座哩?数簓float price; /票价?float discount; /票价?折?扣?int isFull; /航?班悒?是?否?满仓?struct Plane *next;/指?向下?一?个?结点?Plane; /航?班悒?结点?typedef struct CusOrderchar cusname20; /姓?名?char IDcardnum20; /证件t号?char plane20;/航?班悒?号?int ordernum; /订?单蹋?号?int ticketnum; /订?票数簓量?struct CusOrder

39、*next;/指?向下?一?个?结点?CusOrder;/客户结点?typedef struct CusList CusOrder*head; CusOrder*rear;CusList;void init_Plane(Plane *&p)/目?的?是?要癮建立?一?个?以?h为a头?结点?的?空?链?表括?录?入?航?班悒?信?息和增?加航?班悒?后将?航?班悒?结点?插?入?该?链?表括?p=(Plane *)malloc(sizeof(Plane);/申?请?头?结点?的?空?间?if(p=NULL) exit(0);p-next=NULL;/将?头?结点?h的?指?针?域?置?为a空?

40、void init_CusList(CusList *&CList)CList=(CusList *)malloc(sizeof(CusList);CList-head=(CusOrder *)malloc(sizeof(CusOrder);/创洹?建头?结点?CList-rear=CList-head;CList-rear-ordernum=0;/订?单蹋?号?从洙?开a始?计?数簓CList-head-next=NULL;void save_Customer(CusList *CList)FILE* fp = fopen(Customer.dat,wb);if(fp=NULL)return

41、;CusOrder *temp=CList-head-next;while(temp!=NULL)fwrite(temp,sizeof(CusOrder),1,fp);temp = temp-next;fclose(fp);void load_Customer(CusList *CList)FILE* fp = fopen(Customer.dat,rb);if(fp=NULL)return;CusOrder *q;int n;while(!feof(fp)q=(CusOrder *)malloc(sizeof(CusOrder);n =fread(q,sizeof(CusOrder),1,f

42、p);if(n!=1)break;CList-rear-next=q;CList-rear=q;CList-rear-next=NULL;fclose(fp);void save_Plane(Plane *p)FILE* fp = fopen(PlaneList.dat,wb);if(fp=NULL)return;Plane *temp=p-next;while(temp!=NULL)fwrite(temp,sizeof(Plane),1,fp);temp = temp-next;fclose(fp);void load_Plane(Plane *&p)Plane *pt=p;FILE* fp

43、 = fopen(PlaneList.dat,rb);if(fp=NULL)return;Plane *q;int n;while(!feof(fp)q=(Plane *)malloc(sizeof(Plane);n=fread(q,sizeof(Plane),1,fp);if(n!=1)break;pt-next=q;pt=q;pt-next=NULL;fclose(fp);int find_SaPlane(Plane *p,char *plane)Plane *p1=p-next,*p2=p-next;int mark=0;printf(%-8s%-12s%-12s%-10s%-10s%-

44、8s%-6s%-10s%-8sn,航?班悒?号?,起e飞?城?市篋,抵?达?城?市篋,起e飞?时骸?间?,抵?达?时骸?间?,价?格?,折?扣?,是?否?满仓?,空?座哩?数簓);while(p1!=NULL & strcmp(p1-plane,plane)!=0) p1=p1-next;while(p2!=NULL)if(strcmp(p1-from,p2-from)=0)&(strcmp(p1-to,p2-to)= 0)&(strcmp(p1-plane,p2-plane)!=0)printf(%-8s%-12s%-12s%-10s%-10s%-8.2f%-6.2f%-10d%-8dn,p

45、2-plane, p-from,p-to,p-takeoff,p-arrive,p-price,p-discount,p-isFull,p-rest);mark=1;p2=p2-next;if(mark=0)printf(tt抱馈?歉?,?没?有瓺可选?的?航?班悒?n);return 0;return 1;void insert_Plane(Plane *&p,char* plane,char* from,char*to,char* takeoff,char*arrive,int rest,float price,float discount,int isFull)/在录?入?航?班悒?情况

46、?或增?加新?的?航?班悒?后,将?新?的?航?班悒?结点?插?入?到?航?线?链?表括?中DPlane *q;/定义?q为a新?增?加的?航?班悒?结点?的?指?针?的?形?参?Plane *h=p;q=(Plane *)malloc(sizeof(Plane);/为aq结点?申?请?空?间?strcpy(q-plane,plane);strcpy(q-from,from);strcpy(q-to,to);strcpy(q-takeoff,takeoff);strcpy(q-arrive,arrive);q-rest=rest;q-price=price;q-discount=discoun

47、t;q-isFull=isFull;/以?上?是?用?strcpy函数簓将?新?增?加航?班悒?的?各种?信?息复制?到?q结点?中Dq-next=p-next;/将?q结点?的?指?针?域?置?为a空?p-next=q;p=p-next;/将?指?针?后移?void insert_CusList(Plane *&p,CusList *&CList,char *cusname,char *IDcardnum,char *plane,int ticketnum)/客户订?票后,?将?客户结点?插?入?客户链?表括?中D,?并修T改?相应畖的?航?班悒?信?息。Plane *h=p-next;fo

48、r(;h!=NULL;h=h-next)if(strcmp(h-plane,plane)=0)h-rest=h-rest-ticketnum;if(h-rest=0)h-isFull=1;CusOrder *q=(CusOrder *)malloc(sizeof(CusOrder);/新?建结点?,?存?放?新?的?客户订?单蹋?信?息strcpy(q-cusname,cusname);strcpy(q-IDcardnum,IDcardnum);strcpy(q-plane,plane);q-ticketnum=ticketnum;q-next=NULL;/将?新?订?单蹋?连?接到?链?表括

49、?中DCList-rear-next=q;q-ordernum=CList-rear-ordernum+1;/生?成订?单蹋?号?CList-rear=q;void delete_Plane(Plane *&p,CusList *&CList)/目?的?要癮按恪?照?某3个?航?班悒?号?删?除y航?班悒?结点?Plane *p1,*p2;CusOrder *q1,*q2;char plane20;int mark=1;q2=CList-head;/pr为a顾?客链?表括?的?头?结点?q1=q2-next;/用?p作痢?为a中D间?指?针?对?顾?客链?表括?中D要癮删?除y的?顾?客结点?

50、进?行D查找p2=p;/pr为a航?线?链?表括?的?头?结点?p1=p2-next;/用?p作痢?为a指?针?对?航?线?链?表括?中D要癮删?除y的?航?班悒?结点?进?行D查找printf(tt请?输?入?你?要癮删?除y的?航?班悒?号?:);scanf(%s,plane);while(p!=NULL)/要癮删?除y的?航?班悒?存?在,下?面?进?行D删?除y操作痢?if(strcmp(plane,p-plane)=0)p2-next=p1-next;/移?动指?针?找着?要癮删?除y的?航?班悒?结点?free(p1);/删?除y操作痢?printf(tt删?除y%s航?班悒?成功

51、|!n,plane);mark=0;p1=NULL;if(p2-next!=NULL)p2=p2-next;p1=p1-next;if(mark=1)printf(tt无T此?航?班悒?无T法?删?除y!n);elsewhile(q1!=NULL)/要癮删?除y的?顾?客存?在,下?面?进?行D删?除y操作痢?if(strcmp(plane,q1-plane)=0)q2-next=q1-next;/移?动指?针?找着?要癮删?除y的?顾?客结点?free(q1);q1=NULL;if(q2-next!=NULL)q2=q2-next;q1=q2-next;int delete_Customer

52、(CusList *&CList,Plane *&p,char *cusname,char *IDcardnum)/目?的?是?按恪?照?要癮退?票的?顾?客的?姓?名?查找该?顾?客结点?,进?行D删?除y操作痢?CusOrder *co1,*co2=CList-head;/pr指?向顾?客链?表括?的?头?结点?co1=co2-next;while(co1!=NULL)if(strcmp(cusname,co1-cusname)=0&strcmp(IDcardnum,co1-IDcardnum)=0)for(Plane *f=p-next;f!=NULL;f=f-next)if(strcm

53、p(co1-plane,f-plane)=0)f-rest=f-rest+co1-ticketnum;f-isFull=0;break;co2-next=co1-next;free(co1);printf(tt顾?客%s,%s退?票成功|!n,cusname,IDcardnum);return 1;co2=co2-next;co1=co2-next;printf(tt无T此?顾?客,无T法?退?票!n);return 0;void add_Plane(Plane *&p)/录?入?航?班悒?信?息后调獭?用?insert_flight函数簓增?加航?班悒?Plane *h=p;char pla

54、ne20,takeoff20,arrive20,from20,to20;int rest,isFull,mark=1;float price,discount;for(;h-next!=NULL;h=h-next)/移?动指?针?,找到?最?后一?个?结点?while(mark=1)printf(tt请?输?入?你?要癮增?加的?航?班悒?号?:);scanf(%s,plane);printf(tt请?输?入?出?发?地?:);scanf(%s,from);printf(tt请?输?入?目?的?地?:);scanf(%s,to);printf(tt请?输?入?起e飞?时骸?间?:);scanf

55、(%s,takeoff);printf(tt请?输?入?抵?达?时骸?间?:);scanf(%s,arrive);printf(tt请?输?入?票价?:);scanf(%f,&price);printf(tt请?输?入?折?扣?:);scanf(%f,&discount);printf(tt请?输?入?剩骸?余?座哩?位?数簓:);scanf(%d,&rest);printf(tt请?输?入?是?否?满仓?(0表括?示?没?有瓺满仓?1以?满仓?):);scanf(%d,&isFull);insert_Plane(h,plane,from,to,takeoff,arrive,rest,price,discount,isFull);printf(tt增?加

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!