数据结构实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
————航空订票系统
数据结构
课程
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
报告
设计题目: 航空客运订票系统
院 系 计算机学院
年 级 xxxxx
学 生 xxx
学 号 xxxxxxxxxxx
指导教师 xxxxxxxxxxx
起止时间 9-6/9-13
2013年9月10日星期二
目 录
一、 课程设计目的 3
二、 需求分析 3
三、 概要设计
1.设计步骤 4
2.系统整体结构图 5
3.功能模块及调用关系说明 5
四、 详细设计和源代码
1.实现概要设计中定义数据的存储结构 6
2.查询航线信息功能的算法设计 7
3.订票功能的算法设计 9
4.退票功能的算法设计 12
5.录入功能的算法设计 14
6.总航线预览功能的程序源代码 15
五、调试分析
1.各功能的具体实例分析 16
2.实验过程中出现的问题及解决方法 20
六、课程设计
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
20
七、参考资料 21
一、 课程设计目的
(1) 熟练使用 C 语言编写程序,解决实际问题;
(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
(4) 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
航空订票系统:
(1)熟练掌握链表存储结构及其建立过程和常用操作;
(2)熟练掌握队列的建立过程和常用操作;
(3) 学会自己调试程序的方法并掌握一定的技巧。
二、 需求分析
问题描述:航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
设计任务:通过此系统可以实现如下功能:
录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)
查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;
订票:(订票情况可以存在一个数据文件中,结构自己设定)根据客户提出的要求(日期、航班号、订票数额)查询该航班票额情况,若尚有余额,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需要重新询问客户要求。若需要,可预约登记排队等候。如果该航班已经无票,可以提供相关可选择航班;
退票:根据客户提供的情况(日期、航班、退票数额),为客户办理退票手续,然后查询该航班是否有人预约登记,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队预约的客户……退票成功后修改相关数据文件。
客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。
修改航班信息:当航班信息改变可以修改航班数据文件
要求:根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能。
测试数据:由学生任意指定,但报告上要求写出多批数据测试结果。
实现提示:每条航线应包含的信息有:终点站名、航班号、飞机号、飞行日期(星期几)、乘员定额、余票额、已订票的客户名单(包括姓名、订票额、座位号)和预约登记的客户名单(包括日期、姓名、所需票额)。这最后两项显然是一个线性表和一个队列。为查找方便、已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预料,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述八个域,其中乘员名单域为指向乘员名单链表的头指针,预约登记客户名单域为分别指向队头和队尾的指针。
选做内容:当客户订票要求不能满足时,系统可向客户提供到达同一目的地的其它航线情况。
三、概要设计
1.设计步骤
1)分析问题,给出数学模型,设计相应的数据结构。
提示:
(1)己订票的客户名单可以用线性表来实现。为查找方便,线性表应按照客户姓名有序,
并且为了插入和删除的方便,应以链表作为存储结构。
(2)等候替补的客户名单可以用队列来实现。由于预约人数无法预计,所以队列也应以链表作为存储结构。
(3)需将输入的航班情况登录到一张线性表上(用顺序存储结构或链表存储结构)。为了查询的方便,可以将航班情况按照航班有序或按照终点站名有序建立线性表。每条航线是这张线性表的一个记录,包含上述8个域,其中已订票的客户名单域是指向己订票的客户名单链表的头指针,等候替补的客户名单域是指向队头和队尾的指针。
2)算法设计
在已经选择好数据结构的前提下,为解决问题设计算法。
(1)确定所需模块
对于稍复杂的程序设计,要充分利用模块化程序设计方法,自顶向下,逐步细化,在整体思路确定的情况下,考虑所需模块数,各模块完成功能以及模块之间的数据联系和调用关系。
(2)各子模块功能描述
给出主要模块的算法描述,用流程图或伪代码表示。
(3)模块之间的调用关系
3)源程序清单
为了提高工作效率,充分利用上机调试程序的时间,要求学生在上机之前给出源程序清单。
4)用测试数据去验证算法及程序的正确性
5)算法分析
经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度。
2.系统整体结构图(功能模块图)
图 1. 系统整体结构图
3.功能模块及调用关系说明
(1)总航线信息预览:通过调用display()预览已经建立的全部航线的相关信息(航班号、飞机号 、终点站 、飞行日期 、 定额 、余票数 、排队等候人数),预览完返回主菜单。
(2)查询单条航线信息:根据乘客提出的终点站名或航班号调用Search()函数来查询并输出此条航线的相关信息(航班号、飞机号 、终点站 、飞行日期 、 定额 、余票数 、已订票乘客名单、排队等候乘客名单)。 并且查询完后询问乘客是否订票,是就调用订票Book()函数来为乘客进行订票,否就返回主菜单。
(3)办理订票业务:客户先输入的终点站名、订票数、姓名信息再来调用订票Book()函数,Book()函数根据客户提供的终点站名查询到该航线信息,若客户订票额末超过余票量,订票成功并登记信息,在订票乘员名单链表中添加乘客的信息; 如果暂时余票数不足是,询问客户是否要排队等侯,如果是,则在排队等候的队列中增加该乘客的订票信息。
(4)办理退票业务:调用tuipiao()查询函数,根据客户提供的航线进行搜索根据客户提供的姓名到订票客户名单域进行查询。退票成功后,重新将航线名单域指向订票单链表的头指针。根据队列中从出的客户信息判断是否满足要求,如果满足,则将该客户的信息插入到乘客信息链表中。
(5)录入航班信息:调用CreatPlane()函数,根据输入的航班的相关的信息(航班号、飞机号 、终点站 、飞行日期 、 定额 、余票数),将此航班加入到原来的航班组中。
(6)退出系统
四、详细设计和源代码
1.实现概要设计中定义数据的存储结构
(1)已订票乘客信息(单链表)
typedef struct Cust
//已订票乘客信息
{
char Name[15];
//乘客姓名
char number[10];
//乘客所乘飞机航班号
char end[15];
//乘客终点站
(2)排队等候的乘客信息
typedef struct waitNode
//排队等候客户信息
{
char name[15];
//乘客姓名
int ticket;
//乘客的订票数
struct waitNode *next;
}waitNode,*waitlink;
typedef struct
{
waitlink front;
waitlink rear;
}waitQueue;
(3)航班信息
typedef struct Plane
//航班信息
{
char number[10];
//航班号
int planenum;
//飞机号
char end[15];
//终点站
char date[10];
//飞行日期
int dinge;
//成员定额
int tick;
//剩余票数
int k;
//排队等候的人数
Customer *first;
//链接已订票客户
waitQueue Q;
//链接候补客户
}PlaneLink;
2.查询单条航线信息功能的算法设计(Search( )函数功能实现的源代码)
int Search(PlaneLink *p,int N)
{
int i=0,Q;
cout<<"===========================================\n";
cout<<" 1.按终点站名查询\n";
cout<<" 2.按航班号查询 \n";
cout<<"___________________________________________\n";
cout<<">>>>>>\n";
cout<<" 请选择查询方式 (1/2):"; cin>>Q;
if(Q==1)
{
char end[10];
cout<<" 请您输入要查询的航班的终点站名: "; //按站点名查询航班信息
cin>>end;
while(i
>num;
while(i>j;
if(j==1)
{
char name[10]; int ticket;
cout<<" 请输入订票数目、姓名:";
cin>>ticket>>name;
Book(p,p[i].end,ticket, name, N);
}
}
else { cout<<" 很抱歉,没有您查询的航班信息!\n"; }
return 0;
}
3.订票功能的算法设计(Book( )函数功能实现源代码)
int Book(PlaneLink *p,char end[],int ticket,char name[],int N)
{
int i;
for(i=0;i=ticket) //查看 余票数是否 >= 订票客户 订票数
{
p[i].tick-=ticket;
Customer *t=(Customer *)malloc(sizeof(Customer));
t->ticket=ticket;
strcpy(t->Name,name);
strcpy(t->number,p[i].number);
strcpy(t->end,p[i].end);
t->next=p[i].first; p[i].first=t; // 此使用的是头插法将订票乘客的信息放入到 链表中 /
cout<<" 您订票成功!\n";
cout<<" 您的航班信息如下:\n";
cout<<"__________________________________________________\n";
cout<<" 航班号 飞机号 终点站 飞行日期 定额\n";
cout<<"__________________________________________________\n";
cout<<" "<>z;
if(z=='Y'||z=='y') {
Queue(p,end,ticket , name, N,i); } //调用入队列函数,将乘客信息插入排队等候的人后面
break;
}
}
}
if(i>=N) {cout<<" 很抱歉,没有您所需要的航班!\n"; }
return 0;
}
int display_s(PlaneLink *p,int i,int N) //输出已定票及排队乘客的名单信息
{
if(p[i].first!=NULL) //p[i].first!=NULL说明已订票链表不为空, 输出 已订票乘客的名单信息
{
cout<<"****该航班的已订票乘客名单如下:****\n";
cout<<"____________________________________\n";
cout<<" 姓名 订票量\n";
Customer *t=p[i].first;
while(t)
{
cout<Name<<" "<ticket<next;
}
}
if(iname<<" "<ticket<next;
}
cout<<"=====================================\n";
}
return 0;
}
附:入队函数Queue( )的源代码
int Queue(PlaneLink *p,char end[],int ticket,char name[],int N ,int i) //入队函数,将等候排队的乘客放入原来的队列中
{
system("cls");
system("color 2e");
waitlink q=(waitlink)malloc(sizeof(waitNode)); //将要的入队的结点,存储将要入队乘客的信息
strcpy(q->name,name);
q->ticket=ticket;
q->next=NULL;
if(p[i].Q.front==NULL)
{
p[i].Q.front=p[i].Q.rear=q;
p[i].k++; //p[i].k用来记录排队人数
}
else
{
p[i].Q.rear->next=q;
p[i].Q.rear=q; p[i].k++;
}
cout<<"已为您登记,请耐心等候!\n";
return 0;
}
4.退票功能的算法设计(tuipiao( )函数实现的源代码)
int tuipiao(PlaneLink *p,int N)
{
int i;
Customer *R,*S;
char number[10],Name[15];
cout<<">>>>>>\n";
cout<<" 请输入您的航班号与姓名:";
cin>>number>>Name;
for(i=0;iName,Name)==0)
{
p[i].tick=p[i].tick+p[i].first->ticket;
p[i].first=p[i].first->next;
cout<<" 您已成功退票!\n\n";
}
else
{
R=p[i].first; S=p[i].first->next;
while(S!=NULL)
{
if(strcmp(S->Name,Name)==0)
{
p[i].tick=p[i].tick+S->ticket;
R->next=S->next;
cout<<" 您已经成功退票!\n\n"; break;
}
R=R->next; S=S->next;
}
if(S==NULL) cout<<" 很抱歉,在该航班上没有找到您的姓名,请核实信息!\n\n";
}
if(p[i].Q.front!=NULL)
{
waitlink Q=p[i].Q.front , q;
while(Q!=NULL)
{
if(p[i].tick>=Q->ticket)
{
if(Q==p[i].Q.front)
{
cout<<" 正在为等候的乘客 "<name<<"办理订票!\n";
Book(p,p[i].end,Q->ticket,Q->name,N);
if(p[i].Q.front==p[i].Q.rear)
{
p[i].Q.front=p[i].Q.rear=NULL;
Q=Q->next;
}
else
{ p[i].Q.front=p[i].Q.front->next;
Q=Q->next;
}
}
else
{
cout<<" 正在为等候的乘客 "<name<<"办理订票!\n";
Book(p,p[i].end,Q->ticket,Q->name,N);
q->next=Q->next; Q=Q->next;
}
}
else {
q=Q; Q=Q->next; }
}
}
break;
}
if(strcmp(p[i].number,number)==0&&p[i].first==NULL)
{
cout<<" 很抱歉,该航班目前没有已订票的乘客,无法为你退票,请核实信息!\n\n"; break;
}
}
if(i>=N) cout<<" 很抱歉,没有该航班信息,无法为你退票,请核实信息!\n\n";
return 0;
}
5.录入功能的算法设计(CreatPlane( )函数的源代码)
void CreatPlane(PlaneLink *p,int n,int N)
{
int i,j;
for(i=N;i>>>>>\n";
cout<<" 请输入航班号: "; cin>>p[i].number;
cout<<" 输入终点站名: "; cin>>p[i].end;
for( j=0;j>p[i].planenum>>p[i].date>>p[i].dinge;
p[i].tick=p[i].dinge; p[i].k=0;
cout<<" 录入完成!\n";
}
}
}
6.总航线预览功能的算法设计(display( )函数的源代码)
int display(PlaneLink *p,int N) //N为当前的航班数
{
cout<<"==============================================================================\n";
cout<<" 航班号 飞机号 终点站 飞行日期 定额 余票数 排队等候人数\n";
cout<<"______________________________________________________________________________\n";
for(int i=0;i
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
库函数还不太了解,如开始进入系统后发现操作的界面很乱,如果能够及时的清屏那样就会变的很明了。查阅了相关的资料和问同学后我知道只要在程序中调用库函数system("cls")就可以了,知道了这个函数的基本用法;还有对数据结构中经常出现的错误也不了解,通过实践,使我独自处理错误的能力也有了很大的提高。
七、参考资料
1. 《数据结构(C语言版)》 严蔚敏 吴伟民 编著,清华大学出版社
2. 《数据结构(C语言版)》相配套的课本源代码
3. 《C++程序设计》谭浩强 编著 清华大学出版社
主菜单
menu()
1.总航线信息预览
display()
2.查询单条 航线信息
Search()
3.办理订票业务
Book()
4.办理退票业务
tuipiao()
5.录入航班信息
CreatPlane
0.退出系统
1 / 22