数据结构报告.docx

上传人:b****0 文档编号:12474395 上传时间:2023-04-19 格式:DOCX 页数:48 大小:183.75KB
下载 相关 举报
数据结构报告.docx_第1页
第1页 / 共48页
数据结构报告.docx_第2页
第2页 / 共48页
数据结构报告.docx_第3页
第3页 / 共48页
数据结构报告.docx_第4页
第4页 / 共48页
数据结构报告.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

数据结构报告.docx

《数据结构报告.docx》由会员分享,可在线阅读,更多相关《数据结构报告.docx(48页珍藏版)》请在冰豆网上搜索。

数据结构报告.docx

数据结构报告

一、航空客运订票系统基本要求

1、每条航线所涉及的信息有:

终点站名、航班号、飞机号、飞机周日(星期几)、乘员定额、余票量、订定票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需数量)。

2、系统能实现的操作和功能如下:

1)查询航线:

根据客户提出的终点站名输出如下信息:

航班号、飞机号、星期几飞行,最近一天航班的日期和余票额;

2)承办订票业务:

根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若有余票,则为客户办理订票手续,输出座位号;若已满员或余票少余订票额,则需重新询问客户要求。

若需要,可登记排队候补;

3)承办退票业务:

根据客户提出的情况(日期、航班号),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补的客户。

实现提示:

两个客户名单可分别由线性表和队列实现。

为查找方便,已订票客户的线性表应按客户姓名有序,并且,为了插入和删除方便,应以链表作为存储结构。

由于预约人数无法预计,队列也应以链表作为存储结构。

二、问题描述

设计一个航班信息查询与订票系统程序,要求设计航班信息,订票信息的存储结构,并实现以下功能:

录入:

可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)

查询:

可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;

订票:

(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;

退票:

可退票,退票后修改相关数据文件;客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。

修改航班信息:

当航班信息改变可以修改航班数据文件

三、需求分析

1.本程序以动态链表为存储结构,有两个链表,第一个链表:

每个航班信息开辟一个节点空间,在节点中存放航班信息,如航班号,起飞时间,出发地,目的地,总座位数,折扣,票价等。

第二个链表:

每个乘客开辟一个节点,存放乘客的记录:

姓名,证件号码,预定的航班号,定单号码及订票的数量。

2.本程序有五大模块组成,分别为基本信息输入模块(包括航班信息输入和客户信息输入),信息查询模块,订票模块,修改模块(包括退票模块及修改航班信息模块)。

信息输入模块的功能是录入各航班的基本信息;信息查询模块的功能为提供各种信息查询的操作;订票模块是录入各订票人的基本信息;信息修改模块是退票和修改航班信息。

3.程序执行的命令:

1.录入信息2.查询3.订票4.退票5.修改6.显示航班信息7.显示客户信息8.退出

4.测试数据:

航班数据库中的数据。

以xiaying.txt文件保存。

(附在源程序中)

四、概要设计

1、系统的抽象数据类型

设定民航航班信息查询与客票发售服务系统的抽象数据类型定义:

ADThanban{

数据对象:

D={ai|ai∈CharSet,i=1,2,,…,n,n>=0}

数据关系:

R={c1c2}

基本操作:

creat();

操作结果:

录入航班信息。

search();

操作结果:

进入航班查询系统。

order();

操作结果:

进行订票。

quit();

操作结果:

进行退票。

revise();

操作结果:

修改航班信息。

print();

操作结果:

显示航班信息。

print2();

操作结果:

显示客户资料。

Clear();

操作结果:

清除记录。

}ADThanban

2、程序中用到的库函数

#include

#include

#include

#include

#include

#include

#include

3、程序的四大模块

(1)主程序模块:

Voidmain()

{

do{

接受命令;

处理命令;

}while(命令!

=退出);

}

(2)信息输入模块——完成基本信息的输入和修改;

(3)实现功能模块——实现信息查询、订票和退票功能操作;

(4)信息显示模块——实现录入信息的显示。

4、函数间调用关系

图1整体思想方框图

5、算法设计:

(每个模块的算法设计说明如下:

(1)录入模块:

查找单链表的链尾,在链尾插入一个“航班信息”的新结点。

(2)查询模块:

提供两种查方式:

按航号和按航线查询,1代表按航号查询,2代表按航线查询。

0则表示退出查询。

顺着单链表查找,如果与航班号(航线)一致,输出相关信息,否则,查询不成功。

(3)订票模块:

查找乘客要订的航班号,判断此航班是否有空位,有则输入乘客有关信息,订票成功,否则失败。

(4)退票模块:

输入要退票的乘客姓名以及证件号码,查找乘客资料的链表中是否有这位乘客,有则删去此结点,并在空位加上1,无则退票失败。

(5)修改模块:

输入密码,确认是否有权限对航班信息进行修改,有则在航班信息链表中查找要修改的结点,进行修改,否则不能修改。

6、存储结构设计:

(1)航班的信息:

为了便于查找和修改,航班的情况存储结构采用单链表,每个元素表示一个航班的情况,包括航班号、起飞达到的时间、余票和出发地、目的地、票价以及总票数八个数据项:

航班号

起飞时间

达到时间

出发地

目的地

总票数

余票

票价

单链表如下:

每个结点包括数据域和指针域:

数据域

指针域

C语言描述如下:

typedefstructPlane{/*航班信息*/

charplaneNo[10];/*航班号*/

charstart[30];/*起飞时间*/

charend_time[30];/*到达时间*/

charstartplace[30];/*起飞城市*/

charend_place[30];/*到达城市*/

intprice;/*机票价格*/

intdiscount;/*折后价格*/

inttotal;/*机票总数*/

inttamount;/*剩余票数*/

structPlane*next;

}Plane;

(2)旅客的资料:

为了便于插入、删除和修改,其采用单链表存储结构,每个数据元素包括姓名、证件号码、航班号和座位号四个数据项:

旅客姓名

证件号码

航班号

C语言描述如下:

typedefstructpassengernode{/*定义乘客资料结点*/

charname[20];

charID_num[20];

charair_num[20];

structpassengernode*next;

}passengernode;

五、详细设计

1、主程序中需要的全程量

structPlane{/*航班信息*/

charplaneNo[10];/*航班号*/

charstart[30];/*起飞时间*/

charend_time[30];/*降落时间?

*/

charstartplace[30];/*起飞城市*/

charend_place[30];/*降落城市*/

intprice;/*机票价格*/

intdiscount;/*折后价格*/

inttotal;/*总机票数*/

inttamount/*剩余机票数*/

structPlane*next;

}Plane;

structcustomer/*客户资料*/

{charname[30];/*客户姓名*/

charID[30];/*证件号*/

inttamount;/*订票数量*/

charplane[30];/*航班号*/

charno[30];/*订单编号*/

structcustomer*next;

}customer;

Structplane*head=NULL;

structcustomer*glist=NULL;

2.部分函数模块以及流程图:

1)主函数模块

main()

{inti;

while

(1)

{system(“cls”);

printf("\n");

printf("\n\t\****************定**票**系**统**************");

printf("\n");

printf("\n\t\********1.录入信息*");

printf("\n");

printf("\n\t\*******2.查询**");

printf("\n");

printf("\n\t\******3.订票***");

printf("\n");

printf("\n\t\*****4.退票****");

printf("\n");

printf("\n\t\****5.修改*****");

printf("\n");

printf("\n\t\***6.显示航班信息******");

printf("\n");

printf("\n\t\**7.显示客户信息*******");

printf("\n");

printf("\n\t\*8.退出********");

printf("\n");

printf("\n\n********************************************");

printf("\n请选择操作命令:

");

while

(1)

{

scanf("%d",&i);

if(i>=1&&i<=8)break;

elseprintf("\nchoose1,2,3,4,5,6,7,8");

}

switch(i)

{

case1:

system(“cls”);creat();break;

case2:

system(“cls”);search();break;

case3:

system(“cls”);order();break;

case4:

system(“cls”);quit();break;

case5:

system(“cls”);revise();break;

case6:

system(“cls”);print();break;

case7:

system(“cls”);print2();break;

case8:

exit(0);

default:

break;

}

}

}

主函数流程图

图2主函数流程图

2).录入信息函数模块:

void*creat()

{Plane*info;

while

(1)

{info=(Plane*)malloc(sizeof(Plane));/*建立新结点*/

if(!

info)

{

printf("EMShasbeenfull!

!

\n");

returnNULL;

}

printf("\n输入航班号:

");

scanf("%s",info->planeNo);

printf("输入起飞时间:

");

scanf("%s",info->start);

printf("输入到达时间:

");

scanf("%s",info->end_time);

printf("输入起飞地点:

");

scanf("%s",info->startplace);

printf("输入到达地点:

");

scanf("%s",info->end_place);

printf("输入机票价格:

");

scanf("%d",&info->price);

printf("输入折后价格:

");

scanf("%d",&info->discount);

printf("输入总机票数:

");

scanf("%d",&info->total);

printf("输入剩余票数:

");

scanf("%d",&info->tamount);

info->next=head;

head=info;

system("cls");

printf("是否继续?

y/n");

if(getch()=='n'||getch()=='N')break;

}

save1(head);

}

输入信息函数流程图

图3输入信息函数流程图

3).查询航班信息函数模块

voidsearch()

{chars1[30],s2[30];

Plane*p;

inti=0,ch;

while

(1)

{p=head;

printf("请选择\n");

printf("1.按航班号查询\n");

printf("2.按起落城市查询\n");

printf("3.退出\n");

scanf("%d",&ch);

if(ch==1)

{printf("\n请输入航班号\n");

scanf("%s",s1);/*读如航班号*/

while(p)

{

if(!

strcmp(s1,p->planeNo))

{

printf("\n起飞地点:

%s",p->startplace);

printf("\n起飞时间:

%s",p->start);

printf("\n到达地点:

%s",p->end_place);

printf("\n到达时间:

%s",p->end_time);

printf("\n机票价格:

%d",p->price);

printf("\n折后价格:

%d",p->discount);

printf("\n总机票数:

%d",p->total);

printf("\n剩余票数:

%d\n\n",p->tamount);

if(p->tamount==0)printf("\n此航班已满!

\n");/*提示此航班已满*/

p=p->next;

i++;

}

elsep=p->next;

}

if(!

i)printf("无此航班\n");i=0;

}

if(ch==2)

{

printf("输入起飞地点:

");

scanf("%s",s1)/

printf("\n输入到达地点:

");

scanf("%s",s2);

while(p)

{

if(!

strcmp(s1,p->startplace)&&!

strcmp(s2,p->end_place))

{

printf("起飞地点:

%s",p->startplace);

printf("\n起飞时间:

%s",p->start);

printf("\n到达地点:

%s",p->end_place);

printf("\n到达时间:

%s",p->end_time);

printf("\n机票价格:

%d",p->price);

printf("\n折后价格:

%d",p->discount);

printf("\n总机票数:

%d",p->total);

printf("\n剩余票数:

%d\n\n",p->tamount);

if(p->tamount==0)printf("\n此航班已满!

\n");

p=p->next;

i++;

}

elsep=p->next;

}

if(!

i)printf("无此航班\n");i=0;

}

if(ch==3)break;

}

}

查询函数流程图

图4查询函数流程图

4).订票功能函数模块:

voidorder()

{

customer*info;

Plane*p,*q;

chars[30];intflag=0;

while

(1)

{

p=q=head;

printf("您想预定哪趟航班");

scanf("%s",&s);

if(strcmp(p->planeNo,s)!

=0)/*判断*/

{

printf("无此航班");/*出错提示*/

p=p->next;

getch();

break;

}

if(p->tamount==0)

{

printf("此航班已满.\n是否需要预定其他到达该城市的航班:

y/n\n");

if(getch()=='n'||getch()=='N')break;

else

while(q)

{

if(!

strcmp(p->end_place,q->end_place)&&p!

=q)

{printf("您可以预定%s号航班到达该城市\n",q->planeNo);flag=1;}

q=q->next;

}

if(flag==0){printf("没有到打该城市的其他航班");getch();break;}

}

else

{

printf("目前此航班还有%d张票",p->tamount);

info=(customer*)malloc(sizeof(customer));

if(!

info)

{

printf("EMShasbeenfull!

!

\n");

exit(0);

}

printf("\n姓名:

");

scanf("%s",info->name);

printf("\n身份证号码:

");

scanf("%s",info->ID);

printf("\n航班号:

");

scanf("%s",info->planeNo);

printf("\n订票数量(<=%d):

",p->tamount);

scanf("%d",&info->tamount);

p->tamount=p->tamount-info->tamount;

info->no=num;

printf("\n您的订单号是%d\n",info->no);

num++;

info->next=glist;

glist=info;

printf("是否继续?

y/n");

if('n'==getch()||'N'==getch())break;

system(“cls”);

}

save1(head);

save2(glist);

}

}

订票函数流程图

图5订票函数流程图

5).退票功能函数模块

voidquit()

{

chars1[30],s2[30],s3[30];

intm=0;

Plane*p;

customer*q,*r;

while

(1)

{p=head;

r=q=glist;

printf("输入姓名:

\n");

scanf("%s",s2);

if(strcmp(s2,q->name)!

=0)/*判断*/

{

printf("您没有预定机票");getch();break;/*出错提示*/

}

else

{

printf("您想退订哪趟航班:

\n");

scanf("%s",s1);

if(strcmp(s1,q->planeNo)!

=0)/*判断*/

{

printf("您没有预定此航班\n");getch();break;/*出错提示*/

}

}

else

{

printf("输入身份证号:

\n");

scanf("%s",s3);

if(strcmp(s3,q->ID)!

=0)/*判断*/

{

printf("\n您输入的身份证号码有误\n");getch();break;/*出错提示*/

}

else

{

printf("想退几张机票:

\n");

scanf("%d",&m);

while(strcmp(p->planeNo,s1))p=p->next;

p->tamount=p->tamount+m;

while(strcmp(q->name,s2))q=q->next;

printf("\n姓名:

%s",q->name);/*输出原始定单*/

printf("\n身份证号码:

%s",q->ID);

printf("\n航班号:

%s",q->planeNo);

printf("\n订票数量:

%d",q->tamount);

printf("\n\n真的要退订吗?

(Y/N)\n");

if(getch()=='y')

{

q->tamount=q->tamount-m;

printf("\n姓名:

%s",q->name);/*打印新的定单*/

printf("\n身份证号码:

%s",q->ID);

printf("\n航班号:

%s",q->planeNo);

printf("\n订票数量:

%d",q->tamount);

if(!

q->tamount)

{q=q->next;

while(r!

=q)

{r->no--;

r=r->next;

}

}

printf("\n\n退票成功!

\n\n");

}

printf("是否继续?

y/n");

if('n'==getch()||'N'==getch())break;

}

save1(head);

save2(glist);

}

}

}

}

退票函数流程图

图6退票函数流程图

6)显示信息函数模块:

print()

{

structPlane*p;

p=head->next;

system(“cls”);

if(!

p)

{

puts("\nNOanydata...");

printf("\n请按任意键返回");

getch();

return;

}

printf("\n航班号起飞时间抵达时间出发城市目的地价格折扣总票数剩余票数\n");

for(;p!

=NULL;p=p->next){printf("%s%s%s%s%s%d%s%d%d\n",p->planeNo,p->start,p->end_time,p->startplace,p->end_place,p->price,p->discount,p->total,p->start);

}

printf("\n请按任意键返回");

getch();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1