数据结构试验报告



《数据结构试验报告》由会员分享,可在线阅读,更多相关《数据结构试验报告(29页珍藏版)》请在文档大全上搜索。
1、 3.航空订票系统:1.需求分析:(1)、可以实现航班信息的管理,包括查看航班信息,修改航班信息,删除航班信息;(2)、可以查询查询航班信息,实现按起点站查询,按终点站查询,按日期查询功能;(3)、实现订票业务,若有余票,则订购余票,若余票不够,问是否加入排队等待候列;(4)、实现退票业务,退票后,要查询在排队等待的人,看退票和原来余票量是否满足客户的要求。2.设计2.1:设计思想 (1)、数据结构设计a、由于每趟航班的信息量比较大,则需要定义一个结构体表示航班的基本信息,航班的基本信息采用链表存储,以便于查询和修改航班信息;b、至于座位等级,用一个二维数组保存座位号,第一维表示座位等级,第二
2、维表示座位号;每当座位被定时,把这个等级的座位号标记为1,表示座位状态为已定。当有客户退票时,座位号的标记又变为0,表示状态为未定;c、用一个链表来存储已经订票的客户的信息,必要的时候可以查看已定客户的信息;d、再用一个队列来保存等待的客户的信息,当有人退票时,需要查看在等待的用户是否能够订票。(2)、算法设计 这个程序中没有用到特别的什么算法,主要是对链表和队列操作。2.2、设计表示 (1)、函数调用关系 main()>Menuselect( )(输出菜单的函数) 选择1:>manage( )(管理航班信息) 选择1:>store( )(存储航班信息) 选择2:>De
3、lete( ) (删除航班信息) 选择3:>revise( ) (修改航班信息) 选择4:>check() (查看当前航班信息)>display()(输出航班信息) 选择2:>find( )(查找航班信息) 选择1:>FindInPlaneNumber()(按航班号查询) 选择2:>FindInStartPoint()(按起点查询) 选择3:>FindInEndPoint()(按终点站查询) 选择4:>FindInDate()(按日期查询) 选择3:>Ordertickets()(订票函数) >WaitForMore()(排队等候)
4、选择4:>Returntickets()(退票函数) 选择1:>WaitedReturn()(加入过等待用户的退票) 选择2:>UnwaitedReturn()(没有加入过顶戴用户的订票) (2)、函数接口规格说明 void ListInitiate()/初始化各个指针void display(airline *find)/输出航班信息函数void store()/存取航班信息void Delete()/删除航班信息void rivise()/修改航班信息void check()/查询航班信息void Manage()/管理航班系统的函数struct airline *Fin
5、dInPlaneNumber()/按航班号查询void FindInStartPoint()/按起点站查询void FindInEndPoint()/按终点站查询void FindInDate()/按日期查询void find()/查询函数void WaitForMore(char number,int amount,int grade,char name,airline *p)/等待更多票的用户void Ordertickets()/订票函数void WaitedReturn(char name)/等待过的用户退票void UnwaitedReturn(char name)/没有等待过的用户
6、退票void Returntickets()/退票函数int Menuselect()/显示菜单界面的函数void main()/主函数3调试分析 1、关于参数传递的问题:由于之前学习的c语言中关于参数传递的部分没有学扎实,在传递数组的时候,出现了错误,后来在同学的帮助下,学会了正确的传递参数的方法。 2、关于座位号有没有被定得问题:开始的时候,直接用加减法来计算座位订购情况,发现在当前边的作为被退的时候,不能正确的输出座位号,后来苦思冥想,想出了用标记的方法来区分座位是否被订购。 3.关于判断等候的人是否可以订票的问题:开始的时候,没有加循环,导致如果第一个等候的人不能订票,后边的人都不能订
7、票,后来在老师的提示下,加入了一个循环,解决了这个问题。 4、改进思想:可以再增加部分退票的功能,其实也不难,就是让顾客输入要退票的座位号,然后,把这些作为好的标志修改一下。 5、经验体会:通过这个程序的实习,完全掌握了对链表和队列的的应运,同时又加深了程序模块化的思想。 6、时间复杂度和空间复杂度:本程序的时间复杂度和空间复杂度都为O(n)。4、用户手册 1、程序运行后,首先显示的是主菜单界面; 2、用户可进行选择操作; 3、存取航班是需要按提示的顺序输入航班的信息;删除航班时要输入航班号;修改航班时也是要重新输入航班信息; 4、查询航班时:按每种方式查询,都需要按照提示输入对应的信息; 5
8、、订票时需要按照提示输入航班号,订票量,舱位等级和姓名 6、退票时也需要输入姓名和有没有加入过排队等候的队列。5、测试数据及测试结果6、源程序清单#include <iostream>#include <string.h>#include <conio.h>using namespace std;#define MAXSIZE 20typedef struct waitchar PlaneNumber10;/航班号char name10;/姓名int NeedNumber;/总订票量 int WaitNumber;/等待订票量 int grade;/舱位等级
9、char OrderedNumber350;/保存已经订票的座位号int OrderNumber;/已经订票量 struct wait *next;qnode,*qptr;struct wait *begin;typedef struct pqueue qptr front;/等候替补客户名单域的头指针 qptr rear;/等候替补客户名单域的属指针linkqueue;typedef struct orderchar PlaneNumber10;/已定票的航班号char name10;/客户姓名 int Ordernumber;/订票量 int grade;/舱位等级 int sitsnum
10、ber350;/保存已定座位号 order *next;linklist; struct order *start;typedef struct airlinechar PlaneNumber10;char PlaneType10;char StartPoint10;char EndPoint10;char Date10;char StartTime10;char EndTime10;int FlyTime;int GradePrice3;int SitsNumber3;/int LeftNumber3; int target3100;/标记已经订过的座位号为1struct airline *
11、next;linklist *order; /指向乘员名单链表的头指针linkqueue wait; /指向等候域的头指针SLNode;struct airline *head;void ListInitiate()head=(SLNode *)malloc(sizeof(SLNode);start=(linklist *)malloc(sizeof(linklist);begin=(qnode *)malloc(sizeof(qnode);head->next=NULL;start->next=NULL;begin->next=NULL;void display(airli