航班客运订票程序-数据结构与算法课程设计报告
- 格式:doc
- 大小:283.50 KB
- 文档页数:21
数据结构课程设计实验报告设计题目__________________________________________________________________ 设计者__________________________________________________________________ 指导老师__________________________________________________________________ 班级___________________________________________________________________ 学号____________________________________________________________________一、设计要求任务通过此系统可以实现如下功能:1.录入航班信息:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据定)2.查询航班:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓);3.订票:(订票情况可以存在一个数据文件中,结构自己设定);4.退票:可退票,退票后修改相关数据文件;5.修改航班信息6.退出程序客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;二、设计概要主界面选择操作项目1.录入航班信息通过单链表这种数据结构,设置了剩余票数,航班号,出发地点,到达地点,起飞日期,出发时间,到达时间,票价。
2.订票输入旅客的姓名,证件号,航班号,和订票张数。
程序中自动查询输入要定的航班号,如果没有则叫其重新输入,有则执行:票数足够则订票成功,票数不充足叫其选择其它航班。
此也采用单链表的数据结构。
信息科学和工程学院课程设计报告课题:航空客运订票系统目录1.课程设计内容 (3)1.1、课程设计目的 (3)1.2、课程设计题目 (3)1.3、课程设计内容 (3)1.4、实现提示 (3)2.需求分析 (4)3.概要设计 (4)3.1、系统结构图 (5)3.2、算法设计 (5)3.3、存储结构设计 (5)4.详细设计 (6)4.1、数据类型定义 (7)4.2、函数定义 (8)4.3、函数流程图 (8)4.4、程序的设计思想 (12)5.调试分析 (12)5.1、程序测试 (12)5.2 、时间复杂度分析 (13)5.3 、算法的改进设想 (13)6.问题分析及课程设计的心得体会 (14)7.使用手册 (15)8. 源程序 (15)9 参考资料 (22)一、课程设计内容1.1 课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的使用系统。
2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握使用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的使用。
3.学会将知识使用于实际的方法,提高分析和解决问题的能力,增加综合能力。
(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。
1.2课程设计题目1、每条航线所涉及的信息有:终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名和所需数量)。
2、系统能实现的操作和功能如下:1)查询航线:根据客户提出的终点站名输出如下信息:航班号、飞机号、星期几飞行和余票额;2)承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票量少余订票额,则需重新询问客户要求。
数据结构与算法设计课程设计【设计题目】航空公司订票系统【问题描述】编写一个咸阳航空公司订票大厅的一个订票系统,可以在系统中录入并修改各个航班的具体情况,帮助乘客准确的查询各航班的最新信息(包括航班号、航班的起始时间和地点、票价)和各项业务的及时办理(包括订票、退票等)。
该系统用可以用C++的类编写。
【软件功能】1.输入航班信息并保存到磁盘2.浏览航班信息3.修改航班信息并保存到磁盘4.查找航班5.删除航班信息6.订票7.退票【算法思想】1先定义一个乘客基本信息的类包含乘客的姓名、证件号、订票数量及所乘的航班号(注:每个航班有固定的人数限制,若满额则提示其他可供选择的航班。
2建立一个功能类,包括对航班信息和乘客订票信息的录入及修改的函数,其中订票信息采用单链表的顺序存储方式存储。
另外还包括对信息的查询和修改的功能函数,乘客退票的函数。
并将最终的改动结果通过i/O流写入磁盘文件保存。
3编写主函数,对编写的航班系统进行全面测试,对用户界面采用人性化的菜单方式。
【类的设计】定义一个航班的类class plane{friend class customer;//友元类public:void input(); //插入航班信息void print(); //打印航班信息void save(); //保存航班信息void read(); //读取航班信息void search(); //查找航班信息void Delete(); //删除航班信息void book(); //订票void back(); //退票void xiugai(); //修改航班信息private:int num;//航班号char start_place[20];//起点站char arrive_place[20];//终点站char time[10];//起降时间int count;//机票数量}];定义一个顾客信息的类class customer{friend class plane;//友元类protected:I nt id;//身份证号char name[10];//姓名int customer_num;//订票数量public:void read1();//读取数据void save1();//保存数据};【存储结构设计】采用顺序存储结构,利用动态申请空间实现信息的存储。
课程设计报告课程名称:数据结构课程设计班级:04330102学号:2010043301042姓名:卢晗完成日期:2012年7月6日沈阳航空航天大学北方软件学院课程设计任务书专业名称:计算机科学与技术(软件工程)课程名称:c课程设计设计题目:航空订票系统起止时间:2012年6月26日至2012年7月6日问题描述假设航空订票的业务活动包括:查询航线、客票预订和办理退票等。
设计一个航空客运订票系统,上述业务可以借助计算机完成。
基本要求设民航售票处的计算机系统可以为客户提供下列各项服务:1、对航班进行编辑:具备增加、修改、删除航班信息(航班数据可以存储在一个数据文件中)。
2、查询航线:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3、承办订票业务:根据客户提出的要求(日期、航班号、订票数额)查询该航班票额情况,若尚有余额,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需要重新询问客户要求。
4、承办退票业务:根据客户提供的情况(日期、航班、退票数额),为客户办理退票手续;5、用到的数据结构需要自己自行编写,不得使用系统给定的函数6、需要用到的数据结构:链表7、用户界面友好,操作方便,有相应提示测试数据任意输入一组航班信息,可以进行订票、查询、退票操作;高级要求模拟实际情况,要求可以处理用户重名问题、用户界面友好学生姓名:学号:指导教师:年月日航空订票系统1概要设计该系统的设计由8个模块组成:1)显示界面模块:也可以叫菜单模块,运行程序时用户首先看到的就是这个界面,界面显示出6种航空订票系统的功能,用户可以根据显示的选择自己要用的方式查询信息。
2)输入航班信息模块:此模块是管理员所支配,需要密码进行访问。
3)浏览信息模块:此模块是顾客浏览航空航班细节(包括:起飞时间,到达时间,起飞地点,目的地,票数等)4)修改航班信息:此模块是管理员改变航班的具体信息。
数据结构课程设计报告题目航空客运订票系统专业班级学号姓名指导教师成绩一、设计任务航空客运订票的业务包括查询(航线和客票预订的)信息、客票预订和办理退票等。
基本要求有:(1)系统必须存储的数据信息i.航班信息:飞机抵达城市、航班号、飞机号、起降时间、航班票价、票价折扣、总位置和剩余位置、已订票的客户名单。
ii.客户信息:客户姓名、证件号、座位号。
(2)系统能实现的功能i.承办订票业务:根据客户提出的要求(飞机低达城市、起降时间、订票数量)查询该航班信息(包括票价、折扣和剩余位置),若满足要求,则为客户办理订票手续,输出座位号。
ii.承办退票业务:根据客户提供的情况(航班号、订票数量),为客户办理退票手续。
(3)查询功能i.查询航线信息:根据飞机降落地点,输出下列信息:航班号、飞机号、起降时间、航班票价、票价折扣和剩余位置。
ii.查询客户预订信息:根据客户证件号,输出下列信息:航班号、飞机号和座位号。
提供的参考程序已经基本实现以上功能,但有很多不足之处,要求进行程序改进和完善。
具体任务有:(1)分析参考程序实现了哪些功能?指出存在的缺陷。
(2)从以下几方面完善程序:i.功能上的完善ii.程序结构上的完善iii.程序控制上的完善二、设计要点1、改变了订票系统主界面格式及背景颜色;2、增加了清屏功能,避免语句过多的结果;3、实现了订票与否;4、实现了只能输入正确航班;5、实现了选择性别只能选择男女;6、订票成功余票减少三、算法实现#include<stdio.h>#include <stdlib.h>#include<malloc.h>#include<string.h>#define OK 1#define ERROR 0typedef struct airline{ /* 飞机航班的结构定义*/ char air_num[8]; //航班号char plane_num[8];//飞机号char end_place[20];//抵达城市int total; //总位置int left; //剩余位置struct airline *next;}airline;/*顾客信息的结构定义*/typedef struct customer{char name[8]; //姓名char sex[8]; //性别char id[20]; //身份证char air_num[8]; //航班号int seat_num; //座位号struct customer *next; //指向下一个旅客}customer;/*创建航班链表*/airline *start_air(){airline *a;a=(airline*) malloc(sizeof(airline));if(a==NULL) printf("空间不足");return a;}/*创建顾客链表*/customer *start_cus(){customer *c;c=(customer*)malloc(sizeof(customer));if(c==NULL) printf("空间不足");return c;}/* 修改航班的空余座位信息*/airline *modefy_airline(airline *l,char *air_num){airline *p;p=l->next;for(;p!=NULL;p=p->next){if(strcmp(air_num,p->air_num)==0){p->left++;return l;}printf("NO the airline!");return 0;}}/* 增加航班信息*/int insert_air(airline **p,char *air_num,char *plane_num,char *end_place,int total,int left) {airline *q;q=(airline*)malloc(sizeof(airline));strcpy(q->air_num,air_num);strcpy(q->plane_num,plane_num);strcpy(q->end_place,end_place);q->total=total;q->left=left;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;return OK;}/*增加某航班的顾客信息*/int insert_cus(customer **p,char *name,char *sex,char *id,char *air_num,int seat_num) {customer *q;q=(customer*)malloc(sizeof(customer));strcpy(q->name,name);strcpy(q->sex,sex);strcpy(q->id,id);strcpy(q->air_num,air_num);q->seat_num=seat_num;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;return OK;}/*订票操作*/int book(airline *a,char *air_num,customer *c,char *name,char *sex,char *id){airline *p=a;customer *q=c->next;p=a->next;for(;p->next!=NULL;p=p->next){if(strcmp(p->air_num,air_num)==0)break;}while(q->next!=NULL){q=q->next;}{if(p->left>0){printf("您的座位号是%d",(p->total-p->left+1));printf("\n");insert_cus(&q,name,sex,id,air_num,p->total-p->left+1);--p->left;p=p->next;return OK;}else{printf("没您的座啦!");return 0;}}}/*取消订票信息操作*/int del_cus(customer *c,airline *l,char *name){customer *p,*pr;char air_num[8];pr=c;p=pr->next;while(p!=NULL){if(strcmp(p->name,name)==0||strcmp(p->air_num,air_num)==0){strcpy(air_num,p->air_num);l=modefy_airline(l,air_num);pr->next=p->next;p=pr->next;printf("取消订票成功!\n");return OK;}pr=pr->next;p=pr->next;}printf("没有这个人儿啊\n");return ERROR;}/*查找航班信息操作*/int search_air(airline *head){airline *p=head->next;printf("air_num plane_num end_place total left\n");for(;p!=NULL;p=p->next){printf("%s %-10s %-8s %-8d%-8d\n", p->air_num, p->plane_num,p->end_place,p->total,p->left);}return OK;}/*查找顾客信息操作*/int search_cus(customer *head){struct customer *q=head->next;printf(" name sex id air_num seat_num\n");for(;q!=NULL;q=q->next){printf("%-8s%-8s%-8s%-12s%-d\n",q->name,q->sex,q->id,q->air_num,q->seat_num);}return OK;}/*预先设置航班信息*/int creat_air(airline **l){airline *p=*l;int i=0;char *air_num[3]={"007af","008af","009af"};char *plane_num[3]={"航班1","航班2","航班3"};char *end_place[3]={"美国","德国","法国"};int total[3]={100,100,100};int left[3]={52,54,76};for(i=0;i<3;i++)insert_air(&p,air_num[i], plane_num[i], end_place[i],total[i], left[i]);return OK;}/*预先设置已订票的顾客信息*/int creat_cus(customer **l){customer *p=*l;int i=0;char *name[3]={"张三","李四","王五"};char *sex[8]={"nan","nan","nan"};char *id[20]={"123456","654321","741852"};char *air_num[3]={"007af","008af","009af"};int seat_num[3]={2,5,7};for(i=0;i<3;i++)insert_cus(&p,name[i],sex[i],id[i],air_num[i],seat_num[i]);return OK;}void main(){system("color 8E");int t=1;customer *cus=start_cus();airline *air=start_air();char name[8],air_num[8],ch,m;char sex[8],id[20];creat_air(&air);creat_cus(&cus);search_air(air);while(t==1){printf("\n\n\n");printf("*********************************\n");printf(" * 欢迎来订票哦,亲!*\n");printf(" * 订票----------1 *\n");printf(" * 退票----------2 *\n");printf(" * 查询----------3 *\n");printf(" * 退出----------4 *\n");printf("*********************************\n");scanf("%s",&ch);if(ch=='1'){system("cls");printf("亲,想乘坐哪辆航班嘞:");scanf("%s",air_num);if(strcmp(air_num,"007af")==0||strcmp(air_num,"008af")==0||strcmp(air_num,"009af")==0){printf("亲叫啥嘞:");scanf("%s",name);y1: printf("您的性别(nan or nv):");scanf("%s",sex);if(strcmp(sex,"nan")==0||strcmp(sex,"nv")==0){printf("您的id:");scanf("%s",id);}else {goto y1;}printf("*确认请输入Y否则输入N:");scanf("%s",&m);if(m=='Y'||m=='y'){printf("订票成功!");book(air,air_num,cus,name,sex,id);}else if(m=='n'||m=='N')printf("取消航班成功!\n");else{printf("您的输入有误\n");}} elseprintf("对不起,没有你要找的航班:\n\n");system("pause");}elseif(ch=='2'){system("cls");printf("您不想座哪个航班号啦:");scanf("%s",air);printf("您的姓名是啥来着:");scanf("%s",name);del_cus(cus,air,name);}elseif(ch=='3'){system("cls");search_air(air);printf("\n");search_cus(cus);}elseif(ch=='4'){t=0;}}}四、运行结果分析1.订票系统主界面2、订票成功操作3、订票航班输入错误操作4、选择男女操作5、选择订票是与否操作6、订票成功余票减少五、设计总结这次课程设计使用了C语言来编写程序,使我们的基础知识和数据结构的链表等知识得到了巩固,使我们在实践中得到了锻炼。
课程设计报告课程名称:数据结构设计题目:航空客运订票系统院系:班级:设计者:学号:指导教师:课程设计报告一、题目分析主要功能包括:1、录入:可以录入航班情况(如:输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数)。
2、查询:可以查询某个航线的情况(如:输入航班号,飞机编号,查询起降时间,起飞抵达城市,剩余的票数);可以输入降落城市及航班号,查询飞机航班情况。
3、订票:根据客户要求(航班号、订票数量)查询该航班的余票数情况,若有余票,则可以订票;若余票数不足,则需要重新询问客户要求,否则不能完成订票。
4、退票:可退票,根据客户的姓名,订票数量查询是否为真实信息,为客户办理退票。
5、退出系统。
二、总体设计拿到课程设计题目后,经过仔细的研究,还是决定做航空客运订票系统,它可以使自己很好的巩固在数据结构当中所学到的知识以及各算法,做到学以致用,并在运用的基础上,进一步去创新。
1、主程序流程图及其说明主程序的流程图如下图所示:利用switch语句,用户只需根据自己的需要,输入相应的命令即可达到效果。
例如,若需要查询航班信息时,则输入2;需要为客户预定机票时,则输入4;若需要退出系统,则输入5即可。
2、子程序流程图及其说明⑴、录入航班信息的流程图及其说明:主要功能是将新的航班信息写入新建链表中,然后把新链表与储存航班的链表合并,得到新的航班信息,实现对新航班的增加。
录入航班信息的流程图如下图所示:⑵、查询航班信息流程图及其说明:先输入所要查找的航班,可通过降落城市查询或根据航班号查询。
然后判断该航班是否存在,若存在,则输出相关的航班信息;若不存在,则提示该航班不存在。
查询航班信息的流程图如下图所示:⑶、订票、退票流程图及其说明:订票说明:先输入降落城市,找到该航班并显示该航班信息,若找不到则提示不存在该航班。
再通过需要订票的数量来判断余票量是否足够。
若足够则录入客户姓名,完成订票;若余票不足,则提示是否要取消并重新订票。
航空客运订票系统的设计与实现一、设计目的:设计一个航班订票系统,提高对信息管理、信息查找和排序算法的应用能力。
二、问题的描述:航空客运订票的业务包括查询航线和客票预定的信、客票预定和办理退票等,设计一个程序以使上述任务借助计算机完成。
三、数据结构的设计://航线结构struct airline{char cityname[15]; //终点站char airnum[15]; //航班号char planenum[15]; //飞机号char qjtime[15]; //起降时间int price; //价格int disc; //折扣int num; //总座位数int rempla; //剩余位置(票数)linklist *order;linkqueue wait;}line;//定义链表队列typedef struct wait{char name[6];int ordnum;struct wait *next;} qnode,*qptr;//无票时其余等候买票队列typedef struct listqueue{qptr front; //对头qptr rear; //队尾}linkqueue;typedef struct order{char name[15]; //客户姓名char crenum[15]; //证件号char airnum[15]; //航班号char planenum[15]; //飞机号int ordnum; //订票数量int rempla; //剩余位置int num; //总座位数char qjtime[15]; //起降时间struct order *next;}linklist;建立了航班的终点站,航班号,飞机号,起降时间,价格,折扣,总座位数,剩余位置,指向客户信息truct order指针,等候买票的队列的结构体信息。
建立了客户的客户姓名,证件号,航班号,飞机号,订票数量,剩余位置,总座位数,起降时间,链接下一位的指针的结构体信息。
嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期:2017-2018学年第2学期班级:1503指导老师:***实验题目:航空客运订票系统学号:姓名:上机时间:1.需求分析(1)航空管理。
每条航班所涉及的信息有:终点站名、航班号、飞机型号、飞行周日(星期几)、乘员定额、余票量。
(2)客户管理。
有关订票的客户信息(包括姓名、订票量、航位等级(1,2和3))以及等候替补的客户名单(包括姓名、所需票量)。
(3)系统实现的主要操作和功能。
系统实现的主要操作和功能如下:①查询航班。
根据旅客提出的终点站名输入下列信息:航班号、飞机型号、飞机日期、余票额。
②承办订票业务。
根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满或者余票少于订票额,则需要重新询问客户要求;若需要,可等待排队后补。
③承办退票业务。
根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先查询排在第一的客户,若所退票额能满足该客户的要求,则为其办理订票手续,否则询问其他排队候补的客户。
2.概要设计1)本系统设计了一个含有多个菜单项的主控菜单,系统主控菜单运行界面2)存储结构设计本系统主要采用链表结构类型存储航班信息和订票的乘客信息。
航班信息链表结点由10个分量构成,乘客信息链表由5个分量构成。
3)系统功能设计本系统分为以下5个功能模块。
(1)航班管理。
航班管理子模块可完成添加新的航班,按终点站点名查询航班,浏览所有航班。
(2)订票办理。
在添加了航班的基础上可办理订票业务。
乘客根据所需航班输入终点站名和订票量订票。
如果订票量超过余票量,则会提示是否成为候补乘客;如果订票成功,则会要求输入订票乘客的姓名及所订票的舱位等级。
(3)退票办理。
已办理订票业务的乘客可根据所订票的航班和乘客姓名办理退票业务。
、(4)乘客管理。
可以查看已经订票的乘客信息和候补乘客的信息。
XXXXXXXXX计算机技术系项目名称:航空客运订票系统学生姓名:XX学号:班级:10801指导教师:年月日目录1.系统需求分析 (3)1.1问题分析 (3)1.2任务意义 (3)2. 数据结构设计及用法说明 (4)3. 详细设计和编码 (5)3.1.主菜单 (5)3.2.录入航空信息 (5)3.3输出航空信息 (6)3.4订票 (7)3.5退票 (7)4. 实验结果 (9)4.1菜单函数的功能测试 (9)4.2录入函数的功能测试 (9)4.3查询航班函数的功能测试 (11)4.4订票功能地测试 (12)致谢 (17)参考文献 (18)附录:源程序清单 (19)1.系统需求分析1.1 问题分析这次的课程设计是设计一个航空系统。
由于存储的数量较大且不固定,因此选择用链表来保存基本信息:终点站名、航班号、飞机号、飞行时间、乘员定额、余票量、已经订票的客户名单(包括姓名、订票量)、等候替补的客户名单(包括姓名、所需票量)等等。
由于在航线这个主链表上,每个航班上的已经订票名单这个链表和等候替补的名单这个链表队列,所以建立一个十字交叉链表,在纵行上开辟一个链表存储所有航班的基本信息,再在各个航班节点横向展开一个链表和一个链表队列,展开的链表存储已经订票的客户名单,展开的链表队列存储等候替补的客户名单。
同时,由于预约人数无法预计,队列也应以链表作存储结构。
系统主要实现的操作和功能是:添加航线、查询航线、订票功能、退票功能。
要实现这些功能,首先要使程序能实现查找功能,在查找出到有效信息的前提之下,通过链表的赋值,更新信息和删除退票人信息,满足客户的要求。
1.2 任务意义飞机场每天要接受大量的订票退票服务,对于这些数量巨大的数据,需要一个专门的软件来进行管理和操作。
软件至少需要具备的基本功能包括:接受订票,处理退票,查询航班信息等等。
面对这些实际问题,航空客运系统的制作无疑要全面的考察一个学生的知识及能力。
在全面理解客户的需求下面,来进行设计出最能够满足客户的程序出来,并且能够根据不同的要求来将其进行改动,最能考察到对代码活用的程度。
题目:(航班客运订票程序)通过此程序要求实现如下功能:(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);(3)可以输入起飞抵达城市,查询飞机航班情况;(4)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选航班;(5)退票:可退票,退票后修改相关数据文件;(6)客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
(7)修改航班信息:当航班信息改变可以修改航班数据文件。
一.问题分析和任务定义此程序要求对一组存储在磁盘文件上的航班信息和客户信息进行相关操作,实现程序的几个功能,即添加航班信息,查找航班和修改航班,还有订退票功能,前者只是在航班信息的文件上进行操作,后者则是同时在两个文件上进行操作。
完成上述功能关键要解决一下几个问题:1.如何选择正确的方式对磁盘文件进行读写2.如何将文件中的内容以结构体的形式读出3.如何选定磁盘文件中某一位置的数据进行修改4.如何保护客户信息不会被随便修改程序最终的结果是实现上面的七个功能,添加航班时,打开原有磁盘文件,没有则新建,一次输入所有航班信息,进行追加,即在文件尾进行添加,并保存;航班的查找功能,就是在航班信息文件中进行查找,可以根据航线查找,也可以根据航班号查找,如果查找成功,则在屏幕上显示所有匹配的信息,如果查找不成功,则给出相应提示,可以连续查找,修改功能是对航班信息文件中的指定航班进行修改,不改变其他航班信息,并将修改后的信息保存在原来航班的位置,订票功能,客户在订票时必须先查找要订的航班是否存在,即通过抵达城市进行查找,如果查找成功,则提示是否进行订票,是则进行客户信息登记,打开磁盘文件上的客户信息进行添加,没有则新建,登记后将预定票数和客户信息一起保存在客户信息中,同时修改航班信息中的相应航班的剩余票数,如果客户订票数大于航班剩余票数,则给出相应提示,如果查找不成功则提示没有次航班,退票功能与订票相似,也是同时修改两个文件上的操作,客户必须提供相应的证件号才能进行退票操作,如果证件号与磁盘文件上的信息一致则允许客户订票,客户输入要退订的航班的航班号,程序会查找客户是否有预定次航班的票,如果有则进行退票,可以选择推定的票数,退票后修改客户信息和航班信息并保存。
二、数据结构的选择和概要设计程序用两个结构体来分别表示航班信息和客户信息,在进行操作时,会将整个文件的信息全部读出存储在一个结构体链表中,操作其实是在链表上进行的,只是在操作结束后将链表中的节点即结构体单元依次再写进文件中,航班和客户结构分别如下:typedef struct flight{char num[20]; /航班号char city[20]; //抵达城市char time1[20];//起飞时间char time2[20]; //降落时间int price; //票价int total; //票数int left; //剩余票数struct flight *next;//下一个结点}flight;typedef struct customer{char name[20]; //顾客名char num[20]; //航班号char ID[20]; //证件号int number; //订票数struct customer *next;//下一个结点}customer;程序流程图如下图所示程序流程图三、详细设计和编码根据实验任务要求的功能,本程序主要用以下几个函数来实现:航班的添加函数tianjia();主要实现新航班录入,并将信息保存在磁盘文件中,在输入航班信息时可以一次输入多个航班信息,算法实际上是将航班信息以结构体链表的形式写进磁盘文件的在文件外建立链表,建立链表时采用的是尾插法,即在链表的尾部进行添加操作,for循环可以实现几个航班信息的一起输入,算法的核心部分如下,关键的地方是文件的写入和链表的建立:L=(flight *)malloc(sizeof(flight));L->next=NULL;R=L;fprintf(fp,"%s\t%s\t%s\t%s\t%d\t%d\t%d\n",S->num,S->time1,S->time2,S->city,S->price,S->total,S->left);S->next=NULL;R->next=S;R=S;航班的查询功能函数chaxun();该函数主要实现从磁盘文件中查询航班信息,程序将这一功能分作两种方式进行操作,一是根据航班号进行查询,二是根据抵达城市进行查询,在这之前必须先将磁盘文件的数据读到内存中,这里又增加了两个函数,用来将写入磁盘文件的数据读回到结构体链表中,以便后面操作的简便,这里航班和客户的信息的修改和操作都是在链表的基础上进行的,因此修改后的链表依然要重新保存到磁盘文件中,这里又定义了两个函数分别用来将航班和客户信息的链表保存到磁盘文件中,查询函数根据选择的查询方式不同,具体的算法也有所不同,但是都是字符串的比较算法,前者比较航班号,后者比较的是抵达城市,查询成功则列出所有符合条件的航班信息,没有查到则提示没有此航班,查找时将磁盘文件的航班信息读取到链表中,从表头开始比较,一直到表尾,读取链表的方法下面会介绍到,查询算法的核心:void chaxun(){//查询功能int n;flight *L;L=duquhb();scanf("%d",&n);switch(n){case 1:chaxuncity(L); break;case 2:chaxunflight(L); break;}}航班和客户信息的机构体链表的读和写函数,读取信息时按行将数据读入到链表中,同样以尾插法建立链表,写磁盘文件时将链表中的结构体依次写入文件中的每行,两种文件的读写方法相同,这里只列出航班信息的读写核心算法:flight *duquhb(){//读取航班信息到结构体链表中FILE *fp;flight *L,*S,*R;fp=fopen("航班信息.txt","r");L=(flight *)malloc(sizeof(flight));L->next=NULL;R=L;while(!feof(fp)){S=(flight *)malloc(sizeof(flight));fscanf(fp,"%s%s%s%s%d%d%d",S->num,S->time1,S->time2,S->city,&S->price,&S->total,&S->left);S->next=NULL;R->next=S;R=S;};fclose(fp);return L;}void baocunhb(flight *L){//保存修改后航班信息flight *p;FILE *fp;fp=fopen("航班信息.txt","w");p=L->next;while(p->next!=NULL){fprintf(fp,"%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->num,p->time1,p->time2,p->city,p->price,p-> total,p->left);p=p->next;}fclose(fp);}1.订票函数dingpiao()此函数主要实现客户的订票,订票时客户首先查询所要预定的航班是否存在,如果存在则进入订票,订票时客户要先登记个人信息,有姓名和证件号,接着选择是否订票,是则将客户信息和预定票数保存到客户信息的磁盘文件中,并将相应航班的剩余票数修改后保存,订票时如果票数不足则会给出提示,订票成功后给出客户订单的编号,如果用户查不到要预定的航班,则给出相应提示,客户可选择继续查询并预定其他航班。
2.退票功能函数tuipiao();此函数主要实现客户的退票操作,退票时,客户必须先进行身份验证,即输入客户的姓名和证件号,如果客户输入的信息与文件中保存的信息一致,则允许客户进行退票,退票时输入要退订的航班号,如果确实有预定过此航班,则允许继续退票,客户可选择退订的票数,退订成功后,修改客户信息中的预定票数和航班信息中的剩余票数并保存,订票是如果没有客户信息则会给出提示,退票的算法如下:void tuipiao(){//退票flight *p,*L;char name[20],c[20],ID[20];customer *h,*Q;int n;L=duquhb();Q=duqukh();printf("请输入航班号:");scanf("%s",&c);p=L->next;h=Q->next;while(p!=NULL){if(strcmp(p->num,c)==0){printf("请输入姓名:");scanf("%s",&name);printf("请输入证件号:");scanf("%s",&ID);while(h!=NULL){if(strcmp(h->name,name)==0&&strcmp(h->ID,ID)==0){printf("\n乘客姓名乘客证件预定航班预定票数\n");printf("%s\t%s\t%s\t%d\t\n",h->name,h->num,h->ID,h->number);printf("请输入要退定的本航班票数:");scanf("%d",&n);p->left+=n;h->number=h->number-n;printf("恭喜您退票成功!\n");break;}elseh=h->next;}if(h==NULL){printf("没有您的信息!\n");break;}else break;}else p=p->next;}if(p==NULL)printf("您没有定本张票!\n");baocunhb(L);baocunkh(Q);}为了让客户在使用时更加方便的进行操作,程序加入了两个用来显示所有航班和所有客户信息的函数,将磁盘文件读至结构体链表中,再将链表中的信息一行一行的显示出来3.程序的最后一个功能函数,xiugai();此函数主要用来修改已保存的航班信息,,修改时将磁盘文件读至链表中,然后选择要修改的航班,接着查找,找到后提示输入跟新的航班信息,接着将更新后的信息再保存至磁盘文件中,此函数算法简单,这里不作说明。