飞机订票系统C语言课设.docx
《飞机订票系统C语言课设.docx》由会员分享,可在线阅读,更多相关《飞机订票系统C语言课设.docx(18页珍藏版)》请在冰豆网上搜索。
![飞机订票系统C语言课设.docx](https://file1.bdocx.com/fileroot1/2022-12/15/0b6ce4a0-3d15-4276-87c3-b26101694a12/0b6ce4a0-3d15-4276-87c3-b26101694a121.gif)
飞机订票系统C语言课设
C语言程序设计课程设计
评语:
考勤(10)
纪律(10)
过程(40)
设计报告(30)
答辩(10)
总成绩(100)
专业:
电气工程及其自动化(卓越)
班级:
电气1301
姓名:
王思远
学号:
指导教师:
王黎
兰州交通大学自动化与电气工程学院
2014年7月12日
综合题
3.1引言
设计目的是解决如下实际问题:
3.1.1问题描述:
假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。
通过该系统来实现机票的订购问题。
3.1.2功能要求:
本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:
起飞地、目的地航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。
本系统显示这样的菜单:
1)输入航班信息
2)输出航班信息
3)查找航班信息
a.显示空座的数量
b.显示空座的信息
c.显示已订座的信息
d.起飞时间
4)订票预约
5)删除定票预约
6)退出系统
本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。
查找航班信息既可按线路查,也可按目的地查。
在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从该文件读入数据.
3.1.3算法提示:
数据结构:
结构体类型数组数据库结构:
下表构成该系统的基本数据库。
航班号
起飞时
间
目的
地
座次
号
座次订出与否
的标记
订票者姓
订票者身份证号码
名
int
char
char
int
Char
char
char
3.1.4测试数据:
每架飞机的座位N=12,M=5
3.1.5其它:
对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。
选择的设计方法是使用C语言利用计算机解决问题。
3.2设计
设计思路:
对于这种大型的程序,必须现有一个整体的规划,生成出一个流程图,流程图负责规划总体,而程序最主要的就是飞机航班订票各个功能,每个功能都作为一个模块,每一个模块划分任务,每个功能都作为一个模块,并且还得按照题目要求,将信息保存在文件中,而且信息都将被输入到事先定义的结构体数组中,实现在内存单元中的信息的分类存放,之后将其输出。
主函数流程图如5所示(合):
开始
调用读取文件功能
输入选择功能序号
图5
输入信息函数流程图如图6所示:
开始输入航班信息
输入航班号
输入起飞地
输入终点站
输入终点站
输入余量
返回主程序
输出信息函数流程图如图7所示:
查找航班信息的流程图如图8所示:
输入航班号
输出航班信息
返回主函数
订票预约的流程图如图9所示:
开始订票预约
输入航班号
输入订票者信息
系统分配座位
返回主函数
删除订票预约的流程图如图10:
开始删除订票功能
输入航班号
输入座位号
返回主函数
图10
源代码:
#include
#include
structzuoci
{
inthaoma;//座次数
intbiaoji;//座位订出的标记
charxingming[20];〃订座者姓名
charzhengjian[30];〃订座者的身份证号码
};
structplane
{
intno;//航班号
charqidian[30];//起飞地
charzhongdian[30];//目的地
chartime[30];〃起飞时间
intleft;//余票
structzuocizuowei[12];〃座位订出信息
}plane[888];//888个航班容量
intnum=0,i,j,t;//定义外部变量(全局变量)
voidread()〃读取文件的功能
{
FILE*fp;
if((fp=fopen("file.dat","rb"))==NULL)
//rb打开二进制文件
{
printf("出错");
getchar();
}
i=0;
while(!
feof(fp))//文件是否结尾位置,不是结尾就继续{
fread(&plane[i],sizeof(structplane),1,fp);
//二进制读入
i++;
num++;
}
num--;
fclose(fp);
}
voidsave()//保存到文件的功能
{
FILE*fp;
if((fp=fopen("file.dat","wb"))==NULL)
//第一次运行无指定,就会建立新文件file.dat
{
printf("出错");getchar();
}
for(i=0;ifwrite(&plane[i],sizeof(structplane),1,fp);//二进制输出
fclose(fp);
}
voidshuru()//输入航班的功能
{charc;
printf("请输入您要增加的航班信息:
\n");
printf("请输入航班号:
\n");
scanf("%d",&plane[num].no);
printf("请输入起飞地\n");
scanf("%s",plane[num].qidian);
printf("请输入目的地\n");
scanf("%s",plane[num].zhongdian);
printf("请输入起飞时间\n");
scanf("%s",plane[num].time);
printf("请输入航班余量\n");
scanf("%d",&plane[num].left);
for(i=0;i{
plane[num].zuowei[i].biaoji=0;
}
num++;
getchar();/启继续
}
voidshuchu()//输出航班信息的功能
{
printf("目前航班:
\n");
printf("航班号\t\t起飞地\t\t目的地\t\t起飞时间\t\t票数\n");
for(i=0;igetchar();//继续
}
voidchazhao()//查找航班信息的功能
{
printf("请输入您要查询的航班号:
");
scanf("%d",&t);
for(i=0;i//先查找航班
{
if(t==plane[i].no)
{
printf("航班的空座数量为:
%d\n",plane[i].left);
printf("空座号:
");
for(j=0;j<12;j++)
{
if(plane[i].zuowei[j].biaoji!
=1)
printf("%d号",j+1);
}//输出航班号
printf("\n");
printf("已订座位的信息:
\n");
for(j=0;j<12;j++)
{
if(plane[i].zuowei[j].biaoji==1)
{
printf("座位号:
%d\n",j+1);
printf("订座者姓名:
");puts(plane[i].zuowei[j].xingming);
printf("订座者身份证号码:
");puts(plane[i].zuowei[j].zhengjian);}//12个座位查询范围
}
printf("航班起飞时间:
");puts(plane[i].time);
}
}
getchar();/继续
}
voiddingpiao()//订票的功能
{
intn;
printf("请输入订票的航班号:
\n");scanf("%d",&n);
for(i=0;iif(plane[i].no==n)break;printf("余票:
%d\n",plane[i].left);for(j=0;plane[i].zuowei[j].biaoji==1;j++);printf("请输入姓名拼音:
");
scanf("%s",plane[i].zuowei[j].xingming);printf("请输入身份证号码:
");
scanf("%s",plane[i].zuowei[j].zhengjian);printf("分配给座位是:
%d号\n",j+1);
plane[i].zuowei[j].biaoji=1;
plane[i].left--;
getchar();//继续
}
voidcancel()//删除订票的功能
{
intn,m;
charjudge;
printf("请输入删除的订票航班号:
");scanf("%d",&n);
for(i=0;iprintf("请输入删除的座位号:
");scanf("%d",&m);
plane[i].zuowei[m-1].biaoji=0;
plane[i].left++;
getchar();//继续
}
voidmain()//主函数
{
intmenu;
read();//首先读入数据do
{
menu=0;
printf("—
—欢迎使用飞机订票系统
——\n");
printf("[
请选择需要的功能
]\n");
printf("||
1、输入航班信息
||\n");
printf("||
2、输出航班信息
||\n");
printf("||
3、查找航班信息
||\n");
printf("||
4、订票预约
||\n");
printf("||
5、删除订票预约
||\n");
printf("||
6、退出系统
||\n");
printf(">>>>>>>>>>>>>><<<<<<<<<<<<<\n");
printf("输入选择功能序号:
");scanf("%d",&menu);
switch(menu)
{
case1:
shuru();break;
case2:
shuchu();break;
case3:
chazhao();break;
case4:
dingpiao();break;
case5:
cancel();break;
case6:
save();break;
}//如果没有符合的序号,则不执行,流转下一条
getchar();〃子函数配合输入继续
}//循环体位置
while(menu!
=6);//判断条件
}
实现注释:
程序的要求进行了实现,在基础要求之外没有完成其他功能
3.3调试报告
在读取二进制文件,没有创建,但在写入时,写入,保存了数据:
在进行输出时,制表位与数据位不对齐,于是检查了制表符;因为定义的座位数组为12所以只能查找12个座位的信息。
3.4运行及结果测试如图11所示
图11-1
图11-2
图11-3
图11-4
图11-5
图11-6
3.5总结
本程序实现了题中飞机订票系统的所有功能,完成了题中所给的要求。
大程序的编写,让我们基本了解的程序软件的编写过程。
在一开始,利用流程图,可以对程序规划,而使用功能模块,可以对程序进行任务的细分。
在流程图的规划下,程序做的还是比较顺畅,一开始较好的规划,减少了不必要的错误的产生,在以前的C语言学习和实践中,只用到了运行数据从终端的输入输出和内存单元的存取,这个程序则需要实现内存的单元到硬盘文件的的输入输出,这是时下流行的
软件都采用的方式。
我认为这些应该就是实践和实习的意义。
参考文献
[1]谭浩强著.C程序设计(第四版)•北京:
清华大学出版社,2010.
附录源程序代码:
#include
#include
structzuoci
{
inthaoma;//座次数
intbiaoji;//座位订出的标记
charxingming[20];〃订座者姓名
charzhengjian[30];〃订座者的身份证号码
};
structplane
{
intno;//航班号
charqidian[30];//起飞地
charzhongdian[30];//目的地
chartime[30];〃起飞时间intleft;//余票
structzuocizuowei[12];〃座位订出信息
}plane[888];//888个航班容量
intnum=0,i,j,t;//定义外部变量(全局变量)
voidread()〃读取文件的功能
{
FILE*fp;
if((fp=fopen("file.dat","rb"))==NULL)
//rb打开二进制文件
{
printf("出错");
getchar();
}
i=0;
while(!
feof(fp))//文件是否结尾位置,不是结尾就继续{
fread(&plane[i],sizeof(structplane),1,fp);
//二进制读入
i++;
num++;
}
num--;
fclose(fp);
}
voidsave()//保存到文件的功能
{
FILE*fp;
if((fp=fopen("file.dat","wb"))==NULL)
//第一次运行无指定,就会建立新文件file.dat
{
printf("出错");getchar();
}
for(i=0;ifwrite(&plane[i],sizeof(structplane),1,fp);//二进制输出
fclose(fp);
}
voidshuru()//输入航班的功能
{charc;
printf("请输入您要增加的航班信息:
\n");
printf("请输入航班号:
\n");
scanf("%d",&plane[num].no);
printf("请输入起飞地\n");
scanf("%s",plane[num].qidian);
printf("请输入目的地\n");
scanf("%s",plane[num].zhongdian);
printf("请输入起飞时间\n");
scanf("%s",plane[num].time);
printf("请输入航班余量\n");
scanf("%d",&plane[num].left);
for(i=0;i{
plane[num].zuowei[i].biaoji=0;
}num++;
getchar();/启继续
}
voidshuchu()//输出航班信息的功能
{
printf("目前航班:
\n");
printf("航班号\t\t起飞地\t\t目的地\t\t起飞时间\t\t票数\n");for(i=0;iprintf("%d\t\t%s\t\t%s\t\t%s\t\t\t%d\n",plane[i].no,plane[i].qidian,plane[i].zhongdian,plane[i].time,plane[i].left);
getchar();//继续
}
voidchazhao()//查找航班信息的功能
{
printf("请输入您要查询的航班号:
");scanf("%d",&t);
for(i=0;i{
if(t==plane[i].no)
{
printf("航班的空座数量为:
%d\n",plane[i].left);
printf("空座号:
");
for(j=0;j<12;j++)
{
if(plane[i].zuowei[j].biaoji!
=1)
printf("%d号",j+1);
}//输出航班号
printf("\n");
printf("已订座位的信息:
\n");for(j=0;j<12;j++)
{if(plane[i].zuowei[j].biaoji==1){
printf("座位号:
%d\n",j+1);
printf("订座者姓名:
");puts(plane[i].zuowei[j].xingming);
printf("订座者身份证号码:
");puts(plane[i].zuowei[j].zhengjian);}//12个座位查询范围
}
printf("航班起飞时间:
");puts(plane[i].time);
}
}
getchar();/继续
}
voiddingpiao()//订票的功能
{
intn;
printf("请输入订票的航班号:
\n");scanf("%d",&n);
for(i=0;iif(plane[i].no==n)break;printf("余票:
%d\n",plane[i].left);for(j=0;plane[i].zuowei[j].biaoji==1;j++);printf("请输入姓名拼音:
");
scanf("%s",plane[i].zuowei[j].xingming);printf("请输入身份证号码:
");
scanf("%s",plane[i].zuowei[j].zhengjian);printf("分配给座位是:
%d号\n",j+1);
plane[i].zuowei[j].biaoji=1;
plane[i].left--;
getchar();//继续
}
voidcancel()//删除订票的功能
{
intn,m;
charjudge;
printf("请输入删除的订票航班号:
");scanf("%d",&n);
for(i=0;iprintf("请输入删除的座位号:
");scanf("%d",&m);
plane[i].zuowei[m-1].biaoji=0;
plane[i].left++;
getchar();//继续
}
voidmain()//主函数
{
intmenu;
read();//首先读入数据do
{
menu=0;
printf("—
—欢迎使用飞机订票系统
——\n");
printf("[
请选择需要的功能
]\n");
printf("||
1、输入航班信息
||\n");
printf("||
2、输出航班信息
||\n");
printf("||
3、查找航班信息
||\n");
printf("||
4、订票预约
||\n");
printf("||
5、删除订票预约
||\n");
printf("||
6、退出系统
||\n");
printf(">>>>>>>>>>>>>><<<<<<<<<<<<<\n");
printf("输入选择功能序号:
");scanf("%d",&menu);
switch(menu)
{
case1:
shuru();break;
case2:
shuchu();break;
case3:
chazhao();break;
case4:
dingpiao();break;
case5:
cancel();break;
case6:
save();break;
}//如果没有符合的序号,则不执行,流转下一条
getchar();〃子函数配合输入继续
}//循环体位置
while(menu!
=6);//判断条件
}