飞机订票系统程序设计课程设计.docx
《飞机订票系统程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《飞机订票系统程序设计课程设计.docx(29页珍藏版)》请在冰豆网上搜索。
飞机订票系统程序设计课程设计
高级语言程序设计
课程设计报告
题目:
飞机订票系统程序设计
专业:
班级:
学号:
姓名:
指导教师:
日期:
山东工商学院信电学院
1、程序基本功能要求
本程序首先输入用户名、密码进入系统;从菜单中选择可以输入机票信息对机票信息进行浏览、修改、查询、退订票等功能并可以通过其内部各类方
式或菜单内选项了解航班更细的信息。
(1)航班信息用文件保存,因而要提供文件的输入输出操作。
(2)航班信息的录入,其中包括了航班信息中的航班号、起始站、终点站、预售机票数、已售机票数。
(3)航班信息浏览功能且提供显示操作。
(4)可以查询航线,查询方式有按航班号查询、按起点站查询、按终点站查询按航线查询、按飞行时间查询五种,可从各个方面进行查询,方便快捷。
(5)承办订票和退票业务,可显示剩余票数和已买票数。
当票数被订或被退时票数会随之变化,统计较为灵活。
(6)提供键盘式选择菜单以实现功能选择。
2、总体设计.
编写一个飞机订票系统的程序使该系统能够实现对航班信息的录入、浏览、修改、查询以及订票、退票的功能。
根据课程设计要求和本组人员的增补,首先要通过一个用户登录界面进入系统,其次要制作一个主菜单显示出各个操作的提示可供用户选择进而一步步地深入操作。
根据主菜单的内容再进一步编制具体操作的函数,各个功能均用专门编制的函数来完成。
因为飞机订票系统含有各航班的各项信息如航班号、航线、飞行时间、机票数目等必要信息所以就决定用刚学不久的结构体数组来存放航班的各项信息,这就是看到题目后的最初的思路。
在整个程序中,含有多种类型的头文件,包括了标准输入、输出头文件、字符串函数处理头文件、动态存储与释放函数头文件;在结构体数组中也对不同类型的数组进行不同的定义,例如:
intflightno、inttotalticket、charstart[10]等;在各类信息的显示操作中,本系统在执行浏览、查询和退订票是充分利用函数的调用,利用switch()语句进行,简便实用;在此系统中,函数相互嵌套,形成了一个完整的系统。
本次设计需要编制初始化、建立数据文件、数据文件保存、增加航班信息、订票、退票业务等内容。
首先需要设立一个初始化函数来得到航班信息。
具体设计是第一次运行程序时自动生成保存航班信息的文件,并输入初始航班信息,待第二次开始就可以直接读取该文件获得已有的航班信息并可直接使用。
运用了access函数判断文件是否存在。
系统初始化后,没有寻找到数据文件则进行新建数据文件。
此函数的作用就是进行新建文件数据的录入,运用到了文件指针的定义FILE*fp文件的打开fopen和关闭fclose、成块读写函数中的fwrite运用for循环进行各组数据的输入,用m++记录下输入的航班数量并运用if语句判断是否输入下一条航班信息,若不继续则返回主界面。
系统初始化之后若原始数据文件存在则进行文件内航班信息的读取以供接下来程序中的各个函数来使用。
在该函数中同样运用到了文件指针FILE*fp、文件的打开fopen和关闭fclose、成块读写函数中的fread、文件结束检测函数feof同时配合while语句控制文件的读取,m++记录下读取到的航班数量等。
因为在飞机订票系统中涉及到飞机的订票和退票业务还有按航班号的排序功能,所以我就定义了这个保存函数来保存下每次运行系统后对整个订票系统涉及到的资料的修改。
为了简便程序我就准备将此函数放在整个系统得推出选项中,这样就只在每次退出系统的时候进行一次保存将此次对文件修改的所有新信息都一次保存下来。
这样就实现了整个系统运行时进行一次读取,推出时一次保存的设计大大简便了文件的调用和读取。
保存函数运用到的知识点与读取函数大致相同。
在这个函数中首先调用了search函数查找需要订票的航班。
运用if语句实现订票时的多种情况,订票数输入不正确、飞机票数不足等情况。
订票成功时运用s[i].totalticket=s[i].totalticket-n,s[i].sellticket=s[i].sellticket+n将已被订的机票数减去以显示新的即时航班信息。
与订票函数相类似s[i].totalticket=s[i].totalticket+n,s[i].sellticket=s[i].sellticket-n。
只做稍稍修改就行退票成功是用.。
将航班的剩余票数加上去以显示即时航班信息。
模块分工:
进入系统菜单、输出航班信息、订票信息由刘妍负责
输入航班信息、保存航班信息、读取航班信息由龚媛负责
查询航班信息、退票信息、修改信息部分由郭勇艳负责
3、详细设计
系统程序结构(流程图)
录入信息系统流程图
利用fread(&s[i],sizeof(flight),1,fp)读取信息
fread(&s[i],sizeof(flight),1,fp);
航班信息浏览函数:
[流程图]显示信息
查询模块:
[流程图]
..
4、程序运行结果(截图)
登陆系统时需输入用户信息
图1
进入系统后出现菜单供选择,选择需要进入的窗口
图2
航班信息的录入
图3
浏览航班信息
图4
航班信息的修改
图5
查询菜单
图6
通过航班号和时间进行查询
图7
系统订票
图8
退票系统
图9
退出系统
图10
5、源程序代码(代码中注明每段代码的完成人)
/*用户名:
dianke密码:
12345*/
#include//标准输入、输出头文件
#include//包含字符串函数处理头文件
#include//包含动态存储与释放函数头文件
#include//包含字符串的输入、输出头文件
#defineN10000
structflight//定义结构体数组
{
intflightno;
charstart[10];
charend[10];
charday[10];
inttotalticket;
intsellticket;
}
s[N];
inti;
intm=0;
#definePRINT"%-d%14s%13s%12s%12d%16d\n",s[i].flightno,s[i].start,s[i].end,s[i].day,s[i].totalticket,s[i].sellticket//定义输出格式
voidmenu();//进入系统菜单
voidprint();//输出航班信息
voidbooking();//订票信息
voidinput();//输入航班信息
voidsave();//保存航班信息
voidread();//读取航班信息
voidsearch();//查询航班信息
voidback();//退票信息
voidcorrect();//修改信息
voidmenu()
{
intj;
printf("欢迎进入飞机订票管理系统!
\n");
printf("======================================================================\n");
do
{
printf("1.录入航班信息\n");
printf("2.浏览航班信息\n");
printf("3.修改航班信息\n");
printf("4.查询航班信息\n");
printf("5.订票信息\n");
printf("6.退票信息\n");
printf("0.退出航班信息管理系统\n");
printf("======================================================================\n");
printf("请在0-6中选择以回车键结束:
\n");
scanf("%d",&j);
switch(j)
{
case1:
input();//调用输入模块
break;
case2:
print();//调用打印模块
break;
case3:
correct();//调用修改模块
break;
case4:
search();//调用查询模块
break;
case5:
booking();//调用订票模块
break;
case6:
back();//调用退票模块
break;
case0:
;
break;
}
}while(j!
=0);//判断结束
printf("谢谢使用,再见!
\n");
}//主函数结束
voidmain()//打印主函数程序信息
{
inti,k,part1,part2;
charname[10]="dianke",password[10]={"\0"};
charperson[10],c[10]="12345";
printf("\t\t**********欢迎进入飞机订票管理系统!
**********\n\n");//打印提示信息
printf("\t\t~本系统由、、编写完成~\n\n");
printf("\t\t~(*^__^*)~\n\n");
printf("\t\t\t用户登录\n\n");
for(k=0;k!
=3;)//打开文件并判断
{
printf("\t\t\t\t用户名:
");//打印用户名
gets(person);
part1=strcmp(person,name);
printf("\t\t\t\t密码:
");//打印密码
for(i=0;i<5;i++)
{
c[i]=getch();
printf("*");
}
gets(c);
part2=strcmp(c,password);
if(part1==0&&part2==0)
{
printf("\t\t\t\t登陆成功!
\n\n");
menu();
break;
}
else
{
printf("\t\t\t用户名或密码错误!
\n\n");
printf("\t\t\t请注意:
您还剩%d次机会!
\n\n",2-k);
k++;
}
}
if(k=3)
printf("对不起,由于您输入的用户名或密码3次有误,已被强制退出。
\n");
}
voidinput()//打印模块程序
{
inty;
printf("请依次输入航班信息:
\n");//打印提示信息
printf("完成输入信息请键入w以回车键结束\n");
printf("--------------------------------------------------------------------------\n");
for(i=0;i{
printf("请输入航班号:
\n");
scanf("%d",&s[i].flightno);//读取航班号
printf("请输入起始站:
\n");
scanf("%s",s[i].start);//读取起始站
printf("请输入终点站:
\n");
scanf("%s",s[i].end);//读取终点站
printf("请输入时间:
\n");
scanf("%s",s[i].day);//读取时间
printf("请输入预售票总数:
\n");
scanf("%d",&s[i].totalticket);//读取预售票数
printf("请输入已售票总数:
\n",m);
scanf("%d",&s[i].sellticket);//读取已售票总数
m++;
printf("第%d个信息已经输完是否继续?
按任意数字键继续,按0结束",m);
scanf("%d",&y);
if(y==0)
{
save();//将结构体信息存盘
print();//输出输入的航班信息
break;
}
}
}
voidsave()//保存模块程序
{
FILE*fp,*fp1;//定义文件指针
if((fp=fopen("chen.dat","wb"))==NULL)//打开文件并判断是否出错
{
printf("创建文件失败!
\n\n");//打印出错提示
getchar();
return;
}
if((fp1=fopen("hao.dat","wb"))==NULL)//打开文件并判断是否出错
{
printf("创建文件失败!
\n\n");//打印出错提示
getchar();
return;
}
for(i=0;iif(fwrite(&s[i],sizeof(structflight),1,fp)==0)//向文件写入数据,并判断是否出错
printf("向文件输入数据失败!
\n\n");
fprintf(fp1,"%d",m);
fclose(fp);//关闭文件
fclose(fp1);//关闭文件
}
voidread()//从文件读取信息模块
{
FILE*fp,*fp1;//定义文件指针
if((fp=fopen("chen.dat","rb"))==NULL)//打开文件,并判断是否出错
{
printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示
getchar();
}
if((fp1=fopen("hao.dat","rb"))==NULL)//打开文件并判断是否出错
{
printf("创建文件失败!
\n\n");//打印出错提示
getchar();
return;
}
fscanf(fp1,"%d",&m);
fclose(fp1);//关闭文件
for(i=0;i{
fread(&s[i],sizeof(flight),1,fp);//从文件中读取信息
}
fclose(fp);//关闭文件
}
voidprint()//打印模块
{
charw[10];
read();//调用读取文件函数
printf("航班号起始站终点站时间预售票总数已售票总数\n");
for(i=0;i{
printf(PRINT);//打印信息
}
printf("请按任意键回车键结束返回上层菜单以:
\n");
scanf("%s",w);
}
voidsearch()//查询模块
{
charstartname[10];
charendname[10];
charday[10];
charp[10];
intn,no;
do
{
printf("请选择查询方式:
\n");//打印查询方式菜单
printf("1.按航班号查询\n");
printf("2.按起点站查询\n");
printf("3.按终点站查询\n");
printf("4.按航线查询\n");
printf("5.按飞行时间查询\n");
printf("0.返回\n");
printf("请在0-5中选择:
\n");
printf("按其他键以回车键结束返回主菜单:
\n");
scanf("%d",&n);//读取查找方式
if(n==0)
break;
switch(n)
{
case1:
printf("请输入航班号:
\n");
scanf("%d",&no);//航班号
break;
case2:
printf("请输入起点站名称:
\n");
scanf("%s",&startname);
break;
case3:
printf("请输入终点站名称:
\n");
scanf("%s",endname);//读取终点站
break;
case4:
printf("请输入起始站名称:
\n");
scanf("%s",startname);//读取起始站
printf("请输入终点站名称:
\n");
scanf("%s",endname);//终点站
break;
case5:
printf("请输入飞行时间:
\n");
scanf("%s",&day);
break;
}
read();//调用读取函数
for(i=0;i{
if(strcmp(s[i].end,startname)==0||strcmp(s[i].end,endname)==0)//按终点站起始站判断输出条件
{
printf("\n查询航班信息成功!
\n");
printf("航班号起始站终点站时间预售票总数已售票总数\n");
printf(PRINT);//打印信息
break;
}
if(s[i].flightno==no)//按航班号判断输出条件
{
printf("\n查询航班信息成功!
\n");
printf("航班号起始站终点站时间预售票总数已售票总数\n");
printf(PRINT);//打印信息
break;
}
if(strcmp(s[i].day,day)==0)
{
printf("\n查询航班信息成功!
");
printf("\n航班号起始站终点站时间剩余机票数预售机票数\n");
printf(PRINT);//打印信息
break;
}
}
no=0;//将航班号赋值为0
printf("没有您需要的信息或查找完毕:
\n\n"
"是否继续查找?
请键入yes或no以回车键结束\n");
scanf("%s",p);
}while(strcmp(p,"yes")==0);//判断结束
}
voidbooking()//订票模块
{
intn;
charf[10];
do
{
search();//调用查询模块
printf("请输入您要订的机票数以回车键结束:
\n");
scanf("%d",&n);//读取所订机票数
if(n<0)
{
printf("请输入有效的机票数!
\n");//判断机票数是否出错
break;
}
if(s[i].totalticket!
=0&&s[i].totalticket>=n)//判断是否出错
{
s[i].totalticket=s[i].totalticket-n;
s[i].sellticket=s[i].sellticket+n;
save();//调用保存函数
printf("订票成功!
\n\n");
break;
}
if(s[i].totalticket{
printf("请输入有效的机票数:
\n");
break;
}
printf("是否继续?
请输入yes或no以回车键结束:
\n");//判断是否继续订票
scanf("%s",f);
}while(!
strcmp(f,"yes"));//判断结束
}
voidback()//退票模块
{
intn;
charf[10];
do
{
search();//调用查询模块
printf("请输入您要退的机票数目:
\n");
scanf("%d",&n);//输入所退票数
if(n<0)//判断票数是否有效
printf("请输入有效的机票数!
\n");
s[i].totalticket=s[i].totalticket+n;
s[i].sellticket=s[i].sellticket-n;
save();//调用保存模块
printf("退票成功!
\n\n");
printf("是否继续?
请键入yes或no以回车键结束:
\n\n");//判断是否继续退票
scanf("%s",f);
}while(!
strcmp(f,"yes"));//判断并跳出循环
getchar();
}
voidcorrect()//修改模块
{
structcor//定义结构体
{
intno;
charstartname[10];
charendname[10];
charday[10];
inttotalticket;
intsellticket;
}x[1];
charj[10];
intn;
{
read();//调用读取模块
do
{
printf("请选择修改方式:
\n");
printf("*1,按航班号修改:
\n");
printf("*2,按航线修改:
\n");
printf("请在1---2中修改以回车键结束:
\n");
scanf("%d",&n);//读取修改方式
switch(n)
{
case1:
printf("请输入航班号:
\n");
scanf("%d",&x[0].no);//读取航班号
break;
case2:
printf("请输入起始站:
\n");
scanf("%s",x[0].startname);//读取起始站
printf("请输入终点站:
\n");
scanf("%s",x[0].endname);//读取终点站
break;
}
for(i=0;i{
if(strcmp(s[i].end,x[0].startname)==0&&strcmp(s[i].end,x[0].endname)==0)//判断输出条件
{
printf("航班号起始站终点站时间预售票总数已售票总数\n");
printf(PRINT);
break;
}
if(s[i].flightno==x[0].no)//判断输出条件
{
printf("航班号起始站终点站时间预售票总数已售票总数\n");
printf(PRINT);
break;
}
}