数据结构程序设计飞机订票系统

合集下载

数据结构程序设计机票管理系统

数据结构程序设计机票管理系统

数据结构程序设计机票管理系统机票管理系统是一种用于记录和管理机票信息的软件系统。

它可以帮助旅行代理人或航空公司方便地管理和处理所有相关的机票信息,包括航班信息、乘客信息、座位预订等。

本文将介绍机票管理系统的设计和实现。

首先,我们需要定义几个核心的数据结构来表示机票管理系统中的各种对象。

这些数据结构包括:1.航班信息:包括航班号、起飞时间、到达时间、出发地和目的地等信息。

3.座位信息:包括座位号、票价、座位类型等信息。

接下来,我们需要设计一个合适的数据结构来存储和管理机票信息。

可以使用数据库来存储这些信息,使用关系数据库管理系统(如MySQL)或非关系数据库(如MongoDB)来存储和查询数据。

我们可以创建几个数据库表来存储不同类型的数据。

例如,可以创建一个航班信息表、乘客信息表和座位信息表。

每个表都有相应的字段来保存具体的信息。

对于程序设计方面,可以使用面向对象的编程语言来实现机票管理系统。

我们可以创建几个类来表示航班、乘客和座位等对象。

每个类都有相应的属性和方法来对数据进行操作。

例如,可以创建一个Flight类来表示航班信息。

Flight类可以包含航班号、起飞时间、到达时间、出发地和目的地等属性。

它还可以包含方法来查询和更新航班信息。

类似地,可以创建Passenger类来表示乘客信息,Seat类来表示座位信息。

这些类可以与数据库表中的数据进行对应,可以为每个类创建对应的表和字段。

在机票管理系统中,用户可以使用不同的功能来查询和管理机票信息。

1.查询航班信息:用户可以根据航班号、起飞时间和目的地等条件来查询航班信息。

2.预订座位:用户可以根据航班信息选择座位,并填写乘客信息进行预订。

3.取消座位:用户可以取消已预订的座位,并将座位标记为可用状态。

4.修改航班信息:管理员可以修改航班的起飞时间、到达时间和票价等信息。

为了实现这些功能,我们可以在程序中定义相应的逻辑和用户界面。

用户可以通过命令行界面或图形界面与机票管理系统进行交互。

数据结构课程设计航空订票系统

数据结构课程设计航空订票系统

目录总体设计 (2)概要设计 (2)详细设计 (3)调试分析 (7)测试数据及截图 (7)时间复杂度分析 (11)问题思考 (11)算法的改进设想 (11)课设总结体会 (11)附录 (13)程序说明 (13)源代码 (13)主要参考文献 (26)总体设计通过此系统可以实现如下功能:1).录入:可以录入航班情况(数据存储在一个数据文件中)2).查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3).订票:(订票情况存在一个数据文件中)可以订票,如果该航班已经无票,可以提供相关可选择航班;4).退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

5).修改航班信息:当航班信息改变可以修改航班数据文件概要设计每个模块的算法设计说明如下:(1)录入模块:查找单链表的链尾,在链头插入一个“航班信息”的新结点。

(2)浏览模块:顺着单链表输出航班信息。

(3)修改模块:输入密码,确认是否有权限对航班信息进行修改,有则进行修改,否则不能修改。

提供两种修改方式:添加航班和对已有的航班信息进行改动(修改和删除),1添加航线,0对已有的航班信息进行改动(修改和删除)。

对已有的航班信息进行改动(修改和删除):顺着单链表查找,若找到则进行相关操作。

(4)查询模块:提供两种查方式:按航号和起飞抵达城市查询,0代表按航号查询,1代表按起飞抵达城市查询。

顺着单链表查找,如果与航班号(起飞抵达城市)一致,输出相关信息并询问乘客是否要订票,若订进入订票模块;否则,查询不成功。

(5)订票模块:查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功;否则查找这个月此乘客起飞城市和降落城市的有空位航班,供乘客选择,若有则订票,若无则订票不成功并把此乘客的信息录入此航班等候订票队列中,退出订票。

数据结构课程设计飞机订票系统

数据结构课程设计飞机订票系统

课程设计(论文)课程设计(论文)题目:飞机订票系统院(系):专业班级:姓名:学号:指导教师:2012年9 月18日课程设计(论文)任务书专业班级:学生姓名:指导教师(签名):一、课程设计(论文)题目飞机订票系统:设计航班信息,订票信息。

二、本次课程设计(论文)应达到的目的数据结构是实践性很强的课程。

课程设计是加强学生实践能力的一个强有力手段。

课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。

严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用。

本题目要达到目的:熟练掌握线性表的基本操作在两种存储结构上的实现。

三、本次课程设计(论文)任务的主要内容和要求(包括原始数据、技术参数、设计要求等)输入数据:航班号;起降时间;抵达城市;票价;票价折扣;1. 录入航班情况(数据结构、具体数据自定);2. 输入航班号,查询某个航线的情况;3. 输入起飞抵达城市,查询飞机航班情况;4. 客户姓名,证件号,订票数量,航班情况,订单编号(证件号唯一);5. 订票:如果该航班已经无票,可以提供相关可选择航班(结构自己设定);6. 退票:退票后修改相关数据文件;7. 修改航班信息:当航班信息改变可以修改航班数据文件。

四、应收集的资料及主要参考文献:1.数据结构与算法分析(C++版)(第二版)影印版 2005.72.数据结构与算法,科学出版社,2005.08;赵文静等编著3.数据结构-C++语言描述,西安交通大学出版社,1999.01,赵文静编著4.严蔚敏等著,《数据结构》,清华大学出版社,20035.冯博琴等编著,《软件技术基础》(修改版),西安交通大学出版社,1997五、审核批准意见教研室主任(签字)摘要随着全球经济和信息的发展,人们选择乘坐飞机外出的需求日益增加。

随着航空客运业务越来越发达,加上网络日益普及,所以良好的飞机场订票系统不仅方便人们订购飞机票,而且减缓了购票点的压力,具有一定的社会效益。

航空订票系统 数据结构

航空订票系统      数据结构

一、设计课题:我们设计的程序有三个,分别是:航空订票系统、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)。

数据结构课程设计(航空客运订票系统)

数据结构课程设计(航空客运订票系统)

(大学计算机科学与信息学院贡献)#include <iostream.h> #include <process.h> #include <string.h>#include <conio.h> #include <stdio.h> #include <iomanip.h> #define MAX 60 #define NULL 0typedef struct Customer {char Name[8];int Amount;char Rank;int IDinfor;struct Customer *Next; }Customer;/* 乘客信息*//**//* 定票数*//* 舱位等级*//* 个人信息*//* 指向下一乘客结点*//* 航线信息*//* 终点站名*//* 航班号*//*飞机号*//* 飞行周日*//* 乘员定额*//* 剩余票数*//* 舱位等级的价格*//* 该航班的已定票乘客*//* 该航班的候补乘客*//* 指示下一航线结点*//* 所有航线的定票乘客总数*/ /* 航线头指针*//* 航线结点指针*//* 各条航线乘客结点指针*/typedef struct Flight{char Des_Name[10];char Flight_No[6]; char Plane_No[6];int Week_Day;int Customer_Amount;int Free_Amount;int Price[3];Customer *CustName;Customer *ReplName;struct Flight *Next;}Flight,*PFlight;int Customer_Count=0; Flight *Head;Flight *p2;Customer *Custp1[MAX];Customer *Replp1[MAX]; int IsEmpty=1;int IsReplace=1;Customer *prior;int shouldsave=0;/* 各条航线候补结点指针*//* 是否有定票乘客*//* 是否有候补乘客*//* 满足要求的定票乘客的前结点,以作删除操作*//* ------------- 询问是否继续的函数----- */char Continue(){char answer;while(1){printf("\n\t 您是否想继续(Y/N)?");scanf("%s",&answer);system("cls");if(answer=='y'||answer=='Y')return 'y';else if(answer=='n'||answer=='N')return 'n';elseprintf("\n\t 输入有误,请重新输入!");}}/* -------------- 操作出错函数------ */void ErrorMess(){printf("\n\t 对不起,您的操作有误!");getch();}/* ------------- 系统退出函数------- */int ExitSystem(){char answer;printf("\n\t 您是否想要退出系统(Y/N)?");scanf("%s",&answer);if(answer=='y'||answer=='Y')return 1;elsereturn 0;/* ------------- 航线查找函数 ----- *//*Find_Line() 为重载函数*/int Find_Line(PFlight L,char *key)/* 核对航线是否唯一*/{int flag=0; /* 该标志位0 表示未找到相关信息,反之即找到,以下标志位同理*/ Flight *p1;p1=L; /* 赋航线首地址*/if(p1==p2) /* 首航线不作比较*/return flag;while(p1!=p2&&p1!=NULL) /* 本航班号不纳入比较围,否则会一直提示航线不唯一*/ { if(strcmp(p1->Flight_No,key)==0){flag=1;break;} p1=p1->Next;/* 指向下一航班结点*/} return flag;}int Find_Line(PFlight L,char *key,PFlight &p2,int &Flight_No)/* 航线查找函数*/{int flag=0; /*该标志位0 表示未找到相关信息,反之即找到*/Flight *p1;p1=L; /* 赋航线首结点*/ while(p1!=NULL){ if(strcmp(p1->Flight_No,key)==0)/* 不包括当前航线*/{flag=1;p2=p1;break;}p1=p1->Next; /* 指向下一航班结点*/if(p1!=NULL) /* 遇结束符不作统计围*/ Flight_No++;}return flag;}/* --------------- 航班查找函数 ------ */void Line_search(){Flight *p1;p1=Head;char Desname[50];// 查询终点站航班关键字if(Head==NULL){printf("\n\t 没有到达您想要的终点站的航班!");getch();return;}printf("\n\t 请输入终点站名:");scanf("%s",Desname);printf("\n\t 您所查询的航班的信息:\n");printf("\n _____________________________________________________________________ ______ \n");while(p1!=NULL){if(strcmp(p1->Des_Name,Desname)==0){printf("Des_Name Flight_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price 3_Price\n");printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->P lane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);}p1=p1->Next;}printf("\n _____________________________________________________________________ ______ \n");Continue();}/* --------------- 航线添加函数 ------ */void Line_Add(){Flight *p1; /* 建立临时航线结点*/while(1){if(Head==NULL)/* 航线为空*/{ p1=p2=new Flight; /* 建立首个航线*/Head=p2;}else{ p1=new Flight; /* 建立航线结点*/ p2->Next=p1; /* 前一航线结点指向当前航班结点*/ p2=p1; /* 保留当前航班结点地址*/}printf("\n\t 添加新的航线!\n"); printf("\n\t 请输入终点站名:");scanf("%s",&p2->Des_Name);while(1) /* 数据合法性检验*/{ printf("\n\t 请输入唯一的航班号:"); scanf("%s",&p2->Flight_No);if(Find_Line(Head,p2->Flight_No)) /* 存在航班号*/printf("\n\t 航班号已经存在!\n");else break;}printf("\n\t 请输入飞机号:"); scanf("%s",&p2->Plane_No);while(1){printf("\n\t 请输入航班日期(请输入1—7) :"); scanf("%d",&p2->Week_Day);if(p2->Week_Day<1||p2->Week_Day>7)printf("\n\t 输入日期有误,请重新输入!\n"); elsebreak;}printf("\n\t 请输入座位数量:"); scanf("%d",&p2->Customer_Amount);printf("\n\t 请输入头等舱的价钱:"); scanf("%d",&p2->Price[0]);printf("\n\t 请输入二等舱的价钱:"); scanf("%d",&p2->Price[1]);printf("\n\t 请输入三等舱的价钱:");scanf("%d",&p2->Price[2]);/* 该航线定票乘客头指针为空*//* 初始候补为空*//* 航线的下一结点为空*/ p2->Free_Amount=p2->Customer_Amount; /* 剩余票数与乘员定额相同*/p2->CustName=NULL;p2->ReplName=NULL;shouldsave=1; if(Continue()=='n') {p2->Next=NULL; return;}}}/* ----------- 航线是否为空函数----- */int Empty_Flight(){if(Head==NULL){system("cls");printf("\n\t 对不起,航线不存在,按任意键返回!"); getch();return 1;}elsereturn 0;}/* ----------- 航线查看函数-------- */void Line_See(){system("cls");Flight *p1;p1=Head;if(Empty_Flight()) /* 航班线为空*/return;printf("\n\n\t 航班信息:\n");printf("\n _____________________________________________________________________ ____ \n");printf("Des_Name Flight_No Plane_No Week_Day Cust_Num Free_Num 1_Price 2_Price3_Price\n");while(p1!=NULL){printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->P lane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2]);p1=p1->Next;}printf("\n _____________________________________________________________________ ______ \n");printf("\n\t 按任意键返回!\n");getch();}/* ------------ 航线管理菜单----- */void LinemanageMenu(){char c;system("cls");while(1){printf("\n\t\t 航线管理菜单:");printf("\n _____________________________________________________________________ ______ \n\n");printf("\t1. 添加新的航线\n");printf("\t2. 查询航线\n");printf("\t3. 查看航线\n");printf("\t4. 返回主菜单\n");printf("\n _____________________________________________________________________ ______ \n");printf("\t 请选择您想要的服务:");scanf("%s",&c);switch(c){case '1':Line_Add();break;case '2':Line_search();break;case '3':Line_See();break;case '4':return;}}/* -------------- 订票办理函数 ------- */ void bookingMenu(){int Ticket_Count,IDinfor,i,flag=0; /* 记录满足条件的航线的定票结点 */ /* 记下满足条件的航线结点地址 */ /* 临时性定票乘员结点 */ /* 临时性候补乘员结点 */ /* 用户输入的航班数据 *//* 候补乘客标志位 *//* 是否执行候补操作标志位 */ /* 航班线为空 */return; while(1){printf("\n\t 现在您可以订票 !");flag=0; /* 标志位清零以重新作出判断 */ tag=0;printf("\n\t 请输入航线号 :"); scanf("%s",&answer);if(Find_Line(Head,answer,p1,Flight_No)) 操作 */{while(1) /* 数据合法性检验 */ {printf("\n\t 请输入您想要订购的票的数量 :"); scanf("%d",&Ticket_Count); if(Ticket_Count==0){printf("\n\t 请再次输入飞机号 :\n"); getch();}else break;int Flight_No=0; Flight *p1; Customer *p2; Customer *p3; char answer[7]; char temp; char c; int tag=0; int IsRepl=0; if(Empty_Flight())/* 调用航线查找函数,若存在则进行以下if(p1->Free_Amount>=Ticket_Count){Customer_Count++; flag=1; IsRepl=1;if(p1->CustName==NULL){Custp1[Flight_No]=p2=new Customer;p1->CustName=Custp1[Flight_No];{p2=new Customer;Custp1[Flight_No]->Next=p2; Custp1[Flight_No]=p2;}IsEmpty=0; /* 定票乘员不为空 */ Custp1[Flight_No]->Amount=Ticket_Count;/* 订票数 */IDinfor=p1->Customer_Amount-p1->Free_Amount+1; /* 算出座位号 */ Custp1[Flight_No]->IDinfor=IDinfor; /* 赋座位号 */ p1->Free_Amount-=Ticket_Count; /* 减去定票数 */printf("\n\t 请输入您的 :");scanf("%s",&Custp1[Flight_No]->Name); while(1) /* 数据合法性检验 */{printf("\n\t 请输入舱位等级 :"); scanf("%s",&Custp1[Flight_No]->Rank);if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3')) {printf("\n\t 输入有误,请重新输入 !"); getch();}elsebreak;}printf("\n\t 请输入您的 ID 信息 :"); scanf("%d",&Custp1[Flight_No]->IDinfor); if(Ticket_Count<10)/* 为显示规整,作相应处理 */printf("\n\t"); elseprintf("\n\t");printf("\n\t 恭喜您订票成功! \n"); for(i=1;i<=Ticket_Count;i++) /* 打印座位号 */ {}else/* 建立该航线的后续乘客结点*//* 定票乘客总数增 1*/ /* 表明进入了订票实际操作 */ /* 定票量满足,无需进入候补操作 *//* 首个定票乘客,并记录相关属/* 建立该航线的首位乘客结点 */printf("\n\t 您所预定的座位号是if(i%10==0) printf("\n\t");}printf("\n");}/* 满足定票数 */else if(p1->Free_Amount==0){printf("\n\t 对不起,票已售完 !\n"); IsRepl=0;}else{printf("\n\t 对不起,当前没有多余的票 !\n"); IsRepl=0;}if(!IsRepl){printf("\n\t 您是否想成为候补乘客 (Y/N)?"); scanf("%s",&temp); if(temp=='y'||temp=='Y')/* 以下为候补操作 */{if(p1->ReplName==NULL) {Replp1[Flight_No]=p3=new Customer;结点 */ p1->ReplName=Replp1[Flight_No];}else{p3=new Customer;Replp1[Flight_No]->Next=p3; Replp1[Flight_No]=p3;}IsReplace=0; /* 候补乘客不为空 */ tag=1; /* 已选择列入候补乘客*/Replp1[Flight_No]->Amount=Ticket_Count; printf("\n\t 请输入您的 :");scanf("%s",&Replp1[Flight_No]->Name); Replp1[Flight_No]->IDinfor=IDinfor; /* 候补乘客的座位*/ Replp1[Flight_No]->Amount=Ticket_Count; /* 候补乘客的订票数*/ while(1)/* 数据合法性检验*/printf("\n\t 请输入舱位等级 :");%d",IDinfor++);/* 建立该航线的首位候补乘客scanf("%s",&Replp1[Flight_No]->Rank);printf("\n\t 请输入您的ID 信息:");scanf("%d",&Replp1[Flight_No]->IDinfor);if(!(Replp1[Flight_No]->Rank>='1'&&Replp1[Flight_No]->Rank<='3')) {printf("\n\t 输入有误,请重新输入.");getch();}elsebreak;}printf("\n\t 没有剩余座位!\n");/* 候补乘客无座提示*/shouldsave=1;}/* 进入候补*/}/* 票数满足*/}/* 航线存在*/elseprintf("\n\t 对不起,航线不存在!\n");/* 航线不存在*/if(flag) /* 此处不作处理,则会地址溢出*/ Custp1[Flight_No]->Next=NULL;/* 末位定票乘客的指针置空*/ if(tag){ Replp1[Flight_No]->Next=NULL;/* 末位候补乘客的指针置空*/ printf("\n\t 您已经成功排入候补订票队列中!\n");}printf("\n\t 是否退出菜单?:(y/n)");scanf("%s",&c);if(c=='y')return;}/*while*/}/* ---------------- 订票乘客信息-------- */void Display_Reserve(){system("cls");Flight *p1;Customer *p2;p1=Head;if(Empty_Flight())return;printf("\n\t 订票乘客信息");if(IsEmpty){printf("\n\t 对不起,没有订票乘客信息!\n"); getch();return;}printf("\n ______________________________________________________________________ ______ \n");printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No ID\n"); while(p1!=NULL) {if(p1->CustName!=NULL){p2=p1->CustName; while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->A mount,p1->Des_Name,p2->Rank,p2->IDinfor);if(p1->Free_Amount>=1)printf("\n\n\t 还有多余的票!\n");elseprintf("\n\n\t 票已售完!\n");p2=p2->Next;}} p1=p1->Next;printf("\n\n _____________________________________________________________________ ______ \n");}printf("\n\t 按任意键返回!");getch();return;}/* ---------------- 候补乘客信息-------- */void Display_Replace(){system("cls");Flight *p1;Customer *p2;p1=Head;if(Empty_Flight())return;printf("\n\t 候补乘客信息!");if(IsReplace){printf("\n\t 对不起,没有候补乘客!\n");getch();return;}printf("\n ______________________________________________________________________ ______ \n");printf("Name Flight_No Plane_No Tic_Amount Des_Name Rank_No ID\n");while(p1!=NULL){if(p1->ReplName!=NULL){p2=p1->ReplName;while(p2!=NULL){printf("\n%-8s%-10s%-9s%-11d%-9s%-9c%-9d",p2->Name,p1->Flight_No,p1->Plane_No,p2->A mount,p1->Des_Name,p2->Rank,p2->IDinfor);if( p1->Free_Amount>=1)printf("\n\t 还有多余的票!\n");elseprintf("\n\t 票已售完!\n");p2=p2->Next;}}p1=p1->Next;}printf("\n\n _____________________________________________________________________ ______ \n");printf("\n\t 按任意键返回!"); getch();while(p2!=NULL)/* 查找有无此乘客名*/return;/* ---------------- 退票办理函数 -------- */printf("\n\t 现在开始进行退票手续 ");if(IsEmpty){printf("\n\t 对不起,乘客不存在 !"); getch();return;}while(1){flag=0;tag=0;Flight_No=0;printf("\n\t 请输入航线 :");scanf("%s",&answer); if(Find_Line(Head,answer,p1,Flight_No)) /* 航线存在 */ {p2=p1->CustName; /* 指向该航线的乘客的首地址 */ printf("\n\t 请输入您的:");scanf("%s",&name);if(p2==NULL) /* 该航线无定票乘客 */{printf("\n\t 对不起,乘客不存在 !.");if(Continue()=='n')/* 是否继续操作 */return;}elsevoid RefundticketMenu(){int Flight_No=0,flag=0;Flight *p1; Customer *p2,*p4; Customer *p3,*p5; char answer[7],name[7]; int tag=0; int IDinfor; if(Empty_Flight()) return; /* 记录满足条件的航线的定票结点 *//* 记下满足条件的航线结点地址 *//*临时性定票乘员结点/* 临时性候补乘员结点用户输入的航班数据*/ */ */ /*若第二乘客满足条件,则它的首地址会发生冲突,注意此处 /* 记录座位号 *//* 航班线为空 */*/if(strcmp(p2->Name,name)==0)/* 此外括号不能省略,否则功能会转变*/{ if(p2==p1->CustName) /* 若为首位乘客满足*/{prior=p1->CustName; /* 记录指针*/ IDinfor=p2->IDinfor;flag=1; break;}}else if(p2->Next!=NULL)/* 记录满足航线的的前结点地址*/{ if(strcmp(p2->Next->Name,name)==0) {tag=1; /* 特别注意此处*/ prior=p2; /* 记录满足定乘客的前一地址,以作删除操作*/IDinfor=p2->Next->IDinfor;flag=1; break;}}p2=p2->Next; /* 指向下一乘客结点*/ shouldsave=1;}/*while */if(!flag)printf("\n\t 对不起,乘客不存在!\n");}/* 存在该航线*/elseprintf("\n\t 对不起,航线不存在!\n");if(flag){if(prior==p1->CustName&&!tag) /* 首结点满足条件且一个乘客,则该航线定票乘客置空*/{if(prior->Next==NULL) /* 仅一乘客,头指针置空*/{ p1->Free_Amount+=prior->Amount; p1->CustName=NULL;}else{ p1->Free_Amount+=prior->Next->Amount; p1->CustName=prior->Next; /* 指向下一乘客结点*/}else{ p1->Free_Amount+=prior->Next->Amount; prior->Next=prior->Next->Next;/* 删除操作*/}Customer_Count--; if(Customer_Count==0)IsEmpty=1;shouldsave=1;}if(flag)/* 存在退票操作*/{ p3=p1->ReplName;while(p3!=NULL){if(p3->Amount<=p1->Free_Amount)/* 候补乘客的定票数小于或等于剩余票数*/ {printf("\n\t 候补乘客已经存在!\n"); p4=Custp1[Flight_No]->Next=new Customer;p4->Next=NULL;IsEmpty=0;if(p1->CustName==NULL)p1->CustName=p4; strcpy(p4->Name,p3->Name); p4->Rank=p3->Rank;p4->Amount=p3->Amount; p4->IDinfor=IDinfor;p1->Free_Amount-=p3->Amount; /* 减去相应的票数*/Customer_Count++;if(p3->Next==NULL) /* 无候补乘客*/IsReplace=1; if(p1->ReplName==p3) {if(p1->ReplName->Next==NULL) p1->ReplName=NULL;/* 删除*/ else p1->ReplName=p3->Next;}else p5->Next=p3->Next->Next;break;} if(p3->Next!=NULL)if(p3->Next->Amount<=p1->Free_Amount) p5=p3;p3=p3->Next; /* 指向下一候补乘客结点*/ shouldsave=1;}printf("\n\t 退票成功!");getch();return;}/* 存在此乘客*/shouldsave=1;if(Continue()=='n')return;}/*while*/}/* -------------- 乘客管理子菜单函数------- */void CustomermagMenu(){char c;system("cls");while(1){printf("\n\t\t 乘客管理菜单:\n");printf("\n _____________________________________________________________________ _____ \n\n");printf("\t1. 乘客信息\n");printf("\t2. 候补乘客信息\n");printf("\t3. 返回主菜单\n");printf("\n _____________________________________________________________________ _____ \n");printf("\t 请选择您想要的服务:");scanf("%s",&c);switch(c){case '1':Display_Reserve();break; case '2':Display_Replace();break; case '3':return;}default:ErrorMess();}}/* ------ 下面为主程序画面函数 -- */ void main(){system("color 1f");// 屏幕颜色设定 system("mode con: cols=78 lines=35"); Flight *p1;p1=Head;char c;do{system("cls");printf("\n\t\t 航空客运订票系统主菜单 \n"); ***********************************************************************scanf("%s",&c); switch(c){ case '1':LinemanageMenu();break;case '2':bookingMenu();break;case '3':RefundticketMenu();break;case '4':CustomermagMenu();break;case '5':exit(0); default:break;} }while(c!='5');***** **\n"); printf("\t printf("\tprintf("\t printf("\tprintf("\t printf("\n ************************* 1.航 线 管 理 ^+k - 单 \n ”); 2.订 票 办 理 ^+k - 单 \n"); 3.退 票 办 理 ^+k - 单 \n"); 4.乘 客 管 理 菜 单 \n"); 5.退 出 系 统\ n"); 使 用 航 空客运订票系统 ************************ printf(" 请选择您想要的服务:");printf("\n /* 航线管理 */ /* 订票办理 */ /* 退票办理 */ /* 乘客管理 */。

数据结构课程设计飞机票订票系统讲解

数据结构课程设计飞机票订票系统讲解

学号成都理工大学计算机科学与技术系数据结构课程设计设计说明书题目订票系统学生姓名班级成绩指导教师(签字)计算机科学与技术系2016 年9 月20 日目录第1章问题描述 (1)(1)录入: (1)(2)查询: (1)(3)订票: (1)(4)退票: (1)1、开发环境 (2)2、组成框图 (2)3、流程图 (3)第3章详细设计 (4)1.根据飞机订票系统的可设要求,要实现以下功能: (4)2.具体的方法及函数调用的思想: (4)struct://它相当于一种记录 (4)3.方法的实现: (5)1)input( ); //录入 (5)2)find( ); //查询,按终点站来查询 (6)3)string time(short begin_hour,char begin_minute); //调用系统时间 (6)4)order( ); //办理订票函数 (6)5)refund( ); //办理退票函数 (6)第4章测试结果及分析 (7)执行结果: (7)参考文献 (10)附录:源代码 (10)1第1章问题描述通过此系统可以实现如下功能:(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;(3)订票:可以订票,如果该航班已经无票,可以提供相关可选择航班;(4)退票:订票数量及航班情况。

第2章概要设计1、开发环境系统环境:Microsoft Windows®10 专业版开发环境:Microsoft Visual Studio 2015开发平台:Win64开发语言:C++硬件环境:(1) CPU:Intel Core i5(2)内存:4GB(3)显示卡:NVIDIA GeForce GTX950M2、组成框图3、流程图第3章详细设计1.根据飞机订票系统的可设要求,要实现以下功能:(1)录入:录入航班情况(2)查询:可以查询某个航线的情况可以输入抵达城市,查询飞机航班情况;(3)订票:1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。

数据结构课程设计---航空订票系统

数据结构课程设计---航空订票系统

数据结构课程设计报告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++)

数据结构课程设计 航空订票系统(C++)

上海电力学院数据结构C++课程设计题目: 航空客运订票系统学生姓名:***学号: ********院系:计算机与信息工程学院专业年级:信息安全2010级2012 年 6 月 29 日一、设计题目航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。

试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。

【基本要求】(1)每条航线所涉及的信息有:终点站名、航班名、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2 或3)以及等候替补的客户名单(包括姓名、所需票量);(2)作为示意系统,全部数据可以只放在内存中;(3)系统能实现的操作和功能如下:①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。

若需要,可登记排队候补;③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足客户的要求,则为客户办理订票手续,否则依次询问其他排队候补的客户。

二、需求分析1)运行环境(软、硬件环境)Winxp 32位 visual C++6.02)输入的形式和输入值的范围由航空公司输入航线情况并以单链表的形式存储在内存里面3)输出的形式描述通过客户的输入输出相应的内容4)功能描述用户通过本系统实现该航空公司的查询、订票(包括候补)、和退票功能5)测试数据三、概要设计1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)一条航线包括了终点站、航班名、飞机号、飞行周日、成员定额、余票量、订票人员、候补人员等信息,我们可以将航线看成一类,定义为一个类,而订票人员通用的属性是:姓名、订票张数和舱位等级,候补人员通用属性是姓名和订票张数,可以将订票人员和候补人员定义为结构体,航线定义为一个类,类包括了两个结构体。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

学号数据结构课程设计设计说明书飞机订票系统起止日期:2011年12月12日至2011年12月16日学生姓名班级成绩指导教师(签字)电子及信息工程系2011年12月16日天津城市建设学院课程设计任务书2011—2012学年第1学期电子及信息工程系软件工程专业班级课程设计名称:数据结构课程设计设计题目:飞机订票系统完成期限:自2011年12月12日至2011年12月16日共1周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者及被抄袭者皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。

三、设计内容订票系统1)问题描述(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询:可以查询某个航线的情况可以输入起飞抵达城市,查询飞机航班情况;(3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;(4)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

(5)修改航班信息:当航班信息改变可以修改航班数据文件2) 基本要求根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能目录一、需求分析5二、问题求解5三、总体设计61.程序设计组成框图:52.程序设计流程图6四、详细设计71.根据飞机订票系统的可设要求,要实现以下功能:82.具体的方法及函数调用的思想:8定义要存储的变量:93.方法的实现:9五、调试及测试91.录入信息时92.订票时:93.退票时:10六、关键源程序清单和执行结果101.源程序:102.执行结果:18七、参考文献22一、需求分析本课程设计的名称是飞机订票系统,本系统主要是描述了顾客在订飞机票时的一些具体情况,包括录入航班、乘客情况,查询是否还有该顾客要乘坐的飞机以及剩余的票,之后是确定乘客订票管理,然后当乘客有突发情况发生时会伴随着退票的发生。

这就是产生订票系统产生的原因。

二、问题求解当我们遇到飞机订票这件事情的时候,我们通常发生的地点是飞机场,首先,我们应该到售票大厅去购买飞机票,因此,我根据我学过的C++中学过的结构体struct,它相当于其他高级语言中的高级记录。

因此定义了一个airline结构体来存储变量:struct airline{ };air_num(班次号),short begin_hour(起飞时间小时),short begin_minute(起飞时间分钟),char begin_name[10](起始站点),char end_name[10](终点站名),float fly_time(飞行时间),int total (乘员总定额),int total_already(已订票人数),bool exist(航班状态),int fare;(飞机票价)首先就要查询是否有该路线的票,如果有的话则进行购买,即要通过把信息录入input()方法来实现。

则要录入航班号(air_num),起飞时间(begin_hour,begin_minute),飞行时间(fly_time),起始站(begin_name),终点站(end_name)等。

在查找find()方法中,首先定义一个计数器k=-1,然后读入文件信息,输入要查询的终点站名称end,用strcmp()是用来比较end_name和end字符串的大小,它的返回值是int类型。

如果有此终点站,则调用output(i)方法,打印出符合条件的航班信息,然后把i的值付给计数器k。

如果k==-1,则显示不存在此航班。

在浏览check()方法中,显示已有的航班班次,调用output()方法来显示信息,紧着着要调用time()来判断航班是否发出并输出。

可能还有一种情况需要考虑,当飞机起飞了,则既不能订票也不能退票了,这是通过时间的比较来实现的,再次运用了电脑上的事件系统#include<windows.h>(系统窗口时间),建立方法string time(short begin_hour,short begin_minute)来调用系统时间函数和输入的时间作比较,判断此时的时间和电脑现在系统的大小来比较,如果输入的时间的小时数大于电脑系统里面的小时数或者输入的小时数和电脑系统的小时数相等&&输入的分钟数大于电脑系统的分钟数,其代码实现如下:(if((begin_hour<sys.wHour)||(begin_hour==sys.wHour&&b egin_minute<sys.wMinute))),则说明飞机没有起飞,此时可以订票同时也通过order()和refund()来表达。

订票时,首先应输入飞机班次编号(cin>>num1),因为事先在结构体里存储了四个航班信息,所以如果输入的num1在b[i].air_num(即编号1~4),则会cout<<“航班已存在”。

否则判断该班次是否还有票,if(b[i].total==b[i].total_already)则说明票以售完,反之计算出剩余票数的张数:b[i].total-b[i].total_already ,再输入购票的张数cin>>num2,然后拿num2的大小和总票数减去已经售出的票数的大小作比较,if(b[i].total-b[i].total_already>num2),接着询问乘客是否去热定要购票if(ch=='y'||ch=='Y'),进而进行下一步,然后在判断飞机是否已经起飞,如果没起飞则订票成功,返回"订票成功,祝您旅途愉快!",然后调用save()来把订票后的信息存起来。

反之无法办理。

然后,一旦乘客往里或者把票给丢了,售票员也能通过乘客的信息查询到该乘客是否确实买过票,这就通过find()来查找,如果要浏览班次则需要check()来实现。

此程序的output()方法是用来在控制台显示给售票员看的,所以要清楚明了,便于操作。

三、总体设计1.程序设计组成框图:2.程序设计流程图四、详细设计1.根据飞机订票系统的可设要求,要实现以下功能:(1)录入:录入航班情况(2)查询:可以查询某个航线的情况可以输入抵达城市,查询飞机航班情况;(3)订票:1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。

2)当有余票时显示剩余票数,则可以订票成功,如果没有余票,则订票失败。

(4)退票:1)先判断飞机是否起飞,如果发出航班则订票失败,否则可以订机票。

2)当有余票时显示剩余票数,则可以退票成功,如果没有余票,则退票失败。

2.具体的方法及函数调用的思想:(1)struct://它相当于一种记录定义要存储的变量:可以通过以下的声明来建立如图的数据类型int air_num; //班次号short begin_hour; //起飞时间小时short begin_minute; //起飞时间分钟char begin_name[10]; //起始站点char end_name[10]; //终点站名float fly_time; //飞行时间int total; //乘员总定额int total_already; //已订票人数bool exist; //航班状态int fare; //飞机票价定义一个结构体来存储四个航班信息:{ }里的变量依次表示为:航班号,起飞时间(小时),起飞时间(分钟),起始站点,终点站名,飞行时间,成员定额,已订票人数,航班状态;{1,12,0,"天津","广州",2,145,130,true,1000},{2,6,30,"北京","成都",0.5,140,140,true,2000},{3,22,0,"广州","南京",2.5,140,120,true,2500},3.方法的实现:1)save( ); //保存航班信息因为可设要求把数据存储在文件中,所以必须编写此保存方法,因此用到fstream头文件名(fstream是iostream类的派生)用来支持对磁盘文件的输入输出,信息保存在airpline.txt文件中。

2)read( ); //读取航班信息read方法是用来读取airpline.txt文件中航班数据的,ios:in 以输入方式打开文件3)input( ); //录入input()方法的功能就是录入航班号i,起飞时间(小时)begin_hour,起飞时间(分钟)begin_minute,起始地点名称begin_name,种植地点名称end_name,飞行时间fly_time,总载客量total,已订票人数total_already,飞机票价fare,航班状态exist。

变量int i=4,因为事先已经录入4个编号为1~4的航班号,因此当输入1~4的航班号时会提醒此航班号已存在,因而在控制台输入的航班号必须大于4而小于50。

变量int j=0;则j+1表示录入第(j+1)个航班班次的信息4)find( ); //查询,按终点站来查询根据已有的飞机信息来依据终点信息来查询航班。

首先要调用读取机票信息函数,读取要查询的机票信息,既read()方法。

并且在方法中有一个计数器k,当k=-1时输出无此航班的飞机,反之根据终点站名字来查询航班信息。

5)string time(short begin_hour,char begin_minute); //调用系统时间当输入起飞时间及该电脑里的时间作比较,当电脑现在的时间比输入起飞时间大的话,则说明飞机已经起飞。

通过线面的语句来实现:(begin_hour<sys.wHour)||(begin_hour==sys.wHour&&begin _minute<sys.wMinute)6)order( ); //办理订票函数当订票的时候,首先要输入要订票的航班号,因此在这之后应读入在系统中的航班信息,当输入航班编号后如无此航班号,则失败,反之先判断次航班是否已经起飞if((b[i].begin_hour>sys.wHour)||(b[i].begin_hour==sys.wHour& &b[i].begin_minute>sys.wMinute)),如果没起飞,在判断是否还有余票if(b[i].total==b[i].total_already),如果有,计算剩余的多少张票b[i].total-b[i].total_already,进而订在剩余票数的范围内购票,如果及之相反,则证明飞机已经起飞也就是说已经订不到票了。

相关文档
最新文档