收藏 分销(赏)

面向对象课程设计《民航订票系统》.doc

上传人:仙人****88 文档编号:8745341 上传时间:2025-02-28 格式:DOC 页数:30 大小:3.41MB
下载 相关 举报
面向对象课程设计《民航订票系统》.doc_第1页
第1页 / 共30页
面向对象课程设计《民航订票系统》.doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述
《面向对象程序设计》课程设计报告 题目: 民航订票系统 班级: 学号: 姓名: 指导老师: 时间: 15-16周 / 2015年12月7日至2015年12月18日 成绩等级: 1 一、 需求分析 设计一个民航订票系统,实现如下功能: (1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定); (2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况; (3)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关提示信息; (4)退票: 可退票,退票后修改相关数据文件; (5)客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号; (6)修改航班信息:当航班信息改变可以修改航班数据文件。 二、对每个类的说明,包括数据成员、成员函数的含义与功能 本程序中所用到的数据类型有:int ,chat,结构,指针 数据结构有链表,其中链表的数据域是结构。结构等数据的定义如下: typedef struct Customer //已定票乘客信息 { char Name[7]; //姓名 int Amount; //定票数 char Rank; //舱位等级 int Seat_No; //座位号 struct Customer *Next; }Customer; typedef struct Replace //替补乘客信息 { char Name[7]; //姓名 int Amount; //定票数 char Rank; //舱位等级 char Seat_No; //座位号 struct Replace *Next; }Replace,*PReplace; typedef struct Flight //航线信息 { char Des_Name[10]; //终点站名 char Flight_No[6]; //航班号 char Plane_No[6]; //飞机号 char Week_Day; //飞行周日 int Customer_Amount; //乘员定额 int Free_Amount; //剩余票数 float Price[3]; //舱位等级的价格 Replace *ReplName; //该航班的候补乘客名单 Customer *CustName; //该航班的已定票乘客名单 struct Flight *Next; //指示下一航线结点 }Flight,*PFlight; int Customer_Count=0; //所有航线的定票乘客总数 Flight *Head; //航线头指针 Flight *p2; //航线结点指针 Customer *Custp1[MAX]; //各条航线乘客结点指针 Replace *Replp1[MAX]; //各条航线候补结点指针 int IsEmpty=1; //是否有定票乘客 int IsReplace=1; //是否有候补乘客 Customer *prior; //满足要求的定票乘客的前结点,以作删除操作 三、系统框架图 密码登陆界面 开始 航线管理 订票系统 退票办理 乘客管理 系统离开 航线增设 航线查看 航线修改 返回主菜单 订票 乘客 信息 候补乘客 信息 返回主菜单 是否确认离开 四、调试分析 在调试过程中,由于没有做出界面而是在DOS环境下实现的,所以要想得到比较友好的DOS界面必须耐心地调整.。在密码登陆时,输入密码出现实心黑圆点也是通过循环语句多次慢慢调试出的。在分析实现时,首先想到的是用链表来存放记录,但每个记录包括的许多信息最好是存放在结构中,故选取以结构为链表信息域的数据结构来实现。 改进之处:1>用可视化做出界面,让程序实现起来更加好看。 2>用文件实现数据信息的存取,本题中可以通过改动来增加此项功能。 3>退票时,若乘客定的是多票,则出现询问其退几张票。 五、用户手册 编绎连接得到EXE文件,运行程序,出现如下密码登陆界面(以lyh为密码) 输入lyh, 按下回车 接着出现 选取1,按下回车 选取1,按下回车 按提示输入并按回车,最后出现如下界面: 按Y或y继续录入航班信息,输入N或n退回。 输入Y继续输入一些信息..(;输入的航班号若不唯一则出现提示信息,并要求重新输入) 输入N,回车,返回航线管理子菜单 输入2,回车查看航线信息 按下任意键返回航线管理子菜单 输入3对航线进个修改;输入4返回主菜单, 输入2,回车,进入订票办理界面如下: 若输入的航班号有误,则出现如下提示界面: 按下Y,继续 按提示一步步输入,直到输入完毕,出现如下界面 由于本人比较懒,所以没有在订票人所定票数为所有时显示”包机” 0.0 输入y,继续定票,输入N返回主菜单 若余票不足,则出现如下界面: 输入N出现是否退出“订票办理”的提示信息,输入Y出现: 按提示,输入信息,直至出下如下界面: 输入Y继续订票,输入N返回主菜单界面 输入4,查看乘客信息,界面如下: 输入1,回车 按下任意键,返回乘客管理子菜单 输入2,回车,查看候补乘客信息: 按下任意键返回乘客管理子菜单 输入3返回主菜单 输入3,回车,进入退票办理界面 按提示一步步输入 (本系统只有“一退全光”的效果 >-<) 按下任意键返回主菜单 输入5,回车 输入N返回主菜单,输入Y退出航空订票管理系统 汪:1>凡提示输入Y或N时不分大小写 2>在主菜单及子菜单界面时,若输入的菜单项不存在,则出现(以主界面为例) 按下任意键返回主菜单界面,可以继续输入菜单项 六、附录 11 #include <iostream.h> #include <process.h> #include <string.h> #include <conio.h> #include <stdio.h> #include <iomanip.h> #define MAX 50 #define NULL 0 typedef struct Customer //已定票乘客信息 { char Name[7]; //姓名 int Amount; //定票数 char Rank; //舱位等级 int Seat_No; //座位号 struct Customer *Next; }Customer; typedef struct Replace //替补乘客信息 { char Name[7]; //姓名 int Amount; //定票数 char Rank; //舱位等级 char Seat_No; //座位号 struct Replace *Next; }Replace,*PReplace; typedef struct Flight //航线信息 { char Des_Name[10]; //终点站名 char Flight_No[6]; //航班号 char Plane_No[6]; //飞机号 char Week_Day; //飞行周日 int Customer_Amount; //乘员定额 int Free_Amount; //剩余票数 float Price[3]; //舱位等级的价格 Replace *ReplName; //该航班的候补乘客名单 Customer *CustName; //该航班的已定票乘客名单 struct Flight *Next; //指示下一航线结点 }Flight,*PFlight; int Customer_Count=0; //所有航线的定票乘客总数 Flight *Head; //航线头指针 Flight *p2; //航线结点指针 Customer *Custp1[MAX]; //各条航线乘客结点指针 Replace *Replp1[MAX]; //各条航线候补结点指针 int IsEmpty=1; //是否有定票乘客 int IsReplace=1; //是否有候补乘客 Customer *prior; //满足要求的定票乘客的前结点,以作删除操作 //-------密码登入窗口函数---------- int Code_Verify() { char b[10]; char c[10]="lyh";//已经进行简单加密 char a; int i=0,j,k=1,x; // system("cls"); // cout<<"\n\n\n\n\n\n\n\n\n\t\t\t请输入系统密码:"; while(1) { system("cls"); cout<<"\n\n\n\n\n\n\n\n\n\t\t\t请输入系统密码:"; for(j=0;j<i;j++) cout<<"●"; cout<<endl; a=getch(); if(int(a)!=8||int(a)!=13)//不等于回车或退格键 b[i]=a; if(int(a)==8) { i-=2; system("cls"); cout<<"\n\n\n\n\n\n\n\n\n\t\t\t请输入系统密码:"; for(j=0;j<i;j++) cout<<"●"; cout<<endl; } if(int(a)==13) { b[i]='\0'; if(strcmp(c,b)==0) return 0; else { if(k==3) { while (!kbhit()) { system("cls"); for(x=0;x<100000000;x++); cout<<"\n\n\n\n\n\n\n\n\t\t 你无权使用本系统,任意键退出系统..."<<endl; for(x=0;x<100000000;x++); } return 1; } cout<<"\n\t\t 密码错误,你还有"<<3-k<<"次机会.请按任意键,重新输入."<<endl; k++; getch(); } i=-1; } i++; } } //-------启动画面函数---------- void Cover() { char line[]={"━━━━━━━━━━"}; char bar[]={"...."}; int i,j,k=0,x=0,y=0; for(i=1;i<=strlen(line)/2;) { system("cls"); for(j=0;j<9;j++) //改变行坐标 cout<<endl; for(j=0;j<(75-strlen(line))/2;j++) //改变列坐标 cout<<" "; for(j=1;j<=i;j++) //进度显示器 cout<<"■"; for(x=strlen(line)/2;x>i;x--) cout<<"□"; if(k==4) i++; cout<<endl; for(j=0;j<(75-strlen(line))/2;j++) //行坐标定位 cout<<" "; cout<<line; //输出线条 cout<<endl; for(j=0;j<(65-strlen(bar))/2;j++) cout<<" "; cout<<(i-1)*10<<"% Loading"; cout.write(bar,k); cout<<endl; for(j=0;j<10;j++) cout<<endl; for(j=0;j<24;j++) cout<<" "; cout<<"正在启动航班订票系统!!!"<<endl; for(j=0;j<24;j++) cout<<" "; for(j=0;j<=12;j++) cout<<"─"; cout<<endl; for(j=0;j<10000000;j++);//延时效果 k++; if(k>4) k=0; } } //---------------菜单模板函数--------------- char ModelMenu(char *s[],int Itemcount) { int i; char answer; system("cls"); cout<<"\n\n"; cout<<"\t\t\t┌──────────────┐"<<endl; cout<<"\t\t\t"<<s[0]<<endl; cout<<"\t\t\t├──────────────┤"<<endl; cout<<"\t\t\t│              │"<<endl; cout<<"\t\t\t│ ┌──────────┐ │"<<endl; for(i=1;i<Itemcount;i++) { cout<<"\t\t\t"<<s[i]<<endl; if(i+1!=Itemcount) cout<<"\t\t\t│ ├──────────┤ │"<<endl; } cout<<"\t\t\t│ └──────────┘ │"<<endl; cout<<"\t\t\t└──────────────┘"<<endl; cout<<"\t\t\t 请输入菜单项前的操作代码:"; cin>>answer; return answer; } //---------------主菜单函数--------------- char MainMenu() { char *MenuItem[]={"│  航空客运订票系统菜单  │","│ │[1]. 航 线 管 理 │ │",\ "│ │[2]. 订 票 办 理 │ │","│ │[3]. 退 票 办 理 │ │","│ │[4]. 乘 客 管 理 │ │",\ "│ │[5]. 系 统 离 开 │ │"}; return ModelMenu(MenuItem,6); } //---------------是否继续函数--------------- char Continue() { int i; char answer; while(1) { cout<<"\t\t "; for(i=0;i<15;i++) cout<<"─"; cout<<"\n\t\t\t 是否继续(Y/N)?"; cin>>answer; if(answer=='y'||answer=='Y') return 'y'; else if(answer=='n'||answer=='N') return 'n'; else cout<<"\t\t\t 输入错误,请重新输入!"<<endl; } } //---------------操作出错函数--------------- void ErrorMess() { cout<<"\n\t\t\t对不起,没有相关菜单项,按任意键继续..."<<endl; getch(); } //-----------------系统退出----------------- int ExitSystem() { char answer; cout<<"\n\t\t\t 你确定是否真要离开系统吗(Y/N)?"; cin>>answer; if(answer=='y'||answer=='Y') return 1; else return 0; } //--------------操作提示函数------------- void prefix(char *Item) { int i; system("cls"); cout<<"\n\n\t\t\t 当前操作:"<<Item<<endl; cout<<"\t\t "; for(i=0;i<15;i++) cout<<"─"; cout<<endl; } //--------------航线查找函数------------- //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_Add() { Flight *p1; //建立临时航线结点 while(1) { if(Head==NULL)//航线为空 { p1=p2=new Flight; //建立首个航线 Head=p2; } else { p1=new Flight; //建立航线结点 p2->Next=p1; //前一航线结点指向当前航班结点 p2=p1; //保留当前航班结点地址 } prefix("航线增设"); cout<<"\t\t\t 请输入终点站名:"; cin>>p2->Des_Name; while(1) //数据合法性检验 { cout<<"\n\t\t\t 请输入航班号(唯一):"; cin>>p2->Flight_No; if(Find_Line(Head,p2->Flight_No)) //存在航班号 cout<<"\n\t\t\t 输入的航班号不唯一!"<<endl; else break; } cout<<"\n\t\t\t 请输入飞机号:"; cin>>p2->Plane_No; while(1) { cout<<"\n\t\t\t 请输入飞行周日(1-7):"; cin>>p2->Week_Day; if(p2->Week_Day<'1'||p2->Week_Day>'7') { cout<<"\n\t\t 数据输入错误,按任意键继续输入."<<endl; getch(); } else break; } cout<<"\n\t\t\t 请输入乘员定额:"; cin>>p2->Customer_Amount; cout<<"\n\t\t\t 请输入头等舱票价:"; cin>>p2->Price[0]; cout<<"\n\t\t\t 请输入普通舱票价:"; cin>>p2->Price[1]; cout<<"\n\t\t\t 请输入经济舱票价:"; cin>>p2->Price[2]; p2->Free_Amount=p2->Customer_Amount; //剩余票数与乘员定额相同 p2->CustName=NULL; //该航线定票乘客头指针为空 p2->ReplName=NULL; //初始候补名单为空 if(Continue()=='n') { p2->Next=NULL; //航线的下一结点为空 return; } } } //------------航线是否为空函数------------- int Empty_Flight() { if(Head==NULL) { system("cls"); cout<<"\n\n\n\n\n\n\n\n\t\t 对不起,没有相关航线。按任意键返回..."<<endl; getch(); return 1; } else return 0; } //------------航线查看函数----------------- void Line_See() { int Day; Flight *p1; p1=Head; char *Week_Day[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"}; if(Empty_Flight()) //航班线为空 return; prefix("航班查看"); cout<<" ┌────┬───┬───┬────┬────┬────┬────────┐"<<endl; cout<<" │ │ │ │ │ │ │ 票 价   │"<<endl; cout<<" │终点站名│航班号│飞机号│飞行周日│乘员定额│剩余票数├──┬──┬──┤"<<endl; cout<<" │    │   │   │    │    │    │头舱│普舱│经舱│"<<endl; cout<<" ├────┼───┼───┼────┼────┼────┼──┼──┼──┤"<<endl; while(p1!=NULL) { Day=p1->Week_Day-'0'-1;//数字转换相应星期数 cout<<" │"<<setiosflags(ios::left)<<setw(8)<<p1->Des_Name<<"│"<<setw(6)<<p1->Flight_No<<\ "│"<<setw(6)<<p1->Plane_No<< "│"<<setw(8)<<Week_Day[Day]<< "│ "<<setw(5)<<p1->Customer_Amount<<\ "│ "<<setw(5)<<p1->Free_Amount<<"│"<<setw(4)<<p1->Price[0]<<"│"<<setw(4)<<p1->Price[1]<<"│"<<setw(4)<<p1->Price[2]<<"│"<<endl; p1=p1->Next; if(p1!=NULL) cout<<" ├────┼───┼───┼────┼────┼────┼──┼──┼──┤"<<endl; } cout<<" └────┴───┴───┴────┴────┴────┴──┴──┴──┘"<<endl; cout<<"\n\t\t\t 按任意键返回子菜单..."<<endl; getch(); } void Sub1Menu() { char *MenuItem[]={"│ 航空客运航线管理子菜单 │","│ │[1]. 航 线 增 设 │ │",\ "│ │[2]. 航 线 查 看 │ │","│ │[3]. 航 线 修 改 │ │","│ │[4]. 返 回 主 菜 单 │ │"}; while(1) switch(ModelMenu(MenuItem,5)) { case '1':{Line_Add();break;} case '2':{Line_See();break;} case '3':{return;} default:{ErrorMess();} } } //---------------订票办理函数--------------- void Sub2Menu() { int Ticket_Count,Seat_No,i,flag=0; int Flight_No=0; //记录满足条件的航线的定票结点 Flight *p1; //记下满足条件的航线结点地址 Customer *p2; //临时性定票乘员结点 Replace *p3; //临时性候补乘员结点 char answer[7]; //用户输入的航班数据 char temp; int tag=0; //候补乘客标志位 int Amount; int IsRepl=0; //是否执行候补操作标志位 if(Empty_Flight()) //航班线为空 return; while(1) { prefix("订票办理"); flag=0; //标志位清零以重新作出判断 Flight_No=0; tag=0; cout<<"\n\t\t\t 请输入航班号:"; cin>>answer; if(Find_Line(Head,answer,p1,Flight_No)) //调用航线查找函数,若存在则进行以下操作 { while(1) //数据合法性检验 { cout<<"\n\t\t\t 请输入定票数:"; cin>>Ticket_Count; if(Ticket_Count==0) { cout<<"\n\t\t\t请输入大于零的数,按任意键继续输入."<<endl; getch(); } else break; } if(p1->Free_Amount>=Ticket_Count) { Customer_Count++; //定票乘客总数增1 flag=1; //表明进入了订票实际操作 IsRepl=1; //定票量满足,无需进入候补操作 Amount=p1->Free_Amount; //记录剩余票数 if(p1->CustName==NULL) //首个定票乘客,并记录相关属性 { Custp1[Flight_No]=p2=new Customer; //建立该航线的首位乘客结点 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; //订票数 Seat_No=p1->Customer_Amount-p1->Free_Amount+1; //算出座位号 Custp1[Flight_No]->Seat_No=Seat_No; //赋座位号 p1->Free_Amount-=Ticket_Count; //减去定票数 cout<<"\n\t\t\t 请输入你的姓名:"; cin>>Custp1[Flight_No]->Name; while(1) //数据合法性检验 { cout<<"\n\t\t\t 请输入舱位等级(1-3):"; cin>>Custp1[Flight_No]->Rank; if(!(Custp1[Flight_No]->Rank>='1'&&Custp1[Flight_No]->Rank<='3')) {
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服