河南城建学院 数据结构课程设计报告 飞机管理系统.docx
- 文档编号:3437963
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:29
- 大小:203.79KB
河南城建学院 数据结构课程设计报告 飞机管理系统.docx
《河南城建学院 数据结构课程设计报告 飞机管理系统.docx》由会员分享,可在线阅读,更多相关《河南城建学院 数据结构课程设计报告 飞机管理系统.docx(29页珍藏版)》请在冰豆网上搜索。
河南城建学院数据结构课程设计报告飞机管理系统
河南城建学院
HenanUniversityofUrbanConstruction
《数据结构》
课程设计报告
学号:
姓名:
专业:
软件工程
题目:
飞机订票系统
指导老师:
魏新红陈秋红
设计时间:
第17周
计算机科学与工程学院
2015年06月
目录
一.设计目的3
二.设计内容3
三.概要设计4
1.功能模块图;4
2.各个模块详细的功能描述。
4
四.详细设计5
1.功能函数的调用关系图5
2.各功能函数的数据流程图6
3.重点设计及编码10
五.测试数据及运行结果11
1.正常测试数据(3组)及运行结果;11
2.非正常测试数据(2组)及运行结果。
14
六.调试情况,设计技巧及体会15
七.参考文献16
八.附录源代码16
一.设计目的
1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发
2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
飞机订票系统:
(1)熟练掌握链表存储结构及其建立过程和常用操作;
(2)熟练掌握队列的建立过程和常用操作;
(3)学会自己调试程序的方法并掌握一定的技巧。
二.设计内容
飞机订票系统
通过此系统可以实现如下功能:
(1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
(2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;
(4)退票:
可退票,退票后修改相关数据文件;
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
三.概要设计
1.功能模块图;
2.各个模块详细的功能描述。
(1)录入航线信息:
将其航班号,起降地点和时间,飞行日期,票价,折扣,限员,余票量录入
(2)查询航线信息:
根据客户提出的终点站名或是航班号输出下列航班的所有信息
(3)办理订票业务:
根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。
(4)办理退票业务:
调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。
退票成功后,重新将航线名单域指向订票单链表的头指针。
根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。
(5)退出本系统
四.详细设计
1.功能函数的调用关系图
2.各功能函数的数据流程图
(1)录入飞机信息:
(2)查询航线:
(3)办理订票业务:
(4)办理退票业务
3.重点设计及编码
1、排队等候的乘客信息
typedefstructwat_ros
{
charname[10];/*客户姓名*/
intreq_amt;/*订票数量*/
structwat_ros*next;
}qnode,*qptr;
typedefstructpqueue
{
qptrfront;/*等候替补客户名单域的头指针*/
qptrrear;/*等候替补客户名单域的属指针*/
}linkqueue;
客户链表:
每个数据元素包括头指针和尾指针两个数据项:
每个结点包括两个指针域:
头指针域
尾指针域
2、已订票乘客信息(单链表)
typedefstructord_ros
{
charname[10];/*客户姓名*/
intord_amt;/*订票量*/
intgrade;/*舱位等级*/
structord_ros*next;
}linklist;
客户的资料:
为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号、航班号、订票数量和订单号3个数据项:
姓名
订票量
字符串
整型(int)
每个结点包括数据域和指针域:
数据域
指针域
3、航班信息
stypedefstructairline
{charair_num[10];//航班号
charsta_name[10];//起点站名
charter_name[10];//终点站名
chartff_time[10];/*起飞时间*/
chardes_time[10];/*下降时间*/
chardate[7];/*飞行日期(星期几)*/
intcheck;/*票价*/
floatdisc;/*折扣*/
inttkt_amt;/*乘员定额*/
inttkt_sur;/*余票*/
structord_ros*order;//定义一个指向已订票客户的头结点指针
structwat_ros*bookqueue;//等候替补的客户名单域,分别指向排队等候名单队头队尾的指针
}airline,*Linklist;
飞机订票查询系统是一个数据库应用系统,飞机的编号和票的情况等信息都保存在数据库中。
然后可以通过查找航班的路线来查找飞机的信息。
航班号
起飞
站点
抵达
站点
起飞
时间
降落
时间
航班
日期
票价
票价
折扣
限员
余票数
字符型
字符型
字符型
字符型
字符型
字符型
字符型
(char)
浮点数
(float)
整型
(int)
整型
(int)
单链表如下:
每个结点包括数据域和指针域:
数据域
指针域
五.测试数据及运行结果
1.正常测试数据(3组)及运行结果;
1、系统界面
2、录入信息
3、查询系统&&查询操作
4、订票系统
5、退票系统
6、退出系统
2.非正常测试数据(2组)及运行结果。
六.调试情况,设计技巧及体会
1.总体过程
编译和调试工具:
选择VisualC++6.0,该工具稳定,其中有一个强大的调试工具,但我不是很熟悉。
还需要进一步的练习。
2.在一周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题:
(1)因本人能力有限,在编写的时候只使用了相对较为简单的基础语言,代替了相对较为复杂的语言,降低了运行效率。
(2)程序在起初设计的时候,经常出现溢出错误,而且不只一处。
为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,
(3)由于忘记了一些c语言的规范使得在调试过程中一些错误没有发现。
例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。
(4)测试用例具有一定的广泛性。
运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。
说明程序具有一定的可靠性和稳定性。
3.对自己的设计进行评价,指出合理和不足之处,提出自己的改进方案:
通过调试我自己认为,在哈夫曼编码译码系统中用出栈入栈进行哈夫曼译码编码译码要简单于使用数组,而使用结构体数组来存储待编译的字符,编码译码时通过结构体数组来实现要优于使用链表。
4.调试体会
本次的课程设计是有史以来时间最少的课程设计,虽说是一个星期的课程设计,但是真正在机房上课的时间少之又少,平均一天只有一节课,这就需要我们课下花费大量的时间来进行设计。
七.参考文献
[1]周二强.C语言内涵教程[M].中国铁道出版社2013.08
[2]杨文君.杨柳.C语言程序设计教程[M].清华大学出版社.2010.03
[3]谭浩强.C语言程序设计教程[M].清华大学出版社.2005.07
[4]严蔚敏.数据结构(C语言版)[M].北京:
清华大学出版社,2014.11
八.附录源代码
#include
#include
#include
#include
#defineok1
typedefstructord_ros
{//单链表
charname[15];//已订票的客户姓名
intord_amt;//已订票数量
structord_ros*next1;//下一结点指针
}ord_ros,*Link;
typedefstructwat_ros{
charname[15];//预订票的客户姓名
intwat_amt;//要订票数量
structwat_ros*next2;//下一个链队结点指针
}wat_ros,*Qptr;
typedefstruct{
Qptrfront;//单链队头结点
Qptrrear;//单链队尾结点
}linkQueue;
typedefstructairline{//创建一个航线的结构体
charair_num[15];//航班号
charsta_name[10];//起点站名
charter_name[10];//终点站名
chartff_time[10];//起飞时间
chardes_time[10];//下降时间
chardate[7];//航班日期(星期几)
intlevel;//舱位等级
intcheck;//票价
floatdisc;//折扣
inttkt_amt;//乘员定额
inttkt_sur;//余票
structairline*next;//指向下一个链结点的指针
structord_ros*order;//定义一个指向已订票客户的头结点指针
structwat_ros*bookqueue;//等候替补的客户名单域,分别指向排队等候名单队头队尾的指针
}airline,*Linklist;
structairline*L=NULL;//定义全局变量
structord_ros*H;//为已订票客户链队来申请空间
linkQueueQ;//linkQueue类型的来申请空间
LinklistInitLinklist();//声明
intInsertLinklist(Linklisthead1);//声明
voidair_number();//通过航班号查询
voidter_place();//通过目的地查询
voidinput();//初始化录入功能
voidsearch();//查询功能
voidorder_tkt();//订票功能
voidreturn_tkt();//退票功能
voidmain()
{
intn;
H=(structord_ros*)malloc(sizeof(ord_ros));
Q.front=Q.rear=(Qptr)malloc(sizeof(wat_ros));
InitLinklist();
do{//打印主界面
printf("\t**********************************************************\n");
printf("\t*飞机订票系统*\n");
printf("\t*^^*\n");
printf("\t*;;;;*\n");
printf("\t*;;V;;1录入功能;;V;;*\n");
printf("\t*;;|;;;;|;;*\n");
printf("\t*;;;v;;;2查询功能;;;v;;;*\n");
printf("\t*;;;;*\n");
printf("\t*;;3订票功能;;*\n");
printf("\t*;;;;*\n");
printf("\t*;;||;;4退票功能;;||;;*\n");
printf("\t*;;;;;;;;;;;;*\n");
printf("\t*;;XX;;0退出系统;;XX;;*\n");
printf("\t*;;;;;;;;;;;;;;;;*\n");
printf("\t*;V;;V;*\n");
printf("\t*||||*\n");
printf("\t**********************************************************\n");
printf("\t请选择:
");
scanf("%d",&n);
printf("\n");
switch(n)
{
case1:
input();//录入功能
break;
case2:
search();//查询功能
break;
case3:
order_tkt();//订票功能
break;
case4:
return_tkt();//退票功能
break;
case0:
//退出
printf("感谢你的使用,再见!
\n");
}
}while(n==1||n==2||n==3||n==4);
}
voidinput()//初始化的单链表*********************************************************录入功能
{
intm;
do{
if(!
InsertLinklist((Linklist)L))//向其中加入航班信息
{
printf("内存已满\n");
exit(OVERFLOW);
}//向链表中加一结点
printf("\t是否要输入下一个航线记录?
\n");
printf("\t是请输入1\n");
printf("\t否请输入2\n\t");
scanf("%d",&m);//在这里依靠人来决定是否输入下一条航线记
}while(m==1);
}
LinklistInitLinklist()//初始化一个单链表
{
L=(Linklist)malloc(sizeof(airline));
if(!
L)exit(OVERFLOW);
L->next=NULL;//建立一个带有头结点的单链表
return(L);
}
intInsertLinklist(LinklistL)//向航线链表添加新的结点
{
Linklistp;
p=(Linklist)malloc(sizeof(airline));//为一个新的结点分配空间
if(!
p)exit(OVERFLOW);
printf("\t请依次输入下面几项内容:
\n\n");//这里的输入采用一个个单独输入,避免了乱赋值的现象
printf("航班号\n");
scanf("%s",p->air_num);
printf("起点站\n");
scanf("%s",p->sta_name);
printf("终点站\n");
scanf("%s",p->ter_name);
printf("起飞时间\n");
scanf("%s",p->tff_time);
printf("下降时间\n");
scanf("%s",p->des_time);
printf("飞行日期\n");
scanf("%s",&p->date);
printf("舱位\n");
scanf("%d",&p->level);
printf("乘员定额\n");
scanf("%d",&p->tkt_amt);
printf("余票数\n");
scanf("%d",&p->tkt_sur);
printf("票价\n");
scanf("%d",&p->check);
printf("折扣\n");
scanf("%f",&p->disc);
p->order=(ord_ros*)malloc(sizeof(ord_ros));//为它申请空间
p->bookqueue=Q.front=Q.rear=(Qptr)malloc(sizeof(wat_ros));//为它申请空间
p->next=L->next;
L->next=p;//这二句是链表中的插入一个结点
return(ok);
}
voiddisplay(structairline*p)//预览信息
{
printf("------------------------------------------------------------------------------\n");
printf("¦%-6s¦%-6s¦%-6s¦%-7s¦%-7s¦%-4s¦%-4d¦%-7f¦%-4d¦%-4d¦\n",p->air_num,p->sta_name,
p->ter_name,p->tff_time,p->des_time,p->date,p->check,p->disc,p->tkt_amt,p->tkt_sur);
printf("------------------------------------------------------------------------------\n");
}
voidsearch()//******************************************************************查询功能
{
intn;
printf("\n\t\t***************************************\n");
printf("\t\t*航班信息查询系统*\n");
printf("\t\t*/;*\n");
printf("\t\t*|ee|*\n");
printf("\t\t*1通过目的地|{}|查询*\n");
printf("\t\t*_______________;^^;________________*\n");
printf("\t\t*;中国||航空;*\n");
printf("\t\t*`========--------..---------========'*\n");
printf("\t\t*||||*\n");
printf("\t\t*||*\n");
printf("\t\t*查询||号班航过通2*\n");
printf("\t\t*||*\n");
printf("\t\t*,---||---,*\n");
printf("\t\t*0退出'---<>---'系统*\n");
printf("\t\t*****************************************\n");
printf("\t请选择:
\n");
scanf("%d",&n);
switch(n)
{
case1:
ter_place();
break;
case2:
air_number();
break;
case0:
exit(0);
printf("欢迎您下次再次使用!
\n");
}
}
voidter_place()//通过目的地查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入要查询的目的地:
\n");
scanf("%s",c);
do{
p=p->next;
if(p)
{
if(strcmpi((*p).ter_name,c)==0)
{
printf("------------------------------------------------------------------------------\n");
printf("¦航班号¦起点站¦终点站¦起飞时间¦下降时间¦航班日期¦票价¦折扣¦限员¦余票¦\n");
display(p);//调用预览信息
return;
}
}
else{
printf("\t对不起没有您要找的目的地:
\n\n");
m=0;
}
}while(m!
=0);
}
voidair_number()//通过航班号查询
{
charc[15];
Linklistp=L;
intm;
printf("\t请输入要查询的航班号:
\n");
scanf("%s",c);
do{
p=p->next;
if(p)
{
if(strcmpi((*p).air_num,c)==0)
{
printf("------------------------------------------------------------------------------\n");
printf("¦航班号¦起点站¦终点站¦起飞时间¦下降时间¦航班日期¦票价¦折扣¦限员¦余票¦\n");
display(p);//调用预览信息
return;
}
}
else
{//如果不匹配的话就做
printf("\t对不起没有你要找的航班号:
\n");
m=0;
}
}while(m!
=0);
}
voidorder_tkt()//***************************************************************订票功能
{
Linklistp=L;//Linklist类型的L来指向链表头
ord_ros*h=H,*h1;//ord_ros定义客户的结点,方便插入与删除
linkQueueq=Q;//linkQueue类型的来
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 河南城建学院 数据结构课程设计报告 飞机管理系统 河南 城建 学院 数据结构 课程设计 报告 飞机 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)