航班客运订票程序数据结构与算法课程设计报告.docx

上传人:b****0 文档编号:18502330 上传时间:2023-08-18 格式:DOCX 页数:28 大小:231.45KB
下载 相关 举报
航班客运订票程序数据结构与算法课程设计报告.docx_第1页
第1页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第2页
第2页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第3页
第3页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第4页
第4页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第5页
第5页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第6页
第6页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第7页
第7页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第8页
第8页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第9页
第9页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第10页
第10页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第11页
第11页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第12页
第12页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第13页
第13页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第14页
第14页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第15页
第15页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第16页
第16页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第17页
第17页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第18页
第18页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第19页
第19页 / 共28页
航班客运订票程序数据结构与算法课程设计报告.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

航班客运订票程序数据结构与算法课程设计报告.docx

《航班客运订票程序数据结构与算法课程设计报告.docx》由会员分享,可在线阅读,更多相关《航班客运订票程序数据结构与算法课程设计报告.docx(28页珍藏版)》请在冰点文库上搜索。

航班客运订票程序数据结构与算法课程设计报告.docx

航班客运订票程序数据结构与算法课程设计报告

题目:

(航班客运订票程序)通过此程序要求实现如下功能:

(1)录入:

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

(2)查询:

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

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

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

(7)修改航班信息:

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

一.问题分析和任务定义

此程序要求对一组存储在磁盘文件上的航班信息和客户信息进行相关操作,实现程序的几个功能,即添加航班信息,查找航班和修改航班,还有订退票功能,前者只是在航班信息的文件上进行操作,后者则是同时在两个文件上进行操作。

完成上述功能关键要解决一下几个问题:

1.如何选择正确的方式对磁盘文件进行读写

2.如何将文件中的内容以结构体的形式读出

3.如何选定磁盘文件中某一位置的数据进行修改

4.如何保护客户信息不会被随便修改

程序最终的结果是实现上面的七个功能,添加航班时,打开原有磁盘文件,没有则新建,一次输入所有航班信息,进行追加,即在文件尾进行添加,并保存;航班的查找功能,就是在航班信息文件中进行查找,可以根据航线查找,也可以根据航班号查找,如果查找成功,则在屏幕上显示所有匹配的信息,如果查找不成功,则给出相应提示,可以连续查找,修改功能是对航班信息文件中的指定航班进行修改,不改变其他航班信息,并将修改后的信息保存在原来航班的位置,订票功能,客户在订票时必须先查找要订的航班是否存在,即通过抵达城市进行查找,如果查找成功,则提示是否进行订票,是则进行客户信息登记,打开磁盘文件上的客户信息进行添加,没有则新建,登记后将预定票数和客户信息一起保存在客户信息中,同时修改航班信息中的相应航班的剩余票数,如果客户订票数大于航班剩余票数,则给出相应提示,如果查找不成功则提示没有次航班,退票功能与订票相似,也是同时修改两个文件上的操作,客户必须提供相应的证件号才能进行退票操作,如果证件号与磁盘文件上的信息一致则允许客户订票,客户输入要退订的航班的航班号,程序会查找客户是否有预定次航班的票,如果有则进行退票,可以选择推定的票数,退票后修改客户信息和航班信息并保存。

二、数据结构的选择和概要设计

程序用两个结构体来分别表示航班信息和客户信息,在进行操作时,会将整个文件的信息全部读出存储在一个结构体链表中,操作其实是在链表上进行的,只是在操作结束后将链表中的节点即结构体单元依次再写进文件中,航班和客户结构分别如下:

typedefstructflight{

charnum[20];/航班号

charcity[20];//抵达城市

chartime1[20];//起飞时间

chartime2[20];//降落时间

intprice;//票价

inttotal;//票数

intleft;//剩余票数

structflight*next;//下一个结点

}flight;

 

typedefstructcustomer{

charname[20];//顾客名

charnum[20];//航班号

charID[20];//证件号

intnumber;//订票数

structcustomer*next;//下一个结点

}customer;

程序流程图如下图所示

程序流程图

三、详细设计和编码

根据实验任务要求的功能,本程序主要用以下几个函数来实现:

航班的添加函数tianjia();主要实现新航班录入,并将信息保存在磁盘文件中,在输入航班信息时可以一次输入多个航班信息,算法实际上是将航班信息以结构体链表的形式写进磁盘文件的在文件外建立链表,建立链表时采用的是尾插法,即在链表的尾部进行添加操作,for循环可以实现几个航班信息的一起输入,算法的核心部分如下,关键的地方是文件的写入和链表的建立:

L=(flight*)malloc(sizeof(flight));

L->next=NULL;

R=L;

fprintf(fp,"%s\t%s\t%s\t%s\t%d\t%d\t%d\n",S->num,S->time1,S->time2,S->city,S->price,S->total,S->left);

S->next=NULL;

R->next=S;

R=S;

航班的查询功能函数chaxun();

该函数主要实现从磁盘文件中查询航班信息,程序将这一功能分作两种方式进行操作,一是根据航班号进行查询,二是根据抵达城市进行查询,在这之前必须先将磁盘文件的数据读到内存中,这里又增加了两个函数,用来将写入磁盘文件的数据读回到结构体链表中,以便后面操作的简便,这里航班和客户的信息的修改和操作都是在链表的基础上进行的,因此修改后的链表依然要重新保存到磁盘文件中,这里又定义了两个函数分别用来将航班和客户信息的链表保存到磁盘文件中,查询函数根据选择的查询方式不同,具体的算法也有所不同,但是都是字符串的比较算法,前者比较航班号,后者比较的是抵达城市,查询成功则列出所有符合条件的航班信息,没有查到则提示没有此航班,查找时将磁盘文件的航班信息读取到链表中,从表头开始比较,一直到表尾,读取链表的方法下面会介绍到,查询算法的核心:

voidchaxun(){//查询功能

intn;flight*L;

L=duquhb();

scanf("%d",&n);

switch(n){

case1:

chaxuncity(L);break;

case2:

chaxunflight(L);break;

}

}

航班和客户信息的机构体链表的读和写函数,读取信息时按行将数据读入到链表中,同样以尾插法建立链表,写磁盘文件时将链表中的结构体依次写入文件中的每行,两种文件的读写方法相同,这里只列出航班信息的读写核心算法:

flight*duquhb(){//读取航班信息到结构体链表中

FILE*fp;flight*L,*S,*R;

fp=fopen("航班信息.txt","r");

L=(flight*)malloc(sizeof(flight));

L->next=NULL;

R=L;

while(!

feof(fp)){

S=(flight*)malloc(sizeof(flight));

fscanf(fp,"%s%s%s%s%d%d%d",S->num,S->time1,S->time2,S->city,&S->price,&S->total,&S->left);

S->next=NULL;

R->next=S;

R=S;

};

fclose(fp);

returnL;

}

voidbaocunhb(flight*L){//保存修改后航班信息

flight*p;FILE*fp;

fp=fopen("航班信息.txt","w");

p=L->next;

while(p->next!

=NULL){

fprintf(fp,"%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->num,p->time1,p->time2,p->city,p->price,p->total,p->left);

p=p->next;

}

fclose(fp);

}

1.订票函数dingpiao()

此函数主要实现客户的订票,订票时客户首先查询所要预定的航班是否存在,如果存在则进入订票,订票时客户要先登记个人信息,有姓名和证件号,接着选择是否订票,是则将客户信息和预定票数保存到客户信息的磁盘文件中,并将相应航班的剩余票数修改后保存,订票时如果票数不足则会给出提示,订票成功后给出客户订单的编号,如果用户查不到要预定的航班,则给出相应提示,客户可选择继续查询并预定其他航班。

2.退票功能函数tuipiao();

此函数主要实现客户的退票操作,退票时,客户必须先进行身份验证,即输入客户的姓名和证件号,如果客户输入的信息与文件中保存的信息一致,则允许客户进行退票,退票时输入要退订的航班号,如果确实有预定过此航班,则允许继续退票,客户可选择退订的票数,退订成功后,修改客户信息中的预定票数和航班信息中的剩余票数并保存,订票是如果没有客户信息则会给出提示,退票的算法如下:

voidtuipiao(){//退票

flight*p,*L;charname[20],c[20],ID[20];

customer*h,*Q;

intn;

L=duquhb();Q=duqukh();

printf("请输入航班号:

");scanf("%s",&c);

p=L->next;h=Q->next;

while(p!

=NULL){

if(strcmp(p->num,c)==0){

printf("请输入姓名:

");scanf("%s",&name);

printf("请输入证件号:

");scanf("%s",&ID);

while(h!

=NULL){

if(strcmp(h->name,name)==0&&strcmp(h->ID,ID)==0){

printf("\n乘客姓名乘客证件预定航班预定票数\n");

printf("%s\t%s\t%s\t%d\t\n",h->name,h->num,h->ID,h->number);

printf("请输入要退定的本航班票数:

");scanf("%d",&n);

p->left+=n;

h->number=h->number-n;

printf("恭喜您退票成功!

\n");break;

}

else

h=h->next;

}

if(h==NULL)

{printf("没有您的信息!

\n");break;}

elsebreak;

}

elsep=p->next;

}

if(p==NULL)

printf("您没有定本张票!

\n");

baocunhb(L);

baocunkh(Q);

}

为了让客户在使用时更加方便的进行操作,程序加入了两个用来显示所有航班和所有客户信息的函数,将磁盘文件读至结构体链表中,再将链表中的信息一行一行的显示出来

3.程序的最后一个功能函数,xiugai();

此函数主要用来修改已保存的航班信息,,修改时将磁盘文件读至链表中,然后选择要修改的航班,接着查找,找到后提示输入跟新的航班信息,接着将更新后的信息再保存至磁盘文件中,此函数算法简单,这里不作说明。

 

四、上机调试

本程序的关键问题就是磁盘文件的处理,在调试中出现的大多问题也都是磁盘文件读写的问题,经过几天的学习和修改,程序的这个地方几乎没有什么明显的错误,程序的几个功能几乎都可以在链表上直接操作,不同的就是这里加入了磁盘文件,因此只要解决了磁盘文件的相关问题,程序基本上就算完成了。

刚拿到题目时不知道从什么地方开始做起,因为题目上要求的内容都是以前所学的,由于长时间没有用到这部分知识也没有及时复习,所以开始之前又将以前的课本中的部分章节仔细的看了一遍,接下来的程序编写就方便多了,调试过程中出现的一些语法问题通过相应的提示就可以改正,调试过程中也会遇到运行时出错,此类错误大多是由于算法上的不完善造成的可以利用追踪的方法找出那里的算法出错,再加以改正基本上就可以排除所有类似的错误,程序并未出现一些严重的错误。

五、测试结果及其分析

添加航班功能测试如下,根据提示输入信息,没有出现错误,从下面的磁盘文件可看出信息已经保存到文件中

查找航班,选择通过目的地查找,输入目的地,查询,找到后显示出相关信息

通过航班号查找也是如此:

下面是订票功能,按提示可完成订票,查看磁盘文件中的客户信息可以确定订票成功。

退票时要求进行身份验证,输入的姓名和证件号一样才可以进行退票

显示客户信息和显示航班信息,通过与磁盘文件中的信息进行对比可以看出输出正确无误。

 

程序的最后一个功能修改功能,修改航班信息,输入要修改的航班号,找到要修改的航班后进行新航班信息的录入,再查看磁盘文件,可以确定航班信息的修改成功

六、用户使用说明

程序中的每个功能及相关操作在运行时都给出了具体的提示信息,用户完全可以根据提示完成所需操作。

七、参考文献

1.(美)霍洛维茨著FundamentalsofDataStructuresinC机械工业出版社2006.7

2.何钦铭颜晖主编c语言程序设计高等教育出版社2008.4

3.王昆仑李红主编数据结构与算法中国铁道出版社2007.6

八、附录

程序源代码

#include

#include

#include

typedefstructflight{

charnum[20];//航班号

charcity[20];//目的地

chartime1[20];//起飞时间

chartime2[20];//降落时间

intprice;//票价

inttotal;//座位总数

intleft;//剩余座位

structflight*next;//下一个结点

}flight;

 

typedefstructcustomer{

charname[20];//顾客名

charnum[20];//航班号

charID[20];//证件号

intnumber;//订票数

structcustomer*next;//下一个结点

}customer;

 

voidtianjia(){//初始化录入功能

inti,n;flight*L,*S,*R;

FILE*fp;

fp=fopen("航班信息.txt","a+");

L=(flight*)malloc(sizeof(flight));

L->next=NULL;

R=L;

printf("航班总数是:

");

scanf("%d",&n);

printf("\t依次录入航班信息:

\n");

printf("航班号起飞时间抵达时间抵达城市航班票价座位总数剩余座位\n");

for(i=0;i

S=(flight*)malloc(sizeof(flight));

scanf("%s",&S->num);

scanf("%s",&S->time1);

scanf("%s",&S->time2);

scanf("%s",&S->city);

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

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

scanf("%d",&S->left);

fprintf(fp,"%s\t%s\t%s\t%s\t%d\t%d\t%d\n",S->num,S->time1,S->time2,S->city,S->price,S->total,S->left);

S->next=NULL;

R->next=S;

R=S;

}

fclose(fp);

}

voidchaxuncity(flight*L){//按照抵达城市查询

charc[20];intflag=0;

flight*p=L;

printf("请输入抵达城市:

");

scanf("%s",&c);

p=L->next;

while(p!

=NULL){

if(strcmp(c,p->city)==0)

{flag=1;

printf("\n航班号:

%s\t",p->num);

printf("起飞时间:

%s\t",p->time1);

printf("降落时间:

%s\t",p->time2);

printf("抵达城市:

%s\t",p->city);

printf("航班票价:

%d\t",p->price);

printf("座位总数:

%d\t",p->total);

printf("剩余座位:

%d\t\n",p->left);

p=p->next;

}

elsep=p->next;

}

if(p==NULL&&flag==0)printf("对不起,没有你要找的航班.\n");

}

voidchaxunflight(flight*L){//按照航班号查询

charc[20];

flight*p=L;

printf("请输入要查询的航班号:

");

scanf("%s",&c);

p=L->next;

while(p!

=NULL){

if(strcmp(c,p->num)==0){

printf("\n航班号:

%s\t",p->num);

printf("起飞时间:

%s\t",p->time1);

printf("降落时间:

%s\t",p->time2);

printf("抵达城市:

%s\t",p->city);

printf("航班票价:

%d\t",p->price);

printf("座位总数:

%d\t",p->total);

printf("剩余座位:

%d\t\n",p->left);

break;

}

elsep=p->next;

}

if(p==NULL)printf("对不起!

没有你要找的航班。

");

}

flight*duquhb(){//读取航班信息到结构体链表中

FILE*fp;flight*L,*S,*R;

fp=fopen("航班信息.txt","r");

L=(flight*)malloc(sizeof(flight));

L->next=NULL;

R=L;

while(!

feof(fp)){

S=(flight*)malloc(sizeof(flight));

fscanf(fp,"%s%s%s%s%d%d%d",S->num,S->time1,S->time2,S->city,&S->price,&S->total,&S->left);

S->next=NULL;

R->next=S;

R=S;

};

fclose(fp);

returnL;

}

voidbaocunhb(flight*L){//保存修改后航班信息

flight*p;FILE*fp;

fp=fopen("航班信息.txt","w");

p=L->next;

while(p->next!

=NULL){

fprintf(fp,"%s\t%s\t%s\t%s\t%d\t%d\t%d\n",p->num,p->time1,p->time2,p->city,p->price,p->total,p->left);

p=p->next;

}

fclose(fp);

}

customer*duqukh(){//读取客户信息到结构体链表中

FILE*fp;customer*L,*S,*R;

fp=fopen("客户信息.txt","r");

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

L->next=NULL;

R=L;

while(!

feof(fp)){

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

fscanf(fp,"%s%s%s%d",S->name,S->num,S->ID,&S->number);

S->next=NULL;

R->next=S;

R=S;

};

fclose(fp);

returnL;

}

voidbaocunkh(customer*Q){//保存修改后客户信息

customer*p;FILE*fp;

fp=fopen("客户信息.txt","w");

p=Q->next;

while(p->next!

=NULL){

fprintf(fp,"%s\t%s\t%s\t%d\t\n",p->name,p->num,p->ID,p->number);

p=p->next;

}

fclose(fp);

}

 

voidchaxun(){//查询功能

intn;flight*L;

L=duquhb();

printf("\t┏━━━━━━━━━━━━┓\n");

printf("\t┃查找航班┃\n");

printf("\t┃┃\n");

printf("\t┃①→通过目的地查询┃\n");

printf("\t┃┃\n");

printf("\t┃②→通过航班号查询┃\n");

printf("\t┗━━━━━━━━━━━━┛\n");

printf("\t请选择:

");

scanf("%d",&n);

switch(n)

{

case1:

chaxuncity(L);break;

case2:

chaxunflight(L);break;

}

}

voiddingpiao(){//订票

flight*L,*p;

FILE*fp1;

customer*q;

charc[20];

intn,i;

L=duquhb();

printf("请输入终点站名:

");scanf("%s",&c);

p=L->next;

while(p->next!

=NULL){

if(strcmp(c,p->city)==0){

printf("航班信息:

\n");

printf("航班号:

%s",p->num);

printf("起飞时间:

%s",p->time1);

printf("降落时间:

%s",p->time2);

printf("剩余座位:

%d",p->left);

printf("\n是否订票(1:

是0:

否):

");scanf("%d",&n);

while(n==1){

if(p->left>=1){

fp1=fopen("客户信息.txt","a+");

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

printf("乘客姓名:

");scanf("%s",&q->name);

printf("乘客证件:

");scanf("%s",&q->ID);

printf("预定票数:

");scanf("%d",&q->number);

fprintf(fp1,"%s\t%s\t%s\t%d

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

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2