航空订票系统c++数据结构大作业
C++数据结构课程设计订票系统

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个数据。
东华大学数据结构设计C语言航空订票系统

char start_time[20]; /*起飞时间*/
char arrive_time[20]; /*到达时间*/
float price; /*票价*/
float discount; /*折扣率*/
int ticketnum; /*总票数*/
int ticketleft; /*剩余票数*/
}air[A];
五、概要设计……………………………………………………(5)
5.1 系统的流程框图…………………………………………(5) 5.2 系统各函数的功能、相互调用关系 …………………(6)
六、详细设计……………………………………………………(8)
6.1 各变量的定义和作用 ………………………………(8)
6.2 系统各函数的功能 …………………………………(8) 七、调试分析……………………………………………………(21) 八、用户手册 …………………………………………………(22) 九、测试结果……………………………………………………(22) 十、心得体会与参考文献………………………………………(22)
} //调用管理员账户信息 else cout<<"密码错误!!! 重新选择按键"<<endl;
break; } case 2://登陆客户账户
{ system("cls"); /*清屏功能,美化界面*/
customermenu(); break; }
case 0://登陆客户账户 {
exit(0); break;
●尽量达到系统操作过程中的直观、方便、实用、安全等要求。 ●系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未 参与开发的技术维护人员补充、维护。 ●系统应具备维护功能,及时根据用户需求进行数据的添加、删除、修改等操作。
C语言数据结构课程设计航空订票实验报告(含源代码)

数据结构课程设计实验报告设计题目__________________________________________________________________ 设计者__________________________________________________________________ 指导老师__________________________________________________________________ 班级___________________________________________________________________ 学号____________________________________________________________________一、设计要求任务通过此系统可以实现如下功能:1.录入航班信息:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据定)2.查询航班:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓);3.订票:(订票情况可以存在一个数据文件中,结构自己设定);4.退票:可退票,退票后修改相关数据文件;5.修改航班信息6.退出程序客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;二、设计概要主界面选择操作项目1.录入航班信息通过单链表这种数据结构,设置了剩余票数,航班号,出发地点,到达地点,起飞日期,出发时间,到达时间,票价。
2.订票输入旅客的姓名,证件号,航班号,和订票张数。
程序中自动查询输入要定的航班号,如果没有则叫其重新输入,有则执行:票数足够则订票成功,票数不充足叫其选择其它航班。
此也采用单链表的数据结构。
数据结构课程设计 航空订票系统(C++)

struct booknode
{
public:
char name[10];//乘客姓名
int ticketnum;//票数
int rate;//舱位等级
}b[40];
struct sparenode
{
public:
char name[10];//乘客姓名
int ticketnum;//票数
char flightname[10];//航班名
int flightnum;//航班号
int day;//飞行日期
int limitednum;//乘员限额
int remainber;//余票
struct booknode
{
public:
char name[10];//乘客姓名
int ticketnum;//票数
class transportNode//航线类节点
{
friend class transport;
private:
char finish[10];//目的地
char flightname[10];//航班名
int flightnum;//航班号
int day;//飞行日期
int limitednum;//乘员限额
上海电力学院
数据结构C++课程设计
题 目:航空客运订票系统
学生姓名:范晓宁
学 号:20103285
院 系:计算机与信息工程学院
专业年级:信息安全2010级
2012 年 6 月 29 日
一、设计题目
航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。试设计一个航空客 运订票系统,以使上述业务可以借助计算机来完成。
数据结构课程设计---航空订票系统

数据结构课程设计报告1.航空订票系统1.需求分析试设计一个航空订票系统,基本要求如下:每条航班所涉及的信息有:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,乘员定额,余票量,订定票的客户名单(包括姓名,订票量,舱位等级(头等舱、公务舱、经济仓)以及等候替补的客户名单(包括姓名、所需数量)。
采用链式存储结构。
系统能实现的操作和功能如下:(1)航班信息管理。
(2)查询航线,按以下几种方式查询:①按航班号查询;②按起点站查询;③按终点站查询;④按日期查询;每种查询方式中,查询后输出如下信息:航班号,航班机型,起飞机场,降落机场,日期(星期几),起飞时间,降落时间,飞行时长,价格,余票量。
(3)承办订票业务:根据客户提出的要求(航班号,订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。
若需要,可登记排队候补。
(4)承办退票业务:根据客户提出的情况(日期,航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。
2.设计2.1 设计思想(1)数据结构设计typedefstruct keHu//客¨户信息{char nameofKeHu[20];//客户名字int numofPiao;//客¨户需要票的数量int type;//仓位等级1:头等Ì舱2:公务舱3:经济舱struct keHu* next;/下个客户};typedefstruct hangBan{int numofHangBan;//航班号char typeofHB[20];//航班机型¨char startFly[20];//起飞¦机场char endFly[20];//降¦落机场char DataofHB[20];//日期格式为(20120312星期¨一)char startTime[20];//起飞¦时间char endTime[20];//到达时À间float flyTime;//飞行时长float prise;//价格int largeNum;//成员定额int leaveNum;//余票数量keHu *custemer;//乘客信息名单keHu *orderofKeHu;//替补客户};typedefstruct Node{hangBan *exam;//航班信?息¡éint numofN;//航班数量struct Node *next;};(2)算法设计总体设计:在Fly.h文件中设计舱位的信息处理以及订票退票和对舱位信息的管理方面的功能然后在main,h中设计用户界面功能部分。
C语言数据结构课程设计航空订票实验报告(含源代码)

数据结构课程设计实验报告设计题目__________________________________________________________________ 设计者__________________________________________________________________ 指导老师__________________________________________________________________ 班级___________________________________________________________________ 学号____________________________________________________________________一、设计要求任务通过此系统可以实现如下功能:1.录入航班信息:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据定)2.查询航班:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,确定航班是否满仓);3.订票:(订票情况可以存在一个数据文件中,结构自己设定);4.退票:可退票,退票后修改相关数据文件;5.修改航班信息6.退出程序客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;二、设计概要主界面选择操作项目1.录入航班信息通过单链表这种数据结构,设置了剩余票数,航班号,出发地点,到达地点,起飞日期,出发时间,到达时间,票价。
2.订票输入旅客的姓名,证件号,航班号,和订票张数。
程序中自动查询输入要定的航班号,如果没有则叫其重新输入,有则执行:票数足够则订票成功,票数不充足叫其选择其它航班。
此也采用单链表的数据结构。
数据结构大作业-航空公司订票系统

数据结构大作业-航空公司订票系统一、需求分析航空公司订票系统是一个需要进行高效管理和数据存储的系统。
在这个系统中,我们需要实现以下功能:1.用户登录和注册:用户可以注册并登录到系统中进行机票订购和查询。
2.机票查询:用户可以查询所有的航班信息,包括机票的价格、日期、起点和终点等信息。
3.机票购买:用户可以根据自己的需求,在航班信息中选择合适的机票,并进行购买。
4.支付功能:用户可以在系统中完成支付,并获得机票的二维码。
为了实现上述的功能,我们将采取以下的数据结构来设计和实现航空公司订票系统。
二、数据结构设计1. 航班信息表我们需要在系统中存储所有航班的信息,包括航班编号、起飞时间、起点、终点、票价等属性,因此我们可以使用以下数据结构来进行存储和管理航班信息。
typedef struct {char id[MAX_ID_LENGTH]; // 航班编号char departure[MAX_LOCATION_LENGTH]; // 起点char destination[MAX_LOCATION_LENGTH]; // 终点char date[MAX_DATE_LENGTH]; // 起飞日期char time[MAX_TIME_LENGTH]; // 起飞时间int price; // 票价} Flight;使用以上数据类型存储航班信息,我们可以建立一个包含所有航班的线性表来存储和管理所有的航班信息。
2. 用户信息表我们需要在系统中存储所有用户的信息,包括用户的账号、密码、姓名、身份证号码等属性,因此我们可以使用以下数据结构来进行存储和管理用户信息。
typedef struct {char username[MAX_USERNAME_LENGTH]; // 用户名char password[MAX_PASSWORD_LENGTH]; // 密码char name[MAX_NAME_LENGTH]; // 姓名char id[MAX_ID_LENGTH]; // 身份证号码} User;使用以上数据类型存储用户信息,我们可以建立一个包含所有用户的线性表来存储和管理所有的用户信息。
飞机订票系统(数据结构作业)

return false;
}
bool Passenger::operator<(const Passenger & operhand)const{//重载 <
if(strcmp(this->name, )<0)
return true;
return true;
return false;
}
bool Flight::HasName(const char * Name) const{//检查航班是否存在
if(!strcmp(this->name,Name))
return true;
return false;
}
if(FindNode(pdata->name)!=NULL)
return false;//若在现有乘客中已有名叫pdata->name的成员,则不必加入
Node<T> * node=new Node<T>(pdata);
if(head==NULL){//原链表中无元素,不需比较
head=node;
if(strcmp(this->name, )<0)
return true;
return false;
}
bool Flight::operator>(const Flight & operhand)const{//重载 >
if(strcmp(this->name, )>0)
class lnkList{
private:
Node<T> * head;
数据结构课程设计(C语言版)飞机订票系统

———C语言版课题:飞机订票系统和图的遍历的动态演示姓名:学号:班级:指导教师:订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:B:各分块模板的构造流程图:3:功能函数设计:(1):订票系统主菜单函数 menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。
其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。
(2):工作人员管理函数 enter()&change()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。
enter()函数的构造就是为了解决这个问题。
而有可能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change()函数。
(3):列出航班信息的函数 list()乘客需要查询各个航班的信息,所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。
(4)乘客具体查询函数 search()本函数分两个分函数:search1()和search2(),它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。
数据结构课程设计c语言版《飞机订票系统》分解

软件工程专业14级《数据结构》课程设计报告设计题目:飞机订票系统班级:软件14 姓名:指导教师:2015年 11月20日目录一、设计任务与要求 (1)1.1 总体目标与任务要求 (1)1.2 题目选择与目的意义 (1)1.3 所选题目的主要工作 (1)二、需求分析 (2)2.1 用户需求分析 (2)2.2 功能需求分析 (2)2.3 系统需求分析 (2)三、概要设计 (3)3.1 各模块的算法设计说明 (3)3.2 存储结构设计说明 (8)四、详细设计 (10)五、源代码 (11)六、运行结果分析 (21)七、收获与体会 (28)八、主要参考资料 (28)一、设计任务与要求1.1 总体目标与任务要求制作一个订票系统,通过此系统可以实现如下功能:1)录入可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)。
2)查询可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓)可以输入起飞抵达城市,查询飞机航班情况。
3)订票可以订票,如果该航班已经无票,可以提供相关可选择的航班(订票情况可以存在一个数据文件中,结构自己设定)。
4)退票可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息当航班信息改变可以修改航班数据文件。
根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
1.2 题目选择与目的意义选择这个题目的原因是,订票系统在现实生活中应用很广泛,通过这个系统可以使订票、退票等变得简便。
与传统的人工用纸、笔来记录办理订票、退票等相比,使用这个系统也会增加工作效率。
这个题目做出来的系统还是比较实用的,所以我选择了订票系统这个题目。
完成此系统,需要综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发。
通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
C语言数据结构航空售票系统设计报告

数据结构课程设计报告题目:航班订票系统学生姓名:温裕学号: 201520180704班级: 1521807指导教师:许志文2016年12月23目录第1章功能需求描述 (3)1.1 题目要求 (3)1.2 功能列表与说明 (6)第2章设计描述 (4)2.1 任务分解说明 (4)2.2 数据结构设计说明 (4)第4章开发过程描述 (15)4.1 编译过程错误分析 (15)4.3运行结果及说明 (15)第5章设计心得体会 (17)第1章功能需求描述1.1 题目要求任务:通过此系统可以实现如下功能:1)、录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2)、查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)、订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)、退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)、修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计。
请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;1.2 功能列表与说明系统共设有7个功能并以菜单方式工作,上图为功能列表图。
功能分别包括以下7个方面:(1)航班录入:每条航线所涉及的信息有:航班号、起飞时间、降落时间、抵达城市、航班票价、票价折扣、航班满仓人数、剩余票数、飞行日期。
数据结构大作业 航空公司订票系统

航空公司订票系统一、我的认识和设计思路1.我充分利用数据结构课程设计,利用几种典型数据结构(链表,队列,线性表等结构),结合上学期学习的程序设计语言(C/C++语言),链表是实现存储空间动态管理的链式存储结方式,而队是一种操作受限的线性表。
使用大量指针,来实现一个比较完整的应用系统的设计与开发。
2.我通过课程设计一些程序的调试(比如背包问题,病人看病模拟程序,停车场管理程序),通过比较系统的分析、编程和不断调试,进一步理解和掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
基本上达到了复习的要求。
3.我将知识应用于实际的方法,联想到售票系统的使用,也可以提高综合能力。
所以我选择了航空订票系统,也可以应用于其他售票系统。
航空空订票系统所涉及的知识:(1)熟练掌握链表存储结构及其建立过程和常用操作;(2)熟练掌握队列的建立过程和常用操作;(3)学会自己调试程序。
4. 通过上网查询和结合实际可知,航空客运订票的业务活动包括:查询航线、客票预订和办理退票等等。
设计了一个航空公司订票系统,以使上述业务可以借助计算机来完成。
下面是一些程序功能设想:1.每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量);2.全部数据可以只放在内存中;3.系统能实现的操作和功能如下:a) 查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;b) 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于定票额,则需重新询问客户要求。
若需要,可登记排队候补;c) 退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
c#大作业之航空订票管理系统

c#大作业之航空订票管理系统基于c#窗体的航空订票管理系统的设计与实现一.系统分工进入21世纪,人们计算机处理事情的需求有了进一步的要求。
小到商店缴费管理系统的快速运行,大到国家航空航天计算机的管理系统的进一步提升。
我们每时每刻都在追求着计算机处理事情的快速,稳定,运算量大等一系列优点。
由于人们为了方便快捷的生活方式,上网已经用户可根据航班时间,和航班号或航班价格进行订票。
订票时系统会提醒确认,订票成功后系统会将用户的信息加入订票信息表。
并改变航班的余票额。
(5)退票功能用户在不需要票的情况下进行退票操作。
退票时必须输入订票时随机生成的订单号,与航班号。
退票成功后,航班自动将余票量加一操作。
(6)本系统还添加了管理员界面。
当管理员进入后,可对用户的信息进行查看,但不能修改,也可将用户加入黑名单,如果用户有订单,则不允许管理员做加入黑名单操作。
当然加入黑名单时,管理员需要说明理由,作为存档。
管理员,也可根据实际情况对航班进行管理操作。
增删改查。
他也可以对公告进行修改操作。
(7)系统也实现了,对于不同的角色进入,会产生不同的界面效果。
保证了数据的安全性,和保密性。
数据库设计(1)管理员表(2)航班表(3)黑名单表(4)订单信息表(5)用户信息表三.运行截图四.源代码using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace航空订票管理系统{static class Program{///<summary>///应用程序的主入口点。
///</summary>[STAThread]static void Main(){string dataDir = AppDomain.CurrentDomain.BaseDirectory;if (dataDir.EndsWith(@"\bin\Debug\")|| dataDir.EndsWith(@"\bin\Release\")){dataDir = System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;AppDomain.CurrentDomain.SetData("DataDirectory", dataDir);}Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace航空订票管理系统{public partial class Form1 : Form{zhuce zc = new zhuce();Userlaunch lch=new Userlaunch();public string status1 { get; set; }int label1x;public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e) {label1x = label1.Right;timer1.Enabled = true;timer2.Enabled = true;timer3.Enabled = true;timer2.Start();novisible2();novisible1();textBox1.Focus();timer1.Start();}//隐藏管理员可做的操作public void novisible1(){客户信息ToolStripMenuItem.Visible = false;航班信息ToolStripMenuItem.Visible = false;修改公告ToolStripMenuItem.Visible = false;}//隐藏用户可做的操作public void novisible2(){用户补全资料ToolStripMenuItem.Visible = false; //个人中心用户充值ToolStripMenuItem.Visible = false; //办理业务}//隐藏登陆前界面public void novisible3(){用户登录ToolStripMenuItem.Visible = false;浏览信息ToolStripMenuItem.Visible = false;管理员登陆ToolStripMenuItem.Visible = false;}//控制公告字段private void timer1_Tick(object sender, EventArgs e){label1.Location = new Point(label1.Location.X-1,label1.Location.Y);if (label1.Right == 0){label1.Left = label1x;}}//当点到按钮时,进行图片变换private void button1_MouseEnter(object sender, EventArgs e){Button bttn;timer2.Enabled = false;bttn = (Button)sender;if (bttn == button1) picture1();else if (bttn == button2) picture2();else if (bttn == button3) picture3();else if (bttn == button4) picture4();else if (bttn == button5) picture5();}private void radioButton1_CheckedChanged(object sender, EventArgs e){textBox5.Enabled = false;textBox1.Enabled = true;textBox2.Enabled = true;textBox5.Text = "";textBox1.Focus();}private void radioButton2_CheckedChanged(object sender, EventArgs e){textBox5.Enabled = true;textBox1.Text = "";textBox2.Text = "";textBox1.Enabled = false;textBox2.Enabled = false;}private void radioButton4_CheckedChanged(object sender, EventArgs e){textBox6.Enabled = false;textBox3.Enabled = true;textBox4.Enabled = true;textBox6.Text = "";textBox4.Focus();}private void radioButton3_CheckedChanged(object sender, EventArgs e){textBox6.Enabled = true;textBox4.Text = "";textBox3.Text = "";textBox3.Enabled = false;textBox4.Enabled = false;textBox6.Focus();}//安全退出private void用户退出ToolStripMenuItem_Click(object sender, EventArgs e) {if (toolStripStatusLabel4.Text == "未登录"){MessageBox.Show("当前你未登录,请登录或注册");}else{MessageBox.Show(toolStripStatusLabel4.Text+"您已下线,谢谢使用!"); toolStripStatusLabel4.Text = "未登录";status1 = "";novisible2();novisible1();用户登录ToolStripMenuItem.Visible = true;浏览信息ToolStripMenuItem.Visible = true;管理员登陆ToolStripMenuItem.Visible = true;}}//注册界面private void浏览信息ToolStripMenuItem_Click(object sender, EventArgs e){zhuce zc = new zhuce();zc.ShowDialog();}//图片变换private void timer2_Tick(object sender, EventArgs e){Random rd = new Random();int r = rd.Next(1,6);switch (r){case 1: picture1(); break;case 2: picture2(); break;case 3: picture3(); break;case 4: picture4(); break;case 5: picture5(); break;}}//图片显示方法private void picture1(){pictureBox1.Show();pictureBox2.Hide();pictureBox3.Hide();pictureBox4.Hide();pictureBox5.Hide();}private void picture2(){pictureBox2.Show();pictureBox1.Hide();pictureBox3.Hide();pictureBox4.Hide();pictureBox5.Hide();}private void picture3(){pictureBox3.Show();pictureBox2.Hide();pictureBox1.Hide();pictureBox4.Hide();pictureBox5.Hide();}private void picture4(){pictureBox4.Show();pictureBox2.Hide();pictureBox3.Hide();pictureBox1.Hide();}private void picture5(){pictureBox5.Show();pictureBox2.Hide();pictureBox3.Hide();pictureBox4.Hide();pictureBox1.Hide();}//当不用手动控制图片时,执行private void button1_MouseLeave(object sender, EventArgs e){timer2.Enabled = true;}//用户登陆private void用户登录ToolStripMenuItem_Click(object sender, EventArgs e){Userlaunch uch = new Userlaunch();if (uch.ShowDialog() == DialogResult.OK){status1 = erName;toolStripStatusLabel4.Text = "尊敬的用户"+status1+"你好!";用户补全资料ToolStripMenuItem.Visible = true;用户充值ToolStripMenuItem.Visible = true;novisible1();novisible3();}uch.Dispose();}//管理员登陆private void管理员登陆ToolStripMenuItem_Click(object sender, EventArgs e) {Admain adn = new Admain();if (adn.ShowDialog() == DialogResult.OK){toolStripStatusLabel4.Text = adn.AdmainName;novisible2();novisible3();客户信息ToolStripMenuItem.Visible = true;航班信息ToolStripMenuItem.Visible = true;修改公告ToolStripMenuItem.Visible = true;}}//机票预订private void button6_Click(object sender, EventArgs e){if (toolStripStatusLabel4.Text == "未登录"){MessageBox.Show("请先登录");textBox1.Text = textBox2.Text = textBox5.Text = "";}else if (toolStripStatusLabel4.Text.Substring(0, 3) == "亲爱的"){MessageBox.Show("对不起,管理员,您不能订票的!");textBox1.Text = textBox2.Text = textBox5.Text = "";}else{if (textBox1.Text != "" && textBox2.Text != "" || textBox5.Text != "") {int n = 1;jipiaoyuding jyd = new jipiaoyuding(textBox1.Text, textBox2.Text, textBox5.Text, n, status1);jyd.ShowDialog();}else{MessageBox.Show("对不起,你输入的信息不符合查询条件,请重新输入");}}}//系统时间private void timer3_Tick(object sender, EventArgs e){this.toolStripStatusLabel3.Text = "当前系统时间:" +DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");}//查询航班动态private void button7_Click(object sender, EventArgs e){if (textBox4.Text != "" && textBox3.Text != "" || textBox6.Text != ""){int n = 2;jipiaoyuding jyd = new jipiaoyuding(textBox4.Text, textBox3.Text, textBox6.Text,n,status1);jyd.ShowDialog();textBox4.Text = textBox3.Text = textBox6.Text = "";}else{MessageBox.Show("对不起,你输入的信息不符合查询条件,请重新输入");textBox4.Text = textBox3.Text = textBox6.Text = "";}private void订票信息ToolStripMenuItem_Click(object sender, EventArgs e) {订票信息 dp = new订票信息();dp.ShowDialog();}private void用户资料ToolStripMenuItem_Click(object sender, EventArgs e) {用户资料 yz = new用户资料();yz.ShowDialog();}private void订票ToolStripMenuItem_Click(object sender, EventArgs e){jipiaoyuding jyd = new jipiaoyuding("", "", "", 1, status1);jyd.ShowDialog();}private void查询订单ToolStripMenuItem_Click(object sender, EventArgs e) {个人订单 gd = new个人订单(status1);gd.ShowDialog();}private void黑名单资料ToolStripMenuItem_Click(object sender, EventArgs e) {黑名单表 hm = new黑名单表();hm.ShowDialog();}private void航班信息ToolStripMenuItem_Click(object sender, EventArgs e) {航班信息 hbx = new航班信息();hbx.ShowDialog();}private void修改公告ToolStripMenuItem_Click(object sender, EventArgs e) {修改公告 xg=new修改公告 ();if (xg.ShowDialog() == DialogResult.OK){label1.Text = xg.gonggao;}private void查看自己资料ToolStripMenuItem_Click(object sender, EventArgs e) {个人资料 gz = new个人资料(status1,1);gz.ShowDialog();}private void修改个人资料ToolStripMenuItem_Click(object sender, EventArgs e) {个人资料 gz1 = new个人资料(status1,2);gz1.ShowDialog();}private void我想退票ToolStripMenuItem_Click(object sender, EventArgs e){退票系统 tp = new退票系统(status1);if (tp.ShowDialog() == DialogResult.OK){MessageBox.Show("退票成功");}}private void button8_Click(object sender, EventArgs e){if (toolStripStatusLabel4.Text=="未登录"){MessageBox.Show("你还未登陆,请先登录!");textBox7.Text = textBox8.Text = textBox9.Text = "";textBox1.Focus();}else if (toolStripStatusLabel4.Text.Substring(0,3)=="亲爱的"){MessageBox.Show("管理员,您是无权退票的啊!");textBox7.Text = textBox8.Text = textBox9.Text = "";textBox1.Focus();}else{退票系统 tp = new退票系统(status1);tp.tuibiao(textBox7.Text, textBox8.Text, textBox9.Text);{if (tp.DialogResult == DialogResult.OK){MessageBox.Show("退票成功");}}}}//取消退票private void button9_Click(object sender, EventArgs e){textBox7.Text =textBox8.Text=textBox9.Text= "";textBox7.Focus();}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace航空订票管理系统{public partial class zhuce : Form{public string Username { get; set; }public string Userpassword1 { get; set; }public string Userpassword2 { get; set; }public int flag1,flag2,flag3;string connectionString = Properties.Settings.Default.HKDPConnectionString;public zhuce(){InitializeComponent();flag1 = 1; flag2 = 1; flag3 = 1;toolTip1.InitialDelay = 0;toolTip1.ReshowDelay = 0;toolTip1.SetToolTip(textBox1,"用户名不能超过20个字符,而且只能用字母,数字!"); toolTip1.SetToolTip(textBox2,"密码不能少于6个子");toolTip1.SetToolTip(textBox3,"请再输入一次密码");errorProvider1.BlinkStyle = ErrorBlinkStyle.NeverBlink;}private void button2_Click(object sender, EventArgs e){this.Dispose();}//验证密码是否大于6个字符private void textBox2_TextChanged(object sender, EventArgs e){if (textBox2.Text.Length <=6||textBox2.Text.Length > 20){errorProvider2.SetError(textBox2, "密码非法!");flag1 = 0;}else{errorProvider2.Clear();flag1 = 1;}}//验证用户名是否大于6个字符,并且必须是数字和字母的组合private void textBox1_Enter(object sender, EventArgs e){int flag=1;for (int i=0; i < textBox1.Text.Length; i++){if (char.IsLetterOrDigit(textBox1.Text[i]) == false){flag = 0;}else{flag = 1;}}if (textBox1.Text.Length <= 6 || textBox1.Text.Length > 20 || flag == 0) {errorProvider1.SetError(textBox1, "用户名非法!");flag2 = 0;}else{errorProvider1.Clear();flag2 = 1;}}//验证确认密码是否正确private void textBox3_TextChanged(object sender, EventArgs e){if (textBox3.Text != textBox2.Text || textBox3.Text.Length <= 6){errorProvider3.SetError(textBox3, "密码非法!");flag3 = 0;}else{errorProvider3.Clear();flag3 = 1;}}/*开始添加数据*/private void button1_Click(object sender, EventArgs e){Username = textBox1.Text;Userpassword1 = textBox2.Text;using (SqlConnection conn = new SqlConnection(connectionString)){conn.Open();try{if (flag1 == 1 && flag2 == 1 && flag3 == 1&&textBox2.Text==textBox3.Text) {SqlCommand cmd = new SqlCommand();cmd.Connection = conn;SqlDataAdapter adapter = new SqlDataAdapter("select * from Usertable where Username='"+textBox1.Text+"'",conn);DataTable table=new DataTable();adapter.Fill(table);if(table.Rows.Count==0){mandText = "insert into Usertable(Username,Upassword) values(@Username,@Username)";cmd.Parameters.Clear();cmd.Parameters.Add(new SqlParameter("Username", Username)); cmd.Parameters.Add(new SqlParameter("Upassword", Userpassword1));cmd.ExecuteNonQuery();conn.Close();MessageBox.Show("恭喜您,注册成功");this.Dispose();}else{MessageBox.Show("对不起,此用户名已被注册!");textBox1.Text = textBox2.Text = textBox3.Text = "";textBox1.Focus();flag1 = 1;}}else{MessageBox.Show("很遗憾,差一步就完成了!");textBox1.Text =textBox2.Text=textBox3.Text= "";textBox1.Focus();flag1 = 1;}}catch (Exception err){MessageBox.Show(err.Message);}}}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace航空订票管理系统{public partial class Userlaunch : Form{public string UserName { get; set; }string connection = Properties.Settings.Default.HKDPConnectionString;public Userlaunch(){InitializeComponent();}//登陆开始private void button1_Click(object sender, EventArgs e){try{SqlConnection conn = new SqlConnection(connection);conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "select count(*) from Usertable where Username='" + textBox1.Text + "' and Upassword='"+textBox2.Text+"'";if ((int)cmd.ExecuteScalar() == 1){UserName = textBox1.Text;this.DialogResult = DialogResult.OK;}else{MessageBox.Show("登录名或密码错误!请重新输入");textBox1.Text = "";textBox2.Text = "";textBox1.Focus();}conn.Close();}catch(Exception err)MessageBox.Show(err.Message);}}//关闭窗体private void button2_Click(object sender, EventArgs e){this.Dispose();}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace航空订票管理系统{public partial class Admain : Form{public string AdmainName { get; set; }string connection = Properties.Settings.Default.HKDPConnectionString;public Admain(){InitializeComponent();}//释放窗体private void button2_Click(object sender, EventArgs e){this.Dispose();}//进入密码验证private void button1_Click(object sender, EventArgs e){trySqlConnection conn = new SqlConnection(connection);conn.Open();SqlCommand cmd = new SqlCommand();cmd.Connection = conn;mandText = "select count(*) from Admain where AdmainId='"+ textBox1.Text + "' and Apassword='" + textBox2.Text + "'";if ((int)cmd.ExecuteScalar() == 1){AdmainName = "亲爱的管理员" + textBox1.Text + "你好!";this.DialogResult = DialogResult.OK;}else{MessageBox.Show("登录名或密码错误!请重新输入");textBox1.Text = "";textBox2.Text = "";textBox1.Focus();}conn.Close();}catch (Exception err){MessageBox.Show(err.Message);}}}}using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.SqlClient;namespace航空订票管理系统{public partial class jipiaoyuding : Form{SqlDataAdapter adapter;DataTable table;public string username{get;set;}int Q;string connectionString = Properties.Settings.Default.HKDPConnectionString;public jipiaoyuding(){InitializeComponent();dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;}//在主窗体中指定的条件筛选出来的数据public jipiaoyuding(string a, string b, string c,int n,string q){InitializeComponent();dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;Q = n;username = q;try{SqlConnection conn = new SqlConnection(connectionString);if (c == ""){conn.Open();adapter = new SqlDataAdapter("select * from Hangban where chufadi= '" + a + "' and daodadi='" + b + "'", conn);table = new DataTable();adapter.Fill(table);dataGridView1.DataSource = table;head();conn.Close();}else{conn.Open();adapter = new SqlDataAdapter("select * from Hangban where HBid='"+ c + "'", conn);table = new DataTable();adapter.Fill(table);dataGridView1.DataSource = table;head();conn.Close();}}catch (Exception err){MessageBox.Show(err.Message);}}//释放此窗体private void button2_Click(object sender, EventArgs e){this.Dispose();}//筛选指定航班的值private void textBox1_TextChanged(object sender, EventArgs e){SqlConnection conn = new SqlConnection(connectionString);conn.Open();adapter = new SqlDataAdapter("select * from Hangban where HBid= '" + textBox1.Text + "'", conn);table = new DataTable();adapter.Fill(table);dataGridView1.DataSource = table;head();conn.Close();}//筛选符合大于一个价格private void textBox2_TextChanged(object sender, EventArgs e){try{SqlConnection conn = new SqlConnection(connectionString);conn.Open();adapter = new SqlDataAdapter("select * from Hangban whereprice>="+textBox2.Text, conn);table = new DataTable();adapter.Fill(table);dataGridView1.DataSource = table;head();conn.Close();}catch(Exception err){MessageBox.Show("好像出错了,请重新筛选"+err.Message);}}//筛选小于一个价格的值private void textBox3_TextChanged(object sender, EventArgs e){try{SqlConnection conn = new SqlConnection(connectionString);conn.Open();adapter = new SqlDataAdapter("select * from Hangban whereprice<="+textBox3.Text, conn);table = new DataTable();adapter.Fill(table);dataGridView1.DataSource = table;head();conn.Close();}catch(Exception err){MessageBox.Show("好像出错了,请重新筛选"+err.Message);}}//订票开始private void button1_Click(object sender, EventArgs e){if (MessageBox.Show("确定要订票吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes){try{if (Q == 1){SqlConnection conn = new SqlConnection(connectionString);conn.Open();SqlCommand cmd = new SqlCommand("update Hangban set syps=syps-1 where HBid='" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "'", conn);cmd.ExecuteNonQuery();int x =int.Parse(dataGridView1.SelectedRows[0].Cells[8].Value.ToString());int y =int.Parse(dataGridView1.SelectedRows[0].Cells[7].Value.ToString());string Hban =dataGridView1.SelectedRows[0].Cells[0].Value.ToString();decimal Price =decimal.Parse(dataGridView1.SelectedRows[0].Cells[6].Value.ToString());if (x == 0){cmd.Connection = conn;mandText = "update Hangban set syps=syps+1 where HBid='" + dataGridView1.SelectedRows[0].Cells[0].Value.ToString() + "'";cmd.ExecuteNonQuery();MessageBox.Show("对不起,没有票啦!请定其他航班");}else{MessageBox.Show("购买成功,你的座位号是:" + (y - x +1).ToString());xierushuju(username, y - x + 1, Hban, Price);this.Dispose();}conn.Close();}else{MessageBox.Show("对不起,你现在查询航班状态!不能预订,现在带你回登陆界面。
航空订票系统 数据结构

一、设计课题:我们设计的程序有三个,分别是:航空订票系统、24点游戏、旅游交通查询系统,为了用户的方便和更能体现C语言的模块化理念,我们把三个程序放到一个系统中去实现了。
二、设计内容1、需求分析:在完成课程设计的过程中,我们组合作为主,欧阳锦林主要负责程序设计与调试,王峰和段静缘主要负责资料收集与文档输入。
设计完成后交流了各人收获与体会。
(1)、航空订票系统:通过此系统可以实现如下功能:1) 录入航线信息每条航线信息包括航班号、飞机号、目的地、订票数、余票数共5项。
假设现在有3条航线, 目的地分别是北京, 上海, 广州, 飞机上可乘坐100人( 即初始订票数为0, 余票数为100) , 将这3条航线信息存入文件“airline.dat”中。
2) 订票业务客户信息包括姓名, 航班号, 座位号(初始为0), 假设已有3个客户信息存入文件“customer.dat”中。
有新客户订票时, 先输入客户的姓名和他提出的航班号, 查询该航线的订票情况, 若有余票, 则为客户办理订票手续, 分配给客户一个座位号, 然后将新客户的信息添加到文件“customer.dat”中, 并修改文件“airline.dat”中该航线的订票数和余票数。
若无余票, 则输出客满信息。
进一步可实现如果该航班已经无票,可以提供相关可选择航班信息。
3) 退票业务根据客户提出的航班号, 办理退票, 从文件“customer.dat”中删除该客户的信息, 并修改文件“airline.dat”中相应航线的订票数和余票数。
4) 修改航班信息:当航班信息改变可以修改航班数据文件。
5) 输出全部航线信息和全部客户信息。
6) 退出系统。
(2)、24点游戏:基本要求及步骤:1)随机产生四个1-13的数,分别代表13张牌。
2)提示玩家输入算式。
3)判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字,非法则回到1)。
4)如果玩家认为这四张牌算不出24点(如:1,1,1,1),可只输入?,程序将判断这四张牌是否能得出24点,如果能,则程序将给出算式,如果不能,说明不能,并回到1)。
数据结构课程设计(C语言版)模拟飞机订票系统文档说明

数据结构课程设计(C语言版)模拟飞机订票系统文档说明一、问题描述:试设计一个系统完成对航班的录入,查询,修改,订票,退票操作,航班与客户信息以文件的形式保存。
二、需求分析:通过此系统可以实现如下功能:1)录入:可以录入航班情况(数据可以存储在一个数据文件中)。
2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
5)修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
可以建立航班结构体,结构体成员包括航班号、起点站、终点站、飞行时间、预售票总数。
客户结构体成员包括客户姓名、证件号码、订票航班号、订票数额。
三、具体模块划分:根据需求分析,该程序可分为粗略以下七个模块:四、代码设计:该部分包括对数据结构定义的分析,各个主函数的定义分析,关键函数算法的分析。
1、数据结构的定义分析:struct Flight//定义航班结构体{char ID_flight[20]; //航班号char City_started[20]; //航班起飞城市char City_landed[20]; //航班抵达城市char Time_started[10]; //航班起飞时间char Time_landed[10]; //航班抵达时间char Price[10]; //航班票价char Discount[10]; //航班折扣int flight_num; //航班票额}airp[n];struct Guest//定义客户结构体{char name[20]; //客户姓名char ID_guest[20]; //客户证件号char flight_booking[20]; //客户所定航班int booking_sv; //客户订单号int num_booking; //客户所定机票额}gt[n];该部分定义了两个结构体数组分别用于存放航班信息、客户信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<iostream>#include<fstream>#include<iomanip>#include<string>#define M 450//定义数组的空间为不可改变的整数using namespace std;int main();//申明主函数struct flight//航班信息{char terminal[10];//终点站名char number[10];//航班号char id[10];//飞机号char date[10];//飞行日期int member;//乘员定额int rest;//余票量struct flight * next;//指向下一个节点的指针};struct custom//客户信息{char name[10];//姓名char number[10];//航班号int count;//数量int grade;//舱位等级struct custom * next;//指向下一个节点的指针};struct flight *a[M];//flight类型的指针数组struct node//二叉树节点{ struct custom * base;node *r;//左孩子node *l;//右孩子};char ch[100];int judge(char (&ch)[100]){int i,s=0,x=0;if(strlen(ch)==3){for(i=0;i<strlen(ch);i++){if(ch[i]>='0'&&ch[i]<='9')s++;}if(s==strlen(ch)){for(i=0;i<strlen(ch);i++)x=x*10+ch[i]-48;return x;}elsereturn 0;}else return 0;}int hash(unsigned long k){return k%M;}//取余unsigned long hashvalue(char *str)//将输入字符串转换成长整型数返回{int i,l;unsigned long ret=0;unsigned short *s;if (str == NULL) return(0);l=(strlen(str)+1)/2;s=(unsigned short *)str;for (i=0; i<l;i++)ret^=(s[i]<<(i&0x0f));return(ret);}void hashlist()//建立哈希表{fstream obj;flight *s=new flight,*t=new flight;int i=0,val;obj.open("d:\\fly.txt",ios::in);//打开航班信息的文件while(obj>>s->terminal>>s->number>>s->id>>s->date>>s->member>>s->rest)//提取文件信息{val=hash(hashvalue(s->terminal));while(a[hash(val)]!=NULL)//如果数组中的元素不为空,建立链表{if(!strcmp(a[hash(val)]->terminal,s->terminal)){t=a[hash(val)];while(t->next)//将节点往下移,直至最后节点{t=t->next;}t->next=s;t=s;t->next=NULL;//末尾节点的next赋空break;}else val++;//哈希表冲突,往数组后面的空位移动}if(a[hash(val)]==NULL)//如果哈希表中元素为空,赋给从文件中提取的值{a[hash(val)]=s;a[hash(val)]->next=NULL;}s=new flight;}obj.close();//关闭文件}void create(node *&root,custom *&s) //生成二分查找树{ custom *t=new custom;if(root==NULL) //当该节点为空时赋值{ root=new node;root->base=s;root->l=NULL;root->r=NULL;}else if(hash(hashvalue(s->name))>hash(hashvalue(root->base->name)))create(root->r,s); //比当前节点小,往左孩子移else if(hash(hashvalue(s->name))<hash(hashvalue(root->base->name)))create(root->l,s); //比当前节点大,往右孩子移else//等于当前节点{t=root->base;while(t->next!=NULL)//将节点往下移,直至最后节点t=t->next;t->next=s;//到尾部添加形成线性表t=s;t->next=NULL;//末尾节点的next赋空}}void print(node *&root,char *&name)//输出要查找的值{custom *t=new custom;if(root!=NULL)//如果节点不为空{if(root->l!=NULL && hash(hashvalue(name))<hash(hashvalue(root->base->name)))print(root->l,name);//比当前节点小else if(root->r!=NULL && hash(hashvalue(name))>hash(hashvalue(root->base->name))) print(root->r,name);//比当前节点大else if(hash(hashvalue(name))==hash(hashvalue(root->base->name)))//等于当前节点{t=root->base;cout<<setiosflags(ios::left)<<setw(10)<<"客户姓名"<<setw(10)<<"航班号"<<setw(10)<< "票量"<<setw(10)<<"舱位等级"<<endl;//标明输出信息while(t!=NULL)//输出找到的线性表{cout<<setiosflags(ios::left)<<setw(10)<<t->name<<setw(10)<<t->number<<setw(10)<< t->count<<setw(10)<<t->grade<<endl;t=t->next;}delete t;}else cout<<"无该客户信息!"<<endl;//找不到该客户信息}}struct custom* get(node *&root,char *&name){if(root!=NULL)//如果节点不为空{if(root->l!=NULL && hash(hashvalue(name))<hash(hashvalue(root->base->name)))get(root->l,name);//比当前节点小else if(root->r!=NULL && hash(hashvalue(name))>hash(hashvalue(root->base->name))) get(root->r,name);//比当前节点大else if(hash(hashvalue(name))==hash(hashvalue(root->base->name)))//等于当前节点return root->base;else {cout<<"无该客户信息!"<<endl;return NULL;}//找不到该客户信息}return NULL;}struct node* intseart(char* &name,int k)// 打开要查询的文件{node *root=NULL;custom * s=new custom;if(k==1){ifstream infile("d:\\custom.txt",ios::in);if(!infile)//判断fly文件是否存在return NULL;}else if(k==2){ifstream infile1("d:\\wait.txt",ios::in);if(!infile1)//判断fly文件是否存在return NULL;}fstream obj;if(k==1)obj.open("d:\\custom.txt",ios::in); //打开已定票客户文件else if(k==2) obj.open("d:\\wait.txt",ios::in);//打开候补客户文件while(obj>>s->name>>s->number>>s->count>>s->grade)s->next=NULL,create(root,s),s=new custom;//将文件内容放入二分查找树obj.close();return root;}struct flight* head()//将航班信息文件内容放到线性表,并返回头节点{ifstream obj3;obj3.open("d:\\fly.txt",ios::in);flight *s,*p,*h;h=new flight;h=NULL;s=new flight;p=new flight;while(obj3>>s->terminal>>s->number>>s->id>>s->date>>s->member>>s->rest){if(h==NULL)//建立线性表h=s;else p->next=s;p=s;s=new flight;}p->next=NULL;//末尾节点的next赋空delete s;//删除中间变量,释放空间obj3.close();return h;//返回头节点}struct custom* first(int n)//将客户信息文件内容放到顺序表,并返回头节点{ifstream obj3;if(n==1)obj3.open("d:\\custom.txt",ios::in);//打开订票客户信息文件else obj3.open("d:\\wait.txt",ios::in);//打开候补客户信息文件custom *s,*p,*h;h=new custom;h=NULL;s=new custom;p=new custom;while(obj3>>s->name>>s->number>>s->count>>s->grade){if(h==NULL)//建立线性表h=s;else p->next=s;p=s;//添加节点给线性表s=new custom;//给s分配新的空间}p->next=NULL;delete s;obj3.close();return h;}void search()//根据终点站名查找航班信息{hashlist();int m=0;string s1;flight *t=new flight;char ter[10];int choice=1,val;while(choice){cout<<"请输入终点站名:";cin>>ter;val=hash(hashvalue(ter));while(a[val]!=NULL && strcmp(a[val]->terminal,ter)) val++;//如果终点站名对应的取余相等,往数组后面移动查询if(a[hash(val)]==NULL) cout<<"没有到该终点站的航班信息!"<<endl;//没有找到航班信息else{t=a[hash(val)];cout<<setiosflags(ios::left)<<setw(10)<<"终点站名"<<setw(10)<<"航班号"<<setw(10)<<//标明输出信息"飞机号"<<setw(10)<<"飞行日期"<<setw(10)<<"成员定额"<<setw(10)<<"余票量"<<endl;while(t!=NULL){cout<<setiosflags(ios::left)<<setw(10)<<t->terminal<<setw(10)<<t->number<<setw(10)<<t->id<< setw(10)<<t->date<<setw(10)<<t->member<<setw(10)<<t->rest<<endl;//将查询到的信息输出t=t->next;}}m=0;while(!m)//选择是否继续查询{cout<<"是否继续查询(1:是,0:否)";cin>>s1;//选择是否继续查询if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") choice=0,m=1;else if(s1=="1") choice=1,m=1;}}for(int i=0;i<M;i++)a[i]=NULL;//清空哈希表system("cls");//清屏main();//调用主函数,返回菜单栏}void findcustom()//查找客户信息{int choice,z=1;int m=0;string s1;char *name;node *find=new node;name=new char[10];system("cls");//清屏cout<<"****************************"<<'\n'<<"选择菜单"<<'\n'<<"1-->查询已经订票的客户信息"<<'\n'<<"2-->查询候补客户信息"<<'\n'<<"****************************"<<'\n';while(z)//选择执行{m=0;while(!m){cout<<"请选择:";cin>>s1;if(s1!="2"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="1") choice=1,m=1;else if(s1=="2") choice=2,m=1;}if(choice==1){cout<<"请输入客户姓名:";cin>>name;find=intseart(name,choice);//调用查找函数,查询已订票客户信息if(find!=NULL)print(find,name);else cout<<"文件不存在,无人订票,无需再查!"<<endl;}else if(choice==2){cout<<"请输入客户姓名:";cin>>name;find=intseart(name,choice);//调用查找函数,查询候补客户信息if(find!=NULL)print(find,name);else cout<<"文件不存在,无人候补,无需再查!"<<endl;}m=0;while(!m)//选择是否继续查询{cout<<"是否继续查询(1:是,0:否)";cin>>s1;//选择是否继续查询if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") z=0,m=1;else if(s1=="1") z=1,m=1;}}system("cls");//清屏main();//返回主菜单}void book()//订票{int m=0;string s1;custom *s=new custom,*h=new custom,*h1=new custom,*t=new custom,*t1=new custom;flight *mem;h=NULL,h1=NULL;//头结点赋空int choice,x=0,y=0,amount,v,choice1;int z=1;while(z){v=1;while(v){mem=head();int u=0;cout<<"请输入航班号:";cin>>s->number;//根据输入的航班号查询while(mem&&!u){if(!strcmp(s->number,mem->number)) u=1,v=0;//判断是否找到该航班if(u==0)mem=mem->next;}if(u==0){cout<<"对不起,该航线末找到!"<<endl;//未找到该航班m=0;while(!m)//选择是否继续退票{cout<<"是否继续订票(1:是,0:否)";cin>>s1;//选择是否继续退票if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") choice1=0,m=1;else if(s1=="1") choice1=1,m=1;}//选择是否继续订票v=1;z=0;}}int i,df=0;m=0;while(!m){cout<<"订票数量:";cin>>ch;if(strlen(ch)<=3){for(i=0;i<strlen(ch);i++){if(ch[i]>='0'&&ch[i]<='9')df++;}if(df==strlen(ch)){for(i=0;i<strlen(ch);i++)m=m*10+ch[i]-48;}elsem=0;}else m=0;amount=m;if(m==0)cout<<"输入错误!必须输入不超过三位数的整数!"<<endl;}if(amount>mem->member)cout<<"订票数量超过乘员定额!"<<endl;//订票数量超过乘员定额else{if(amount<=mem->rest)//满足订票条件{x=1;s->count=amount;cout<<"客户名单:";cin>>s->name;m=0;while(!m){cout<<"舱位等级(1,2,3):";cin>>s1;if(s1!="1"&& s1!="2" && s1!="3") cout<<"错误!只能输入或或"<<endl;else if(s1=="1") s->grade=1,m=1;else if(s1=="2") s->grade=2,m=1;else if(s1=="3") s->grade=3,m=1;}if(h==NULL) h=s;//将订票的客户信息放到线性表里暂时储存else t->next=s;t=s;s=new custom;}else{m=0;while(!m)//选择是否继续订票{cout<<"余票不足,是否排队等候(1:是,0:否)";cin>>s1;if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") choice=0,m=1;else if(s1=="1") choice=1,m=1;}//选择是否排队等候if(choice==1){y=1;s->count=amount;cout<<"客户名单:";cin>>s->name;m=0;while(!m){cout<<"舱位等级(1,2,3):";cin>>s1;if(s1!="1"&& s1!="2" && s1!="3") cout<<"错误!只能输入或或"<<endl;else if(s1=="1") s->grade=1,m=1;else if(s1=="2") s->grade=2,m=1;else if(s1=="3") s->grade=3,m=1;}if(h1==NULL) h1=s;//把排队客户的信息放到线性表里暂时储存else t1->next=s;t1=s;s=new custom;}}}m=0;while(!m)//选择是否继续订票{cout<<"是否继续订票(1:是,0:否)";cin>>s1;if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") z=0,m=1;else if(s1=="1") z=1,m=1;}if(z==0){t->next=NULL;t1->next=NULL;}//将尾节点的next赋空}if(x==1)//判断是否有人订票成功{ofstream obj5;ifstream obj;obj5.open("d:\\custom.txt",ios::out|ios::app);flight *n=new flight;custom *p=new custom,*s=new custom;p=h;while(p)//将订票信息添加的客户信息文件中{obj5<<p->name<<'\t'<<p->number<<'\t'<<p->count<<'\t'<<p->grade<<'\n';p=p->next;}obj5.close();n=head();ofstream message;message.open("d:\\fly.txt",ios::out);while(n)//如果有人订票成功,修改航班信息的余票量{p=new custom;p=h;while(p){if(!strcmp(p->number,n->number))//找到被订票的航班n->rest-=p->count;p=p->next;}message<<n->terminal<<'\t'<<n->number<<'\t'<<n->id<<'\t'<<n->date<<'\t'<<n->member<<'\t'<<n->rest<<'\n';n=n->next;//覆盖原来的内容,把线性表中内容存入文件}message.close();}if(y==1)//如果有人候补,把信息添加到候补客户信息文件中{ofstream obj6;obj6.open("d:\\wait.txt",ios::out|ios::app);while(h1){obj6<<h1->name<<'\t'<<h1->number<<'\t'<<h1->count<<'\t'<<h1->grade<<'\n';h1=h1->next;}obj6.close();}delete s;system("cls");//清屏main();//返回主菜单}void quit()//退票{char *name;int m=0;string s1;char number[10];name=new char[10];custom *t=new custom;node *my=new node;int amount=0;int z=1,y=1;while(z){cout<<"请输入姓名:";cin>>name;cout<<"航班号:";cin>>number;my=intseart(name,1);//调用二分查找树生成函数t=get(my,name);//用二分查找树找到该客户信息while(t){if(!strcmp(t->number,number)) break;//判断航班号是否相等t=t->next;}if(t!=NULL){fstream obj;custom *h=first(1);//调用函数返回头节点obj.open("d:\\custom.txt",ios::out);while(h){if(!strcmp(h->name,name) && !strcmp(h->number,number))//根据输入姓名和航班号找到要退票的客户信息amount+=h->count;else obj<<h->name<<'\t'<<h->number<<'\t'<<h->count<<'\t'<<h->grade<<'\n';h=h->next;//节点往下移动}obj.close();flight *n,*m;custom *p=first(2),*q;//提取等候客户文件信息头结点q=p;int shu;n=head();//提取航班信息头结点m=n;while(n){if(!strcmp(number,n->number)){shu=(amount + n->rest);while(p){if(!strcmp(p->number,number))//在航班信息找找到客户退掉的航班{if(shu>=p->count){shu-=p->count;n->rest=shu;cout<<"航班号为"<<p->number<<"的候补乘客已订票成功"<<endl;break;}// 所退票恰好满足候补乘客需求else {y=0;n->rest=shu;cout<<"所退票无法满足等候客户需求"<<endl;}// 所退票不满足候补乘客需求}p=p->next;}break;}n=n->next;}if(y){obj.open("d:\\wait.txt",ios::out);while(q)// 删除订票成功的等候客户的信息{if(strcmp(q->name,name)&&strcmp(q->number,number))obj<<q->name<<'\t'<<q->number<<'\t'<<q->count<<'\t'<<q->grade<<'\n';q=q->next;}obj.close();fstream objx;//添加等候客户的信息到定好票的客户信息文件中objx.open("d:\\custom.txt",ios::out|ios::app);objx<<p->name<<'\t'<<p->number<<'\t'<<p->count<<'\t'<<p->grade<<'\n';objx.close();}fstream object;object.open("d:\\fly.txt",ios::out);while(m)//根据上面情况修改航班信息{if(!strcmp(m->number,n->number))object<<n->terminal<<'\t'<<n->number<<'\t'<<n->id<<'\t'<<n->date<<'\t'<<n->member<<'\t'<<n-> rest<<'\n';elseobject<<m->terminal<<'\t'<<m->number<<'\t'<<m->id<<'\t'<<m->date<<'\t'<<m->member<<'\t'<<m-> rest<<'\n';m=m->next;}object.close();}m=0;while(!m)//选择是否继续退票{cout<<"是否继续退票(1:是,0:否)";cin>>s1;//选择是否继续退票if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") z=0,m=1;else if(s1=="1") z=1,m=1;}}system("cls");main();}void add(){flight *head;string s1;flight *p=new flight;flight *s,*n;head=p;int pan,jue=1;fstream obj1;obj1.open("d:\\fly.txt",ios::app|ios::out);//以写的方式打开,并可以追加cout<<"请输入终点站名:";cin>>p->terminal;// 根据提示输入信息cout<<"航班号:";cin>>p->number;cout<<"飞机号:";cin>>p->id;int m=0;while(!m){cout<<"飞行日(星期几):";cin>>p->date;if(hashvalue(p->date)==hashvalue("星期一")||hashvalue(p->date)==hashvalue("星期二")|| hashvalue(p->date)==hashvalue("星期三")||hashvalue(p->date)==hashvalue("星期四")|| hashvalue(p->date)==hashvalue("星期五")||hashvalue(p->date)==hashvalue("星期六")|| hashvalue(p->date)==hashvalue("星期日"))m=1;else cout<<"错误!必须输入汉字(星期一到星期日)"<<endl;}m=0;while(!m){cout<<"乘员定额:";cin>>ch;p->member=judge(ch);m=p->member;if(m==0)cout<<"输入错误!必须输入三位数的整数!"<<endl;}m=0;while(!m||m>p->member){cout<<"余票量:";cin>>ch;p->rest=judge(ch);m=p->rest;if(m==0||m>p->member)cout<<"输入错误!必须输入三位数的整数并且小于等于乘员定额!"<<endl;}while(p!=NULL){m=0;while(!m){cout<<"是否继续录入(1:是,0:否)";cin>>s1;//选择是否继续录入if(s1!="0"&& s1!="1") cout<<"错误!只能输入或"<<endl;else if(s1=="0") pan=0,m=1;else if(s1=="1") pan=1,m=1;}if(pan==1){s=new flight;cout<<"请输入终点站名:";cin>>s->terminal;// 根据提示输入信息cout<<"航班号:";cin>>s->number;cout<<"飞机号:";cin>>s->id;m=0;while(!m){cout<<"飞行日(星期几):";cin>>s->date;if(hashvalue(s->date)==hashvalue("星期一")||hashvalue(s->date)==hashvalue("星期二")||hashvalue(s->date)==hashvalue("星期三")||hashvalue(s->date)==hashvalue("星期四")||hashvalue(s->date)==hashvalue("星期五")||hashvalue(s->date)==hashvalue("星期六")||hashvalue(s->date)==hashvalue("星期日"))m=1;else cout<<"错误!必须输入汉字(星期一到星期日)"<<endl;}m=0;while(!m){cout<<"乘员定额:";cin>>ch;s->member=judge(ch);m=s->member;if(m==0)cout<<"输入错误!必须输入三位数的整数!"<<endl;}m=0;while(!m||m>s->member){cout<<"余票量:";cin>>ch;s->rest=judge(ch);m=s->rest;if(m==0||m>s->member)cout<<"输入错误!必须输入三位数的整数并且小于等于乘员定额!"<<endl;}p->next=s;p=s;p->next=NULL;}//将添加的航班信息放到顺序表里else{p->next=NULL;p=p->next;}}n=head;while(n)//将添加的航班信息追加到航班信息文件中{obj1<<n->terminal<<'\t'<<n->number<<'\t'<<n->id<<'\t'<<n->date<<'\t'<<n->member<<'\t'<<n->rest<<'\n';n=n->next;}obj1.close();system("cls");// 清屏cout<<"录入成功"<<endl;main();//返回主菜单}void exit()//退出程序{system("cls");cout<<"*****成功退出,欢迎再次使用!*****"<<endl;}void menu()//生成菜单栏{cout<<"***********************************"<<'\n'<<"选择菜单"<<'\n'<<"0-->退出系统"<<'\n'<<"1-->查询航班信息"<<'\n'<<"2-->订票"<<'\n'<<"3-->退票"<<'\n'<<"4-->添加航班信息"<<'\n'<<"5-->查找客户信息"<<'\n'<<"***********************************"<<endl;}int main(){ifstream infile("d:\\fly.txt",ios::in);if(!infile)//判断fly文件是否存在{fstream message;message.open("d:\\fly.txt",ios::out|ios::app);message//如果不存在fly文件,录入默认航班信息<<"北京"<<'\t'<<"CB1320"<<'\t'<<"A2319"<<'\t'<<"星期三"<<'\t'<<200<<'\t'<<200<<'\n' <<"上海"<<'\t'<<"CS4323"<<'\t'<<"A7686"<<'\t'<<"星期一"<<'\t'<<150<<'\t'<<150<<'\n' <<"香港"<<'\t'<<"CX6454"<<'\t'<<"A4376"<<'\t'<<"星期日"<<'\t'<<300<<'\t'<<300<<'\n' <<"澳门"<<'\t'<<"CA5434"<<'\t'<<"B7565"<<'\t'<<"星期六"<<'\t'<<250<<'\t'<<250<<'\n' <<"北京"<<'\t'<<"CB4334"<<'\t'<<"A2534"<<'\t'<<"星期四"<<'\t'<<250<<'\t'<<250<<'\n' <<"北京"<<'\t'<<"CB6566"<<'\t'<<"A4522"<<'\t'<<"星期二"<<'\t'<<200<<'\t'<<200<<'\n' <<"上海"<<'\t'<<"CS8650"<<'\t'<<"B5745"<<'\t'<<"星期四"<<'\t'<<150<<'\t'<<150<<'\n' <<"香港"<<'\t'<<"CX4344"<<'\t'<<"A2455"<<'\t'<<"星期六"<<'\t'<<300<<'\t'<<300<<'\n' <<"上海"<<'\t'<<"CS5434"<<'\t'<<"A7525"<<'\t'<<"星期五"<<'\t'<<250<<'\t'<<250<<'\n' <<"北京"<<'\t'<<"CB4334"<<'\t'<<"B6245"<<'\t'<<"星期一"<<'\t'<<250<<'\t'<<250<<'\n' <<"青岛"<<'\t'<<"CQ7653"<<'\t'<<"A8356"<<'\t'<<"星期二"<<'\t'<<200<<'\t'<<200<<'\n' <<"大连"<<'\t'<<"CL4254"<<'\t'<<"B8653"<<'\t'<<"星期四"<<'\t'<<150<<'\t'<<150<<'\n' <<"深圳"<<'\t'<<"CS8572"<<'\t'<<"A9365"<<'\t'<<"星期六"<<'\t'<<300<<'\t'<<300<<'\n' <<"兰州"<<'\t'<<"CL9757"<<'\t'<<"B2468"<<'\t'<<"星期三"<<'\t'<<250<<'\t'<<250<<'\n' <<"武汉"<<'\t'<<"CW2768"<<'\t'<<"A9753"<<'\t'<<"星期五"<<'\t'<<250<<'\t'<<250<<'\n';message.close();}string s1;int choice=6;menu();// 调用生成菜单函数while(choice==6){cout<<"请选择:";cin>>s1;if(s1=="0") choice=0;else if(s1=="1") choice=1;else if(s1=="2") choice=2;else if(s1=="3") choice=3;else if(s1=="4") choice=4;else if(s1=="5") choice=5;else choice=6,cout<<"输入错误!"<<endl;}switch(choice)//根据提示,选择需要执行的功能{case 0:exit();break;//退出系统case 1:search();break;//查找航班信息case 2:book();break;//订票case 3:quit();break;//退票case 4:add();break;//添加航班信息case 5:findcustom();break;//查找客户信息}}。