课程设计飞机订票系统.docx
《课程设计飞机订票系统.docx》由会员分享,可在线阅读,更多相关《课程设计飞机订票系统.docx(28页珍藏版)》请在冰豆网上搜索。
课程设计飞机订票系统
河南城建学院
课程设计报告书
专业:
计算机科学与技术
课程设计名称:
《数据结构课程设计》
题目:
飞机订票系统
班级:
学号:
姓名:
同组人员:
指导老师:
完成时间:
摘要
企业人事信息管理是企业管理中的一个重要内容,随着时代的进步,企业人员数量也不断增加、分工的不断细化、各个行业间联系的不断密切,对人事管理的要求也不断提高。
如何管理好企业内部员工的信息,对员工实施高效的宏观管理,对企事业单位的人员构成情况和发展趋势进行统计、规划、分析并制定切实可行的人事政策,是一项繁重而艰巨的任务。
提供信息咨询,信息检索,信息存取等服务,在此论文中主要实现对存储在数据库中的数据表进行这些简单的操作,为提高企业人事管理效率提供了行之有效的手段。
关键词:
数据结构,算法设计,C,C++,VC6.0,飞机订票系统;
目录
第一章开发环境和开发工具1
1.1C++简介1
1.2开发背景1
1.3开发环境1
第二章算法思想2
2.1系统需求分析2
2.2系统总体设计2
2.2.1系统设计目标2
2.2.2开发设计思想2
2.2.3系统功能模块设计3
2.3算法思想描述4
第三章算法实现9
3.1数据结构9
3.2程序模块9
3.3各模块之间的调用关系9
3.4源程序代码9
第四章测试与分析18
4.1测试数据选择18
4.2测试结果分析18
总结20
心得体会21
参考文献21
第一章开发环境和开发工具
1.1C++简介
一种面向对象的开发语言,C++是一种使用非常广泛的计算机编程语言。
C++是一种静态数据类型检查的、支持多重编程方式的通用程序设计语言。
它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。
其编译器比目前其他计算机语言的编译技术更复杂。
1.2开发背景
随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。
采用计算机进行信息化管理已成为衡量企业管理科学化和现代化的重要标志,而人事管理的全面自动化、信息化则是其中重要的组成部分。
人事管理的好坏对于企业的决策者和管理者来说都至关重要,在很大程度上影响着企业的经济效益和社会效益。
因此,本文所研究的人事管理信息系统具有一定的使用价值和现实意义。
1.3开发环境
本文所采用的开发环境主要是基于VC6.0和基于面向对象程序设计的c++。
VC是个平台开工具。
该软件使用TC2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。
而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。
第二章算法思想
2.1系统需求分析
随着计算机技术的飞速发展及经济全球化的推进以及企业激烈的竞争,各大机场订票系统已经越来越不能适应人们日常出行的局面,所以我们现在需要一个检索迅速、查找方便、易修改功能齐全方便的系统来适应我们的需求。
问题的提出:
为了减少人工工作量,提高工作效率,使机场管理员的工作更加有效的进行。
2.2系统总体设计
2.2.1系统设计目标
本文研究开发的飞机订票系统,有如下四个方面的目标:
●可以录入航班情况。
●可以查询某个航线的情况;可以输入起飞抵达城市,查询飞机航班情况。
●可以订票,如果该航班已经无票,可以提供相关可选择航班。
●可退票,退票后修改相关数据文件。
2.2.2开发设计思想
基于以上系统设计目标,本文在开发人事管理信息系统时遵循了以下开发设计思想:
●采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。
●尽量达到操作过程中的直观、方便、实用、安全等要求。
●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。
●系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
2.2.3系统功能模块设计
本系统分为六个模块:
增加航班模块、浏览航班模块、查找航班模块、航班排序模块、订票模块、退票模块。
得到如图所示系统功能模块图。
+
图3-1系统功能模块图
2.3算法思想描述
【1】系统启动时通过输入航班信息来增加乘客的选择范围
【2】当选择功能1时,进入增加航班模块
【3】当选择功能2时,进入浏览航班信息模块
【4】当选择功能3时,进入航班操作模块
【5】当选择4功能时,进入订票系统模块
【6】当选择5功能时,进入退票系统模块
【7】选择8功能时退出系统
第三章算法实现
3.1数据结构
航空管理系统是一个数据库应用系统,航班的所有信息都保存在数据库中。
3.2程序模块
void menu()//清屏//
void order;//排序//
void input;//输入航班//
void search_time()//输入时间查找//
void search_end()//输入地点查找//
void menu1()//飞机售票操作//
int search() //查询//
void book()//订票系统//
void back()//退票系统//
void save()//保存//
void load()//载入//
3.3各模块之间的调用关系
程序从主函数开始,首先调用menu函数清屏进入系统开始页面,利用switch——case结构选择自己所需的功能模块。
具体操作时,首先利用input函数录入航班信息,save函数储存航班信息、order函数进行排序;进入订票系统时,首先进入menu1函数在调用load函数载入数据及调用search_time函数、search_end函数查找航班信息,然后在由book函数订购机票save函数存储订票信息,退票时,进入back函数模块,完成退票后,回到初始menu函数模块。
3.4源程序代码
#include
#include
#include/*调用库函数*/
#defineN1000
typedefstructplane//定义函数组//
{
charID[10];/*航班代号*/
charBePlace[10];/*飞机起飞地点*/
charEnPlace[10];/*飞机降落终点*/
chardata[15];/*飞机起飞时间*/
intmax;/*飞机最大乘客人数*/
intprice;/*飞机票价*/
intnum;/*飞机已售票数*/
}PLANE;
PLANEti[N];
intn;/*当前的航班数目*/
voidmenu();
voidmenu1();
voidinput(inti)//利用递归录入航班//
{
printf("请输入航班代号:
\n");//录入航班号//
scanf("%s",ti[i].ID);
printf("请输入起飞地点:
\n");//录入起飞地点//
scanf("%s",ti[i].BePlace);
printf("请输入降落地点:
\n");//录入降落地点//
scanf("%s",ti[i].EnPlace);
printf("请输入起飞时间:
\n");//录入起飞时间//
scanf("%s",ti[i].data);
printf("请输入航班的最大载客人数:
\n");//录入票数//
scanf("%d",&ti[i].max);
printf("请输入航班的票价:
\n");//录入航班//
scanf("%d",&ti[i].price);
ti[i].num=0;
}
voidenter()//输入函数//
{
inti;
system("cls");
printf("请输入航班的数目(0-%d)?
:
",N);/*要输入的记录个数*/
scanf("%d",&n);
printf("\n请输入数据\n\n");
for(i=0;i{
printf("\n请输入第%d航班记录.\n",i+1);
input(i);/*调用输入函数*/
}
getchar();
menu();
}
voidprintf_one(inti)/*利用递归显示一个记录的函数*/
{
printf("%11s%6s%10s%6s%6d%6d%6d",ti[i].ID,ti[i].BePlace,ti[i].EnPlace,ti[i].data,ti[i].price,ti[i].max,ti[i].num);
}
voidbrowse()
{
inti;
system("cls");
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
printf_one(i);
printf("\n");
}
getchar();
getchar();
menu();
}
voidorder()/*排序模块(按平均成绩)*/
{
inti,j;
structplanes;
system("cls");
for(i=0;i{
for(j=i+1;jif(strcmp(ti[i].data,ti[j].data)>0)
{
s=ti[i];
ti[i]=ti[j];
ti[j]=s;}
}
browse();
}
voidsearch_time()
{
inti,m=0;
structplanes;
system("cls");
printf("\n\nEnterthetime:
");
scanf("%s",s.data);/*输入出发的时间*/
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
if(strcmp(s.data,ti[i].data)==0)
{
m++;
if((m!
=0)&&(m%10==0))/*目的是分屏显示*/
{
printf("\n\nPressanykeytocontiune...");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n--------------------------------------------------------------------");
getchar();/*按任意健*/
getchar();
menu1();
}
voidserch_end()
{
inti,m=0;
structplanes;
system("cls");
printf("\n\nEntertheendPlace:
");
scanf("%s",s.EnPlace);/*输入要到达的地方*/
puts("\n--------------------------------------------------------------------");
printf("\n\t航班代号起飞地点降落地点起飞时间票价最大乘客已售票数\n");
for(i=0;i{
if(strcmp(ti[i].EnPlace,s.EnPlace)==0)
{
m++;
if((m!
=0)&&(m%10==0))/*目的是分屏显示*/
{
printf("\n\nPressanykeytocontiune...");
getchar();
puts("\n\n");
}
printf_one(i);
printf("\n");
/*调用显示一个记录的函数*/
}
}
puts("\n--------------------------------------------------------------------");
getchar();/*按任意健*/
getchar();
menu1();
}
voidmenu1()
{
intn,w1;
do
{
system("cls");/*清屏*/
puts("\t\t\t\t飞机售票操作!
\n\n");
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.按照时间排序");
puts("\t\t\t\t2.按照时间查找航班");
puts("\t\t\t\t3.按照地点查找航班");
puts("\t\t\t\t4.返回主菜单");
puts("\n\n\t\t**********************************************\n");
printf("Choiceyournumber(1-4):
[]\b\b");
scanf("%d",&n);
if(n<1||n>4)/*对选择的数字作判断*/
{
w1=1;
printf("yourchoiceisnotbetween1and4,Pleaseinputagain:
");
getchar();
getchar();
}
elsew1=0;
}while(w1==1);
switch(n)/*选择功能*/
{
case1:
order();break;
case2:
search_time();break;
case3:
serch_end();break;
case4:
menu();break;
}
}
intsearch()/*查找模块*/
{
inti,k;
structplanes;
k=-1;
system("cls");
printf("\n\n请输入要订票的起飞地点:
");/*输入出发地点*/
scanf("%s",s.BePlace);
printf("\n\n请输入要订票的降落地点:
");/*输入要到达的地方*/
scanf("%s",s.EnPlace);
printf("\n\n请输入要订票的起飞时间:
");/*输入出发的时间*/
scanf("%s",s.data);
for(i=0;i{
if(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnPlace)==0&&strcmp(s.data,ti[i].data)==0)
{
k=i;/*找到要修改的记录*/
printf_one(k);
break;/*调用显示一个记录的函数*/
}
}
if(k==-1)
{
printf("\n\nNOexist!
");
return-1;
}
else
returnk;
}
voidbook()
{
inti;
system("cls");
printf("欢迎进入售票窗口!
\n");
i=search();
if(i!
=-1)
{
if(ti[i].num>=ti[i].max)
{
printf("\n该趟航班票已售完!
");
}
else
{
ti[i].num++;
printf("\n订票成功!
\n");
}
}
else
printf("该航班不存在!
\n");
getchar();
getchar();/*按任意健*/
menu();
}
voidback()
{
inti,k=-1;
structplanes;
system("cls");
printf("欢迎进入退票窗口!
\n");
printf("\n\n输入航班代号:
");
scanf("%s",s.ID);/*输入要到达的地方*/
for(i=0;i{
if(strcmp(s.ID,ti[i].ID)==0)
{
k=i;/*找到要修改的记录*/
printf_one(k);
break;/*调用显示一个记录的函数*/
}
}
if(k==-1)
{
printf("\n\nNOexist!
");
}
else
{
ti[i].num--;
printf("\n退票成功!
\n");
}
getchar();/*按任意健*/
getchar();/*按任意健*/
menu();
}
voidsave()
{
intw=1;
FILE*fp;
inti;
system("cls");
if((fp=fopen("\\ticket.txt","wt"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/
{
printf("\nCannotopenfile\n");
return;
}
for(i=0;iif(fwrite(&ti[i],sizeof(structplane),1,fp)!
=1)
{
printf("filewriteerror\n");
w=0;
}
if(w==1)
{
printf("filesaveok!
\n");
}
fclose(fp);
getchar();
getchar();
menu();
}
voidload()
{
FILE*fp;
inti,w;
w=1;
system("cls");
if((fp=fopen("\\ticket.txt","rt"))==NULL)
{
printf("\nCannotopenfile\n");
w=0;
return;
}
n=0;
for(i=0;!
feof(fp);i++)
{
fread(&ti[i],sizeof(structplane),1,fp);
n++;
}
n=n-1;
fclose(fp);
if(w==1)
printf("Loadfileok!
");
getchar();
getchar();
menu();
}
voidmenu()
{
intn,w1;
do
{
system("cls");/*清屏*//*清屏*/
puts("\t\t\t\t飞机售票管理系统!
\n\n");
puts("\t\t*********************MENU*********************\n\n");
puts("\t\t\t\t1.输入新航班");
puts("\t\t\t\t2.浏览");
puts("\t\t\t\t3.航班操作");
puts("\t\t\t\t4.订票");
puts("\t\t\t\t5.退票");
puts("\t\t\t\t6.保存");
puts("\t\t\t\t7.载入");
puts("\t\t\t\t8.退出");
puts("\n\n\t\t**********************************************\n");
printf("Choiceyournumber(1-8):
[]\b\b");
scanf("%d",&n);
if(n<1||n>8)/*对选择的数字作判断*/
{
w1=1;
printf("yourchoiceisnotbetween1and8,Pleaseinputentertochoiceagain:
");
getchar();
getchar();
}
elsew1=0;
}while(w1==1);
/*选择功能*/
switch(n)
{
case1:
enter();break;/*输入模块*/
case2:
browse();break;/*浏览模块*/
case3:
menu1();break;/*查找模块*/
case4:
book();break;/*订票模块*/
case5:
back();break;/*退票模块*/
case6:
save();break;/*保存模块*/
case7:
load();break;/*加载模块*/
case8:
exit(0);
}
}
voidmain()
{
menu();
}
第四章测试与分析
4.1测试数据选择
4.2测试结果分析
在输入测试数据后选择订票业务并再次输入相应的数据会完成订票业务。
在订票业务中调用book函数,所有函数的时间复杂度为O(n),系统本身采用线性结构模型。
总结
本系统功能分为管理员模块和前台票务员模块;管理员模块主要负责航班信息管理,包括增加新航班、修改原有航班、删除航班的功能;前台票务员模块包括乘客信息管理、订票管理、航班查询的工能。
从最后设计出的测试结果来看,效果比较明显,检索迅速、查找方便、可靠性高、存储量大、信息利用率高。
该系统能够极大地提高人事管理的效率,优化企业的人力、物力,降低企业的管理成本,为企业人事管理提供帮助。
当然,要作为