C语言数据结构航空售票系统设计报告.docx
- 文档编号:30103072
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:21
- 大小:206.26KB
C语言数据结构航空售票系统设计报告.docx
《C语言数据结构航空售票系统设计报告.docx》由会员分享,可在线阅读,更多相关《C语言数据结构航空售票系统设计报告.docx(21页珍藏版)》请在冰豆网上搜索。
C语言数据结构航空售票系统设计报告
数据结构课程设计报告
题目:
航班订票系统
学生姓名:
温裕
学号:
201520180704
班级:
1521807
指导教师:
许志文
2016年12月23
目录
第1章功能需求描述3
1.1题目要求3
1.2功能列表与说明3
第2章设计描述4
2.1任务分解说明4
2.2数据结构设计说明4
第4章开发过程描述15
4.1编译过程错误分析15
4.2调试错误分析15
4.3运行结果及说明15
第5章设计心得体会17
第1章功能需求描述
1.1题目要求
任务:
通过此系统可以实现如下功能:
1)、录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
2)、查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
3)、订票:
(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4)、退票:
可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)、修改航班信息:
当航班信息改变可以修改航班数据文件
要求:
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计。
请在最后的上交资料中指明你用到的存储结构;
测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
1.2功能列表与说明
系统共设有7个功能并以菜单方式工作,上图为功能列表图。
功能分别包括以下7个方面:
(1)航班录入:
每条航线所涉及的信息有:
航班号、起飞时间、降落时间、抵达城市、航班票价、票价折扣、航班满仓人数、剩余票数、飞行日期。
(2)航线查询:
把每条航班的信息详细输出。
(3)修改航班信息:
先输入需要修改的航班号,然后把这个航班的信息输出确认后,再重新输入航班号、起飞时间、降落时间、抵达城市、航班票价、票价折扣、航班满仓人数、剩余票数、飞行日期进行修改。
(4)订票业务:
根据客户提出的要求(航班号、抵达城市、飞行日期)查询该航班情况,若有余票,则为客户班里订票手续,并让客户输入姓名、身份证号码、手机号码、选择的舱位等级信息进行储存;若已满或者余票少于订票额,则需要重新询问客户要求。
(5)退票业务:
根据客户提供的情况(航班号、姓名),查询是否有相关的订票信息,如有则输出客户的订票信息,客户确认无误后方可退票成功。
(6)查看客户信息:
把每个客户信息和相关订票信息输出。
(7)退出系统:
退出程序。
第2章设计描述
2.1任务分解说明
(1)分析系统中两个链表的设计,用来记录航班信息和客户信息。
(2)根据问题描述,设计链表;
(3)完成系统中各个信息的定义;
(4)完成系统的应用模块;
(5)功能调试;
(6)完成系统设计报告。
2.2数据结构设计说明
(1)头文件
#include
#include
#include
(2)定义“客户”链表
typedefstructcustomer//客户信息
{
charname[20],id[20],tel[11];//客户姓名、身份证号码、手机号码
intlevel;//舱位等级
customer*next;
}customer,*Lcustomer;
(3)定义“航班”链表
typedefstructairline//航线信息
{
charairlineNo[20],takeOffTime[20],landTime[20],landCity[20];//航班号、起飞时间、降落时间、抵达城市
floatprice,discount;//航班票价,票价折扣
inttotal,left,day;//航班满仓人数、剩余票数、飞行日期
Lcustomerbooked;//已定客户信息
airline*next;
}airline,*Lairline;
(4)主程序
voidmain()
{
LairlineL;//定义一个航班类型的对象
InitList(L);//创建航班类型的头结点
menu(L);//调用菜单函数
}
(5)航班录入函数
voidaddAirline(Lairline&L)//录入航班
{
system("cls");
intflag=1,t;
charno[20];
Lairlinep,q;
for(;flag;)
{
printf("请输入航班号:
\n");
scanf("%s",no);
for(p=L;p->next;p=p->next)
if(p->next&&strcmp(p->next->airlineNo,no)==0)
{
printf("航班已存在,是否重新输入?
是
(1)返回主页面(0)\n");
scanf("%d",&t);
if(t==1)
addAirline(L);
else
menu(L);
}
p=L;
q=(Lairline)malloc(sizeof(airline));
if(!
q)
{
printf("申请内存失败!
");
system("pause");
exit(0);
}
printf("该航班不存在,允许录入。
\n请输入航班号、起飞时间、降落时间、抵达城市、航班票价、票价折扣、航班满仓人数、剩余票数、飞行日期:
\n");
scanf("%s%s%s%s%f%f%d%d%d",&q->airlineNo,&q->takeOffTime,&q->landTime,&q->landCity,&q->price,&q->discount,&q->total,&q->left,&q->day);
q->booked=NULL;
q->next=p->next;
p->next=q;
printf("录入航班成功,是否继续录入?
继续
(1)返回主页面(0)\n");
scanf("%d",&flag);
}
menu(L);
}
(6)航班查询函数
voidinquery(Lairline&L)//查询航班信息
{
system("cls");
Lairlinep=L->next;
printf("航班号起飞时间降落时间抵达城市航班票价票价折扣航班满仓人数剩余票数飞行日期\n");
while(p!
=NULL)
{
printf("%s%s%s%s%.2f%.2f%d%d%d\n",p->airlineNo,p->takeOffTime,p->landTime,p->landCity,p->price,p->discount,p->total,p->left,p->day);
p=p->next;
}
printf("请按任意键返回主菜单。
\n");
system("pause");
menu(L);
}
(7)修改航班信息函数
voidmodify(Lairline&L)//修改航班信息
{
system("cls");
charno[20];
intt;
Lairlinep=L->next;
boolflag=false;
for(;p;p=p->next)
{
printf("请输入您要修改的航班号:
");
scanf("%s",no);
if(p&&strcmp(p->airlineNo,no)==0)
{
printf("已查找到航班“%s”,航班信息如下:
\n",no);
printf("航班号起飞时间降落时间抵达城市航班票价票价折扣航班满仓人数剩余票数飞行日期\n");
printf("%s%s%s%s%.2f%.2f%d%d%d\n",p->airlineNo,p->takeOffTime,p->landTime,p->landCity,p->price,p->discount,p->total,p->left,p->day);
printf("请输入航班号、起飞时间、降落时间、抵达城市、航班票价、票价折扣、航班满仓人数、剩余票数、飞行日期:
\n");
scanf("%s%s%s%s%f%f%d%d%d",&p->airlineNo,&p->takeOffTime,&p->landTime,&p->landCity,&p->price,&p->discount,&p->total,&p->left,&p->day);
printf("修改成功!
以下为更新后的数据:
\n航班号起飞时间降落时间抵达城市航班票价票价折扣航班满仓人数剩余票数飞行日期\n");
printf("%s%s%s%s%.2f%.2f%d%d%d\n",p->airlineNo,p->takeOffTime,p->landTime,p->landCity,p->price,p->discount,p->total,p->left,p->day);
break;
}
if(p&&strcmp(p->airlineNo,no)!
=0)
{
printf("航班不存在,是否重新输入?
是
(1)返回主页面(0)\n");
scanf("%d",&t);
if(t==1)
modify(L);
else
menu(L);
}
if(!
p)
{
printf("航班链表为空!
");
}
}
printf("请按任意键返回主菜单。
\n");
system("pause");
menu(L);
}
(8)订票函数
voidbooking(Lairline&L)//订票
{
system("cls");
inti,t;
intflag=0;
Lairlinep;
Lcustomerc;
for(;!
flag;)
{
printf("请输入查询航班的方式:
\n");
printf("航班号
(1),抵达城市
(2),飞行日期(3)\n");
scanf("%d",&i);
switch(i)
{
case1:
p=search_airlineNo(L);flag=1;break;
case2:
p=search_landCity(L);flag=1;break;
case3:
p=search_day(L);flag=1;break;
default:
printf("操作错误,是否重新输入?
是
(1)返回主页面(0)\n");
scanf("%d",&t);
if(t==1)
booking(L);
else
menu(L);
break;
}
}
if(p)
{
printf("航班号起飞时间降落时间抵达城市航班票价票价折扣航班满仓人数剩余票数飞行日期\n");
printf("%s%s%s%s%.2f%.2f%d%d%d\n",p->airlineNo,p->takeOffTime,p->landTime,p->landCity,p->price,p->discount,p->total,p->left,p->day);
c=(Lcustomer)malloc(sizeof(customer));
printf("请输入您的姓名、身份证号码、手机号码、选择的舱位等级(1/2/3):
\n");
scanf("%s%s%s%d",c->name,c->id,c->tel,&c->level);
printf("您输入的信息如下,请确认:
\n");
printf("姓名身份证号码手机号码选择的舱位等级\n");
printf("%s%s%s%d\n",c->name,c->id,c->tel,c->level);
if(p->left>=1)
{
c->next=p->booked;
p->booked=c;
p->left--;
printf("订票成功!
\n");
}
}
else
printf("没有该航班\n");
system("pause");
printf("请按任意键返回主菜单。
\n");
menu(L);
}
(9)退票函数
voidrefund(Lairline&L)//退票
{
system("cls");
intflag;
charname[20];
Lairlinep;
Lcustomerc;
p=search_airlineNo(L);
c=p->booked;
if(!
p)
{
printf("没有该航班!
\n");
system("pause");
printf("请按任意键返回主菜单。
\n");
menu(L);
}
printf("请输入您的姓名:
");
scanf("%s",name);
if(!
p->booked->name)
{
printf("对不起,没有找到您的信息\n\n");
system("pause");
printf("请按任意键返回主菜单。
\n");
menu(L);
}
if(!
strcmp(name,p->booked->name))
{
printf("退票信息:
\n姓名身份证号码航班号终点站\n");
printf("%s%s%s%s\n",p->booked->name,p->booked->id,p->airlineNo,p->landCity);
printf("确认要退票?
是
(1)否(0)\n");
scanf("%d",&flag);
if(flag)
{
p->booked=p->booked->next;
p->left++;
free(c);
printf("退票成功!
\n\n");
}
else
{
system("pause");
printf("请按任意键返回主菜单。
\n");
menu(L);
}
}
else
{
printf("对不起,没有找到您的信息!
\n");
system("pause");
printf("请按任意键返回主菜单。
\n");
menu(L);
}
system("pause");
menu(L);
}
(10)查看客户信息
voidcustomerInfo(Lairline&L)
{
system("cls");
Lairlinep=L->next;
Lcustomerc;
if(p->booked)
{
//for(;p->next;p=p->next)
while(p->next)
{
c=p->booked;
printf("姓名身份证号码手机号码选择的舱位等级\n");
for(;c;c=c->next)
printf("%s%s%s%d\n",c->name,c->id,c->tel,c->level);
p=p->next;
}
}
else
printf("暂时没有客户订票!
\n\n");
printf("请按任意键返回主菜单。
\n");
system("pause");
menu(L);
}
(11)按航班号查找航班函数
Lairlinesearch_airlineNo(Lairline&L)//按航班号查找航班
{
charno[20];
Lairlinep=L->next;
printf("请输入航班号:
");
scanf("%s",no);
for(;p;p=p->next)
if(!
strcmp(no,p->airlineNo))break;
returnp;
}
(12)按抵达城市查找航班函数
Lairlinesearch_landCity(Lairline&L)//按抵达城市查找航班
{
charlandCity[20];
Lairlinep=L->next;
printf("请输入抵达城市:
");
scanf("%s",landCity);
for(;p;p=p->next)
if(!
strcmp(landCity,p->landCity))break;
returnp;
}
(13)按飞行日期查找航班函数
Lairlinesearch_day(Lairline&L)//按飞行日期查找航班
{
intday;
Lairlinep=L->next;
printf("请输入飞行日期");
scanf("%d",&day);
for(;p;p=p->next)
if(day==p->day)break;
returnp;
}
(14)菜单函数
voidmenu(Lairline&L)
{
intselect;
system("cls");
printf("\n航班订票系统\n");
printf("****************************************\n");
printf("1.航班录入2.航班查询\n");
printf("3.修改航班信息4.订票\n");
printf("5.退票6.查看客户信息\n");
printf("7.退出系统\n");
printf("****************************************\n");
printf("请输入选择的数字:
");
scanf("%d",&select);
switch(select)
{
case1:
addAirline(L);
break;
case2:
inquery(L);
break;
case3:
modify(L);
break;
case4:
booking(L);
break;
case5:
refund(L);
break;
case6:
customerInfo(L);
break;
case7:
exit(0);
default:
reselect(L);
break;
}
}
第四章开发过程描述
4.1编译过程错误分析
在编程过程中,出现了很多次指针用法错误,暴露了我指针方面的缺憾,以后要加强这方面的学习。
4.2调试错误分析
在程序编写完成后,运行时遇到的错误类型主要是各种语法错误,如字母打错,字母少打,字母大小写错误,符号错误,输入法半角全角类型错误等等。
最后在反复调试检查过程中,将错误找到并一一修改。
4.3运行结果及说明
1、主菜单界面运行图
2、显示所有航线界面运行图,在主菜单界面选择“1”进入航班录入
3、查询航线信息界面运行图,在主菜单界面选择“2”进入该界面。
4、修改航班信息,在主菜单界面选择“3”进入该界面
再次查询
5、订票业务界面运行图,选择查询航班方式,显示相应的航班信息,输入客户个人的信息和舱位等级后即订票成功。
在主菜单界面选择“4”进入该界面
6、主界面选择“6”进入查看客户信息界面如下
7、退票业务界面运行图,主界面选择“5”进入退票界面,输入所退票的航班信息,确认是否退票。
第5章设计心得体会
此课程设计完成了对航线查询、订票、退票等功能的设计操作,并且还包含了清屏功能以及退出功能。
对程序在运行时输入错误操作的修改,提供了一定的方便,基本上能安全的运行。
使用单链表的操作,是此程序的最大优点,使航班、客户的的插入、删除等操作变得简单清晰。
程序结构清晰,各个模块的分工和功能明确。
经过一周的课程设计,我认识到把课堂上老师讲的知识运用到实际操作中的重要性。
我这次课程设计的题目是航空订票系统,在开始阶段,根本无从下手,后来通过查阅一些相关资料和老师的耐心讲解,最终成功完成整个程序的设计。
通过这次课设我对C语言中的相关知识有了进一步的理解,特别是对数据结构有课更深刻的了解,对程序的开发思路有了一定的理解,我想这在以后的学习和工作中都会有帮助的,更使我意识到了学习C语言的重要性。
另外,对程序的不断调试,使我的查错能力也有了很大的提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数据结构 航空 售票 系统 设计 报告