飞机订票系统

更新时间:2024-11-06 00:22:54 阅读: 评论:0


2023年5月24日发(作者:爱恨一线间)

飞机订票系统 1 30

本系统主要是为了方便用户飞机订票,能使用户方便快捷的了解各航线信

息。本系统设置了航线创建功能、浏览航班信息和查询航线信息功能、订票退票功

能及查看剩余票数功能。在该系统当中,系统开发平台是Windows XP,程序设计设

计语言采用Visual C++,数据库采用Microsoft Access,程序运行平台为Windows

XP。程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以在应

用中解决实际问题。

关键词 AccessVisual C++;飞机订票

目录

1问题描述与分析...................................... 2

2数据结构设计描述 .................................... 3

3软件结构设计(系统功能模块图) ....................... 3

4算法设计思想 ....................................... 3

5调试分析 ........................................... 6

6总结 .............................................. 12

7参考文献 .......................................... 13

8附录(源程序清单) ................................. 14

飞机订票系统 2 30

1问题描述与分析

飞机订票系统要求可以实现如下功能:可以录入航班情况,可以查询某个航

线的情况,如输入飞机到达城市,查询飞机航班情况;可以订票、退票。从问题

的描述分析,该飞机定票系统必须具备以下几个功能模块:

1) 航线创建功能模块:包括终点站名、航班号、分机号、飞行日期、乘员定额、

及余票量,准载人数等信息.

2) 浏览航班信息功能模块:查看创建的所有航线信息。

3) 查询航线信息功能模块:可通过航班号查询,也可通过飞机到达地点查询。

4) 订票功能模块:包括航班号、定票数量、订票客户姓名、舱位等级、身份证号

码。

5) 退票功能模块:不满意所订的票时可进行退票,退票时需输入订票客户的姓名。

5) 查看剩余票数功能模块:对剩余用户可以订的票的数量进行查询并排序,便于

其他用户订票。

7) 退出系统功能模块:退出系统。

所以采用如下方案:

1) 本系统以菜单方式工作

2) 航线创建功能,我们定义了一个结构体Plane作为所有信息的录入单元且其

录入的相应信息应是以Plane作为数据单元进行存储的,然后对该创建的链表调

insert()函数,存储到数据文件中去.采用链表作为存储结构功能的实现-

-输入;

3) 订票功能模块中我们应对乘客需要订的航班进行查,看是否可以满足乘客

所需的票,若可以则为乘客订票,并修改相应航班的剩余票数,退票功能模块则

应查询机票数据文件,先用指针在文件中到相应的要退的票,即把该订票单元

结构体删除并修改退票航班的剩余票数即可;

4) 航班信息和订票信息的查看功能--输出查询航班(按航班号或抵达城市查

询)

2

飞机订票系统 3 30

2数据结构设计描述

本程序我采用了结构体,线性表存储,文件和链表存储结构。

3软件结构设计(系统功能模块图)

3-1整体结构框图

4算法设计思想

4.1. 数据类型定义

调用头文件,定义文件指针

#include

#include

#include

#include

typedef struct wat_ros

3

飞机订票系统 4 30

{ char name[10];/*姓名*/

char ID[18];/*身份证号*/

int req_amt;/*订票量*/

struct wat_ros *next;

}qnode,*qptr; //定义结构体指针变量

void main();

void insert(); //添加航班信息函数

航班的基本信息其数据结构为:

struct airline

{ char ter_name[10];/*终点站名 */

char air_num[10];/*航班号*/

char plane_num[10];/*飞机号*/

char date[7];/*飞行日期(星期几)*/

int tkt_amt;/*乘员定额*/

int tkt_sur;/*余票量*/

linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/

linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队

尾的指针*/

}lineinfo;

3) 定义定票的乘客基本信息

typedef struct ord_ros

{ char name[10];/*客户姓名*/

char ID[18];/*身份证号*/

int ord_amt;/*订票量*/

int grade;/*舱位等级*/

struct ord_ros *next;

}linklist;

4.2.

主要模块内部设计(我主要负责录入模块和修改模块)_

4.2.1、录入航班信息模块(创建链)

4

飞机订票系统 5 30

1) 本模块是对程序中的insert()函数的详细说明——链表的存储结构,存

储到数据单链表中去,

该模块的算法如下:

void insert() {

for (int i=0;i

printf("请输入航班%d信息(%d):",i+1,MAXSIZE);

scanf("%8s%3s%s%4s%3d%10d",(air+i)->ter_name,(air+i)->air_num,(air+i)->plane_

num,(air+i)->date,&(air+i)->tkt_amt,&(air+i)->tkt_sur);

}

4.2.2

查看和查询航班信息模块

由于航班的录入和保存是由链表存储结构进行的,并且是保存在单链表中,

所以此查询就可通过链表查询,在查看便是将其文件中所有的航班信息进行输出,

而查询我们可根据航班号和航班抵达的城市匹配查看,在查询中将需要查询的航

班号和文件阅读时指针所指的值进行比较,从而匹配输出;

4.2.3 订票模块

先根据数据定义进行订票时信息的输入,在定票时应先按乘客想要定的航班

号或者抵达城市查询,并按乘客欲定的票的数目与查询数目进行比较,若此比较

结果大于或等于0,则输出乘客可以定票,在修改航班信息中该航班的数量,且

在整个定票系统中,所有的定票都用链表进行存储管理;

4.2.4退票模块

在退票系统中即对航班票的数据文件进行管理,所以可先按照查询航班票的

方法,若查询到的票的信息和乘客此时要求退票的信息相匹配,则删除相应的该

票的节点,再修改其航班信息;

5

飞机订票系统 6 30

5调试分析

5.

1 测试用例

自定义一些航班信息,直接对各个模块功能进行测试。

5.2 测试结果

1) 主界面:

5-1

2

以管理员的身份进入,输入密码(2009

(1) 主菜单窗口运行界面如下:

5-2

(2)

航线创建功能模块,选择1创建航线,运行界面如下

6

飞机订票系统 7 30

5-3

(3)

查看航班信息功能模块,选择3查看航班信息,运行界面如下:

5-4

(4)

订票功能模块,选择2订票,其运行界面如下:

7

飞机订票系统 8 30

5-5

(5)

查看订票功能模块,选择4查看订票信息,运行界面如下:

5-5

(5

) 退票功能模块,选择5退票,运行界面如下:

5-7

选择4查看订票信息,因为已经退票,所以信息为空,其运行界面如下:

8

飞机订票系统 9 30

(7)

修改航班信息功能模块,选择7修改航班信息,其运行界面如下:

5-8

9

飞机订票系统 10 30

再选择3查看航班信息,以确认航班信息是修改成功,其运行界面如下:

5-9

(8) 查询航班信息功能模块,选择5查询航班信息,

选择1按航班号查询,其运行界面如下:

10

飞机订票系统 11 30

5-10

选择2,按到飞机到达地点查询,其运行界面如下:

11

飞机订票系统 12 30

5-11

6总结

一份耕耘一份收获,经过一周的刻苦学习,认真实践,终于完成了这份“飞

机订票系统”的数据结构课程设计。看着辛苦成果,看着这30多页的报告,心中

有种很复杂的感情。

在这次课程设计中我收获了很多东西,不仅包括知识上的,更重要的是学会

用一种平和坚定的心态去面对困难。虽然我C还学得不错,但对数据结构的知识

点还掌握的不是很扎实,很多算法知道大概思想,但到具体实施的时候就会出现

不完善的地方或错误。同样我了解到自己原来知识还是比较欠缺。自己要学习的

东西还太多。通过这次课程设计,我才明白学习是一个长期积累的过程,在以后

的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。

我的心得也就这么多了,总之,不管学会的还是学不会的的确觉得困难比较

多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。

此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会

了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是

真的学会了。

本次程序设计主要用到了结构体、调用函数、文件的保存、输入以及输出等

功能。使我对数据结构有了更深一层的认识,特别是对链表和文件的运用得到了

很大的提高。这次设计是我们对明年毕业设计的一次演练,很好的培养了我的论

文写作的规范性。

最后要感谢老师们给我们的帮助,在设计过程中,我通过查阅大量有关资料,

与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历

了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独

立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有

非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中

探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所

学到的东西是这次课程设计的最大收获和财富,使我终身受益。

12

飞机订票系统 13 30

7参考文献

[1] 严蔚敏,吴伟民. 《数据结构(C语言版). 清华大学出版社

[2] 吴文虎 《程序设计基础》 北京:清华大学出版社,2003

[3] 李志球 《实用C语言程序设计教程》北京:电子工业出版社,1999

[4] 徐孝凯 《数据结构实用教程(第二版) 清华大学出版社

[5] 谭浩强.C程序设计(第二版).北京:清华大学出版社,2000

13

飞机订票系统 14 30

8附录(源程序清单)

#include

#include

#include

struct Plane //定义航班结构体

{ int num; //航班号

char Stime[50];

char Etime[50];

char Start[50];

char Ends[50];

float Price;

float Discount;//折扣

int Msum; //该航班最多载人数

Plane *next;

};

Plane *Phead=ULL;

FILE *fp; //定义文件型指针变量

void main();

void fn(); //航班信息函数

Plane * PCreate()//创建航线上的航班链表

{ int k=1;

Plane * ps;

Plane * pEnd;

ps=new Plane;//新链表->ps

cout<<"请输入航班号:";

cin>>ps->num;

cout<<"起飞的时间:";

cin >>ps->Stime;

cout<<"抵达的时间:";

cin>>ps->Etime;

cout<<"起点:";

cin>>ps->Start;

cout<<"终点:";

14

飞机订票系统 15 30

cin>>ps->Ends;

cout<<"该航班现票价:";

cin>>ps->Price;

cout<<"该票价的折扣:";

cin>>ps->Discount;

cout<<"准载人数:";

cin>>ps->Msum;

cout<

pEnd=ps;//起始地址->终点地址

while(ps->num!=0)

{

if(Phead==ULL)

Phead=ps;

else

pEnd->next=ps;

pEnd=ps;

ps=new Plane;

cout<<"航班号(输入0结束):";

cin>>ps->num;

}

pEnd->next=ULL;

return Phead;

}

void save(Plane * head1) //保存信息

{if((fp=fopen("","ab"))==ULL) //向二进制文件尾增加数据

{return;

}

for(;head1;head1=head1->next)

fwrite(head1,sizeof(Plane),1,fp); //写入数据

fclose(fp);

}

void hangxian() //航线

{

Plane * head1=PCreate();

save(head1);}

15

飞机订票系统 16 30

void watchP()//功能3:查看信息

{

Plane *tail, *temp=new Plane;

Phead=tail=ULL;

int flag=1;

if((fp=fopen("","rb"))==ULL) //为输入打开一个二进制文件

{

printf("出错,请检查文件是否存在,按任意键返回住菜单n");//出错提示

main();

}

while((fread(temp,sizeof(struct Plane),1,fp))==1)

{

if(Phead==ULL){Phead=tail=temp;Phead->next=ULL;}

else

{

temp->next=ULL;

tail->next=temp;

tail=temp;

}

cout<

cout<<"你要查看的信息如下:"<

cout<<""<

cout<<"航班号:"<num<

cout<<"起飞时间:"<Stime<

cout<<"抵达时间:"<Etime<

cout<<"起点站:"<Start<

cout<<"终点站:"<Ends<

cout<<" 价:"<Price<

cout<<"票的折扣"<Discount<

cout<<"准载人数:"<Msum<

cout<<""<

cout<<"谢谢使用!退出!"<

temp=new Plane;

}

delete tail,temp;

16

飞机订票系统 17 30

fclose(fp);

}

void search_num() //按照航班号查

{

int num;

int k=1;

Plane*tail, *temp=new Plane;

Phead=ULL;

if((fp=fopen("","rb"))==ULL)

{

printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示

getchar();

fn();

}

while((fread(temp,sizeof(Plane),1,fp))==1)

{

if(Phead==ULL){Phead=tail=temp;Phead->next=ULL;}

else

{

temp->next=ULL;

tail->next=temp;

tail=temp;

}

temp=new Plane;

}

cout<<"请输入所要查航班号:"<

cin>>num;

if(Phead==ULL)

{

printf("没有你所查的信息!");fn();

}

for(;Phead;Phead=Phead->next)

{ if(Phead->num==num)

{

cout<你所查询的信息"<

17

飞机订票系统 18 30

cout<<""<

cout<<"航班号是:"<num<

cout<<"起飞时间:"<Stime;

cout<<"抵达时间:"<Etime<

cout<<"起点站:"<Start;

cout<<"终点站:"<Ends<

cout<<"票价:"<Price;

cout<<"票的折扣:"<Discount<

cout<<"准载人数:"<Msum<

cout<<""<

cout<<"谢谢使用!"<

}

}

delete tail,temp;

fclose(fp);

cout<是否继续?是请按1,否请按2."<

cin>>k;

switch(k)

{

case 1:

search_num();break;

case 2:

//fn();break;

default:cout<按键错误!请重新按键!"<

}

}

void search_Ends()//按到达的地点查询

{

char Ends[50];

int k=1;

Plane *tail, *temp=new Plane;

Phead=ULL;

if((fp=fopen("","rb"))==ULL)

{

printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示

18

飞机订票系统 19 30

getchar();

fn();

}

while((fread(temp,sizeof(Plane),1,fp))==1)

{

if(Phead==ULL){Phead=tail=temp;Phead->next=ULL;}

else

{

temp->next=ULL;

tail->next=temp;

tail=temp;

}

temp=new Plane;

}

cout<<"请输入所要查航班号地抵达地点:"<

cin>>Ends;;

if(Phead==ULL)

{

printf("没有你所查的信息!");fn();

}

for(;Phead;Phead=Phead->next)

{ if(strcmp(Phead->Ends,Ends)==0)

{

cout<到你所查的信息如下:"<

cout<<""<

cout<<"航班号是:"<num;

cout<<"起飞时间:"<Stime;

cout<<"抵达时间:"<Etime<

cout<<"起点站:"<Start;

cout<<"终点站:"<Ends<

cout<<" :"<Price;

cout<<"票的折扣:"<Discount<

cout<<"准载人数:"<Msum<

cout<<""<

cout<<"谢谢使用!"<

19

飞机订票系统 20 30

}

}

delete tail,temp;

fclose(fp);

cout<是否继续?是请按1,否请按2."<

cin>>k;

switch(k)

{

case 1:

search_num();break;

case 2:

//fn();break;

default:cout<按键错误!请重新按键!"<

}

}

void browsePlane() //功能4:查询航线

{

int i;

cout<<"请选择按键 "<

cout<按航班号查询请按1,按抵达地点查询请按2,返回请按0."<

cin>>i;

switch(i)

{ case 1:

search_num();break;

case 2:

search_Ends();break;

case 0:

fn();break;

default:cout<<"按键错误!请重新按键!"<

}

fn();

}

void change()//功能5:修改航班信息(当修改信息不存在时,不运行)

{

int num;

20

飞机订票系统 21 30

int i=0;

Plane temp;

if((fp=fopen("","rb+"))==ULL)

{

printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示

}

cout<<"请输入所要修改的航班号:"<

cin>>num;

while((fread(&temp,sizeof(Plane),1,fp))==1)

{

i++;

if(==num)

{

cout<<"修改相应的航班信息:"<

cout<<"修改后航班号是:";

cin>>;

cout<

cout<<"修改后的起飞时间是:";

cin >>;

cout<

cout<<"修改后的抵达时间是:";

cin>>;

cout<

cout<<"修改后的起点是:" ;

cin>>;

cout<

cout<<"修改后的终点是:";

cin>>;

cout<

cout<<"修改后的票价是:";

cin>>;

cout<

cout<<"修改后的票的折扣是:";

cin>>nt;

cout<<"修改后的准载人数:";

21

飞机订票系统 22 30

cin>>;

cout<<""<

cout<<"修改完毕!"<

cout<

fseek(fp,(i-1)*sizeof(Plane),0);

fwrite(&temp,sizeof(Plane),1,fp);

fseek(fp,0,0);

}

}

fclose(fp);

}

struct airticket //乘客信息

{

long int IDcard; //身份证件号

int Pnum; //定票的航班号

int day; //定票日期

int count; //定票数量

char ame[50];//定票人的姓名

airticket *next;

};

airticket * head=ULL;

airticket * Create()//创建航班票的链表

{

airticket * ps;

airticket * pEnd;

ps=new airticket;

cout<<"航班号:";

cin>>ps->Pnum;

cout<<"定票的日期:";

cin>>ps->day;

cout<<"定票人的姓名: ";

cin>>ps->ame;

cout<<"身份证号:";

cin>>ps->IDcard;

22

飞机订票系统 23 30

cout<<"票数: ";

cin>>ps->count;

cout<

pEnd=ps;

while(ps->Pnum!=0)

{

if(head==ULL)

head=ps;

else

pEnd->next=ps;

pEnd=ps;

ps=new airticket;

cout<<"航班号(航班号位0结束输入):";

cin>>ps->Pnum;

/*cout<<"定票的日期: ";

cin>>ps->day;

cout<<"定票人的姓名: ";

cin>>ps->ame;

cout<<"身份证号:";

cin>>ps->IDcard;

cout<<"票数: ";

cin>>ps->count;*/

cout<

}

pEnd->next=ULL;

return head;

}

void save(airticket * head1)//保存信息

{

if((fp=fopen("","ab"))==ULL)

{

return;

}

for(;head1;head1=head1->next)

23

飞机订票系统 24 30

fwrite(head1,sizeof(airticket),1,fp);

fclose(fp);

}

void dingpiao()//功能1:订票

{

airticket * head1=Create();

save(head1);

cout<<"你已经成功完成订票!"<

}

void tuipiao()//功能2:退票

{

airticket *tail, *temp=new airticket;

head=ULL;

if((fp=fopen("","rb"))==ULL)

{

printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示

getchar();

fn();

cout<<"恭喜你,你已经成功完成退票"<

}

while((fread(temp,sizeof(airticket),1,fp))==1)

{

if(head==ULL){head=tail=temp;head->next=ULL;}

else

{

temp->next=ULL;

tail->next=temp;

tail=temp;

}

temp=new airticket;

}

fclose(fp);

int num;

if(!head)

{

24

飞机订票系统 25 30

cout<<"n数据为空!n";return;

}

temp=tail=head;

cout<<"请输入想退机票的航班号:";

cin>>num;

for(;tail;tail=tail->next)

{

if(head->Pnum==num){head=tail->next;}

else if(tail->Pnum==num)

{

temp->next=tail->next;

cout<<"你已经成功完成退票"<

}

temp=tail;

}

if((fp=fopen("","wb"))==ULL)return;

for(;head;head=head->next)

fwrite(head,sizeof(airticket),1,fp);

fclose(fp);

}

void watchT()//功能3:查看信息

{

airticket *tail, *temp=new airticket;

head=tail=ULL;

int flag=1;

if((fp=fopen("","rb"))==ULL)

{

printf("出错,请检查文件是否存在,按任意键返回主菜单n");//出错提示

main();

}

while((fread(temp,sizeof(struct airticket),1,fp))==1)

{

if(head==ULL){head=tail=temp;head->next=ULL;}

else

{

25

飞机订票系统 26 30

temp->next=ULL;

tail->next=temp;

tail=temp;

}

cout<

cout<<"你所查看的信息如下:"<

cout<<""<

cout<<"航班号:"<Pnum<

cout<<"定票日期:"<day<

cout<<"定票人的姓名:"<ame<

cout<<"身份证号:"<IDcard<

cout<<"票数:"<count<

cout<<""<

cout<<"谢谢使用!"<

temp=new airticket;

}

delete tail,temp;

fclose(fp);

}

void fn() //航班信息函数

{

int i=1;

while(i)

{

cout<

cout<<"请输入航班信息:"< //打印提示信息

cout<<" 1 航线创建(输入0结束)"<

cout<<" 2 (输入0结束)"<

cout<<" 3 查看航班信息"<

cout<<" 4 查看订票信息"<

cout<<" 5 查询航班信息"<

cout<<" 6 退 "<

cout<<" 7 修改航班信息"<

cout<<" 0 返回主界面 "<

cout<<"请选择按键(0-7):";

26

飞机订票系统 27 30

cin>>i;

cout<

if(i>=0&&i<=7)

{

switch(i)

{

case 1:hangxian();break;

case 2:dingpiao();break;

case 3:watchP();break;

case 4:watchT();break;

case 5:browsePlane();break;

case 6:tuipiao();break;

case 7:change();break;

case 0:

{

cout<<"谢谢使用! "<

};break;

}

}

else

cout<<"按键错误!请重新按键!"<

cout<

}

}

//主函数

void main()

{ int j=1;

while(j)

{

cout<<" $---------------------------------$"<

cout<<" | |"<

cout<<" | **欢迎使用中国民航管理系统** |"<

cout<<" | |"<

cout<<" @---------------------------------@"<

cout<<"管理员进入请按1,客户进入请按2: "<

27

飞机订票系统 28 30

cin>>j;

if(j>=1&&j<=2)

{

switch(j)

{

case 1:

{

char f[]="";

printf("请输入密码并以回车键结束:");

scanf("%s",f);

if(strcmp(f,"2009")==0)fn();

else

cout<<"密码错误!请重新选择按键!"<

};break;

case 2:

{

cout<<"^_^客户能查看和查询航空信息^_^"<

cout<<""<

cout<1查看信息,2查询信息:";

int m;

cin>>m;

if(m>=1&&m<=2)

{ switch(m)

{case 1:

watchP();break;

case 2:

{

int num;

int k=1;

airticket *tail, *temp=new airticket;

head=ULL;

if((fp=fopen("","rb"))==ULL)

{

printf("出错,请检查文件是否存在,按任意键返回主菜单");//出错提示

getchar();

28

飞机订票系统 29 30

fn();

}

while((fread(temp,sizeof(airticket),1,fp))==1)

{

if(head==ULL){head=tail=temp;head->next=ULL;}

else

{

temp->next=ULL;

tail->next=temp;

tail=temp;

}

temp=new airticket;

}

cout<请输入所要查航班号:"<

cin>>num;

if(head==ULL)

{

printf("没有你所查的信息!");fn();

}

for(;head;head=head->next)

if(head->Pnum==num)

{

cout<你所查的信息如下:"<

cout<<""<

cout<<"航班号是:"<Pnum<<","<<"日期是:"<day<<",";

cout<<":"<IDcard<<","<<"

:"<count<<",";

cout<<"谢谢使用!"<

}

delete tail,temp;

fclose(fp);

cout<是否继续?是请按1,否请按2."<

cin>>k;

switch(k)

{

29

飞机订票系统 30 30

case 1:

search_num();break;

case 2:

main();break;

default:cout<<"按键错误!请重新按键!"<

}

};break;

}

}else{cout<<"按键错误!请重新选择按键!"<

} break;

}

}

else

{

cout<<"按键错误!请重新选择按键!"<

}

}

}

30


本文发布于:2023-05-24 10:09:35,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/falv/fa/87/105269.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 站长QQ:55-9-10-26