飞机订票系统.docx
《飞机订票系统.docx》由会员分享,可在线阅读,更多相关《飞机订票系统.docx(35页珍藏版)》请在冰豆网上搜索。
飞机订票系统
课程设计报告
课程设计名称数据结构课程设计
专业计算机科学与技术
班级
学号
姓名_
指导教师
成绩
2012年2月26日
数据结构课程设计
——《飞机票票订票管理》
目录ii
第1章软件的需求分析3
1.1软件达到的目的3
1.2软件功能说明3
121功能分析说明图3
第2章软件概要设计4
2.1软件模块的总体设计4
2.2软件设计详细内容4
2.2.1采用的主要数据结构类型4
223主要流程图4
第3章设计的详细说明及关键代码分析17
3.1设计的详细说明17
3.2关键代码分析和说明17
3.3测试说明18
第4章程序运行19
4.1程序运行19
参考文献
总结
第1章软件的需求分析
1.1软件达到的目的
通过此系统可以实现如下功能
1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);
可以输入起飞抵达城市,查询飞机航班情况;
3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)
可以订票,如果该航班已经无票,可以提供相关可选择航班;
4)退票:
可退票,退票后修改相关数据文件;
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:
当航班信息改变可以修改航班数据文件
1.2软件功能说明
1.2.1功能分析说明图
该软件功能分析说明图如1-1所示:
图1-1
第2章软件概要设计
2.1软件模块的总体设计
编写一个飞机订票系统的程序,使该系统能够实现对航班信息的录入、浏览、排序、查询以及订票、退票的功能。
根据题目要求,首先要制作一个主菜单显示出各个操作的提示可供用户选择,进而一步步地深入操作。
根据主菜单的内容再进一步编制具体操作的函数,各个功能均用专门编制的函数来完成。
这就是看到题目后的最初的思路。
2.2软件设计详细内容221采用的主要数据结构类型
头文件包含、全局变量定义和结构体定义源代码:
#include//标准输入、输出头文件
#include//包含字符串函数处理头文件
#include//包含access函数的头文件
#defineN1000//定义最多的航班数
#definePRINT“%d\t\t%s\t\t%s\t
期%s\t\%d\n”,s[i].nums[i].starts[i].over,s[i].time,s[i]..count
//宏定义输出格式
structair
{intnum;
charstart[20];
charover[20];
chartime[10];
intcount;
//定义结构体数组
//定义航班号
//航班起始站
//航班终点站
//飞行时间
//机票数量
}s[N];
inti,m=0;//定义全局变量,记录下航班信息的数量
charii[10];//用来选择是否继续的变量
(2)enter函数流程图
如图2-2
输出:
请输入第%d航班
i++
返回王目录menu
图2-2~
(3)input如图2-3
函数流程图
输出:
输义入起飞
―1开始L输出:
请输入航班
用输输入请输入降落
输输入请迎y输出:
请输入航班最大载客
图2-3
(4)browse函数流程图如图2-4
i=0
开始
如图2-5
(6)order如图2-6
函数流程图
定义n,w1
清屏
结束
图2-5
输入菜单¥义始^
H定义结构S
输出:
Choiceyou清屏
i=0
1F
键入数字
N
j=i+1
n<1||n>4
N
=0
data>tY
s=ti[i]
N
Y
w
N
N
m!
=0)&
%10==0
N
(7)search_tinie如图2-7
—Y
分屏显(示
lfhrN
m++n=
图2-6
order()
search_end
Y
search_tim
Y*
N
Y>
Y•
++-++
开始
丿n=1
(8)serch_end如图2-8
函数流程一
1=0开始
输出对应单班信航1
N
输入调用时间
i++
图2-7
N
m++
定义
Y
m%10==0
飞
Z
N
入
N
I口
i++
N
N
清屏
N
i!
=-1
Y
N
ti[i].num>=ti[i]
票已售
录
工
结束
s.BePlace==ti[i]BePlace&&s.EnPlYce==ti[i].
输入
调k=Y用
输出:
该趟
(9)search如图2-9
输出:
NOexist!
(10)book函数流程图如图2-10
输出:
欢迎进入售票窗
函数返回值-1
图1-9
图2-8
ti[i].num
//输出:
订票成
输出:
该趟航
dPlace==s.EnLl_返回主菜单mpnu1函数流程图^开始
结束
L
Y
定义结构体s
(m=0)&&(
分屏显示
函数返回k值
结束
图2-10
(11)back函数流程图
如图2-11
开始
N
N
i++
T
输出:
欢迎进:
输入航班代号ID
k
=i
调用
k==-1
N
口
输出NOexist
ti[i].rtum--
输出:
退票成功
(12)save函数流程图
如图2-12
N
N
N
定义W开始*fp,i
输出:
filW=owrite
\\tick
(fp=fopen(
Yotopen
1=0
i++
w==1
N
输出Closersave
「返回主目录
如图2-12
结束
u」
Y
(13)load函数流程图
3.1设计的详细说明
程序中各个模块之间的调用方式主要是通过文件的包含和函数的调用实现的,用文件的形式把各个函数分开,再用头文件把它们包含进来,使用主函数进行调用。
3.2关键代码分析和
说明
1)定义系统初始化函数
模块功能:
设立一个初始化函数来得到航班信息。
具体设计是第一次运行程序时自动生成保存航班信息的文件,并输入初始航班信息,待第二次开始就可以直接读取该文件获得已有的航班信息并可直接使用。
运用了access函数判断文件是否存在。
该函数源代码为:
voidchushihua()//初始化函数
{
if(access("hangban.dat",0))
build();
else
read();
}
2)定义建立新数据文件的函数
系统初始化后,没有寻找到数据文件,则进行新建数据文件,此函数的作用就是进行新建文件数据的录入。
运用到了文件指针的定义FILE*fp,文件的打开fopen和关闭fclose、成块读写函数中的fwrite;运用for循环进行各组数据的输入,用m++己录下输入的航班数量,并运用if语句判断是否输入下一条航班信息,若不继续则返回主界面。
3)定义读取文件内航班信息的函数
系统初始化之后,若原始数据文件存在,则进行文件内航班信息的读取,以供接下来程序中的各个函数来使用。
在该函数中同样运用到了文件指针FILE
*fp、文件的打开fopen和关闭fclose、成块读写函数中的fread、文件结束检测函数feof同时配合while语句控制文件的读取;m++己录下读取到的航班数量等。
4)定义保存函数
因为在飞机订票系统中涉及到飞机的订票和退票业务,还有按航班号的排序功能,所以我就定义了这个保存函数来保存下每次运行系统后对整个订票系统涉及到的资料的修改。
为了简便程序,我就准备将此函数放在整个系统得推出选项中,这样就只在每次退出系统的时候进行一次保存,将此次对文件修改的所有新信息都一次保存下来。
这样就实现了整个系统运行时进行一次读取,推出时一次保存的设计,大大简便了文件的调用和读取。
保存函数运用到的知识点与读取函数大致相同。
此函数的源代码为:
有关文件读取、写入和保存的函数定义完了就开始设计与题目要求直接相关的函数了。
5)定义订票业务函数
在这个函数中首先调用了search函数查找需要订票的航班。
运用if语句实现订票时的多种情况:
订票数输入不正确、飞机票数不足等情况。
订票成功时运用s[i].count=s[i].count-n;将已被订的机票数减去,以显示新的即时航班信息
6)定义退票业务函数:
与订票函数相类似,只做稍稍修改就行退票成功是用s[i].count=s[i].count+n;将航班的剩余票数加上去以显示即时航班信息。
7)定义主函数
主函数主要就是提供系统的主菜单界面供用户选择。
运行主函数时首先调用chushihua函数判定数据文件是否存在、是否要进行初始航班信息输入;若已存在则进入主界面菜单供用户选择,运用swich语句对用户的不同选择来调用各功能的函数。
并用do…while语句循环实现能够让用户进行多次的选择。
3.3测试说明调试过程中曾经遇到过一些问题,但是也不多,遇到过:
订票或退票的时候不能将剩余的票数加上和减去。
后来经过详细的检查与对照课本知识点找出了相应的错误点,经过修改加入票数加减语句,再经过与保存函数的配合后实现了题目要求的功能。
调试成功。
第4章程序运行
4.1程序运行
进入程序菜单界面如图4-1
图4-1
查询航班界面如图4-2
图4-2
订票过程界面如图4-3
图4-3飞机售票操作界面如图4-4
图4-4
退票系统界面如图4-5
图4-
参考文献
1.《数据结构C语言》严蔚敏清华大学出版社
2.《c语言程序设计》谭浩强清华大学出版社
3.《数据结构》高教出版社
4.《数据结构习题》李春保清华大学出版社
5.《数据结构习题》严蔚敏清华大学出版社
6.《c语言与数据结构》王立柱清华大学出版社
7.《数据结构(C语言篇)习题与解析》李春葆清华大学出版社
总结
经过此次的课程设计,可以很明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。
通过此次课程设计也学会综合运用理论知识来分析和解决实际问题的能力、养成严谨的科学态度和良好的程序设计习惯,实现由知识向智能的初步转化;学会遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,并与同组成员共同完成设计、编写、调试和测试应用程序及编写文档的任务。
学生:
2012年2月25日
指导教师签字:
年月日
源代码
#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);
}getchar();menu();
J
voidprintf_one(inti)
/*
显示一个记录的函
input(i);
/*
调用输入函数*/
数*/
{
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;j0)
{
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;iif(strcmp(s.BePlace,ti[i].BePlace)==0&&strcmp(s.EnPlace,ti[i].EnP
lace)==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;iif(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");
我的文档桌面\\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");
我的文档桌面\\ticket.txt","rt"))==NULL)
{printf("\nCannotopenfile\n");w=0;return;
}
n=0;for(i=0;!
feo