数据结构课程设计报告航空订票系统.docx
- 文档编号:30163671
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:21
- 大小:117.53KB
数据结构课程设计报告航空订票系统.docx
《数据结构课程设计报告航空订票系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告航空订票系统.docx(21页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告航空订票系统
武汉长江工商学院
计算机科学与技术系
项目名称:
航空客运订票系统
学生姓名:
刘威
学号:
1008041118
班级:
10811
指导教师:
刘莹
2011年12月23日
目录
1系统需求分析1
1.1问题分析1
1.2任务意义1
2设数据结构设计及用法说明2
3详细设计和编码4
3.1初始化4
3.2浏览客户信息5
3.3客户订票信息6
4实验结果7
4.1菜单函数的功能测试7
4.2录入函数的功能测试8
4.3查询函数的功能测试9
4.4订票函数的功能测试9
4.5退票函数的功能测试11
5体会12
致谢13
参考文献14
附录:
源代码15
1系统需求分析
1.1问题分析
从课程设计的题目要求可以知道,我们需要建立的是具有能对数据的插入、删除、检索功能的软件。
由于存储的数量较大且不固定,因此选择用链表来保存基本信息:
终点站名、航班号、飞机号、飞行时间(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。
由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。
同时,由于预约人数无法预计,队列也应以链表作存储结构。
系统主要实现的操作和功能是:
添加航线、查询航线、订票功能、退票功能。
要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。
另外,在时间的处理上,为了保证年月日与相应的星期几对应,只要求输入年月日,星期几是由年、月、日这些数据算出来。
1.2任务意义
飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。
软件至少需要具备的基本功能包括:
接受订票,处理退票,查询航班信息等等。
面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。
2设数据结构设计及用法说明
如图2为程序总的存储结构,中间纵列,为各个航班的基本信息,用一链表存储,其中一个节点为一个航班,其中包括终点站名、航班号、飞机号、飞行时间(星期几)、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。
横向是各个航班的订票情况,即从该指定的航班中用链表的形式横向存储已经订票了的客户信息和药等候替补的客户的信息,其中包括客户姓名和相应的需票量。
其中,应订票的客户的存储方式为线性链表,等待的客户的存储方式为链表队列。
图2数据存储结构图
相应的存储结构代码为:
typedefstructTimeNode//航班飞行时间
{
intYear,Month,Day;
char*Week;
}Time;
typedefstructAlreadyBookNode//已经订票的客户名单------链表
{
char*Name;//姓名
intNeedTicketNumber;//订票量
AlreadyBookNode*next;
}AlreadyBook;
typedefstructWaitingBookNode//等候替补的客户名单-------链队
{
char*Name;//姓名
intNeedTicketNumber;//订票量
WaitingBookNode*next;
}WaitingBook;//链队数据节点类型定义
typedefstruct
{
WaitingBook*front;
WaitingBook*rear;
}WaitingBookLink;//链队类型定义
typedefstructTicketSystemNode//航空客运订票信息---------链表
{
char*Destination;//终点站名
char*FlightNumber;//航班号
char*AircraftNumber;//飞机号
intMemberQuota;//乘员定额
intRemain;//剩余票量
TimeDepartureTime;//飞行日期
AlreadyBook*BookedGuest;//已定票名单
WaitingBookLink*WaitingGuest;//等候替补客户名单
TicketSystemNode*next;
}Ticket;
3详细设计和编码
3.1初始化
图3-1为初始化函数的流程图,主要是对链表中数据域置空,对链表中的链表和链表队列进行初始化
图3-1初始化函数流程图
3.2浏览客户信息
图3-2为浏览客户信息的流程图,主要是对刻录录入的信息进行查询
图3-2浏览客户信息流程图
3.3客户订票信息
图3-3为客户订票信息的流程图,通过记录客户的姓名,终点站,订票数量,看是否能达到客户的要求从而进行订票
图3-3客户订票信息流程图
4实验结果
4.1菜单函数的功能测试
系统运行后就会自动显示如图4-1的主菜单,选项包括:
1、录入,2、查询,3、订票,4、退票,5、退出。
当用户选择相应的代号就进入相应的功能模块。
图4-1主菜单函数功能检测
4.2录入函数的功能测试
录入航班的基本信息包括航班的数目和每一航班的终点站,航班号,飞机号,飞行日期,余票量和客户的人数姓名,订票量。
图4-2主菜单录入功能检测
4.3查询函数的功能测试
通过终点站名和航班号两种方式进行查询所需查询的航班
图4-3主菜单查询功能检测
4.4订票函数的功能测试
在主菜单中选择客户订票输入客户的终点站名,姓名和订票数目。
图4-4主菜单订票功能检测
4.5退票函数的功能测试
在主菜单中选择客户订票输入客户的姓名,飞行日期,飞机航班号实现退票。
图4-5主菜单退票功能检测
5体会
本程序基本上能安全的运行,具备的功能符合题目的要求。
用了十字交叉链表操作,是此程序的最大优点。
程序写的还算简练,结构清晰,各个模块的分工和功能明确。
在整个设计多的时间来完善整个程序。
致谢
谢谢同学,谢谢老师,谢谢战友,谢谢他们对我的帮助~~/~~~~~·。
·~~~~~\~~~~
参考文献
数据结构教程/李春堡等编著.—3版.—北京:
清华大学出版社,2009.3
数据结构教程(第3版)上机实验指导/李春堡等编著.—北京:
清华大学出版社,2009.3
附录:
源代码
#include"iostream.h"
#include"stdlib.h"
#include"malloc.h"
#include"string.h"
structflight_course
{
charterminus[30],flight[30],plane[30],flydate[10];//从左往右依次为终点站、航班号、飞机号、飞行日期
intpassenger,remain_vote;//从左往右依次为乘员定额、余票量
structyidingkehu//已经订票的客户名单,包括姓名、订票量
{
charnames[5][20];
intorder_vote[5];
}passenger1;
structhoubukehu//等候替补的客户名单,包括姓名、所需票量
{
charnames[5][20];
intneed_vote[5];
}passenger2;
};
typedefflight_courseElemType;
typedefstructDNode
{
ElemTypedata;
intlength;
structDNode*prior;
structDNode*next;
}DLinkList;//双链表类型定义
voidCreateList(DLinkList*&L)//初始化航班表
{
DLinkList*s;
intn,m,i,j;
L=(DLinkList*)malloc(sizeof(DLinkList));//创建头结点
L->prior=L->next=NULL;
cout<<"请输入航班数目:
"< cin>>n; cout<<"请输入各航班情况: "< for(i=0;i { s=(DLinkList*)malloc(sizeof(DLinkList));//创建新结点 cout<<"终点站: "; cin>>s->data.terminus; cout<<"航班号: "; cin>>s->data.flight; cout<<"飞机号: "; cin>>s->data.plane; cout<<"飞行日期(星期): "; cin>>s->data.flydate; cout<<"余票量: "; cin>>s->data.remain_vote; cout<<"请输入已定客户数: "< cin>>m; s->data.passenger=0; for(j=0;j { cout<<"客户姓名: "; cin>>s->data.passenger1.names[j]; cout<<"订票量: "; cin>>s->data.passenger1.order_vote[j]; s->data.passenger+=s->data.passenger1.order_vote[j]; } cout<<"乘员定额: "< s->next=L->next;//将*s插在原开始结点之前,头结点之后 if(L->next! =NULL) L->next->prior=s; L->next=s; s->prior=L; } L->length=n; } voidLocateElem(DLinkList*L)//按终点站名进行查询 { DLinkList*p=L->next;//p指向第1个数据结点 charterminus1[30]; cout<<"请输入查找航班的终点站名: "< cin>>terminus1; while(p! =NULL&&strcmp(terminus1,p->data.terminus)! =0) p=p->next; if(p==NULL) cout<<"不存在该航班! "< else { cout<<"该航班的信息如下: "< cout<<"航班号: "< cout<<"飞机号: "< cout<<"飞行日期(星期): "< cout<<"余票量: "< } } voidGetElem(DLinkList*L)//按航班号进行查询 { DLinkList*p=L->next; charflight[30]; cout<<"请输入查找航班的航班号: "< cin>>flight; while(p! =NULL&&strcmp(flight,p->data.flight)! =0) p=p->next; if(p==NULL) cout<<"不存在该航班! "< else { cout<<"该航班的信息如下: "< cout<<"终点站名: "< cout<<"飞机号: "< cout<<"飞行日期(星期): "< cout<<"余票量: "< } } voidDingpiao(DLinkList*&L)//客户订票函数 { DLinkList*p=L->next; charterminus2[30],name1[20],m; intorder_vote1,j=0; cout<<"请输入订票要求: "< cout<<"姓名: "; cin>>name1; cout<<"终点站名: "; cin>>terminus2; cout<<"订票数量: "; cin>>order_vote1; while(p! =NULL&&strcmp(p->data.terminus,terminus2)! =0)//根据终点站查找订票航班 p=p->next; if(p->data.remain_vote { cout<<"余票量不够,是否排队候补(是: Y,否: N)? "< cin>>m; if(m=='Y') { while(p->data.passenger2.names[j][0]! =0)//判断候补乘客数组一维元素是否为空 j++; strcpy(p->data.passenger2.names[j],name1); p->data.passenger2.need_vote[j]=order_vote1-p->data.remain_vote; p->data.remain_vote=0; } } else { while(p->data.passenger1.names[j][0]! ='\0')//判断已定票乘客数组一维元素是否为空 j++; strcpy(p->data.passenger1.names[j],name1); p->data.passenger1.order_vote[j]=order_vote1; p->data.remain_vote-=order_vote1; } } voidTuipiao(DLinkList*&L)//退票函数 { DLinkList*p=L->next; charname2[20],flydate1[10],flight1[30]; inti=0,j; cout<<"请输入退票客户信息: "< cout<<"客户姓名: "; cin>>name2; cout<<"飞行日期(星期): "; cin>>flydate1; cout<<"飞机航班号: "; cin>>flight1; while(p! =NULL&&strcmp(p->data.flight,flight1)! =0)//查找退票航班 p=p->next; while(strcmp(p->data.passenger1.names[i],name2))//查找具体的退票乘客信息 i++; for(;! p->data.passenger1.names[i+1][0];i++)//在该航班的已定票字符串数组中删除此乘客 { strcpy(p->data.passenger1.names[i],p->data.passenger1.names[i+1]); p->data.passenger1.order_vote[i]=p->data.passenger1.order_vote[i+1]; } if(p->data.passenger2.names[0])//判断候票乘客数组是否为空 for(j=0;p->data.remain_vote>p->data.passenger2.need_vote[j];j++) { strcpy(p->data.passenger1.names[i+j],p->data.passenger2.names[j]); p->data.passenger1.order_vote[i+j]=p->data.passenger2.need_vote[j]; p->data.remain_vote-=p->data.passenger2.need_vote[j]; } } voidmain() { DLinkList*L; intn; charm; ///CreateList(L); do { cout<<"**********航空客运订票系统**********"< cout<<"._________________."< cout<<"|_______________|"< cout<<"|I1、录入I|"< cout<<"|I2、查询航班I|"< cout<<"|I3、客户订票I|"< cout<<"|I4、客户退票I|"< cout<<"|I5、退出程序I|"< cout<<"|I_____________I|"< cout<<"! _________________! "< cout<<"._[_______]_."< cout<<".___|___________|___."< cout<<"|: : : ____|"< cout<<"|~~~~[CD-ROM]|"< cout<<"! ___________________! "< cout<<"Pleaseenterthefunctionnumber(1~5): "< cin>>n; system("cls"); while(n<1||n>5) { cout<<"Pleaseenterthefunctionnumberagain: "< cin>>n; } switch(n) { case1: CreateList(L);break; case2: { cout<<"A、按终点站名查询B、按航班号查询"< cout<<"请输入查询方式的字母: "< cin>>m; if(m=='A') LocateElem(L); else GetElem(L); }break; case3: Dingpiao(L);break; case4: Tuipiao(L);break; default: exit(0);break; } }while(n! =0); } 数据结构课程设计 成绩评定 成绩评定: (百分制) 指导教师签字: 检查时间:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构课程设计报 告航空订票系统 数据结构 课程设计 航空 订票 系统