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

合集下载

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(贵州大学计算机科学与信息学院贡献)#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; else return 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 1_PriceFree_Num 2_Price 3_Price\n");printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Flight_No,p1->Plane_No,p1->Week_Day,p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Price[2])J} 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;}else return 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_Price 3_Price\n"); while(p1!=NULL){printf("\n%-9s%-10s%-9s%-9d%-9d%-9d%-8d%-8d%-8d",p1->Des_Name,p1->Fl ight_No,p1->Plane_No,p1->Week_Day,/* 剩余票数与乘员定额相同 *//* 该航线定票乘客头指针为空 */ /* 初始候补名单为空 *//* 航线的下一结点为空 */p1->Customer_Amount,p1->Free_Amount,p1->Price[0],p1->Price[1],p1->Pric e[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");返回主菜单\n");printf("\t4.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;int Flight_No=0; /* 记录满足条件的航线的定票结点 */ Flight *p1; /* 记下满足条件的航线结点地址 *//* 临时性定票乘员结点 */ /* 临时性候补乘员结点 */ /* 用户输入的航班数据 *//* 候补乘客标志位 *//* 是否执行候补操作标志位 */ /* 航班线为空 */return; while(1) {printf("\n\t 现在您可以订票 !");flag=0; /* 标志位清零以重新作出判断 */ Flight_No=0; tag=0;printf("\n\t 请输入航线号 :"); scanf("%s",&answer);以下操作 */{while(1) /* 数据合法性检验 */ {printf("\n\t 请输入您想要订购的票的数量 :"); scanf("%d",&Ticket_Count); if(Ticket_Count==0){printf ("\n\t 请再次输入飞机号 :\n"); getch();Customer *p2; Customer *p3; char answer[7]; char temp; char c; int tag=0; int IsRepl=0;if(Empty_Flight()) if(Find_Line(Head,answer,p1,Flight_No)) /* 调用航线查找函数, 若存在则进行else break;}p1->CustName=Custp1[Flight_No]; }else /* 建立该航线的后续乘客结点 */{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++) /* 打印座位号 */{printf("\n\t 您所预定的座位号是 %d",IDinfor++); if(i%10==0) printf("\n\t");if(p1->Free_Amount>=Ticket_Count){Customer_Count++; flag=1; IsRepl=1;if(p1->CustName==NULL)*/{Custp1[Flight_No]=p2=new点*//* 定票乘客总数增 1*/ /* 表明进入了订票实际操作 */ /* 定票量满足,无需进入候补操作 *//* 首个定票乘客, 并记录相Customer; /* 建立该航线的首位乘客结}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 请输入舱位等级:"); 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_NoID\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->Amount,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_NoID\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->Amount,p1->Des_Name,p2->Rank,p2->IDinfor);if( p1->Free_Amount>=1)printf("\n\t 还有多余的票!\n");elseprintf("\n\t 票已售完!\n");p2=p2->Next;}p2=p1->CustName; /* 指向该航线的乘客名单的首地址 */}p1=p1->Next;} printf("\n\n __________________________________________________________________ _________ \n");printf("\n\t 按任意键返回 !");getch();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)) {void 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; /* 记录满足条件的航线的定票结点 /* 记下满足条件的航线结点地址/* 临时性定票乘员结点/* 临时性候补乘员结点 */*/ */ */*//* 若第二乘客满足条件,则它的首地址会发生冲突,注意此处/* 记录座位号 *//* 航班线为空*//* 航线存在 */printf("\n\t 请输入您的姓名 :"); scanf("%s",&name);if(p2==NULL) /* 该航线无定票乘客 {printf("\n\t 对不起,乘客不存在 !.");if(Continue()=='n')/* 是否继续操作 */ return;} elsewhile(p2!=NULL)/* 查找有无此乘客名 {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=newCustomer; 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;/* 删除*/ elsep1->ReplName=p3->Next;}elsep5->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");*************************\n");printf(" 请选择您想要的服务 :"); scanf("%s",&c);switch(c){case '1':LinemanageMenu();break; case'2':bookingMenu();break; case '3':RefundticketMenu();break;printf("\t 1. 航 线 管 理 菜 单 \n");printf("\t 2. 订 票 办 理 菜 单 \n");printf("\t 3. 退 票 办 理 菜 单 \n");printf("\t 4. 乘 客 管 理 菜 单 \n");printf("\t 5. 退 出 系 统\ n");printf("\n*************************谢 谢 使 用 航空客运订票系统!printf("\n******************************************************************************\n");/* 航线管理 *//* 订票办理 *//* 退票办理 */case '4':CustomermagMenu();break;/* 乘客管理*/ case '5':exit(0);default:break;}}while(c!='5');}。

(完整版)数据结构毕业课程设计(C语言版)飞机订票系统

(完整版)数据结构毕业课程设计(C语言版)飞机订票系统

———C语言版课题:飞机订票系统和图的遍历的动态演示姓名:学号:班级:指导教师:订票系统1.需求分析任务:通过此系统可以实现如下功能:录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:当航班信息改变可以修改航班数据文件要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能;2:主要设计思路:1)算法构造流程图:A:主菜单:B:各分块模板的构造流程图:3:功能函数设计:(1):订票系统主菜单函数menu_select()本函数主要构造系统的主菜单,系统需要实现很多功能,并且各个功能需要各自的函数支持,所以通过主菜单可以轻松的进入各个函数下实现各自的功能,故主菜单显得尤为重要。

其实就是通过键盘输入选择项,然后通过scanf接受,在通过swtich判断进入各个选择项。

(2):工作人员管理函数enter()&change()系统需要各个航班的详细信息,所以需要工作人员把信息输入系统里,以供乘客查询订票。

enter()函数的构造就是为了解决这个问题。

而有可能航班线路更改或由于天气等原因飞机的起飞时间发生了更改,故工作人员需要及时更改信息,所以需要构造change()函数。

(3):列出航班信息的函数list()乘客需要查询各个航班的信息,所以通过系统要能调出上面工作人员已经录入好的航班信息,所以构造本函数来实现这个功能。

(4)乘客具体查询函数search()本函数分两个分函数:search1()和search2(),它们分别实现乘客的按航班查询和按出发及抵达城市的两种查询方案。

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

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

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

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

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

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

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

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

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

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

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

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

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

(大学计算机科学与信息学院贡献)#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 /* 航线管理 */ /* 订票办理 */ /* 退票办理 */ /* 乘客管理 */。

c语言飞机订票系统课程设计

c语言飞机订票系统课程设计

c语言飞机订票系统课程设计一、课程目标知识目标:1. 让学生掌握C语言的基本语法和程序结构,特别是数组、结构体和函数的应用。

2. 使学生了解飞机订票系统的基本原理和功能需求,掌握相关数据结构和算法。

3. 帮助学生理解文件操作在飞机订票系统中的应用,学会读写数据文件。

技能目标:1. 培养学生运用C语言设计小型系统的能力,特别是模块化编程和代码组织能力。

2. 提高学生分析问题、解决问题的能力,学会运用所学知识解决实际订票问题。

3. 培养学生的团队协作能力,通过分组合作完成课程设计。

情感态度价值观目标:1. 激发学生对编程的兴趣,培养计算机编程的思维习惯。

2. 培养学生认真负责、严谨细致的学习态度,注重代码规范和程序调试。

3. 使学生认识到计算机技术在生活中的应用,增强对信息技术的认识和尊重。

课程性质:本课程设计属于实践性课程,以项目为导向,注重培养学生的实际操作能力和团队协作能力。

学生特点:学生已具备C语言基础知识,有一定的编程基础,但缺乏实际项目经验。

教学要求:教师需引导学生掌握飞机订票系统的基本原理,注重培养学生的编程实践能力,关注学生在课程设计过程中的情感态度变化,及时给予指导和鼓励。

在教学过程中,将课程目标分解为具体的学习成果,便于后续的教学设计和评估。

二、教学内容1. C语言基础回顾:复习数组、结构体、函数等基本概念和用法,确保学生具备扎实的编程基础。

相关教材章节:第3章 数组,第4章 结构体和联合,第6章 函数。

2. 飞机订票系统需求分析:讲解飞机订票系统的基本功能需求,如用户注册、航班查询、订票、退票等。

相关教材章节:第12章 项目设计。

3. 数据结构和算法设计:介绍飞机订票系统中涉及的数据结构(如链表、树等)和算法(如排序、查找等)。

相关教材章节:第7章 数据结构,第8章 算法。

4. C语言编程实践:指导学生运用所学知识编写飞机订票系统的各个功能模块。

相关教材章节:第9章 指针,第10章 文件操作。

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

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

数据结构课程设计报告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中设计用户界面功能部分。

数据结构大作业-航空公司订票系统

数据结构大作业-航空公司订票系统

数据结构大作业-航空公司订票系统一、需求分析航空公司订票系统是一个需要进行高效管理和数据存储的系统。

在这个系统中,我们需要实现以下功能: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;使用以上数据类型存储用户信息,我们可以建立一个包含所有用户的线性表来存储和管理所有的用户信息。

机票预订系统之详细设计

机票预订系统之详细设计

机票预订系统之详细设计1.系统架构设计前端主要包括用户界面,用于展示机票信息、接收用户输入和显示预订结果。

用户界面应设计友好、直观,并支持多种设备。

后端主要包括数据管理、业务逻辑和与第三方机票供应商的接口。

后端应提供安全的数据存储,有效地管理机票信息和用户数据,并确保预订的准确性和一致性。

2.数据库设计数据库设计是机票预订系统的核心部分,主要包括机票信息、用户信息和订单信息的存储。

2.1机票信息表设计该表包含机票的关键信息,如航班号、起飞时间、到达时间、起飞地点、到达地点和价格等。

字段:- 航班号(FlightCode):主键,用于唯一标识一张机票。

- 起飞时间(DepartureTime):机票的起飞时间。

- 到达时间(ArrivalTime):机票的到达时间。

- 起飞地点(DeparturePlace):机票的起飞地点。

- 到达地点(ArrivalPlace):机票的到达地点。

- 价格(Price):机票的价格。

2.2用户信息表设计字段:- 用户名(Username):主键,用于唯一标识一个用户。

- 密码(Password):用户的登录密码。

2.3订单信息表设计该表存储用户的订单信息,包括订单号、机票信息和用户信息等。

字段:- 订单号(OrderCode):主键,用于唯一标识一个订单。

- 机票信息(FlightCode):外键,与机票信息表关联。

- 用户信息(Username):外键,与用户信息表关联。

- 订单时间(OrderTime):订单的创建时间。

3.系统流程设计用户注册流程:1.用户进入系统,点击注册按钮。

3.系统验证用户填写的信息。

4.如果验证通过,系统将用户信息存入用户信息表,并返回注册成功提示。

5.如果验证不通过,系统返回错误提示,要求用户重新填写信息。

用户登录流程:1.用户进入系统,点击登录按钮。

2.用户填写登录信息,包括用户名和密码。

3.系统验证用户填写的信息。

4.如果验证通过,系统返回登录成功提示,并跳转到机票界面。

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

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

课程设计报告书课程设计名称:《数据结构课程设计》专业:题目:飞机航班订票系统班级:学号:姓名:指导老师:完成时间:2012-7-9问题描述一机场每天有n个航班,每个班次都有一班次号(1、2、3…n),固定的起飞时间,固定的路线(起始站、终点站),大致的飞行车时间,固定的额定载客量。

如班次起飞时间起点站终点站飞行时间额定载量已定票人数1 8:00 天津广汉2 145 1302 6:30 天津成都 0.5 140 1403 7:00 天津成都 0.5 140 1204 10:00 天津成都 0.5 140 120…试设计一个机票管理系统,对机场的售票情况进行管理。

基本要求功能要求:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据;(2)浏览班次信息,可显示出所有班次当前状况(如果当前系统时间超过了某班次的起飞时间,则显示“此班已发出”的提示信息)。

(3)查询路线:可按班次号查询 ,可按终点站查询;(4)售票和退票功能A:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。

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

(5) 修改航班信息:当航班信息改变可以修改航班数据文件实现提示每条航线应包括的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票额、已订票的客户名单(包括姓名、订票额、座位号)和预约登记的客户名单(包括姓名、所需票额)。

这最后两项显然是一个线性表和一个队列。

为查找方便、已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。

由于预约人数无法预计,队列也应以链表作存储结构。

飞机订票系统(数据结构作业)

飞机订票系统(数据结构作业)
return true;
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语言课程设计--飞机订票系统

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.项目实践:要求学生分组设计并实现一个简单的飞机订票系统,评估学生的实际编程能力和团队协作能力。

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

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

数据结构课程设计航空客运订票系统(总14页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--《数据结构课程设计》报告设计题目航空客运订票系统专业班级学号姓名电话完成日期目录1. 问题描述 (2)2. 系统设计 (2)3. 数据结构与算法描述 (4)4. 测试结果与分析 (6)5. 总结 (10)6. 参考文献 (10)附录程序源代码 (10)1课程设计题目1. 问题描述基于人们对航空客运使用需求的日益提高,为方便乘客提前买票及优化飞机航空订票服务,需要开发一个飞机订票系统,此程序是为实现航班情况的查询,订票,退票以及客户信息浏览与票务信息浏览等基本功能。

2. 系统设计设计目标(1)可以浏览航线信息;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(2)可以浏览已订票客户信息;包括客户姓名、订票数额和舱位等级;(3)可以查询航线;包括终点站名、航班号、飞机号、飞行日期、乘员定额和余票量;(4)可以办理订票业务;需提供航班号、所需票数、客户姓名和舱位等级,生成客户座位号;(5)可以办理退票业务;提供航班号和客户姓名,即可退票;(6)可以查看剩余票数;(7)要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。

设计思想(1)运行环境(软硬件环境):DEV-C++;(2)输入的形式和输入值的范围:由航空公司输入航线情况并以单链表的形式存储在内存里面;(3)输出的形式描述:通过客户的输入,输出相应内容;2(4)功能描述:用户可通过本系统实现对航班的查询、订票和退票功能。

系统模块划分主函数输出菜单界面。

输入指令,显示,敲击回车开始工作。

浏览航线信息编写void list()函数实现打印全部航线信息的功能,调用void display()函数实现打印struct airline链表中存储的航线的基本信息的功能。

浏览已订票客户信息编写void prtlink()函数实现打印订票乘员名单域的客户名单信息的功能,调用find()函数查询并以指针形式返回。

软件工程项目机票预订系统总体设计

软件工程项目机票预订系统总体设计

软件工程项目机票预订系统总体设计一、引言机票预订系统是以计算机技术为基础,通过网络实现机票的在线查询、预订和支付等功能,为用户提供便捷、高效的机票预订服务。

本文对机票预订系统进行总体设计,包括系统架构、功能模块划分、技术选型等方面进行详细说明。

二、系统架构机票预订系统采用客户端-服务器架构,客户端使用Web浏览器进行访问,服务器端提供后台服务和数据库支持。

系统采用三层架构,分为表示层、业务逻辑层和数据访问层,各层之间通过接口实现数据交互和业务处理。

1. 表示层:客户端使用HTML、CSS和JavaScript等技术实现用户界面的展示和交互。

通过Web浏览器向服务器发送HTTP请求,接收服务器返回的HTML页面,并通过JavaScript实现页面的动态更新和交互操作。

2. 业务逻辑层:在服务器端,使用Java或Python等编程语言开发业务逻辑处理模块。

该层负责接收并解析客户端的请求,调用相应的服务进行业务处理,并生成HTML页面作为响应返回给客户端。

3. 数据访问层:该层与数据库进行交互,负责数据的读取、写入和修改操作。

使用MySQL、Oracle等关系型数据库存储机票信息、用户信息和订单信息等数据。

三、功能模块划分机票预订系统包括用户模块、机票查询模块、机票预订模块和订单管理模块等功能模块。

1.用户模块:提供用户注册、登录、找回密码等功能。

用户可以注册账号,登录系统,在线查询和预订机票。

2.机票查询模块:实现机票的在线查询功能。

用户可以根据不同的查询条件(如出发地、目的地、出发时间等)进行机票查询,系统根据用户的查询条件从数据库中检索符合条件的机票信息,并将查询结果展示给用户。

4.订单管理模块:提供订单的查询和管理功能。

用户可以查询自己的订单信息,包括订单状态、出票情况等,并可以对订单进行修改或取消。

四、技术选型1. 前端技术:使用HTML、CSS和JavaScript等技术实现用户界面的展示和交互,使用jQuery或Vue.js等前端框架提高开发效率和用户体验。

c语言课程设计飞机订票系统设计

c语言课程设计飞机订票系统设计

c语言课程设计飞机订票系统设计一、课程目标知识目标:1. 学生能够掌握C语言的基本语法,包括数据类型、运算符、控制语句等。

2. 学生能够理解结构体和指针的概念,并能够运用它们进行程序设计。

3. 学生能够运用数组、链表等数据结构来实现飞机订票系统的基本功能。

4. 学生能够理解文件操作的基本原理,实现数据的存储和读取。

技能目标:1. 学生能够运用C语言编写具有一定规模的程序,具备独立解决问题的能力。

2. 学生能够运用结构体和指针操作实现数据的有效组织和管理。

3. 学生能够通过分析飞机订票系统的需求,设计合理的程序模块和接口。

4. 学生能够运用调试工具和技巧,找出并修复程序中的错误。

情感态度价值观目标:1. 学生在课程学习过程中,培养对编程的兴趣和热情,树立编程自信心。

2. 学生能够认识到编程在解决实际问题中的重要作用,提高学习责任感。

3. 学生通过团队协作完成课程设计,培养沟通、协作能力和集体荣誉感。

4. 学生能够遵循编程规范,养成良好的编程习惯,提高自身职业素养。

课程性质:本课程为C语言课程设计,旨在让学生通过实际项目实践,巩固所学知识,提高编程能力。

学生特点:学生已具备C语言基础知识,有一定的编程基础,但对大型程序设计尚缺乏经验。

教学要求:教师应注重引导学生运用所学知识解决实际问题,关注学生的个体差异,提供有针对性的指导,帮助学生完成课程目标。

同时,注重培养学生的团队协作能力和创新能力。

通过课程设计,使学生将所学知识转化为实际成果。

二、教学内容1. C语言基本语法复习:数据类型、变量、常量、运算符、表达式、控制语句(条件语句、循环语句)。

2. 结构体和指针:结构体的定义和使用、结构体数组、指向结构体的指针、动态内存分配。

3. 数据结构:数组、链表的概念与应用,实现航班信息、座位信息的存储和查询。

4. 函数和模块化设计:函数的定义、调用、参数传递、模块化设计原则,实现飞机订票系统的功能模块。

5. 文件操作:文件的概念、文件的打开与关闭、文件的读写操作,实现数据的持久化存储。

飞机订票系统c语言课程设计

飞机订票系统c语言课程设计

飞机订票系统c语言课程设计一、课程目标知识目标:1. 理解C语言在开发飞机订票系统中的应用,掌握面向过程编程的基本原理;2. 学会使用C语言进行数据结构设计,如数组、结构体等;3. 掌握C语言中的文件操作,实现对数据的存储和读取。

技能目标:1. 能够运用所学知识,设计并实现一个简单的飞机订票系统;2. 培养学生的逻辑思维和问题分析能力,使其能够通过编程解决实际问题;3. 提高学生的团队协作能力,通过分组合作完成课程设计。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发其主动学习的热情;2. 培养学生严谨、认真的工作态度,养成良好的编程习惯;3. 增强学生的自信心,使其在完成课程设计的过程中,感受到编程带来的成就感。

分析课程性质、学生特点和教学要求,本课程旨在通过飞机订票系统这一实际案例,让学生掌握C语言的基本知识和编程技能,培养其运用编程解决问题的能力。

课程目标具体、可衡量,便于后续教学设计和评估。

在教学过程中,注重理论与实践相结合,引导学生主动探究、积极实践,以实现课程目标。

二、教学内容1. C语言基础知识回顾:数据类型、运算符、控制结构等;2. 数据结构设计:数组、结构体、链表等在飞机订票系统中的应用;3. 函数设计与实现:模块化编程,实现系统各个功能模块;4. 文件操作:数据存储和读取,实现对订票信息的持久化;5. 系统设计:分析飞机订票系统需求,设计系统功能模块;6. 编程实践:分组合作,完成飞机订票系统的设计与实现;7. 测试与调试:对完成的系统进行测试,查找并修复错误。

教学内容依据课程目标,结合教材相关章节进行组织。

具体教学安排如下:第一周:回顾C语言基础知识,学习数据结构设计;第二周:学习函数设计与实现,掌握文件操作;第三周:分析飞机订票系统需求,设计系统功能模块;第四周:分组编程实践,完成飞机订票系统的设计与实现;第五周:系统测试与调试,总结课程设计。

教学内容科学系统,确保学生在掌握C语言基础知识的同时,能够学以致用,提高编程实践能力。

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

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

二、问题求解当我们遇到飞机订票这件事情的时候,我们通常发生的地点是飞机场,首先,我们应该到售票大厅去购买飞机票,因此,我根据我学过的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&&begin_minute<sys.wMinute))),则说明飞机没有起飞,此时可以订票同时也通过order()和refund()来表达。

以如果输入的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.wMinut e)),如果没起飞,在判断是否还有余票if(b[i].total==b[i].total_already),如果有,计算剩余的多少张票b[i].total-b[i].total_already,进而订在剩余票数的范围内购票,如果与之相反,则证明飞机已经起飞也就是说已经订不到票了。

相关文档
最新文档