《2022年飞机订票系统,数据结构附代码 .pdf》由会员分享,可在线阅读,更多相关《2022年飞机订票系统,数据结构附代码 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据结构实验报告实验三专业: 软件学院 学生姓名: 完成时间: 2014 年 5 月 2 日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 数据结构课程设计报告姓名2012 级实验室A109 提交日期2014.4.23 学号4 班组成绩指导教师实验题目:飞机订票系统。设计一个飞机票订票系统,完成对航空客运订票的业务管理,包括客户资料管理、原始数据的录入、航班信息的浏览、根据航班号查询航班信息、根据航线查询航班信息、订票和退票、
2、针对特定的航班号或是航线给出推荐的航班排序。问题解析(对问题的分析、理解和解题方法):主要考察数据结构中的线性表、队列以及图的各种相关操作,和文件的基本知识以及应用基本知识解决实际问题的能力。掌握好基本知识,将实际问题一步步分解,得出最终结果。数据结构选择、算法设计:此次课程设计我们小组成员主要借用C+ 语言中的类(或是 C语言中的结构体)和数组的结合,结合类的成员变量可以多样化的优点和数组的下标拥有类似指针遍历的功能的优点。将要处理的数据借用文件的处理手段存到结构体数组里从而将数据引进到程序里,其余的拓展操作都按基本的方法处理。任务分工及进度计划:花费三周时间完成代码编写、数据测试、报告书写
3、等全部任务。首先小组成员各自仔细研读实验要求,展开讨论,综合俩人的想法,去粗取精,捋出大致的创作思路并给出简单的计划实施流程,整合程序涉及的对象个数和各个对象应包括的成员变量从而给出类的定义,根据类定义给出部分用于测试的原始数据。站在用户的角度思考主函数开始后的每个步骤从而先写出主函数,所用到的各个方法的函数头给出。组员分配函数方法编写任务,在仔细研究每个步骤的前提下,做出相应的方法定义,各自完成各自的函数体编码后整合到一起。对整合后的代码进行初步完善,主要集中于类定义、方法实现、界面设计,补充注释,多次测试几组数据。上网查询相关知识,补充大脑,完善完美。用户手册:当用户启动程序后,后台会自动
4、加载原始信息。服务人员也可以通过更改原始数据文件及时更新航班信息。之后老用户需要输入客户名和密码进行登陆,新用户可以先注册或以游客身份进入。然后就进入正式的操作界面,永和可以根据界面信息提示一步步操作,当有错误操作时,程序会给出相应的警告和提示。信息浏览和信息查询会将结果直接显示在操作界面,而有关订票和退票的信息记录会实时输入到文件上,方便工作人员的查询使用。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 测试结果:对于的操作
5、,可以达到原目的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - -
6、 - - 第 5 页,共 18 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 程序清单: (部分程序代码显示)#include #include #include #include #include # define N 30 # define M 25 #defineOUTPUT%-d%s%s%s%s%s%1.2f%sn,pi.num,pi.city1,pi.city2,pi.tim
7、e1,pi.time2,pi.price,pi.discount,pany class plane public: int num;int f; /剩余票数char city120; char city220; char time120; char time220; char price20; float discount; char company20; pM; class guest public: int num; int sits; char name20; gM; class plane1 public: int num ;int f; char city120; char city
8、220; char time120; char time220; char price20; float discount; char company20; p1M; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - / 所有函数声明void login(); void input(); int menu0(); int menu3(); void output1(); void output2(); int menu1();
9、void search1(int number); void search2(); void order(); void backspace(); int menu2(); void sort1(char c1,char c2); void sort2(char c1,char c2); int deal(char c1,char c2); / 所涉及的全局变量,基本用于做中间变量int i1=0; int i2=0; int i3=0; int i4=0; int number=0; char c120; char c220; /main函数,总体流程int main () login();
10、 input(); /char *a=strtok(p0.city2, ); while (1) i1=menu0(); switch (i1) case 1: i4=menu3(); switch (i4) case 1: output1(); break ;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - case 2: output2(); break; break; case 2: i2=menu1(); switch
11、(i2) case 1: cout 请输入要查询的航班号 number; search1(number); break; case 2: /*cout请输入要查询的航线的起始站c1; coutendl; cout请输入要查询的航线的终点站c2;*/ search2(); break; break; case 3: order(); break; case 4: backspace(); case 5: i3=menu2(); switch (i3) case 1: cout 请输入要查询的航线的起始站c1; coutendl; cout请输入要查询的航线的终点站c2; 名师资料总结 - - -
12、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - - - - - sort1(c1,c2); break; case 2: cout 请输入要查询的航线的起始站c1; coutendl; cout请输入要查询的航线的终点站c2; sort2(c1,c2); break; break; default: cout 输入错误!请重新选择!endl; return 0; int menu0() cout*endlendl; cout 欢 迎 使 用 飞 机 订 票 系 统e
13、ndlendl; cout请输入您选择的操作 endlendl; cout1. 浏览 2.查询 3.订票 4.退票5. 排序endlendl; /coutp0.numendlp0.city1endlp0.city2endlp0.time1endlp0.time2endlp0.priceendlp0.discountendli1; return i1; int menu1() cout 请输入您选择的操作 endl; cout1. 根据航班号查询 2.根据航线查询 i2; return i2; int menu2() cout 请输入您选择的操作 endl; cout1. 根据票价排序 2.根据
14、时间排序 i3; return i3; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - - - - - - - - int menu3() cout 请输入您选择的操作 endl; cout1. 文件输出 2.图形输出 i4; return i4; void input() ifstream fin(plane.txt); if(!fin) cout 文件打开失败! endl; return ; for(int i=0;ipi.num; fin.get
15、line(pi.city1,17); fin.getline(pi.city2,17); fin.getline(pi.time1,8); fin.getline(pi.time2,8); fin.getline(pi.price,9); finpi.discount; fin.getline(pany,20); fin.close(); void output1() char w10; cout航班号起始站终点站起飞时间到达时间票价折扣所属航空公司 endl; for(int i=0;iM;i+) printf(OUTPUT); cout请按任意键 +Enter 结束返回上层菜单 :w; v
16、oid output2() char w10; cout 起始站 终点站 endl; for(int i=0;iM;i+) coutpi.city1pi.city2endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 18 页 - - - - - - - - - cout请按任意键 +Enter 结束返回上层菜单 :w; void search1(int number) char w10; int j=0; for(int i=0;iM;i+) if(pi.num
17、=number) cout 您所查航班的详细信息为endl; cout航班号起始站终点站起飞时间到达时间票价折扣所属航空公司 endl; printf(OUTPUT); j=1; if(j=0) cout 抱歉!没有符合您要求的航班endl; cout 请按任意键 +Enter 结束返回上层菜单 :w; void search2() cout 请输入要查询的航线的起始站c1; coutendl; cout请输入要查询的航线的终点站c2; char w10; int j=0; for(int i=0;iM;i+) if(strcmp(strtok(pi.city1, ),c1)=0)&(strc
18、mp(strtok(pi.city2, ),c2)=0) cout您所查航线的详细信息为endl; cout航班号起始站终点站起飞时间到达时间票价折扣所属航空公司 endl; printf(OUTPUT); j=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - if(j=0) cout抱歉!没有符合您要求的航班endl; cout 请按任意键 +Enter 结束返回上层菜单 :w; void order() char w
19、10; int j=0; ofstream fout(order.txt); if(!fout) cout 文件打开失败! endl; return ; fout 姓名 ; fout 航班号 ; fout 订票数量 ; for(int i=0;iM;i+) cout请输入客户姓名 gi.name; cout 请输入您预定航班的航班号gi.num; cout 请输入你预定的机票数目gi.sits; foutgi.name ; foutgi.num ; foutgi.sits ; for(int k = 0;k M;k+) if(gi.num = pk.num) pk.f=pk.f-gi.sits
20、; cout 请输入你的选择, 1、继续订票 2 、退出订票 j; if(j=2) break; fout.close(); cout 请按任意键 +Enter 结束返回上层菜单 :w; void backspace() char w10; int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - int j; int tui; int q; char yhname20; bool flag = true; while(
21、flag) cout*欢迎使用退票系统:*endl; coutyhname; for(i = 0;i M-1) cout 无此客户!请检查是否姓名输入有误endl; else coutyhname您好!您所订的航班信息如下:endl; cout 航班号 订票数endl; coutgi.num gi.sitsendl; couttui; while(tuigi.sits) cout 您没有订那么多张票 endl; couttui; coutq; if(q=1) gi.sits = gi.sits-tui; for(j = 0;j M;j+) if(gi.num =pj.num) pj.f=pj.
22、f+tui; if(gi.sits = 0) for(i=i+1;iM;i+) strcpy(gi-1.name,gi.name); gi-1.num = gi.num; gi-1.sits = gi.sits; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 18 页 - - - - - - - - - cout 退票成功! !endl; cout 您退了 tui张票,当前还剩gi.sits张票endl; else cout 放弃退票,返回退票主页面endl; bre
23、ak; cout 请输入你的选择, 1、继续退票 2 、退出退票 q; if(q=2) flag=false; cout 请按任意键 +Enter 结束返回上层菜单 :w; void sort1(char c1,char c2) char w10; int g=0; int i; int j; char temp20; deal(c1,c2); int count = deal(c1,c2); if(count!=0) coutcount; for(i=1;i=i;j-) /对该轮待排序的数进行排序if(p1j.pricep1j-1.price) /将小数放在前,大数放在后strcpy(tem
24、p,p1j-1.price); strcpy(p1j-1.price,p1j.price); strcpy(p1j.price,temp); cout 您所查航线的详细信息为endl; cout 航班号起始站终点站起飞时间到达时间票价折扣所属航空公司 endl; for(i=0;icount;i+) printf(%-d%s%s%s%s%s%1.2f%sn,p1i.num,p1i.city1,p1i.city2,p1i.time1,p1i.time2,p1i.price,p1i.discount,pany ); g=1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
25、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 18 页 - - - - - - - - - if(g=0) cout 抱歉!没有符合您要求的航班endl; cout 请按任意键 +Enter 结束返回上层菜单 :w; void sort2(char c1,char c2) char w10; int g=0; int i; int j; char temp20; deal(c1,c2); int count = deal(c1,c2); if(count!=0) coutcount; for(i=1;i=i;j-) /对该轮待排序的数进行
26、排序if(p1j.time1p1j-1.time1) /将小数放在前,大数放在后strcpy(temp,p1j-1.time1); strcpy(p1j-1.time1,p1j.time1); strcpy(p1j.time1,temp); cout您所查航线的详细信息为 endl; cout 航班号起始站终点站起飞时间到达时间票价折扣所属航空公司 endl; for(i=0;icount;i+) printf(%-d%s%s%s%s%s%1.2f%sn,p1i.num,p1i.city1,p1i.city2,p1i.time1,p1i.time2,p1i.price,p1i.discount
27、,pany ); g=1; if(g=0) cout 抱歉!没有符合您要求的航班endl; cout 请按任意键 +Enter 结束返回上层菜单 :w; int deal(char c1,char c2) int count = 0; for(int i=0;iM;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - if(strcmp(strtok(pi.city1, ),c1)=0)&(strcmp(strtok(pi
28、.city2, ),c2)=0) ofstream fout(sort.txt); if(!fout) cout 文件打开失败! endl; break ; foutpi.num ; foutpi.city1 ; foutpi.city2 ; foutpi.time1 ; foutpi.time2 ; foutpi.price ; foutpi.discount ; pany ; fout.close(); p1count.num = pi.num; strcpy(p1count.city1,pi.city1); strcpy(p1count.city2,pi.city2); strcpy(p
29、1count.time1,pi.time1); strcpy(p1count.time2,pi.time2); strcpy(p1count.price,pi.price); p1count.discount = pi.discount; strcpy(pany,pany); count+; return count; void login() char name20; char password20; bool flag = true; cout 欢迎您的使用! ! ! endlendl; while(flag) coutname; coutendl; coutpassword; coute
30、ndl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - coutendl; if(strcmp(name,邢璐) = 0 & strcmp(password,1234) = 0) flag = false; else cout 用户名或密码有误,请您重新输入! ! !endlendl; 总结(对所作程序进行分析、评价运行效果,总结遇到的问题和解决办法)基本完成题目要求。在实验过程中遇到的最大难题是对于字符串的处理问题。如何
31、将文件信息以空格为标志读入到程序中?刚开始的时候没有任何的思路,网上也只有文件信息读入的算法,对于具体程序要求应用到的分段读入字符串并存到字符数组中的算法没有任何头绪。经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索结合从文件读入字符串算法和字符串基本操作的大体思路解决了问题。经过三天的修改,终于写出了符合要求的算法。经过此次课程设计, 自己解决编程中从在的问题, 认识到了理论与实践结合的重要性,仅仅只是从课本上学到算法原理是远远不够的。在实践中,我总会出现许多错误。这就要求以一个脚踏实地的态度来处理问题。我深刻地认识到自己写程序的不足,使我学到了好多知识,让我明白了算法与编程的密切关系,使我受益匪浅。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -