1、查询航线:根据旅客提出的终点站名(例:输入:济南),输出下列信息:航班号、飞机号、星期几飞行、余票数
2、承办订票业务:根据客户提出的要求(航班号(输入字符串)、订票数额(输入整型数))查询该航班票额情况,若有余票,为客户办理订票手续,若已满员或余票额少于订票额,则询问客户是否登记排队等候。
3、承办退票业务:根据客户提供的情况(日期(输入1-7表示星期几)、航班(字符串表示)),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的用户,若能满足他,则为其办理订票手续,否则依次询问其他候补客户。二、概要设计1、链表抽象数据类型ADTList
{数据对象:D={ai|ai∈EleSet,i=1,2,…,n,n≥0}
数据关系:R1={
操作结果:初始化一个链表voidInsertNode(LT&);
初始条件:链表已经存在操作结果:插入一个结点boolDeleteNode(LT&);初始条件:链表已经存在
操作结果:删除一个结点}ADTList
2、队列抽象数据类型ADTQueue{
数据对象:D={ai|ai∈EleSet,i=1,2,…,n,n≥0}数据关系:R1={
基本操作:MyQueue();
操作结果:初始化一个队列voidEnQueue(QT&);初始条件:队列已经存在
操作结果:进对列voidDnQueue(QT&);
初始条件:队列已经存在操作结果:出对列boolEmpty();
初始条件:队列已经存在操作结果:队列是否为空}ADTQueue
3、主程序流程图:
三、详细设计
1、链表及链队列结点类型template
friendclassMyList
LQNode();
//初始化结点LQNode(T);
//利用参数的值初始化结点~LQNode();private:
Tdata;//存放结点数据
LQNode
2、链表类型
template
public:
MyList();
//初始化链表,为头指针分配存储空间,并使头接点next域指向空。~MyList();
voidInsertNode(LT&);
//插入一个结点,取得链表头指针,生成一个新结点p,为新结点赋值,利用头插入法,
//将结点插入链表p->next=head->next;head=p;boolDeleteNode(LT&);
//删除一个结点,利用一个临时指针p,通过while循环,p=p->next,找到要删除的结
//点,将其前一个结点的next域指向他的下一个结点。private:
LQNode
3、链队列类型
template
MyQueue();
//初始化队列,front=rear=newLQNode
voidEnQueue(QT&);
//入队列,生成一个新结点node,为结点赋值,rear->next=node,node->next=NULL;
voidDnQueue(QT&);
//出对列,对头元素出队,若对列不空front=front->nextboolEmpty();
//判断一个队列是否为空,若front->next==NULL则队列为空private:
LQNode
4、其他类型设计//classAirLine
classAirLine//将航线抽象为一种抽象数据类型类{
friendvoidInitAirLine(AirLine*line);
friendostream&operator<<(ostream&output,constAirLine&line);public:
AirLine(void);//初始化类成员~AirLine(void);
stringGetEndPoint();//取得终点站站名intGetSeatNum(int);//取得票数
intGetSeatRemain(int);//取得剩余票数
voidSetSeatRemain(intnum,intwhickWeek);//修改剩余票数
stringGetFlightNum(void);
//取得航班号
voidInsertPassenger(Passenger&temp);
//有乘客订票时,保存该乘客的信息,pList.InsertNode()boolIsFly(intwhichWeek)const;//查询该天有没有航班
voidInsertAwait(Passenger&temp);
//有登记候补的乘客时,保存该乘客的信息,pQueue.EnQueue()boolDeletePassenger(Passenger&);
//从链表中删除乘客信息,pList.DeleteNode()intIfAwaitBook(inttiNum,intwhichWeek);//遍历队列,查看是否有符合条件的候补乘客//Passengernode;
//while(!pQueue.Empty())//{
//if(有符合的)//返回1//}
//返回0private:
stringendPoint;stringflightNum;stringairNum;boolweek[8];seatNum[8];
int
intseatRemain[8];MyList
//classPassenger
enumTicketGrade{AA,BB,CC};classPassenger{
~Passenger(void);
Passenger(conststring&passengerName="",inttick=0,intg=1,intw=1);//初始化
booloperator==(Passenger&d);//重载的==运算符intGetTickets();//取得订票额intGetWeek();//取得日期private:
stringname;inttickets;TicketGradegrade;intflightWeek;};
4、主程序和其他伪码算法//mainintmain(){
while(用户不推出程序){switch(用户选择要做的操作){case1:查询航线信息case2:承办订票业务case3:承办退票业务}}}
boolIsQuit()//询问用户是否退出系统{
提示用户是否退出系统Y/y是N/n否switch(用户输入){
case‘Y’:case‘y’:
returntrue;case‘N’:case‘n’:
returnfalse;}
}
用户输入终点名for(不到顺序表结束)
voidBookTicket(AirLine*line)//办理订票业务{
输入航班号输入订票额
if(tiNum>line[i].GetSeatRemain(whichWeek))//没有足够的机票数IfAwait(line[i],tiNum,whichWeek);//办理登记候补elseTransactBookTicket(line[i],tiNum,whichWeek);//有足够的票数,办理订票}
voidReturnTicket(AirLine*line)//办理退票业务{
if(line[i].DeletePassenger(temp)==true)//调用链表的DeletePassenger(),若删除成功{cout<<"办理退票完毕,谢谢合作"< voidIfAwait(AirLine&line,inttiNum,intwhichWeek)//办理登记候补 { cout<<"空座不够,是否排队候补?Y/y是N/n否"< 否cout<<"谢谢合作,再见。"< voidTransactBookTicket(AirLine&line,inttiNum,intwhichWeek){ 输入姓名 输入舱位等级 line.InsertPassenger(temp); GetSeatNum(whichWeek);//取得该航班总票数GetSeatRemain(whichWeek);//取得剩余票数输出座位号 SetSeatRemain(tiNum,whichWeek);//设置剩余票数} voidIfBookTicket(AirLine*line,stringfiNum,inttiNum,intwhichWeek){ for(inti=0;i voidInitAirLine(AirLine*line){ 初始化航线信息} 5、函数调用关系图 四、调试分析 调试的过程中,对程序做了几点改进,增加了程序的容错能力,不论用户输入什么内容,程序都能安全检查,若输入的有误,则提示用户重新输入,或重新办理业务。 从本实习题的编制过程中容易看出,线性表的应用广泛,线性表可以直接作为一种数据结构使用,也可以作为栈或队列的存储结构,构成链栈或链队列使用。五、用户手册 1、本程序运行环境为DOS操作系统,执行文件为planeTicket.exe。2 、进入演示程序后,即显示用户界面为: 3用户根据提示进行操作。六、测试结果 根据提示,用户输入选项:1查询航线, 2 订票业务 3退票业务 4 输入错误时的显示: 七、附录 源程序文件名清单AirLine.hAirLine.cppPassenger.hPassenger.cppDataStructure.h Main.cpp 八.心得体会 这次课程设计进行了三天,虽然一整天都在电脑房里对着电脑,很枯燥, 也很辛苦,但是我觉得还是很有收获的。 这是我们第一次自己去设计一个比较系统的程序,对我们来说也是一个很好的锻炼。 首先,为了能写出程序,我将以前所学都好好的巩固了一遍,并且努力的去灵活的运用。起 码现在对结构体,链表的操作还是熟练了很多。以前一些很模糊的知识点,通过这次练习, 很多都清楚起来。其次,平时都是编写一些单个的操作,这次需要自己写出一个可以实现 几个功能的系统性的程序,刚开始时是一头雾水,但经过大家的讨论,自己的摸索,也慢慢 找到了方法。这让我体会到,在编写程序时,不仅需要扎实的知识,还要有细心周到的考虑, 同学之间的合作也是很重要的。 在这三天里,我觉得发现了自己还有很多很多的不足,也深刻的体会到了自己还 有很多东西要学,而且要真的掌握,还得多用心,多用脑。计算机的确不好学,但只要努力 就会有收获。这次程序是写了不少,但还是没能运行出一个正确的结果,不过我相信,经过 以后的学习和努力,是肯定能做出一个好的程序来的! 参考文献 谭浩强.C语言程序设计(第三版).北京:清华大学出版社,2005 北方科技学院 软件课程设计任务书 课程设计题目航空客运订票 [问题描述]航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。 [基本要求](1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量); (2)系统能实现的操作和功能如下:①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补;③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求坝u为他办理订票手续,否则依次询问其它排队候补客户。 [撰写格式]课程设计论文要求格式规范,条理清楚,首页为封皮,应注明题目,学生姓名、班级、学号。次页为课程设计任务书。论文内容应包括:题目分析,设计思路,完整的程序清单和必要的注释,以及调试的实验结果和测试过程,最后是课设的收获及参考文献。要求正文字体为宋体小四号,按给定课程设计模板B5纸打印上交。 课程设计成绩: 百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典行业资料航空客运订票系统(1)在线全文阅读。