C++课程设计报告飞机订票系统.docx
《C++课程设计报告飞机订票系统.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告飞机订票系统.docx(25页珍藏版)》请在冰豆网上搜索。
C++课程设计报告飞机订票系统
C++课程设计报告---飞机订票系统
课程设计报告书
专业:
电子信息工程
课程设计名称:
《数据结构课程设计》
题目:
飞机航班订票系统
班级:
一班
学 号:
2012508142
姓 名:
韩凯译
指导老师:
高攀老师
完成时间:
2013-03-04
摘要
随着时代的进步社会分工的不断细化,各个行业联系的不断密切,人们出行越来越多,出行的方式也是百花齐放,作为空中重要的交通工具,飞机航空系统也在不断地得到优化,其中重要的一项就是飞机航空订票系统,因此好的订票系统关系着人们的日常出行方便与否,设计并编制出符合人们需要的航空订票系统是一项繁重而艰巨的任务,需要我们认真去完成。
本文采用C作为前台开发工具,VC6.0作为程序代码的实现,旨在实现对现有飞机订票系统中遇到的各种情况进行良好的改进,是作为嵌入式系统应用于机场的良好软件。
关键词:
C,VC6.0,飞机订票系统
第一章开发环境和开发工具
1.1C/C++语言介绍
1.2开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。
采用计算机进行信息化管理已成为衡量各个国家科学化和现代化的重要标志,而交通方式的全面自动化、信息化则是其中重要的组成部分,在很大程度上影响着企业的经济效益和社会效益。
因此,本文所研究的航空订票系统具有一定的使用价值和现实意义。
1.3开发环境
本文所采用的开发环境主要是基于VC6.0和基于面向对象程序设计的c++。
VC是个平台开工具。
该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。
而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。
第二章算法思想
2.1系统需求分析
随着经济全球化的推进以及企业激烈的竞争,各大机场订票系统已经越来越不能适应人们日常出行的局面,所以我们现在需要一个检索迅速、查找方便、易修改功能齐全方便的系统来适应我们的需求。
问题的提出:
为了减少人工工作量,提高工作效率,使机场管理员的工作更加有效的进行。
2.2系统总体设计
2.21系统设计目标
本文研究开发的航空订票系统用于完成航空订票工作,有以下三个方面的目标:
【1】支持航空管理公司更加便捷的管理
【2】支持航空公司高效率的满足人们空行需求,包括与班机有关的订票,退票,查询等功能。
【3】支持航空公司随时增加或者是删除航班信息
2.22开发设计思想
基于以上系统设计目标,本文在开发人事管理信息系统时遵循了以下开发设计思想:
●采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
●尽量达到操作过程中的直观、方便、实用、安全等要求。
●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
●系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、等操作。
2.23系统功能模块设计
本系统分为六个模块:
增加航班模块、浏览航班模块、查找航班模块、航班排序模块、订票模块、退票模块。
得到如图所示系统功能模块图。
图2-1系统功能模块图
2.3算法思想描述
【1】系统启动时通过输入航班信息来增加乘客的选择范围
【2】当选择功能1时,进入增加航班模块
【3】当选择功能2时,进入浏览航班信息模块
【4】当选择功能3时,进入查找航班信息模块
【5】当选择功能4时,进入航班排序模块,有两种选择一是从航班号从大到小,二是从航班号从小到大
【6】当需要订票时,可以选择功能5进入订票模块,
【7】当有的乘客需要退票时也可以进入退票模块
第三章算法实现
3.1数据结构
航空管理系统是一个数据库应用系统,航班的所有信息都保存在数据库中。
3.2程序模块
为实现函数功能特定义一下函数模型,具体程序参考程序源代码模块
voidadd();//函数声明增加航班信息函数
voidprint();//显示航班信息
voidsearch();//查找航班信息
voiddingpiao();//订票业务
voidtuipiao();//退票
voidread();//读取文件
voidsave();//保存文件
voidoutput();//输出格式
voidpaixu();//航班排序
voidchushihua();//系统初始化
voidbuild();//建立数据文件
voidpaixu1();//按航班号从小到大排序
voidpaixu2();//从大到小
3.3各模块之间的调用关系
程序从主函数开始,首先调用chushihua函数用来判断系统本身是否已经有原始数据文件,如果已经有原始数据则调用read函数否则调用build函数用来创建数据文件。
进入系统开始页面,当进入增加航班信息模块时调用add函数和save函数,进入浏览信息模块后调用print函数来显示已有数据文件,进入查询信息模块调用search函数,dingpiao和tuipiao函数中首先调用search函数,然后在相应的增加或者是减少飞机航票。
3.4程序源代码
#include
#include
#include
#defineN9999//定义最多的航班数
#definePRINT"%d\t\t%s\t\t%s\t\t星期%s\t\t%d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count//宏定义输出格式
structair//定义结构体数组
{
intnum;
charstart[20];
charover[20];
chartime[10];
intcount;
}s[N];
inti,m=0;//定义全局变量
charii[10];
voidadd();//函数声明增加航班信息函数
voidprint();//显示航班信息
voidsearch();//查找航班信息
voiddingpiao();//订票业务
voidtuipiao();//退票
voidread();//读取文件
voidsave();//保存文件
voidoutput();//输出格式
voidpaixu();//航班排序
voidchushihua();//系统初始化
voidbuild();//建立数据文件
voidpaixu1();//按航班号从小到大排序
voidpaixu2();//从大到小
voidmain()//主函数
{
intj;
chushihua();//系统初始化判断是否存在原始数据文件
printf("欢迎使用飞机订票系统\n");
do
{
printf("================================================================================");
printf("1.增加航班信息\n"
"\t2.浏览航班信息\n"
"\t\t3.查找航班信息(按航班号)\t\t╮(╯_╰)╭\n"
"\t\t\t4.航班排序(按航班号)\n"
"\t\t\t\t5.订票业务\n"
"\to(︶︿︶)o\t\t\t6.退票业务\n"
"\t\t\t\t\t\t0.退出\n");
printf("================================================================================");
printf("请在0-6中选择以回车键结束:
");
scanf("%d",&j);
fflush(stdin);
switch(j)
{
case1:
add();
break;
case2:
print();
break;
case3:
search();
break;
case4:
paixu();
break;
case5:
dingpiao();
break;
case6:
tuipiao();
break;
case0:
save();
printf("谢谢使用,再见!
");
break;
default:
printf("您输入不合法,请按回车键继续");
getchar();
}
}while(j!
=0);//判断是否调用其他函数
}
voidchushihua()//定义系统初始化函数
{
if(access("hangban.dat",0))
{
build();
}
else
read();
}
voidbuild()//定义建立数据文件函数
{
FILE*fp;//定义文件指针
if((fp=fopen("hangban.dat","wb"))==NULL)//打开文件并判定是否出错
{
printf("创建文件失败!
");
getchar();
return;
}
printf("请依次输入航班信息(以回车键结束):
\n");
printf("--------------------------------------------------------------------------\n");
for(i=0;i{
printf("请输入航班号:
");
scanf("%d",&s[i].num);
printf("请输入起始站:
");
scanf("%s",s[i].start);
printf("请输入终点站:
");
scanf("%s",s[i].over);
printf("请输入时间(星期几):
");
scanf("%s",s[i].time);
printf("请输入机票数:
");
scanf("%d",&s[i].count);
fwrite(&s[i],sizeof(structair),1,fp);
m++;
printf("添加完毕,是否继续添加?
请键入y或n以回车键结束:
");
scanf("%s",ii);
if(strcmp(ii,"y")!
=0)//判断是否继续添加航班信息
{
fclose(fp);//关闭文件
return;
}
}
}
voidread()//定义读取文件函数
{
FILE*fp;
if((fp=fopen("hangban.dat","r"))==NULL)
{
printf("创建文件失败!
");
getchar();
return;
}
i=0;
while(!
feof(fp))
{
fread(&s[i],sizeof(structair),1,fp);//逐块读取数据
i++;
m++;//计算存在航班数
}
m--;
fclose(fp);
}
voidsave()//定义保存函数
{
FILE*fp;
if((fp=fopen("hangban.dat","wb"))==NULL)
{
printf("创建文件失败!
");
getchar();
return;
}
for(i=0;ifwrite(&s[i],sizeof(structair),1,fp);
fclose(fp);
}
voidadd()//定义增加航班信息函数
{
do{
printf("请依次输入您要增加的航班信息(以回车键结束):
\n");//打印提示信息
printf("--------------------------------------------------------------------------\n");
printf("请输入航班号:
");
scanf("%d",&s[m].num);
printf("请输入起始站:
");
scanf("%s",s[m].start);
printf("请输入终点站:
");
scanf("%s",s[m].over);
printf("请输入时间:
");
scanf("%s",s[m].time);
printf("请输入机票数:
");
scanf("%d",&s[m].count);
m++;
printf("添加完毕,是否继续添加?
请键入y或n以回车键结束:
");
scanf("%s",ii);
}while(!
strcmp(ii,"y"));//判断是否继续添加
}
voidoutput()//定义输出格式函数
{
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n");
for(i=0;iprintf(PRINT);//打印出信息
}
voidprint()//定义显示航班信息函数
{
printf("\n目前我们有如下航班:
\n");
output();//调用输出格式函数
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
}
voidsearch()//定义查询函数
{
intn;
do
{
printf("\n请输入航班号:
");
scanf("%d",&n);//输入查询的航班号
for(i=0;i{
if(s[i].num==n)//按航班号判定输出条件
{
printf("\n您所查找的航班信息为:
\n");
printf("航班号\t\t起始站\t\t终点站\t\t时间\t\t机票数\n\n");
printf(PRINT);//显示信息
printf("\n查询完毕,按回车键继续");
getchar();
getchar();
return;
}
}
printf("\n对不起,没有您需要的信息!
\n");
printf("是否重新查找?
请键入y或n以回车键结束");
scanf("%s",ii);
}while(!
strcmp(ii,"y"));//判定是否重新查找
}
voiddingpiao()//定义订票业务函数
{
intn;
chara[10]="y";
do
{
search();//调用查询模块
if(!
strcmp(ii,"n"))
{
printf("对不起!
没有找到您所需要的航班,所以不能订票。
\n");
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
strcpy(ii,"n");
break;
}
do
{
printf("请输入您要订的机票数(以回车键结束):
");
scanf("%d",&n);
if(n<=0)//判定机票数是否出错
{
printf("输入错误!
至少需订1张机票。
\n");
}
elseif(s[i].count==0)//判定机票是否售完
{
printf("对不起,你所选择的航班的机票已售完!
\n");
break;
}
elseif(s[i].count!
=0&&s[i].count>=n)//判定机票数是否大于等于订票数
{
s[i].count=s[i].count-n;
printf("订票成功!
");
break;
}
elseif(s[i].count{
printf("对不起,你所选择的航班只剩%d张机票\n",s[i].count);
printf("是否需要重新输入机票数?
请输入y或n以回车键结束:
");//判定是否重新输入订票数
scanf("%s",a);
}
}while(!
strcmp(a,"y"));
printf("是否需要订其他航班的机票?
请输入y或n以回车键结束:
");
scanf("%s",a);
}while(!
strcmp(a,"y"));//判定是否继续订票
}
voidtuipiao()//定义退票函数
{
intn;
chara[10];
do
{
search();//调用查询函数
if(!
strcmp(ii,"n"))
{
printf("对不起!
没有找到您所需要的航班,所以不能退票。
\n");
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
strcpy(ii,"n");
break;
}
printf("请输入您要退的机票数目:
");
scanf("%d",&n);
if(n<=0)//判定票数是否有效
printf("输入错误!
至少需退1张机票。
");
else
{
s[i].count=s[i].count+n;
printf("退票成功!
");
}
printf("是否继续?
请键入y或n以回车键结束:
");//判定是否继续退票
scanf("%s",a);
}while(!
strcmp(a,"y"));//判定并跳出循环
}
voidpaixu()//定义排序函数
{
intn;
printf("\n********************************************************************************");
printf("1.按航班号从小到大排序\n"
"\t2.按航班号从大到小排序\n");
printf("********************************************************************************");
printf("请在1-2中选择以回车键结束:
");
scanf("%d",&n);
switch(n)
{
case1:
paixu1();//调用从小到大排序函数
break;
case2:
paixu2();//调用从大到小排序函数
break;
}
printf("排序后的航班信息为:
\n");
output();//显示排序后航班信息
printf("\n请按回车键返回上层菜单");
getchar();
getchar();
}
voidpaixu1()//定义从小到大排序函数
{
intk,j;
structairt;
for(i=0;i{
k=i;
for(j=i+1;jif(s[k].num>s[j].num)
k=j;
if(i!
=k)
{
t=s[k];
s[k]=s[i];
s[i]=t;
}
}
}
voidpaixu2()//定义从大到小排序函数
{
intk,j;
structairt;
for(i=0;i{
k=i;
for(j=i+1;jif(s[k].num
k=j;
if(i!
=k)
{
t=s[k];
s[k]=s[i];
s[i]=t;
}
}
}
第四章测试与分析
4.1测试数据选择
表4-1
4.2测试结果分析
在输入测试数据后选择订票业务并再次输入相应的数据会完成订票业务。
在订票业务中调用dingpiao函数,所有函数的时间复杂度为O(n),系统本身采用线性结构模型。
总结
在今后的工作、学习中我将认真总结经验教训,努力使自己成为一名技术过硬、工作严谨、思维活跃的工程人员,为提高人们的生活质量做出更大的贡献
该系统主要完成以下功能
功能:
此系统功能分为管理员模块和前台票务员模块;管理员模块主
要负责航班信息管理,包括增加新航班、修改原有航班、删除航班的功能;前
台票务员模块包括乘客信息管理、订票管理、航班查询的工能。
性能:
能够高效而且快速的管理航班信息及订票功能,航班查询可在较短
时间内完成,数据能够实时反映到终端,以确保信息查询的准确性,方便乘客
订票,减少系统错误。
心得体会
在这次程序编制的过程中出现了很多问题,主要原因是自己以前接触的关于编制程序的知识的缺乏,通过飞机航班订票系统的开发让我知道了自己的不足和缺点,写出一个好的程序需要合作精神,一个人的力量毕竟是有限的团队力量才是无穷的。
一个好的程序员一定是从程序堆里走出来的,只有通过参与具体程序的开发才知道自己知识的有限,才会学会具体的分析问题,是自己的逻辑性和层次性得到良好的锻炼,
课程设计是一门专业课,给我很多专业知识以及专业技能上了提升,同时又是一门思辨课,让我感触很深,是我对抽象的理论有了具体的认识,在这次课程设计中知道了以前没有接触过的很多函数,C语言中的文件部分因为种种原因都没有得到及时的学习,以前很多东西都没有学好,就像老师以前说的:
“一天敲一个小时的键盘程序就能学好了。
”现在开始相信了,在以后的学习中自己要加强程序的锻炼,多参考好的程序和各种各样的函数,建立起自己的函数库,为以后学习打下良好的基础。
参考文献
[1]严蔚敏、吴为民.