数据结构程序设计飞机订票系统
数据结构程序设计机票管理系统
数据结构程序设计机票管理系统机票管理系统是一种用于记录和管理机票信息的软件系统。
它可以帮助旅行代理人或航空公司方便地管理和处理所有相关的机票信息,包括航班信息、乘客信息、座位预订等。
本文将介绍机票管理系统的设计和实现。
首先,我们需要定义几个核心的数据结构来表示机票管理系统中的各种对象。
这些数据结构包括: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++课程设计题目: 航空客运订票系统学生姓名:***学号: ********院系:计算机与信息工程学院专业年级:信息安全2010级2012 年 6 月 29 日一、设计题目航空客运订票的业务活动包括;查询航线、客票预订和办理退票等。
试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
【基本要求】(1)每条航线所涉及的信息有:终点站名、航班名、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2 或3)以及等候替补的客户名单(包括姓名、所需票量);(2)作为示意系统,全部数据可以只放在内存中;(3)系统能实现的操作和功能如下:①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。
若需要,可登记排队候补;③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足客户的要求,则为客户办理订票手续,否则依次询问其他排队候补的客户。
二、需求分析1)运行环境(软、硬件环境)Winxp 32位 visual C++6.02)输入的形式和输入值的范围由航空公司输入航线情况并以单链表的形式存储在内存里面3)输出的形式描述通过客户的输入输出相应的内容4)功能描述用户通过本系统实现该航空公司的查询、订票(包括候补)、和退票功能5)测试数据三、概要设计1)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)一条航线包括了终点站、航班名、飞机号、飞行周日、成员定额、余票量、订票人员、候补人员等信息,我们可以将航线看成一类,定义为一个类,而订票人员通用的属性是:姓名、订票张数和舱位等级,候补人员通用属性是姓名和订票张数,可以将订票人员和候补人员定义为结构体,航线定义为一个类,类包括了两个结构体。
飞机订票系统(数据结构)
假设某机场共有M次航班,第i次航班有ni个座位,且每次航班到达一个目的机场。
设计一个满足该机场需要的用户订票、退票程序#include <stdio.h>#include <string.h>#include <conio.h>#include <fstream>struct air //定义结构体数组{int num;int seat;int count;air *next;};struct air s[3];void init(int); //初始化航班信息void read(); //读取航班信息void save(); //保存航班信息void print(); //输出航班信息void dingpiao(); //订票信息void tuipiao(); //退票信息void main(){init(3);save();int j;printf(" ★---您好,欢迎进入飞机订票系统!---★\n");printf("================================================================ ================\n");do{printf(" -------- ☆ 1.浏览航班信息☆-------- \n\n"" -------- ☆ 2.订票信息☆-------- \n\n"" -------- ☆ 3.退票信息☆-------- \n\n"" -------- ☆0.退出☆-------- \n\n");printf("================================================================ ================\n");printf("机场共有M=3次航班,第i次航班有(n=2)*i个座位,每次航班到达一个目的机场!!!\n");printf("================================================================ ================\n");printf("请在0-3中选择以回车键结束:\n\n");scanf("%d",&j);switch(j){case 1:print(); //读取航班信息break;case 2: dingpiao(); //订票信息break;case 3:tuipiao(); //退票信息break;case 0:;break;}}while(j!=0); //判断结束printf("谢谢使用,再见!\n");}//主函数结束void init(int se) { //初始化模块int i;air *q=&s[0]; //指向头指针for(i=0;i<se;i++){q->num=i+1; //航线编号q->seat=2*(i+1); //第i次航班有ni个座位q->count=q->seat; //剩余座位q->next=&s[i+1]; //指向下一结点q=q->next; //头指针+1}q->next=NULL; //最后一个节点指针设为空}void save()//保存模块程序{int i;int m;FILE *fp,*fp1;//定义文件指针if((fp=fopen("chen.dat","wb"))==NULL)//打开文件并判断是否出错{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}if((fp1=fopen("hao.dat","wb"))==NULL)//打开文件并判断是否出错{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}for(i=0;i<3;i++)if(fwrite(&s[i],sizeof(struct air),1,fp)==0)//向文件写入数据,并判断是否出错printf("向文件输入数据失败!\n\n");fprintf(fp1,"%d",&m);fclose(fp);//关闭文件fclose(fp1);//关闭文件}void read()//从文件读取信息模块{int m;int i;FILE *fp,*fp1;//定义文件指针if((fp=fopen("chen.dat","rb"))==NULL)//打开文件,并判断是否出错{printf("出错,请检查文件是否存在,按任意键返回住菜单");//打印出错提示getchar();if((fp1=fopen("hao.dat","rb"))==NULL)//打开文件并判断是否出错{printf("创建文件失败!\n\n");//打印出错提示getchar();return;}fscanf(fp1,"%d",&m);fclose(fp1);//关闭文件for(i=0;i<m;i++){fread(&s[i],sizeof(air),1,fp);//从文件中读取信息}fclose(fp);//关闭文件}void print()//输出航班模块{int se;char w[10];read();//调用读取文件函数printf("航班号座位数剩余票\n");air *q=&s[0];for(se=1;se<4;se++){printf(" %d ",q->num);printf(" %d ",q->seat);printf(" %d ",q->count);printf("\n");q=q->next;}printf("请按任意键回车键结束返回上层菜单以:\n");scanf("%s",w);}void dingpiao()//订票模块int i;int n;char a[10];read();do{printf("请输入您要订的机票的航线编号(1、2、3):\n");scanf("%d",&i);if((i-1)<0||(i-1)>3){printf("请输入有效飞机编号!\n");//判断机票数是否出错}else{air *q=&s[i-1];printf("请输入您要订的机票数以回车键结束:\n");scanf("%d",&n);//读取所订机票数if(n<0){printf("请输入有效的机票数!\n");//判断机票数是否出错break;}if((q->count)!=0&&(q->count)>=n)//判断是否出错{q->count=q->count-n;save();//调用保存函数printf("订票成功!\n\n");break;}if(q->count<n)//判断是否出错{printf("票数不足:\n");break;}printf("是否继续?请输入yes或no以回车键结束:\n");//判断是否继续订票scanf("%s",a);}}while(!strcmp(a,"yes"));//判断结束}void tuipiao()//退票模块{int n;char a[10];int i;do{printf("请输入您要订的机票的航线编号(1、2、3):\n");scanf("%d",&i);if((i-1)<0||(i-1)>3){printf("请输入有效飞机编号!\n");break;}else{air *q=&s[i-1];printf("请输入您要退的机票数目:\n");scanf("%d",&n);//输入所退票数read();int k;k=2*i-(q->count);if(n<0||n>k) //判断票数是否有效{printf("请输入有效的机票数!\n");break;}else{q->count=q->count+n;save(); //调用保存模块printf("退票成功!\n\n");printf("是否继续?请键入yes或no以回车键结束:\n\n");//判断是否继续退票scanf("%s",a);}}}while(!strcmp(a,"yes"));//判断并跳出循环getchar();。
数据结构大作业-航空公司订票系统
数据结构大作业-航空公司订票系统一、需求分析航空公司订票系统是一个需要进行高效管理和数据存储的系统。
在这个系统中,我们需要实现以下功能: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;使用以上数据类型存储用户信息,我们可以建立一个包含所有用户的线性表来存储和管理所有的用户信息。
数据结构课程设计之飞机订票系统
青岛理工大学数据结构课程设计报告题目:飞机订票系统院(系):学生姓名:班级:学号:起迄日期:指导教师:2010—2011年度第 2 学期一、需求分析1.问题描述:设计一个模拟飞机订票系统,通过此系统可以录入、查询、修改航班情况,完成用户订票和退票功能,并且可以保存客户和航班的资料。
2.基本功能1,录入航班信息。
没个航班的信息包括:航班号,起飞、抵达城市,座位总数,剩余座位数。
数据由使用者输入。
数据存储在txt文件中,采用线性表的链式结构。
2,加载航班和客户信息。
可以自动加载保存在txt文件中的航班和客户的信息。
3,查询航班。
可以通过输入航班号,查询该航班的所有信息。
可以通过输入起飞抵达的城市,查询航班的信息。
4,订票。
客户的信息包括:姓名,证件号,所订票的航班号,座号。
用户输入要订票的航班号,如果该航班未满,则订票成功,并记录客户的信息。
如果该航班已满,则订票失败,输出所有未满的航班信息,供用户选择。
5,退票。
删除退票用户的订票信息,相应的航班的剩余票数增加1。
6,修改航班信息。
用户输入要修改的航班号,和要修改的内容,修改该航班的相应信息。
7,保存操作。
把当前的航班信息,和用户信息分别保存在txt文件中。
8,输出所有客户信息。
按一定的格式输出用户的姓名,证件号码,航班号,座号。
9,输出所有航班信息。
按一定的格式输出所有的航班的航班号,起飞抵达城市,座位总数,剩余座位数。
0,退出系统。
3.输入输出在控制台下,根据提示输入要完成功能的标号,然后在提示下选择性的输入航班号、起飞抵达地、证件号码,或者姓名等。
系统会根据用户的输入输出相应的航班信息或者用户信息。
二、概要设计1.设计思路:对于航班和用户,分别定义不同的数据结构,并且采用线性表的链式结构进行存储。
然后根据要完成的功能,分模块用函数实现。
所用到的算法主要有:链表的创建,增加,遍历,插入,删除。
2.数据结构设计:采用的逻辑结构是线性结构。
存储结构是链式结构。
数据结构课程设计:飞机订票系统设计与实现
1. 需求分析 (1)1.1 问题描述 (1)1.2 基本要求 (2)1.2.1 输入的形式和输入值的范围 (2)1.2.2 输出形式 (2)1.2.3 功能要求 (2)2. 概要设计 (3)2.1 数据结构 (3)2.2 程序模块 (4)2.2.1 录入航班信息模块 (4)2.2.2 客户订票模块 (4)2.2.3 客户退票模块 (4)2.2.4 查询航班模块 (5)2.2.5 查询订单模块 (5)2.2.6 修改航班模块 (5)2.3 各模块之间的调用关系以及算法设计 (5)2.3.1 各模块之间的调用关系 (5)2.3.2 算法设计 (6)3. 详细设计 (7)3.1 录入航班信息模块 (7)3.2 顾客订票模块 (8)3.3 顾客退票模块 (10)3.4 查询航班模块 (11)3.5 查询订单模块 (12)3.6 修改航班模块 (13)4. 测试与分析 (14)4.1 合法数据的测试 (14)4.2 非法数据的测试 (17)5. 用户使用说明 (19)5.1 运行环境 (19)5.2 主要功能 (19)5.3 操作注意事项 (19)5.4 业务流程 (20)6. 总结 (20)参考文献 (21)附录:程序源代码 (21)1. 需求分析1.1 问题描述基于目前人们外出远行频繁,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序就是要实现航班情况的录入,查询,订票,退票以及航班的查询和修改等基本功能。
本课程设计的题目为:飞机订票系统。
1.2 基本要求1.2.1 输入的形式和输入值的范围录入航班信息时,需要输入航班号,起降时间,起飞抵达城市,值为字符串;还需要输入航班票价,票价折扣,值为浮点型(float);还需要输入航班是否满仓,值为整型(int)(“1”表示已满仓,“0”表示没有满仓);如需要继续录入航班信息,要输入判别信息,值为整型(“1”表示继续录入航班信息,“0”表示停止录入航班信息)。
c语言课程设计--飞机订票系统
c语言课程设计–飞机订票系统一、教学目标本课程的教学目标是使学生掌握C语言编程的基本知识,能够使用C语言设计并实现一个简单的飞机订票系统。
具体分为以下三个部分:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数等编程基础。
2.技能目标:学生能够运用C语言进行程序设计,解决实际问题,如设计飞机订票系统的各个功能模块。
3.情感态度价值观目标:培养学生对计算机科学的兴趣,提高学生解决问题的能力,培养学生的团队合作精神。
二、教学内容教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等编程基础,以及如何使用C语言设计并实现一个简单的飞机订票系统。
具体安排如下:1.C语言基本语法和数据类型2.C语言运算符和控制结构3.C语言函数和数组4.C语言指针和字符串5.飞机订票系统的设计和实现三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:用于讲解C语言的基本语法、数据类型、运算符、控制结构、函数等编程基础。
2.案例分析法:通过分析实际案例,让学生了解如何使用C语言设计并实现飞机订票系统。
3.实验法:让学生动手编写代码,实现飞机订票系统的各个功能模块。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C程序设计语言》或《C语言程序设计》2.参考书:《C Primer Plus》或《C和指针》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、网络环境五、教学评估为了全面、客观地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过课堂参与、提问、小组讨论等环节,评估学生的学习态度和积极性。
2.作业:布置课后编程作业,评估学生对C语言知识的掌握程度及编程能力。
3.考试:期末进行闭卷考试,评估学生对C语言编程基础知识的掌握情况。
4.项目实践:要求学生分组设计并实现一个简单的飞机订票系统,评估学生的实际编程能力和团队协作能力。
数据结构课程设计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语言),自行实现一个较为完整的应用系统的设计与开发。
通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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,进而订在剩余票数的范围内购票,如果及之相反,则证明飞机已经起飞也就是说已经订不到票了。