欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    数据结构课程设计报告航空售票处服务系统.doc

    • 资源ID:4152937       资源大小:854.50KB        全文页数:37页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构课程设计报告航空售票处服务系统.doc

    淮阴工学院数据结构课程设计报告选题名称: 航空售票处服务系统 系(院): 计算机工程学院 专 业: 计算机科学与技术 班 级: 计算机1084 姓 名: 学 号: 1081308119 指导教师: 学年学期: 2009 2010 学年 第 2 学期2010年 6 月 26 日设计任务书课题名称航空售票处服务系统设计目的 本课程设计的目的是通过实践使学生经历一个小型系统开发的全过程并受到一次综合的训练,以便能较全面地理解、掌握和综合运用所学的知识去分析、解决实际问题。实验环境1、Windows Sever 2008 2、Visual C+ 6.0任务要求任务:完成航空售票处服务系统系统的分析设计工作,并选用适当的开发工具完成系统的开发。要求:1、完成需求分析;2、进行概念设计;3、进行详细设计和实现;4、进行调试与操作说明;工作进度计划序号起止日期工 作 内 容2010.06.21网上资料搜索2010.6.22需求分析与概念设计2010.6.23详细设计与调试2010.06.24完成报告及PPT讲稿,答辩指导教师: 2010 年 6 月 10 日 摘要:在当今经济和商务交往日益频繁的状况下,航空服务行业正面临客流量骤增的压力。越来越多的航空公司都认识到传统的售票方法已经不能适合当今社会的需要,必须借助先进的计算机信息技术对售票服务进行管理。“航空售票系统”可以说是整个航空售票计算机信息系统的中心子系统,因为航空售票最主要的功能就是为旅客提供订票退票。通过此程序能够实现添加、查询、订票、退票、修改、删除、浏览、保存等功能。实现这一课程,首先必须对一些知识点有所了解,我们是用单链表来做的。通过此程序能够实现添加、查询、订票、退票、修改、删除、浏览、保存等功能。实现这一课程,首先必须对一些知识点有所了解,我们是用单链表来做的。概要设计部分主要介绍了逻辑设计,物理设计,界面设计和系统功能模块图;源码部分给出了此程序所有的实现源代码。关键词:航空售票系统;订票退票;单链表;实现源代码目录1需求分析12 概要设计22.1总体功能结构设计22.2主要实现的方法和原理33详细设计和实现33.1添加航班信息模块33.2查询航班信息模块53.3订票函数模块93.4退票函数模块123.5修改航班信息模块163.6删除航班信息模块203.7浏览航班信息模块214调试与操作说明22总结30致谢31参考文献321需求分析本次课程设计利用C+语言来编写,其运行平台为Visual C+。1. 问题描述:航空客运订票业务活动包括:查询航线、客票预定和办理退票等。设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。2. 基本要求:任务:通过此系统可以实现如下功能:(1)录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)(2)查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);(3)可以输入起飞抵达城市,查询飞机航班情况;(4)订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;(5)退票:可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。(6)修改航班信息:当航班信息改变可以修改航班数据文件。3. 查询能实现的操作和功能如下:查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票少于订票额,则需重新询问客户要求。若需要,可登记排队候补;承办退票业务:根据客户的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队,首先询问排在第一的客户,若所退票数满足他的要求,则为他办理订票手续,否则一次询问其他排队候补的客户。2 概要设计2.1总体功能结构设计1 航空售票处服务系统业务活动包括:添加航班信息,查询航班信息,修改航班信息,删除航班信息,订票业务,退票业务,保存,退出等,以上述业务可以借助计算机来完成。2 每条航线所涉及的信息有:航班号,航班起点站,航班终点站,航班起飞时间日期,航班飞行时间,航班票数,航班剩余票数。3 作为示意系统,全部数据可以只放在内存中,但保存数据使用文件存储。4 系统能实现的操作和功能如下: 询航线:根据旅客提出的终点站名输出下列信息:航班号、起飞起点和重点,航班,订票数,等待订票客户和剩余票额。 航线信息的处理:包括添加,查询,修改,删除航线信息。 承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则为客户办理订票手续。若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; 承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所剩票额能满足他的要求则为他办理订票手续,否则依次询问其它排队候补的客户。5 两个客户名单可分别由线性表和队列实现。为查找方便已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线约情况登录在一张线性表上,由于航线基本不变采用顺序存储结构,并按航班有序或按终点站名有序。6 保存当前操作:将所有数据写入文件中。使下次登录时候可以使用此次操作的信息。为以后接入数据库留接口。7 密码验证部分:为以后接入数据库使用密码验证留接口。图2.1系统功能结构图2.2主要实现的方法和原理此课程设计主要使用的是链表的相关操作,如创建,插入,删除等。在设计订票等待相关函数的时候用了队列的先进先出的思想来设计等待函数。先申请等待的客户在有余票的时候优先得到订票权。3详细设计和实现3.1添加航班信息模块 队列算法输入相关数据(字符型)链表图3.1添加航班信息功能模块图此模块通过链表的创建和插入的原理,把输入的相关数据储存在链表中。函数如下:/.添加航班信息函数.void NewAirsysinfo(vector<Airsysinfo*> *vec_Air)/输入新的航班信息Airsysinfo* pA;char yes='n'cout<<"您确定要录入新的航班信息吗?(y/n):"cin>>yes;if(yes='n'|yes='N')return ;cout<<endl;string num,start,end,time,flytime; int count;/*开始录入航班信息*/cout<<"请输入新航班的编号:"cin>>num;cout<<endl;cout<<"请输入新航班的的起点站:"cin>>start;cout<<endl;cout<<"请输入新航班的的终点站:"cin>>end;cout<<"请输入新航班的的起飞时间:"cin>>time; cout<<endl;cout<<"请输入新航班的的总飞行时间:"cin>>flytime;cout<<"请输入新航班的的总票数:"cin>>count;cout<<endl;/申请新航班内存空间pA=new Airsysinfo();pA->SetNum(num); /新航班编号pA->SetStart(start); /新航班起点站pA->SetEnd(end); /新航班终点站pA->SetTime(time); /新航班起飞日期pA->SetFlyTime(flytime); /新航班总飞行时间(小时)pA->SetCount(count); /新航班总票数pA->SetLeftCount(count); /新航班剩余票数vec_Air->push_back(pA);cout<<endl;cout<<"t录入新航班信息成功,请查看!"<<endl;cout<<"t按任意键返回主界面!"cin.get();cin.get();/*结束录入航班信息*/3.2查询航班信息模块 链表顺序遍历输入字符(选择查找方式)节点图3.2查询航班信息功能模块图通过链表的顺序遍历来查找相关节点函数如下:/.查询航班信息函数.void FindAirsysinfo(vector<Airsysinfo*> vec_Air)/查询航班信息system("cls");cout<<endl;char choice='p'while(choice!='y') system("cls"); cout<<endl; cout<<"tt1按航班编号查询"<<"tt2.按起点站查询"<<endl; cout<<"tt3.按终点站查询"<<"tt4.按起飞时间(日期)"<<endl; cout<<"tt5.按飞行总时间查询"<<"t0.返回主界面"<<endl<<endl; cout<<"tt请选择(0-5):" cin>>choice; switch(choice) case '1':/按航班编号查询 string num; cout<<"t请输入要查询的航班编号:" cin>>num; for(int i=0;i<vec_Air.size();i+)/vec_Air.size()容器中实际个数 if(vec_Airi->GetNum()=num)/是否有相应的航班编号 vec_Airi->PrintInfo();/打印输出相应航班的所有信息 break; if(i=vec_Air.size() /如果找到所有记录最后还没有找到要找的航班编号,/则表示没有此航班 cout<<"t对不起,没有找到该编号的航班信息!" cin.get(); cin.get(); break; case '2':/按起点站查询 int flag=0; string start; cout<<"t请输入要查询起点站:" cin>>start; for(int i=0;i<vec_Air.size();i+)/把所有起点站相同的航班找出来 if(vec_Airi->GetStart()=start) vec_Airi->PrintInfo(); flag=1; /说明起码找到一条相应的记录 if(flag=0)/没有此航班记录 cout<<"t对不起,没有找到该起飞站航班信息!" cin.get(); cin.get(); break; case '3':/按终点站查询 int flag=0; string end; cout<<"t请输入要查询航班终点站:" cin>>end; for(int i=0;i<vec_Air.size();i+)/把所有终点站相同的航班找出来 if(vec_Airi->GetEnd()=end) vec_Airi->PrintInfo();/打印输出航班信息 flag=1;/说明起码找到一条相应的记录 if(flag=0) cout<<"t对不起,没有找到该终点站航班信息!" cin.get(); cin.get(); break; case '4':/按起飞时间(日期) int flag=0; string time; cout<<"t请输入要查询航班起飞日期:" cin>>time; for(int i=0;i<vec_Air.size();i+) if(vec_Airi->GetTime()=time) vec_Airi->PrintInfo(); flag=1; if(flag=0) cout<<"t对不起,没有找到该起飞日期的航班信息!" cin.get(); cin.get(); break; cin.get(); cin.get(); break; case '5':/按飞行总时间查询 int flag=0; string flytime; cout<<"t请输入要查询航班的飞行总时间:" cin>>flytime; for(int i=0;i<vec_Air.size();i+) if(vec_Airi->GetFlyTime()=flytime) vec_Airi->PrintInfo(); flag=1; if(flag=0) cout<<"t对不起,没有找到该终点站航班信息!" cin.get(); cin.get(); break; case '0':/返回 cout<<endl; cout<<"t确定要返回主界面吗?(y/n):" cin>>choice; break; 3.3订票函数模块 图3.3订票功能模块图输入节点相关数据,如航班数等,首先查找是否已经余票为零。若为零,则询问时候进入等候队列。若不为零则继续添加订票信息,进入订票队列。函数部分如下:/.订票函数部分.void BookAirsysinfo(vector<Airsysinfo*> *vec_Air)/订票vector<Airsysinfo*>:iterator v_Iter;/当作指针用system("cls");/清屏cout<<endl;string num;/航班号cout<<"t请输入要订票的航班号:"cin>>num;for(v_Iter=vec_Air->begin();v_Iter!=vec_Air->end();v_Iter+)if(*v_Iter)->GetNum()=num)/找到相应的航班号(*v_Iter)->PrintInfo();/输出航班信息break;if(v_Iter=vec_Air->end()/如果找到记录最后还没有找到此航班的记录cout<<"t对不起,暂时没有此航班号!"cin.get();cin.get();return ;if(*v_Iter)->m_wPerson.size()!=0)/是否有客户在等候订票for(int i=0;i<(*v_Iter)->m_wPerson.size();i+)/如果第一个客户所订票数小于此航班所剩余的票数,则询问此客户是否要订票 if(*v_Iter)->m_wPerson0.m_nWant<(*v_Iter)->GetLeftCount() cout<<"t请先核对并满足排队等候本航班的客户!"<<endl;/计算剩余票数int left=(*v_Iter)->GetLeftCount()-(*v_Iter)->m_wPerson0.m_nWant;char meet;/满足要求cout<<"t可以满足等候本航班的客户的订票数,是否要订票?(y/n):"cin>>meet;if(meet='y')/满足此客户的订票需求vector<Buyer>:iterator Iter_person; /声明一个客户类型的指针Iter_person=(*v_Iter)->m_wPerson.begin(); /指向等候队列首地址(*v_Iter)->SetLeftCount(left);cout<<"t已经为等候本航班的客户订票!请通知该客户!"<<endl;Buyer Person; Person.m_strID=(*v_Iter)->m_wPerson0.m_strID; Person.m_strName=(*v_Iter)->m_wPerson0.m_strName; Person.m_nWant=(*v_Iter)->m_wPerson0.m_nWant; /把已满足的客户放入已订得票的客户记录(*v_Iter)->m_haveBook.push_back(Person); /删除第一个已经满足订票的客户(*v_Iter)->m_wPerson.erase(Iter_person); /输出修改后的本航班所有信息 (*v_Iter)->PrintInfo();i-;if(*v_Iter)->m_wPerson.size()!=0)/还有客户等候本航班char wait='n'cout<<"t系统暂不能满足新客户的订票要求!是否要排队等候?(y/n):"cin>>wait;if(wait='y')Buyer p;/声明一个要等候的客户对象cout<<"t请输入此客户的ID编号:"cin>>p.m_strID;cout<<"t请输入此客户的姓名:"cin>>p.m_strName; cout<<"t请输入要订票的数目:" cin>>p.m_nWant; (*v_Iter)->m_wPerson.push_back(p);/进行排队等候cout<<"t此客户已经进入本航班的订票排队!"else /新客户,本航班没有客户在等候排票int count;cout<<"t请输入新客户要订票的数量:"cin>>count;if(*v_Iter)->GetLeftCount()<count)/若余票没有了cout<<endl;cout<<"t对不起,本航班已没有足够的票数"<<endl;cout<<"t是否要进入排队等候?(y/n):"char ch;cin>>ch;if(ch='y')Buyer p;cout<<endl;cout<<"t请输入此客户的ID号:"cin>>p.m_strID;cout<<endl;cout<<"t请输入此客户的姓名:"cin>>p.m_strName;p.m_nWant=count;(*v_Iter)->m_wPerson.push_back(p);cout<<"t此客户已进入等候排队订票中!"<<endl;else cout<<endl;cout<<"t您已取消了排队等候订票!"<<endl;else/可以满足订票要求,把新客户放入已订得票的客户记录里Buyer person;cout<<endl;cout<<"t请输入新客户的ID号:"cin>>person.m_strID;cout<<endl;cout<<"t请输入新客户的姓名:"cin>>person.m_strName;person.m_nWant=count;int left=(*v_Iter)->GetLeftCount()-count;/ (*v_Iter)->SetLeftCount(left); /设计本航班剩余票数 (*v_Iter)->m_haveBook.push_back(person); /记录可订得票的客户cout<<endl;cout<<"t成功为新客户订票!"<<endl;/cout<<"t按任意键返回主界面"cin.get();cin.get();3.4退票函数模块图3.4退票功能模块图先遍历到当前客户的信息节点,若在订票队列里面,则删除订票队列离得节点,然后在等候队列里面的第一个节点插入订票队列节点,等候队列节点里面的后面几个节点前移。若是删除等候队列里的节点,则直接删除若其后有节点,则前移。函数如下:/.退票函数.void CancelAirsysinfo(vector<Airsysinfo*> *vec_Air)/取消订票(航班)vector<Airsysinfo*>:iterator v_Iter;/指针system("cls");cout<<endl;string num;/航班号cout<<"t请输入要取消订票的航班号:"cin>>num;for(v_Iter=vec_Air->begin();v_Iter!=vec_Air->end();v_Iter+)/begin()传回迭代器中的第一个数据地址 /end()指向迭代器中末端元素的下一个,指向一个不存在元素if(*v_Iter)->GetNum()=num)/找到相应的航班号(*v_Iter)->PrintInfo();/输出航班信息break;if(v_Iter=vec_Air->end()/如果找到最后还没找到相应的航班记录cout<<"t对不起,暂时没有此航班号!"cin.get();cin.get();return ;char choice='n'cout<<"t要取消订票的客户是否在等候订票队列?(是则输入'y'):"<<endl;cout<<"t要取消订票的客户已经得了票(是则输入'n'):"cout<<"t请选择(y/n):"cin>>choice;if(choice='y'&&(*v_Iter)->m_wPerson.size()/在等候订票的客户取消等候订票业务string strID;/客户IDcout<<"t请输入在排队的客户ID:"cin>>strID;for(int i=0;i<(*v_Iter)->m_wPerson.size();i+)/查找队列是否有此ID的客户if(*v_Iter)->m_wPersoni.m_strID=strID)/找到有此ID的客户cout<<"t所找的客户信息如下:"<<endl;cout<<"t客户ID:"<<(*v_Iter)->m_wPersoni.m_strID<<"t"<<"姓名:"<<(*v_Iter)->m_wPersoni.m_strName<<"t"<<"所订票数:"<<(*v_Iter)->m_wPersoni.m_nWant<<endl;cout<<"t确定要取消此客户的等候订票业务吗?(y/n):"cin>>choice;if(choice='y')/取消订票vector<Buyer>:iterator v;v=(*v_Iter)->m_wPerson.begin()+i;(*v_Iter)->m_wPerson.erase(v);/删除此客户所有信息cout<<"t成功取消此客户的订票业务!"<<endl; (*v_Iter)->PrintInfo();/输出取消订票业务后的此航班记录信息break;if(i=(*v_Iter)->m_wPerson.size()cout<<"t对不起,没有此客户在等候订票队列!"<<endl;else if(choice='n'&&(*v_Iter)->m_haveBook.size()/订票的客户,不在等候队列里(即已经得到票)string strID;/客户IDcout<<"t请输入要退票的客户ID:"cin>>strID;for(int i=0;i<(*v_Iter)->m_haveBook.size();i+)/查找队列是否有此ID的客户if(*v_Iter)->m_haveBooki.m_strID=strID)/找到有此ID的客户cout<<"t所找的客户信息如下:"<<endl;cout<<"t客户ID:"<<(*v_Iter)->m_haveBooki.m_strID<<"t"<<"姓名:"<<(*v_Iter)->m_haveBooki.m_strName<<"t"<<"所订票数:"<<(*v_Iter)->m_haveBooki.m_strName<<endl;cout<<"t确定要取消此客户的订票业务吗?(y/n):"cin>>choice;if(choice='y')/取消订票int left=(*v_Iter)->GetLeftCount()+(*v_Iter)->m_haveBooki.m_nWant; (*v_Iter)->SetLeftCount(left);/设计剩余票数vector<Buyer>:iterator v;v=(*v_Iter)->m_haveBook.begin()+i;(*v_Iter)->m_haveBook.erase(v);/erase(beg,end)删除pos位置的数据,传回下一个数据的位置。即删除此客户所有信息cout<<"t成功完成此客户的退票业务!"<<endl;cout<<"t修改订票业务后的本航班信息如下:"<<endl; (*v_Iter)->PrintInfo();/输出取消订票业务后的此航班记录信息break;if(i=(*v_Iter)->m_haveBook.size()cout<<"t对不起,没有此客户在已订票客户记录里!"<<endl;else cout<<"t本航班没有任何客户!"<<endl;cout<<endl;cout<<"t按任意键返回主界面"cin.get();cin.get();3.5修改航班信息模块图3.5修改航班信息功能模块图使用了链表的顺序遍历。输入查找的信息字符,顺序遍历后找到节点,然后修改。函数部分如下:/.修改航班信息函数.void ModifyAirsysinfo(vector<Airsysinfo*> *vec_Air)/修改航班信息vector<Airsysinfo*>:iterator v_Iter;/相当于遍历指针system("cls");/清屏string num;cout<<"t请输入要修改信息的航班号:"cin>>num;for(v_Iter=vec_Air->begin();v_Iter!=vec_Air->end();v_Iter+)if(*v_Iter)->GetNum()=num)/查到相应的航班(编号)(*v_Iter)->PrintInfo();break;if(v_Iter=vec_Air->end()/找到最后没找到相应的航班cout<<"t对不起,没有此航班!"<<endl;cout<<"t按任意键返回主界面!"cin.get();cin.get();return ;char ch='n'cout<<"t是否确定要修改此航班信息?(y/n):"cin>>ch;if(ch='n')return ;/取消修改航班信息char choice='p'while(choice!='y')cout<<endl;cout<<"t1.修改航班编号"<<"ttt2.修改航班起飞站"<<endl;cout<<"t3.修改航班终点站"<<"tt4.修改航班起飞时间(日期)"<<endl;cout<<"t5.修改航班总飞行时间(小时)"<<"t6.修改航班总票数"<<endl;cout<<"t7.修改航班剩余票数"<<"tt8.修改等候订本航班票的客户"<<endl;cout<<"t0.返回主界面"<<endl<<endl;cout<<"t请选择(0-8):"cin>>choice;switch(choice)case '1':/修改航班编号string tem;

    注意事项

    本文(数据结构课程设计报告航空售票处服务系统.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开