航班信息管理系统.docx
- 文档编号:6145588
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:26
- 大小:509.65KB
航班信息管理系统.docx
《航班信息管理系统.docx》由会员分享,可在线阅读,更多相关《航班信息管理系统.docx(26页珍藏版)》请在冰豆网上搜索。
航班信息管理系统
课程设计
课程名称C语言课程设计
题目名称航班信息管理系统
学生学院物理与光电工程学院
专业班级电子科学与技术(4)班
学号
学生姓名
指导教师
2015年10月23日
一设计目的
进一步加深、巩固所学专业课程(《C语言程序设计》)的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
掌握运用C语言独立地编写、调试应用程序和进行其他相关设计的技能。
二课程设计的内容
对航班信息(包括航班号、最大载客数、起飞地点、起飞时间、降落地点、降落时间、单价)和乘客信息(包括航班号、身份证号码
姓名、性别、出生年月、座位号)进行管理,包括航班信息与乘客信息的输入、输出、查询、删除、统计、退出。
假设现收集到了一个机场的所有的航班信息,要求用C语言编写一个简单的航班信息管理系统,可进行录入、查询、修改和浏览航班信息的功能;乘客提出航班号、起飞地点、起飞时间、降落地点、订票数等订票要求,根据事先保存的航班数据决定乘客能否订票。
只有全部满足了乘客的订票要求并且所订航班有足够的未订座位之后才能完成订票处理,并且修改该航班的未订座位数(每个航班的未订座位数的初始值就是该航班的最大载客数),否则,订票失败,并且给出不能订票的原因。
三课程设计的要求与数据
1、对航班信息(包括航班号、最大载客数、起飞地点、起飞时间、降落地点、降落时间、单价)和乘客信息(包括航班号、身份证号码、姓名、性别、出生年月、座位号)进行管理,包括航班信息与乘客信息的输入、输出、查询、删除、统计、退出;
2、航班信息内容较多,要求设计的管理系统能够完成以下功能:
(1)、航班信息录入功能:
航班信息用文件保存,可以一次完成若干条记录的输入;
(2)、航班信息浏览功能:
完成全部航班记录的显示;
(3)、查询功能:
完成按航班号或按目的地查找航班记录,并显示;
(4)、航班信息的修改:
按航班号进行修改某个航班的信息;
(5)、航班信息的删除:
按航班号进行删除某个航班的信息;
(6)、订票处理:
按乘客的订票方式完成航班订票处理;
(7)、应提供一个界面来调节各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!
四课程设计应完成的工作
1、编写算法;
2、算法测试,并有具体的测试结果和结果分析;
3、撰写课程设计报告,内容包括:
(1)封面扉页
(2)设计任务书
(3)目录
(4)总体设计方案(包括流程图)
(5)使用说明及运行实例(包括界面)
(6)成员设计内容简介
(7)项目源代码(注意注释的使用)
(8)指导老师评语
五总体设计
1、功能1:
航班信息的输入并对输入的内容进行错误检查;
2、功能2:
航班信息的显示浏览;
3、功能3:
航班信息的修改并对修改的内容进行错误检查;
4、功能4:
航班信息的删除;
5、功能5:
航班信息的查询;
6、功能6:
乘客信息输入并对输入的内容进行错误检查;
7、功能7:
订票处理检查是否还有空座位;
8、退出系统。
六详细设计
系统的整体框图如图1所示:
开始
输出菜单
根据菜单输入n的值选择程序
打开文件
退出
结束
保存
删除
修改
查询
显示
输出
输入
图1整体框图
1、打开存放着航班信息与乘客信息的文件:
分别打开航班文件与乘客文件,存放在链表中,供后续函数调用;可用函数voidread_psg_data(void)、voidread_pla_data(void)来实现此操作。
这是两个无参函数,用来读取存储在文件中的信息当到达文件尾时关闭文件并退出函数,带回指向链表头的一个指针和指向链表尾的指针。
算法:
fopen()函数打开文件后读取一定长度的信息存到malloc()分配的内存地址空间,声明两个全局指针pla_head和psg_head,每读取一组数据就将其地址存放在pla1节点中,并链接到之前列表的尾端。
N-S流程图如图2所示(以读取航班信息为例):
fp=fopen(文件)
while(不到文件尾)
malloc()分配内存pla1是否成功
否是
fread()读取一定长度字节数据到pla1
pla1置为NULL
否
pla_head是否为空
pla_end->next=pla1;pla_head=pla1;
pla_end=pla1;pla_end=pla1;
pla_end_next置为NULL
读取成功标志位置为0
关闭文件
图2打开文件读取数据流程图
2、输入航班数据与乘客数据(以航班数据为例):
输入信息包括航班号、最大载客数、起飞地点等相关信息;用函数voidadd_pla_info(void),函数再调用intcheck_pla_num(PLA*pla)、voidcheck_time(int*hour,int*min)、voidcheck_string(charname[20])分别进行航班号、输入的时间、输入的地点等信息的正确性验证,从源头避免出错。
算法:
打开待保存输入信息的文件,在一个while循环里面分配内存并输入数据,对输入的数据进行正确性验证,如果出错则会提示重新输入,正确输入完一个航班后将数据保存到链表尾端并将新的航班数据写入打开的文件中。
N-S流程图如图3所示(以读取航班信息为例):
fp=fopen(文件)
while(继续输入)
malloc()分配内存pla是否成功
输入航班号
重新输入
否
是
航班记录已存在
输入载客数
是
重新输入
否
是否数字且在正常范围
输入起飞时间
否
是
重新输入
时间格式正确
输入降落地点
重新输入
是
否
地点格式正确
输入降落时间
重新输入
是
否
时间格式正确
输入单价
是
重新输入
否
是否数字
是
否
pla_head为空
pla_end->next=pla;pla_head=pla;
pla_end=pla;pla_end=pla;
保存新航班数据到文件
图3输入航班数据流程图
3、显示浏览航班信息:
显示信息包括航班号、最大载客数、起飞地点、起飞时间、降落地点、降落时间、单价、剩余票数,调用了时间函数localtime()获取当前系统时间;用函数voiddisplay_pla_info(void)完成此操作。
算法:
把读取文件后产生的链表按照一定的格式输出到屏幕上。
N-S流程图如图4所示:
将链表头赋给航班结构体局部变量
while(未到链表尾)
printf(pla1);
pla1=pla1->next;
图4显示航班信息流程图
4、删除航班信息:
删除一个航班的所有信息,调用函数voiddelete_pla_data(void)完成是删除操作。
算法:
显示所有航班信息,要求用户输入需删除的航班号,在while循环中遍历链表,找到数据则显示出来,再次要求用户确认删除,若删除,该数据的下一条数据地址将会取代当前的数据地址,即从链表中删除了,调用save_pla_info()保存新的链表;若没有找到航班则要求用户重新输入。
N-S流程图如图5所示:
输入航班号
否
是
到达链表尾
是
否
提示找不到航班,重新输入
输入的航班号与pla1_num相同
是
否
pla2=pla1;输出该航班信息
否
是
pla1=pla1->next;确认删除
返回菜单
删除的航班是链表头
pla_head=pla1->next;pla2->next=pla1->next;
释放pla1;
保存文件标志位置位;
调用save_pla_info()保存新的链表;
提示删除成功;
返回菜单
图5删除航班信息流程图
5、修改航班信息:
修改一个航班的信息,调用voidmodify_data(void)实现此操作。
算法:
显示所有航班信息,用户输入一个航班号,在while循环中遍历链表,找到要修改的数据则显示出来,再次要求用户确认修改,若修改,则开始输入信息;若没有找到航班则返回菜单。
这里用到了添加航班时的信息检查函数。
N-S流程图如图6所示:
是
返回菜单
输入航班号
否
while(未到链表尾)
输入的航班号与pla1_num相同
是
否
pla2=pla1;输出该航班信息
pla1=pla1->next;确认修改
输入新的航班号、载客数、起飞时间、降落地点、降落时间、单价,并检查每一项的格式是否符合要求
提示修改成功
返回菜单
提示未找到该航班并返回菜单
图6修改航班信息流程图
6、查询航班信息:
查询信息时分为航班号查询与目的地查询,用户可输入航班号或目的地进行查询并订票,调用voidsearch(void)函数,内部再调用voidsearch_pla_num(void)和voidsearch_destination(void)两个函数实现此操作。
算法:
进入查询后显示另一个菜单要求用户选择相应的查询条件。
按航班号查询时,用户输入一个航班号,在while循环中遍历链表,找到要修改的数据则显示出来,询问用户是否要订票,若订票则会进入订票函数buy_check();若不订票则返回菜单;若没有找到相应的航班信息则返回上一层菜单。
N-S流程图如图7所示:
显示菜单选择程序
按航班号
选择相应的操作
输入航班号输入目的地
是
否
while(不到链表尾)while(不到链表尾)
航班号相同目的地相同
是
pla2=pla1;显示航班信息pla2=pla1;显示航班信息
否
pla1=pla1->next;询问是否订票pla1=pla1->next;进入search_pla_num()
执行订票流程询问是否订票
未找到相应的航班信息未找到相应的航班信息
图7查询航班信息流程图
7、订票处理:
进入订票时,会调用search_pla_num()函数完成操作。
算法:
调用display_pla_info()输出所有航班信息,然后调用search_pla_num()和buy_check()订票并完成乘客身份信息的输入与格式检验。
N-S流程图如图8所示:
否
display_pla_info()显示所有航班信息
提示用户输入相应的航班号
while(未到链表尾)
是
航班号相同
pla2=pla1;显示信息
否
是
pla1=pla1->next;调用buy_check()检查该航班已满人数
提示用户选择其他航班
调用buy_ticket()函数完成乘客信息的录入
(包括姓名、身份证号、性别等信息),并
对正确性进行检查,然后把信息存放到乘客
文件中。
提示订票成功并返回
提示未找到航班信息后返回菜单
8、退出系统:
用户在主菜单界面时按照提示即可退出系统,调用一个exit()函数来实现。
七调试分析
源程序及注释
/*航班信息管理系统*/
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#defineLEN1sizeof(PSG)
#defineLENsizeof(PLA)
#defineFORMAT"%3d%7d%5d%7d:
%2d%12s%8d:
%2d%6s%8d\n"
#defineINFOpla_num,pla1->p_num,pla1->l_num,pla1->up_hour,pla1->up_min,pla1->addr_dst,\
pla1->down_hour,pla1->down_min,pla1->price,(pla1->l_num-pla1->buy_num)
typedefstructpassenger
{
intp_num;n");
getch();
return;
}
printf("您是否需要预订该航班机票(y/n)");
fflush(stdin);
find=getchar();
if('y'!
=find&&'Y'!
=find){
return;
}
buy_ticket(pla1);
printf("\n信息输入完毕,您已成功预订%2d:
%2d分飞往%s的%d航班,您的座位号是:
%d.\n",\
pla1->up_hour,pla1->up_min,pla1->addr_dst,pla1->p_num,++pla1->buy_num);
bflag=1;",dst);
getch();
return;
}
search_pla_num();
}
/*查询航班信息*/
voidsearch(void)
{
charn=1;
while(n){
system("cls");
printf("\t查询航班信息\n");
make_line('_',40);
printf("\t1.按航班号查询\n");
printf("\t2.按降落地点\n");
printf("\t0.返回主菜单\n");
make_line('_',40);
printf("\n请选择菜单:
");
while(n){
search_again:
fflush(stdin);
n=getchar();
fflush(stdin);
switch(n){
case'1':
system("cls");
search_pla_num();
break;
case'2':
system("cls");
search_destination();
break;
case'0':
return;
default:
printf("错误!
请重新输入:
");
gotosearch_again;
}
break;
}
}
}
/*检查所要增加的航班记录是否存在*/
intcheck_pla_num(PLA*pla)
{
intp_num,i=0;
charch='c';
PLA*pla1,*pla2;
while('c'==ch){
printf("航班号:
");
fflush(stdin);
while(scanf("%d",&p_num)!
=1){
fflush(stdin);
printf("\n输入出错,请输入数字:
");
}
pla1=pla_head;
pla2=pla1;
while(pla1){
if(pla1->p_num==p_num){
printf("\n航班%d已存在,请重新确认!
\n",pla1->p_num);
make_line('_',30);
printf("\n键入“C”继续添加信息,其余键返回:
");
fflush(stdin);
scanf("%c",&ch);
getchar();
if(ch!
='c'&&ch!
='C'){
return1;
}
system("cls");
break;
}
else{
pla2=pla1;
pla1=pla1->next;
}
ch='y';
}
if(pla1==NULL){
pla->p_num=p_num;
return0;
}
}
return0;
}
/*检查价格*/
voidcheck_price(charprice[10])
{
inti;
while(scanf("%s",price)){
for(i=0;i if(price[i]>'9'||price[i]<'0'){ fflush(stdin); printf("\n输入出错,请输入数字: "); break; } } if(i==strlen(price)) return; } } /*修改数据*/ voidmodify_data(void) { intnum,m,i; charmod_pla,ch='y'; PLA*pla1,*pla2; system("cls"); display_pla_info(); modify_again: printf("请输入要修改的航班号: "); scanf("%d",&num); pla1=pla_head; pla2=pla1; while(pla1){ if(num==pla1->p_num){ printf("\n航班号载客数起飞时间降落地点降落时间单价\n"); make_line('_',70); printf("%4d%6d%7d: %2d%12s%7d: %2d%7s\n",pla1->p_num,pla1->l_num,\ pla1->up_hour,pla1->up_min,pla1->addr_dst,pla1->down_hour,pla1->down_min,pla1->price); make_line('_',70); printf("您确定要修改该航班吗(y/n)"); fflush(stdin); mod_pla=getchar(); if('y'! =mod_pla&&'Y'! =mod_pla) return; system("cls"); m=check_pla_num(pla1);订票|\n"); printf("\t\t|2.查看航班信息|\n"); printf("\t\t|3.航班查询|\n"); printf("\t\t|4.增添航班信息|\n"); printf("\t\t|5.修改航班信息|\n"); printf("\t\t|6.删除航班信息|\n"); printf("\t\t|0.退出|\n"); printf("\t\t|--------------------------------------------------|\n\n"); printf("\t\t请选择您需要的操作(0-6): "); } /*功能处理*/ voidmanage() { charn[2]={0,0}; while (1){ input_agn: scanf("%s",n); xe文件中。 解决办法: 关闭控制台再次链接即可。 解决方法: 把第793行的变量定义语句放在函数的第一条语句位置。 解决办法: 这是出现段错误的问题,可能是数组越界了。 用strncpy(name,check,20)替换strcpy(name,check)即可。 解决方法: printf("继续订票请键入"y",其他键返回上一层菜单: ");里面的“"”格式有误,改成printf("继续订票请键入\"y\",其他键返回上一层菜单: ")。 解决办法: 把voidbuy_check(PLApla1)改成voidbuy_check(PLA*pla1),原因是形参类型定义错误。 主要程序运行结果 1、运行开始(如图7-1) 图7-1系统主菜单 2、选择4增添航班信息(如图7-2) 图7-2航班信息输入界面 3、选择2查看航班信息(如图7-3) 图7-3查看航班信息界面 4、选择3查询航班(如图7-4) 图7-4查询航班信息菜单 5、选择5修改航班信息(如图7-5) 图7-5修改航班信息界面 6、选择6删除航班信息(如图7-6) 图7-6删除航班信息 7、选择1订票(如图7-7) 图7-7订票界面 8、选择0退出系统(如图7-8) 图7-8退出系统界面 图2主要功能模块图 八总结 经过前后半个月的c语言课程设计,从最初的系统框图、流程图到最后的成品代码,一边看书籍一边写代码,感觉自己收获不少! 首先是: 要使用链表来达到这样的功能要求,甚至操作链表完成一系列动作,很方便但不容易理解,所以在这方面我们花了很多时间看课本、看别人的例程,强化了c语言的知识。 其次,在这次做课程设计的过程中,发现了平时很多没有注意到的问题,例如: 有返回值函数和无返回值函数两者被调用时时不同的...... 这次课程设计虽然花了我们不少时间,但正是这些时间,让我见识到了C语言的重要性。 这个航班信息管理系统都是在自己的知识范围内做出来的,所以界面清晰简洁,可能不太好看,但很实用! 从这里我也得到一个体会,做一个程序或者开发一个软件,应该着重从它的后台制作入手,不能做出一个中看不中用的程序或软件。 这次的课程设计让我对C语言的知识更加扎实了,也勾起了我深入学习C语言的兴趣。 九参考文献 [1]曹飞飞、高文才编著.C语言程序开发范例宝典(第2版)[M].北京: 人民邮电出版社,2010 [2]曹飞飞、高春艳等编著.C语言开发宝典[M].北京: 机械工业出版社,2013 [3]曹衍龙、林瑞仲、徐慧编著.C语言实例解析精粹(第二版)[M].北京: 人民邮电出版社,2009 [4]谭浩强著.C程序设计(第四版)[M].北京: 清华大学出版社,2010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 航班信息 管理 系统