数据结构课程设计+华东交通大学.doc
课程设计(论文)任务书 软件 学院 软件工程专业2005- 9 班 一、课程设计(论文)题目航空客运订票系统 二、课程设计(论文)工作自 2007 年1月 8 日起至 2007 年 1月 12 日止。三、课程设计(论文) 地点: 15#417 四、课程设计(论文)内容要求:1本课程设计的目的1、 使学生进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。2、使学生掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。3、使学生掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。 2课程设计的任务及要求1)基本要求:1. 分析题目,查阅相关资料;2. 算法设计、数据结构设计; 3. 编写代码并调试;4. 完成课程设计报告。 2)创新要求: 在基本要求达到后,可进行创新设计,如对。3)课程设计论文编写要求(1)要按照书稿的规格打印誊写毕业论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)毕业论文装订按学校的统一要求完成4)答辩与评分标准: (1)完成问题的解决方法分析:20分; (2)算法思想(流程):20分; (3)数据结构:20分;(4)测试数据:20分(5)回答问题:20分。5)参考文献:数据结构(C语言版)清华大学出版社 数据结构(C语言版)冶金工业出版社 6)课程设计进度安排内容 天数地点构思及收集资料 2图书馆组装与调试 5实验室撰写论文 3 图书馆、实验室学生签名: 王立春 2007 年1 月 15日课程设计(论文)评审意见 (1)完成问题分析(20分):优()、良()、中()、一般()、差(); (2)算法思想(20分):优()、良()、中()、一般()、差(); (3)数据结构(20分):优()、良()、中()、一般()、差();(4)测试数据 (20分):优()、良()、中()、一般()、差();(5)回答问题(20分):优()、良()、中()、一般()、差();(6)格式规范性及考勤是否降等级:是()、否()评阅人: 赵海霞 职称: 讲师 年 月 日数据结构课程设计目录:一、 绪论-4二、 正文:-41、课程设计算法思想-42、测试数据-43、系统关键算法流程图-54、系统调试出现的问题-75、各模块的功能说明-76、程序测试情况及运行结果分析-21三、 总结-24四、 程序源代码 -24一、 绪论1、课程设计目的:(1) 熟练掌握数据结构的基本知识和算法; (2) 基本掌握面向对象程序设计的基本思路和方法; (3) 利用所学的基本知识和技能,解决简单的面向对象程序设计问题。2、程设计题目(问题)描述和要求:1 题目:航空客运订票系统 2 问题描述:航空客运系统系统,现在需要实现查询航线、客票预定和办理退票等功能。要求: (1) 每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日、乘员定额、余票量、已订票的客户名单和候替补客户名单等。(2) 系统能实现查询航线、承办订票业务、承办退票业务等功能。二、正文1、课程设计算法思想:该程序运用了结构体、线形表和队列等,根据问题描述和要求,系统要求能够按航线或航班号能够查询相关的信息。确定程序至少应该具备如下功能:“航线管理”、“订票办理”、“退票办理”、“乘客管理”基本模块。为查找方便,已订票客户的线形表应按照客户姓名有序,并且,为了插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列以链表作为存储结构。整个系统将各条航线的情况登陆在一张线形表上,航线采用的是顺序存储结构,并按航班有序或终点站有序。每条航线是这张线形表上的一个记录,包括上述8个域、其中乘客名单域为指向乘客名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。2、测试数据:航班增设输入数据:终点站:南昌,航班号:0910,飞机号:2006,飞行周日:5,乘员定额:200,头等票价:1000普通价格:800,经济票价:600订票数据:航班号:0910,订票数:10,姓名:王立春,舱位等级:2退票数据:航班号:0910,姓名:王立春3、系统关键算法流程图(1)主函数流程图:(2)航运管理函数流程图:(3)乘客管理函数流程图:开 始订票乘客信息候补乘客信息结 束(4)订票办理函数流程图:(5)退票办理函数流程图:开 始输入航班号输入你的姓名结 束4、统调试出现的问题:调试问题出现的主要问题:编译语法错误及修改,重点是结构体和指针的运用及运行逻辑问题修改和调整。5、模块的功能说明及运行报告:(1)启动画面程序: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<<"程序设计:05软件工程(9)班-spring"<<endl; for(j=0;j<24;j+) cout<<" " for(j=0;j<=12;j+) cout<<"" cout<<endl; for(j=0;j<j+); k+; if(k>4) k=0; (2)主函数程序:char MainMenu() char *MenuItem="航空客运订票系统菜单","1. 航 线 管 理 ", "2. 订 票 办 理 ","3. 退 票 办 理 ","4. 乘 客 管 理 ", "5. 系 统 离 开 " return ModelMenu(MenuItem,6);(3)航线管理函数:void Sub1Menu() char *MenuItem=" 航空客运航线管理子菜单 ","1. 航 线 增 设 ", "2. 航 线 查 看 ","3. 返 回 主 菜 单 " while(1) switch(ModelMenu(MenuItem,4) case '1':Line_Add();break; case '2':Line_See();break; case '3':return; default:ErrorMess(); (4)航线增设函数: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<<"ttt 请输入终点站名:" cin>>p2->Des_Name; while(1) cout<<"nttt 请输入航班号(唯一):" cin>>p2->Flight_No; if(Find_Line(Head,p2->Flight_No) /存在航班号 cout<<"nttt 输入的航班号不唯一!"<<endl; else break; cout<<"nttt 请输入飞机号:" cin>>p2->Plane_No; while(1) cout<<"nttt 请输入飞行周日(1-7):" cin>>p2->Week_Day; if(p2->Week_Day<'1'|p2->Week_Day>'7') cout<<"ntt 数据输入错误,按任意键继续输入."<<endl; getch(); else break; cout<<"nttt 请输入乘员定额:" cin>>p2->Customer_Amount; cout<<"nttt 请输入头等舱票价:" cin>>p2->Price0; cout<<"nttt 请输入普通舱票价:" cin>>p2->Price1; cout<<"nttt 请输入经济舱票价:" cin>>p2->Price2; p2->Free_Amount=p2->Customer_Amount; p2->CustName=NULL; p2->ReplName=NULL; if(Continue()='n') p2->Next=NULL; return; (5)航线查看函数: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_DayDay<< " "<<setw(5)<<p1->Customer_Amount<< " "<<setw(5)<<p1->Free_Amount<<""<<setw(4)<<p1->Price0<<""<<setw(4)<<p1->Price1<<""<<setw(4)<<p1->Price2<<""<<endl; p1=p1->Next; if(p1!=NULL) cout<<" "<<endl; cout<<" "<<endl; cout<<"nttt 按任意键返回子菜单."<<endl; getch();(6)/-订票办理函数-void Sub2Menu() int Ticket_Count,Seat_No,i,flag=0; int Flight_No=0; Flight *p1; Customer *p2; Replace *p3; char answer7; 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<<"nttt 请输入航班号:" cin>>answer; if(Find_Line(Head,answer,p1,Flight_No) while(1) cout<<"nttt 请输入定票数:" cin>>Ticket_Count; if(Ticket_Count=0) cout<<"nttt请输入大于零的数,按任意键继续输入."<<endl; getch(); else break; if(p1->Free_Amount>=Ticket_Count) Customer_Count+; flag=1; IsRepl=1; Amount=p1->Free_Amount; if(p1->CustName=NULL) Custp1Flight_No=p2=new Customer; p1->CustName=Custp1Flight_No; else p2=new Customer; Custp1Flight_No->Next=p2; Custp1Flight_No=p2; IsEmpty=0; Custp1Flight_No->Amount=Ticket_Count; Seat_No=p1->Customer_Amount-p1->Free_Amount+1; Custp1Flight_No->Seat_No=Seat_No; p1->Free_Amount-=Ticket_Count; cout<<"nttt 请输入你的姓名:" cin>>Custp1Flight_No->Name; while(1) cout<<"nttt 请输入舱位等级(1-3):" cin>>Custp1Flight_No->Rank; if(!(Custp1Flight_No->Rank>='1'&&Custp1Flight_No->Rank<='3') cout<<"ntt输入出错,请输入1-3之间的数,按任意键继续输入."<<endl; getch(); else break; cout<<"nttt 您的座位号为:"<<endl; if(Ticket_Count<10) cout<<"ntttt" else cout<<"nttt" for(i=1;i<=Ticket_Count;i+) /打印座位号 cout<<Seat_No+<<" " if(i%10=0) cout<<"nttt" cout<<endl; else if(p1->Free_Amount=0) cout<<"ntt 对不起,该航线的票已经全部售完!"<<endl; IsRepl=0; else cout<<"ntt 对不起,该航线的剩余票额数少于你的订票数。"<<endl; IsRepl=0; if(!IsRepl) cout<<"ntt 是否列入该航线候补乘客名单(Y/N)?" cin>>temp; if(temp='y'|temp='Y')/以下为候补操作 if(p1->ReplName=NULL) Replp1Flight_No=p3=new Replace; p1->ReplName=Replp1Flight_No; else p3=new Replace; Replp1Flight_No->Next=p3; Replp1Flight_No=p3; IsReplace=0; /候补乘客不为空 tag=1; /已选择列入候补乘客名单 Replp1Flight_No->Amount=Ticket_Count; cout<<"nttt 请输入你的姓名:" cin>>Replp1Flight_No->Name; Replp1Flight_No->Seat_No=Seat_No; Replp1Flight_No->Amount=Ticket_Count; while(1) cout<<"nttt 请输入舱位等级(1-3):" cin>>Replp1Flight_No->Rank; if(!(Replp1Flight_No->Rank>='1'&&Replp1Flight_No->Rank<='3') cout<<"ntt输入出错,请输入1-3之间的数,按任意键继续输入."<<endl; getch(); else break; cout<<"nttt 该乘客暂时无座位!"<<endl;/候补乘客无座提示 else cout<<"ntt 对不起,没有该次航班,按任意继续操作."<<endl;/航线不存在 if(flag) Custp1Flight_No->Next=NULL; if(tag) Replp1Flight_No->Next=NULL; cout<<"ntt 该乘客已成功列入该航线的候补名单."<<endl; if(Continue()='n') return; /while(7)/-退票办理函数-void Sub3Menu() int Flight_No=0,flag=0; Flight *p1; Customer *p2,*p4; Replace *p3,*p5; char answer7,name7; int tag=0; int Seat_No; if(Empty_Flight() return; prefix("退票办理"); if(IsEmpty) cout<<"nntt 对不起,系统中暂时无定票乘客."<<endl; getch(); return; while(1) flag=0; tag=0; Flight_No=0; prefix("退票办理"); cout<<"nttt 请输入航班号:" cin>>answer; if(Find_Line(Head,answer,p1,Flight_No) p2=p1->CustName; cout<<"nttt 请输入您的姓名:" cin>>name; if(p2=NULL) cout<<"ntt 很抱歉,该航线暂时无人定票,无法进行退票操作."<<endl; if(Continue()='n') return; else continue; else while(p2!=NULL) if(strcmp(p2->Name,name)=0) if(p2=p1->CustName) prior=p1->CustName; Seat_No=p2->Seat_No; flag=1; break; else if(p2->Next!=NULL) if(strcmp(p2->Next->Name,name)=0) tag=1; prior=p2; Seat_No=p2->Next->Seat_No; flag=1; break; p2=p2->Next; /while if(!flag) cout<<"ntt 很抱歉,该航线无此乘客,请查证后再操作."<<endl; else cout<<"ntt 对不起,没有该次航班,按任意继续操作."<<endl; if(flag) if(prior=p1->CustName&&!tag) if(prior->Next=NULL) p1->Free_Amount+=prior->Amount;