[数据结构]-订票系统课程设计
- 格式:doc
- 大小:106.50 KB
- 文档页数:16
XXXXXXXXXX项目名称:航空信息管理系统学生姓名:XXXXXX 学号:XXXXXXXXX 班级:XXXXXX 指导教师:XXX目录1.系统需求分析 (1)2.数据结构设计及用法说明 (2)3.详细设计和编码 (3)3.1订票模块 (3)3.2退票模块 (6)3.3录入模块 (7)3.4查询模块 (8)4.实验结果 (9)4.1主菜单界面 (9)4.2查询功能模块 (9)4.3订票功能模块 (10)4.4退票功能模块 (10)4.5录入航班信息模块 (10)5.体会 (11)参考文献 (12)附录:源程序清单 (13)1.系统需求分析本次课程设计要求使用C语言编写一个航空客运订票系统程序,根据所有内容都可以只在内存中运行可得知该模拟的航空客运订票系统不需要用文件保存相关输入,运行过程中的数据。
同时该航空客运订票系统要求模拟实际航空订票系统,具有查询航线,客票预订,办理退票,录入航班信息等基本功能。
查询航线功能根据实际分析应该具有通过用户输入的要查询终点站名输出该终点站的终点站,航班号,飞机号,飞行日期,剩余票量的功能。
订票功能应当设计能够根据用户输入的姓名和终点站,查询该终点站的余票并提示剩余票数,之后让用户输入需要订购的票数并执行相关操作。
退票功能可设计成要求用户输入姓名和航班号来查找该用户的的订票信息并打印,再询问是否退票。
录入功能是必要的,用来录入航班节点信息。
2.数据结构设计及用法说明根据该航空信息管理系统的功能要求,应当设计菜单模块,查询模块,订票模块,退票模块,录入信息模块等几个基本模块,main函数里调用菜单模块打印选项菜单,然后用switch case 接收用户选择,并依此跳转到相应模块执行。
同时,为达到能够执行一个模块后继续返回主菜单执行而不是直接退出的目的设计将菜单模块及相应子功能模块放入for死循环里,当输入5则直接退出程序。
按该系统的功能分析得出存放在系统中各项数据不需要使用排序功能,因而使用链表保存数据比用顺序表和数组要便捷并且占用内存少,所以定义linklist类型,内部有data,next 指针2个数据。
数据结构课程设计订票系统一、课程目标知识目标:1. 理解并掌握数据结构中的线性表、栈、队列等基本概念及应用场景;2. 学会使用链表、顺序表等实现订票系统中旅客信息的存储与管理;3. 掌握查找、排序等算法在订票系统中的应用,提高数据检索效率。
技能目标:1. 能够运用所学数据结构知识,设计并实现一个简单的订票系统;2. 培养学生分析问题、解决问题的能力,提高编程实践技能;3. 学会使用调试工具,对订票系统进行测试与优化。
情感态度价值观目标:1. 培养学生团队合作精神,提高沟通与协作能力;2. 增强学生对数据结构在实际应用中的认识,激发学习兴趣;3. 培养学生严谨、认真的学习态度,养成良好编程习惯。
分析课程性质、学生特点和教学要求:本课程为数据结构课程设计,旨在让学生将所学理论知识与实际应用相结合,提高解决实际问题的能力。
学生处于高年级阶段,已具备一定的编程基础和逻辑思维能力。
教学要求注重实践操作,引导学生运用所学知识解决实际问题。
二、教学内容1. 线性表、栈、队列基本概念及操作:结合教材第二章内容,使学生掌握线性表、栈、队列的定义、特点及基本操作。
- 线性表的实现(链表与顺序表)- 栈的概念、实现及应用- 队列的概念、实现及应用2. 数据存储与管理:结合教材第四章内容,让学生学会使用数据结构对订票系统中旅客信息进行存储与管理。
- 旅客信息的数据结构设计- 数据存储(文件、数据库等)3. 查找与排序算法:结合教材第五章内容,培养学生运用查找与排序算法优化订票系统的能力。
- 常见查找算法(顺序查找、二分查找等)- 常见排序算法(冒泡排序、快速排序等)4. 订票系统设计与实现:结合教材实际案例,指导学生设计并实现一个简单的订票系统。
- 系统需求分析- 功能模块划分- 编程实现与测试5. 课程进度安排:- 第1周:线性表、栈、队列基本概念及操作- 第2周:数据存储与管理- 第3周:查找与排序算法- 第4周:订票系统设计与实现及优化教学内容注重理论与实践相结合,以教材为基础,确保学生能够系统地掌握数据结构知识,并将其应用于实际项目中。
数据结构课程设计之飞机订票系统青岛理工大学数据结构课程设计报告题目: 飞机订票系统院(系):学生姓名: 班级: 学号:起迄日期: 指导教师:指导教师评语: 成绩:签名:年月日2010—2011年度第 2 学期一、需求分析1.问题描述:设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。
2.基本功能1,录入航班信息。
没个航班的信息包括:航班号,起飞、抵达城市,座位总数,剩余座位数。
数据由使用者输入。
数据存储在txt文件中,采用线性表的链式结构。
2,加载航班和客户信息。
可以自动加载保存在txt文件中的航班和客户的信息。
3,查询航班。
可以通过输入航班号,查询该航班的所有信息。
可以通过输入起飞抵达的城市,查询航班的信息。
4,订票。
客户的信息包括:姓名,证件号,所订票的航班号,座号。
用户输入要订票的航班号,如果该航班未满,则订票成功,并记录客户的信息。
如果该航班已满,则订票失败,输出所有未满的航班信息,供用户选择。
5,退票。
删除退票用户的订票信息,相应的航班的剩余票数增加1。
6,修改航班信息。
用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。
7,保存操作。
把当前的航班信息,和用户信息分别保存在txt文件中。
8,输出所有客户信息。
按一定的格式输出用户的姓名,证件号码,航班号,座号。
9,输出所有航班信息。
按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。
0,退出系统。
3.输入输出在控制台下,根据提示输入要完成功能的标号,然后在提示下选择性的输入航班号、起飞抵达地、证件号码,或者姓名等。
系统会根据用户的输入输出相应的航班信息或者用户信息。
二、概要设计1.设计思路:对于航班和用户,分别定义不同的数据结构,并且采用线性表的链式结构进行存储。
然后根据要完成的功能,分模块用函数实现。
所用到的算法主要有:链表的创建,增加,遍历,插入,删除。
数据结构课程设计报告题目航空客运订票系统专业班级学号姓名指导教师成绩一、设计任务航空客运订票的业务包括查询(航线和客票预订的)信息、客票预订和办理退票等。
基本要求有:(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. 需求分析描述要求编程解决的问题。
以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:(a) 输入的形式和输入值的范围;(b) 输出的形式;(c) 程序所能达到的功能;(d) 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。
2. 概要设计给出程序要达到的具体的要求。
描述解决相应问题算法的设计思想。
描述所设计程序的各个模块(即函数)功能。
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
3. 详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出流程或伪码算法;对主程序和其他模块也都需要写出流程或伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序);画出函数的调用关系图。
给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。
设计出良好的输入输出界面(清晰易懂)。
4. 调试分析内容包括:(a)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;(b)算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析)和改进设想;(c)经验和体会等。
5. 用户使用说明说明如何使用你编写的程序,详细列出每一步的操作步骤。
6. 测试结果设计测试数据,或具体给出测试数据。
要求测试数据能全面地测试所设计程序的功能。
列出你的测试结果,包括输入和输出。
这里的测试数据应该完整和严格,最好多于需求分析中所列。
7. 测试情况:给出程序的测试情况,并分析运行结果附录(非必须,按照需要添加)带注释的源程序。
可以只列出程序文件名的清单。
需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
订票系统数据结构课程设计一、课程目标知识目标:1. 让学生理解订票系统中的基本数据结构,掌握线性表、树和图等数据结构在订票系统中的应用。
2. 使学生掌握如何使用数据结构优化订票系统的查询和存储效率,了解不同数据结构在系统性能上的影响。
3. 引导学生学会分析订票系统中的数据关系,并能运用所学知识设计合理的数据结构。
技能目标:1. 培养学生运用所学数据结构知识解决实际问题的能力,能够根据需求设计并实现订票系统中的数据结构。
2. 提高学生的编程实践能力,使其能够熟练运用编程语言实现订票系统相关功能。
3. 培养学生团队协作和沟通能力,能在项目中进行有效分工与协作。
情感态度价值观目标:1. 激发学生对数据结构学习的兴趣,培养其探究精神,提高学习积极性。
2. 培养学生的责任心,使其认识到数据结构在实际应用中的重要性,增强对技术应用的敬畏之心。
3. 引导学生树立正确的价值观,认识到科技进步对生活的影响,培养其热爱科学、服务社会的精神。
课程性质:本课程为高二年级信息技术课程,旨在让学生结合实际应用,深入理解数据结构知识,提高编程实践能力。
学生特点:学生已具备一定的数据结构基础,对编程有一定了解,具备基本的编程能力,但实际应用经验较少。
教学要求:结合订票系统实际应用场景,引导学生运用所学数据结构知识,培养其解决实际问题的能力。
教学过程中注重理论与实践相结合,强化编程实践,提高学生的综合运用能力。
通过项目合作,培养学生的团队协作和沟通能力。
二、教学内容1. 订票系统概述:介绍订票系统的基本功能、业务流程及在生活中的应用。
教材章节:第二章 数据结构在实际应用中的优势2. 数据结构基础知识回顾:线性表、树和图的基本概念、存储结构及操作方法。
教材章节:第三章 线性表;第四章 树;第五章 图3. 订票系统中的数据结构应用:a. 线性表在航班信息存储和查询中的应用b. 树在航空公司组织结构及航班层级关系表示中的应用c. 图在航班网络及航线规划中的应用教材章节:第六章 数据结构在实际应用中的案例分析4. 数据结构优化订票系统性能:分析不同数据结构在查询、存储等方面的性能差异,探讨优化策略。
订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2.概要设计在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。
主菜单0 1 2 3 4 5 6 7 8 9输入航班的信息列出航班的信息按航班号查询航班信息按城市来查询航班订票程序退票系统修改飞机航班的信息保存文件读取文件、下载文件退出详细设计3.源程序/******头文件(.h)***********/#include <stdio.h> /*I/O函数*/#include <stdlib.h> /*其它说明*/#include <string.h> /*字符串函数*/#include <conio.h> /*屏幕操作函数*/ #include <ctype.h> /*字符操作函数*/#define N 20#define Q 40 /*定义常数表示记录数*//*定义数据结构*//*乘客信息*/typedef struct{char number[10];/*编号*/char name[10]; /*姓名*/char id[20]; /*证件号*/int count; /*订票数*/char flightname[10];/*乘坐航班号*/}GUEST;/*航班信息*/typedef struct{char planenumber[10];/*航班号*/char city1[20]; /*起飞城市*/char city2[20]; /*抵达城市*/char time1[20]; /*起飞时间*/char time2[20]; /*降落时间*/int room; /*舱位数*/char price[5]; /*票价*/char discount[5]; /*折扣*/GUEST guest[25];int sit;}FLY;/*菜单函数,函数返回值为整数,代表所选的菜单项*/ menu_select(){char s[80];int c;gotoxy(1,25);/*将光标定为在第25行,第1列*/printf("press any key enter menu......\n");/*提示压任意键继续*/getch(); /*读入任意字符*/clrscr(); /*清屏*/gotoxy(1,1);printf(" Welcome to\n\n");printf(" Tickets Booking System\n\n");printf("********************MENU*********************\n\n");printf(" 0. Enter flight record\n");printf(" 1. List the flight information\n");printf(" 2. Search flightnumber\n");printf(" 3. Search city\n");printf(" 4. Book the ticket\n");printf(" 5. Quit the ticket\n");printf(" 6. Channge the flight information\n");printf(" 7. Save the file\n");printf(" 8. Load the file\n");printf(" 9. exit\n");printf("***********************************************\n");do{printf("\n Enter you choice(0~9):"); /*提示输入选项*/scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整型数*/ }while(c<0||c>9); /*选择项不在0~9之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/ }/*输入函数*/int enter(FLY t[]){int i,k,n,m,w,j;char *s;clrscr(); /*清屏*/printf("input the flight's count(n<=40):");/*输入航线总数*/ scanf("%d",&n);while(n>40||n<0){clrscr();printf("input error!!!input again(0<n<=40):");/*输入航线总数*/scanf("%d",&n);}printf(" input the flight's information\n\n");/*提示信息*/printf("flightname start-city end-city start-time end-time room price discount\n");printf("------------------------------------------------------------------------------\ n");for(i=0;i<n;i++){scanf("%s",t[i].planenumber);/*输入姓名*/gotoxy(13,6+i);/*光标跳到地址栏*/scanf("%s",t[i].city1);/*输入起飞城市*/gotoxy(25,6+i);scanf("%s",t[i].city2);/*输入降落城市*/gotoxy(36,6+i);scanf("%s",t[i].time1);/*输入起飞时间*/gotoxy(47,6+i);scanf("%s",t[i].time2);/*输入降落时间*/gotoxy(57,6+i);scanf("%d",&t[i].room);/*输入舱位数*/gotoxy(64,6+i);scanf("%s",t[i].price);/*输入票价*/gotoxy(73,6+i);scanf("%s",t[i].discount);/*输入折扣*/}printf("-----------------------------------------------------------------------------\n ");for(i=0;i<n;i++)t[i].sit=0;return n; /*返回记录条数*/}/*显示记录,参数为记录数组和记录条数*/void list(FLY t[],int n){int i;clrscr();printf("flightname start-city end-city start-time end-time room price discount\n");printf("------------------------------------------------------------------------------\ n");for(i=0;i<n;i++)printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumb er,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);printf("************************end*******************\n");}/*按航班号查找记录*/void search1(FLY t[],int n){char s[20]; /*保存待查找航班名字符串*/int i;clrscr(); /*清屏*/printf("please input the flightname that you want to search:");scanf("%s",s); /*输入待查找航班名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].planenumber)==0) /*记录中的航班名和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/ }if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");else{printf("flightname start-city end-city start-time end-time room price discount\n"); /*显示记录*/printf("------------------------------------------------------------------------------\ n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumb er,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);}}/*按起降城市查找记录*/void search2(FLY t[],int n){char s1[20];char s2[20];int i;clrscr(); /*清屏*/printf("please input the start-city:");scanf("%s",s1); /*输入起飞城市名*/printf("please input the end-city:");scanf("%s",s2); /*输入降落城市名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if((strcmp(s1,t[i].city1)==0)&&(strcmp(s2,t[i].city2)==0)) /*记录中的城市和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/ }if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");else{printf("flightname start-city end-city start-time end-time room price discount\n"); /*找到,显示记录*/printf("------------------------------------------------------------------------------\n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumb er,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);}}/*订票*/void book(FLY t[],int n){char s[20],number1[10],name1[10],id1[20],flightname1[10];int i,j=0,m,k,count1;clrscr(); /*清屏*/printf("How many tickets do you want to book:");scanf("%d",&m);printf("number name ID book-count flightname\n"); /*提示信息*/printf("------------------------------------------------------------\n");for(k=0;k<m;k++){scanf("%s",number1);gotoxy(13,4+k);/*光标跳到地址栏*/scanf("%s",name1);/*输入订票客户姓名*/gotoxy(25,4+k);scanf("%s",id1);/*输入证件号*/gotoxy(43,4+k);scanf("%d",&count1);/*输入订票票数*/gotoxy(53,4+k);scanf("%s",flightname1);/*输入航班号*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(flightname1,t[i].planenumber)==0) /*记录中的航班名和待比较的是否相等*/{j=t[i].sit;strcpy(t[i].guest[j].number,number1);strcpy(t[i].guest[j].name,name1);strcpy(t[i].guest[j].id,id1);t[i].guest[j].count=count1;strcpy(t[i].guest[j].flightname,flightname1);t[i].room=t[i].room-count1;t[i].sit++;break; /*相等,则返回该记录的下标号,程序提前结结束*/}}if(i>n-1) /*如果整数i值大于n-1,说明没找到*/{printf("Sorry!No this flight\n");m=m+2;k++;}}}/*退票*/void quit(FLY t[],int n){char s1[20],s2[20]; /*保存待查找航班名和证件号字符串*/int i,k,j,h,l,ch;clrscr(); /*清屏*/printf("please input the flightname that you want to quit:");scanf("%s",s1); /*输入待查找航标名*/printf("please input the your id:");scanf("%s",s2); /*输入待查找证件号*/printf("number name ID book-count flightname\n"); /*显示提示*/printf("------------------------------------------------------------\n");for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{for(j=0;j<t[i].sit;j++)if((strcmp(s1,t[i].guest[j].flightname)==0)&&(strcmp(s2,t[i].guest[j].id)= =0)){printf("%-11s%-16s%-16s%-14d%-10s\n",t[i].guest[j].number,t[i].guest[j ].name,t[i].guest[j].id,t[i].guest[j].count,t[i].guest[j].flightname);t[i].room=t[i].room+t[i].guest[j].count;l=j;h=i;break;}}i=h;if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");else{printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数0或1*/if(ch==1) /*如果确认删除整数为1*/{for(k=l+1;k<t[i].sit;k++){strcpy(t[i].guest[k-1].number,t[i].guest[k].number); /*将后一条记录的姓名拷贝到前一条*/strcpy(t[i].guest[k-1].name,t[i].guest[k].name);strcpy(t[i].guest[k-1].id,t[i].guest[k].id);t[i].guest[k-1].count=t[i].guest[k].count;strcpy(t[i].guest[k-1].flightname,t[i].guest[k].flightname);}t[i].sit--;}printf("quit success!!\n");/*提示退票成功*/}}/*修改航班信息*/void channge(FLY t[],int n){char s[20]; /*要删除记录的姓名*/int i,j;clrscr(); /*清屏*/printf("please input the flightname that you want to channge:"); /*提示信息*/scanf("%s",s);/*输入航班名*/for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].planenumber)==0) /*记录中的航班名和待比较的是否相等*/break; /*相等,则返回该记录的下标号,程序提前结结束*/ }if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");else{printf("flightname start-city end-city start-time end-time room price discount\n"); /*找到,显示原先记录*/printf("------------------------------------------------------------------------------\ n");printf("%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7s\n",t[i].planenumber,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i].discount);printf("please input the new information:\n");scanf("%s",t[i].planenumber);/*输入航班名*/gotoxy(13,6+i);/*光标跳到地址栏*/scanf("%s",t[i].city1);/*输入起始城市*/gotoxy(25,6+i);scanf("%s",t[i].city2);/*输入终点城市*/gotoxy(35,6+i);scanf("%s",t[i].time1);/*输入起飞时间*/gotoxy(47,6+i);scanf("%s",t[i].time2);/*输入降落时间*/gotoxy(57,6+i);scanf("%d",t[i].room);/*输入座位号*/gotoxy(64,6+i);scanf("%s",t[i].price);/*输入票价*/gotoxy(71,6+i);scanf("%s",t[i].discount);/*输入折扣*/}}/*保存资料*/void save(FLY t[],int n){int i,j;FILE *fp; /*指向文件的指针*/if((fp=fopen("record1.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/{printf("can not open file\n");/*没打开*/exit(1); /*退出*/}printf("\nSaving file\n"); /*输出提示信息*/fprintf(fp,"%d",n); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(i=0;i<n;i++){fprintf(fp,"%s %s %s %s %s %d %s %s",t[i] .planenumber,t[i].city1,t[i].city2,t[i].time1,t[i].time2,t[i].room,t[i].price,t[i ].discount);fprintf(fp,"\r\n"); /*将换行符号写入文件*/fprintf(fp,"%d",t[i].sit); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(j=0;j<t[i].sit;j++){fprintf(fp,"%s %s %s %d %s",t[i].guest[j].number,t[i].gu est[j].name,t[i].guest[j].id,t[i].guest[j].count,t[i].guest[j].flightname);/*格式写入记录*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/}}fclose(fp);/*关闭文件*/printf("****save success***\n"); /*显示保存成功*/}/*读入函数,参数为结构体数组*/int load(FLY t[]){int i,n,j;FILE *fp; /*指向文件的指针*/if((fp=fopen("record1.txt","rb"))==NULL)/*打开文件*/{printf("can not open file\n"); /*不能打开*/exit(1); /*退出*/}fscanf(fp,"%d",&n); /*读入记录数*/for(i=0;i<n;i++){fscanf(fp,"%s %s %s %s %s %d %s %s",t[ i].planenumber,t[i].city1,t[i].city2,t[i].time1,t[i].time2,&t[i].room,t[i].pric e,t[i].discount);fscanf(fp,"%d",&t[i].sit); /*读入记录数*/for(j=0;j<t[i].sit;j++)fscanf(fp,"%s %s %s %d %s",t[i].guest[j].number,t[i].gues t[j].name,t[i].guest[j].id,&t[i].guest[j].count,t[i].guest[j].flightname); /*按格式读入记录*/}fclose(fp); /*关闭文件*/printf("You have success read data from file!!!\n\n\n\n"); /*显示保存成功*/return n; /*返回记录数*/}/*主函数*/main(){ int i;FLY flight[Q];int length; /*保存记录长度*/clrscr(); /*清屏*/textcolor(YELLOW); /*字体颜色*/textbackground(BLUE);/*背景颜色*/for(;;)/*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/{case 0:length=enter(flight);break;/*输入记录*/case 1:list(flight,length);break; /*显示全部记录*/ case 2:search1(flight,length);break; /*查找记录*/case 3:search2(flight,length);break; /*查找记录*/case 4:book(flight,length);break; /*订票*/case 5:quit(flight,length);break; /*退票*/case 6:channge(flight,length);break; /*修改航班信息*/ case 7:save(flight,length);break; /*保存文件*/case 8:length=load(flight); break; /*读文件*/case 9:exit(0); /*如返回值为9则程序结束*/}}}4.菜单窗口订票系统菜单窗口0.输入航班的信息1.列出航班的信息2.按航班号查询航班信息3.按城市来查询航班4.订票程序5.退票系统6.修改飞机航班的信息7.保存文件8.读取文件、下载文件。
软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析)设计题目:火车订票系统小组成员:指导教师:完成时间:一.需求设计:1.每条线路所涉及的信息有:起点、终点、站名、车次、、票价、时间、座位号。
2.作为示意系统,全部数据可以只放在内存中。
3.系统能实现的功能和操作如下:①.查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。
②.承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排队候补。
③.承办退票业务:根据客户提供的情况(车次、时间、座位号)为客户办理退票手续,然后查询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
④登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。
⑤统计功能:将每次车的订票,退票结果统计出来。
⑥管理功能:列车管理员可以通过调用函数来查看车票极其用户情况.⑦.查询功能:用户可以查询自己需要的车辆信息.二.总体设计1.程序流程图:按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2.总体设计说明:①.数据结构设计:程序=数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次到站,票价,到达时间,是否已被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的车次,起始站,要到的站,时间.已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号码,已购车票的车次,出发时间,到达时间.车票信息链表示意图:车次起始站发车时间downnnext到站时间票价marknext座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号中已购票用户信息链表示意图: 用户姓名身份证号码已购车票的车次号出发时间到达时间注:座位号包含在车次号中②算法的设计:主函数:利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函数,实现相应的功能。
嘉应学院计算机学院实验报告课程名称:数据结构课程设计开课学期: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)班学生姓名: xxx 学号: 20094040101xx设计地点(单位)设计题目:订票系统完成日期: 2011年 01 月4 日指导教师评语:成绩(五级记分制):教师签名:目录一、课程设计目的 (3)二、课程设计内容 (3)三、需求分析 (3)四、概要设计 (3)五、详细设计及运行结果 (4)六、调试情况,设计技巧及体会 (9)七、参考文献 (9)八、附录(源文件) (10)一、课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
航空空订票系统:(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧。
二、课程设计内容航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。
设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
三、需求分析1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);2.全部数据可以只放在内存中;3.系统能实现的操作和功能如下:a) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b) 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。
若需要,可登记排队候补;c) 退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
四、概要设计1.系统结构图(功能模块图)2.功能模块说明(1)显示已初始化的全部航线信息(2)浏览已订票客户信息(3)根据客户提出的终点站名,调用find()函数寻找航线信息,调用list()函数输出航线信息(4)办理订票业务:根据客户提供的航班号进行查询航线信息,若客户订票额超过乘员定票总额,退出,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单域中添加客户信息;如果暂时没有票,询问客户是否要排队等侯,如果是,则在等候队列增加该客户的订票信息。
(5)办理退票业务:调用查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。
退票成功后,重新将航线名单域指向订票单链表的头指针。
根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。
(6)退出本系统五、详细设计及运行结果(1)显示已初始化的全部航线信息(3)查询航线(4)办理订票业务(5)办理退票业务(6)排序:sort_tkt()六、调试情况,设计技巧及体会1总体过程编译和调试工具:选择Visual C++6.0,该工具稳定,其中有一个强大的调试工具,但我不是熟悉。
还需要进一步的练习。
2 在一周半的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题:(1)因本人能力有限,在编写的时候只使用了相对较为简单的基础语言,代替了相对较为复杂的语言,降低了运行效率。
(2)程序在起初设计的时候,经常出现溢出错误,而且不只一处。
为了修正这些溢出错误,耗费了大量的时间,修正解释之后再看源程序,才发现原来只是因为开始的函数定义的数据类型出现了问题,对函数的定义不清楚,字符的不正确定义造成了后期大量的纠错工作,(3)由于忘记了一些c语言的规范使得在调试过程中一些错误没有发现。
例如,调用函数时,数组只需要传递数组名即可;字符‘0’和整形的0是不同的文明不可以直接对其画等号。
(4)测试用例具有一定的广泛性。
运行程序时输入了多种不同字符信息,经过多次修改结果达到了预期效果。
说明程序具有一定的可靠性和稳定性。
3 通过调试我自己认为,在哈夫曼编码译码系统中用出栈入栈进行哈夫曼译码编码译码要简单于使用数组,而使用结构体数组来存储待编译的字符,编码译码时通过结构体数组来实现要优于使用链表。
4.调试体会经过这次实习,我对调试掌握的更加熟练了,改变了过去只调试不知道如何对照程序语言修改程序的坏习惯,对调试也有了新的认识,意识到了程序语言的规范性以及我们在编程时要有严谨的态度,同时在写程序时如果加一定量的注释,既增加了程序的可读性,也可以使自己在读程序时更容易。
七、参考文献严蔚敏、吴伟民《数据结构》严蔚敏《数据结构题集》耿国华《数据结构——C语言描述》王曙燕《C语言程序设计》八、附录:源代码/*航空票务管理系统源代码*/#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAXSIZE 3 /*定义航线量的最大值*/typedef struct wat_ros{ char name[10];/*姓名*/int req_amt;/*订票量*/struct wat_ros *next;}qnode,*qptr;typedef struct pqueue{ qptr front;/*等候替补客户名单域的头指针*/qptr rear;/*等候替补客户名单域的属指针*/}linkqueue;typedef struct ord_ros{ char name[10];/*客户姓名*/int ord_amt;/*订票量*/int grade;/*舱位等级*/struct ord_ros *next;}linklist;struct airline{ char ter_name[10];/*终点站名*/char air_num[10];/*航班号*/char plane_num[10];/*飞机号*/char day[7];/*飞行周日(星期几)*/int tkt_amt;/*乘员定额*/int tkt_sur;/*余票量*/linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/}lineinfo;struct airline *start;void display(struct airline *info)/*打印每条航线的基本信息*/{printf("%8s\t%3s\t%s\t%4s\t\t%3d\t%10d\n",info->ter_name,info->air_num,info->plane_num,info->day,info->t kt_amt,info->tkt_sur);}void list()/*打印全部航线信息*/{ struct airline *info;int i=0;info=start;printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");while(i<MAXSIZE){display(info);info++;i++;}printf("\n\n");}void search()/*根据客户提出的终点站名输出航线信息*/{ struct airline *info,*find();char name[10];int i=0;info=start;printf("请输入终点站名:");scanf("%s",name);while(i<MAXSIZE) {if(!strcmp(name,info->ter_name)) break;info++;i++;}if(i>=MAXSIZE)printf("对不起,该航线未找到!\n");else{printf("终点站名\t航班号\t飞机号\t飞行周日\t乘员定额\t余票量\n");display(info);}}struct airline *find()/*根据系统提出的航班号查询并以指针形式返回*/{ struct airline *info;char number[10];int i=0;info=start;printf("请输入航班号:");scanf("%s",number);while(i<MAXSIZE) {if(!strcmp(number,info->air_num)) return info;info++;i++;}printf("对不起,该航线末找到!\n");return NULL;}void prtlink()/*打印订票乘员名单域的客户名单信息*/{ linklist *p;struct airline *info;info=find();p=info->order;if(p!=NULL){printf("客户姓名订票数额舱位等级\n");while(p){printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);p=p->next;}}elseprintf("该航线没有客户信息!!\n");}linklist *insertlink(linklist *head,int amount,char name[],int grade) /*增加订票乘员名单域的客户信息*/{ linklist *p1,*new;p1=head;new=(linklist *)malloc(sizeof(linklist));if(!new) {printf("\nOut of memory!!\n");return NULL;}strcpy(new->name,name);new->ord_amt=amount;new->grade=grade;new->next=NULL;if(head==NULL)/*若原无订票客户信息*/{head=new;new->next=NULL;}elsehead=new;new->next=p1;return head;}linkqueue appendqueue(linkqueue q,char name[],int amount)/*增加排队等候的客户名单域*/{ qptr new;new=(qptr)malloc(sizeof(qnode));strcpy(new->name,name);new->req_amt=amount;new->next=NULL;if(q.front==NULL)/*若原排队等候客户名单域为空*/q.front=new;elseq.rear->next=new;q.rear=new;return q;}void order()/*办理订票业务*/{ struct airline *info;int amount,grade;char name[10];info=start;if(!(info=find())) return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/printf("请输入你订票所需要的数量:");scanf("%d",&amount);if(amount>info->tkt_amt)/*若客户订票额超过乘员定票总额,退出*/{ printf("\n对不起,您输入的票的数量已经超过乘员定额!");return;}if(amount<=info->tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/{int i;printf("请输入您的姓名(订票客户):");scanf("%s",name);printf("请输入%s票的舱位等级:",name);scanf("%d",&grade);info->order=insertlink(info->order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/ for(i=0;i<amount;i++)/*依次输出该订票客户的座位号*/printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1);info->tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/printf("\n祝您乘坐愉快!\n");}else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/{ char r;printf("\n已经没有更多的票,您需要排队等候吗?(Y/N)");r=getch();printf("%c",r);if(r=='Y'||r=='y'){ printf("\n请输入您的姓名(排队订票客户):");scanf("%s",name);info->wait=appendqueue(info->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/ printf("\n注册成功!\n");}else printf("\n欢迎您下次再次订购!\n");}}void return_tkt()/*退票模块*/{ struct airline *info;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname[10];if(!(info=find())) return;/*调用查询函数,根据客户提供的航线进行搜索*/head=info->order;p1=head;printf("请输入你的姓名(退票客户):");scanf("%s",cusname);while(p1!=NULL) {/*根据客户提供的姓名到订票客户名单域进行查询*/if(!strcmp(cusname,p1->name)) break;p2=p1;p1=p1->next;}if(p1==NULL){ printf("对不起,你没有订过票!\n");return;}/*若未找到,退出本模块*/else{/*若信息查询成功,删除订票客户名单域中的信息*/if(p1==head) head=p1->next;else p2->next=p1->next;info->tkt_sur+=p1->ord_amt;grade=p1->grade;printf("%s成功退票!\n",p1->name);free(p1);}info->order=head;/*重新将航线名单域指向订票单链表的头指针*/f=(info->wait).front;/*f指向排队等候名单队列的头结点*/r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/t=f;/*t为当前满点条件的排队候补名单域*/while(t){if(info->tkt_sur>=info->wait.front->req_amt){/*若满足条件者为头结点*/int i;info->wait.front=t->next;printf("%s订票成功!\n",t->name);for(i=0;i<t->req_amt;i++)/*输出座位号*/printf("%s的座位号是:%d\n",t->name,(info->tkt_sur)-i);info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/ free(t);break;}back=t;t=t->next;if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若满足条件者不为头结点*/{ int i;back->next=t->next;printf("%s订票成功!\n",t->name);for(i=0;i<t->req_amt;i++)/*输出座位号*/printf("<%s>'s seat number is:%d\n",t->name,(info->tkt_sur)-i);info->tkt_sur-=t->req_amt;info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/ free(t);break;}if(f==r) break;}}int menu_select()/*菜单界面*/{ int c;char s[20];printf("\n\t\t航空客运订票系统\n");printf("******************************************\n");printf("1.浏览航线信息:\n");printf("2.浏览已订票客户信息:\n");printf("3.查询航线\n");printf("4.办理订票业务:\n");printf("5.办理退票业务:\n");printf("6.退出系统\n");printf("*******************************************\n");do{printf("请选择:");scanf("%s",s);c=atoi(s);}while(c<0||c>7);return c;}main(){ struct airline air[MAXSIZE]={{"beijing","1","B8571","SUN",3,3},{"shanghai","2","S1002","MON",2,2},{"london","3","L1003","FRI",1,1}};/*初始化航线信息*//* clrscr();*/start=air;for(;;){switch(menu_select()){case 1:list();break;case 2:prtlink();break;case 3:search();break;case 4:order();break;case 5:return_tkt();break;case 6:printf("\n欢迎使用本系统,再见!\n");exit(0); }printf("\nPress any key to continue!\n");getch();}。