C语言程序之飞机票订票系统.docx

上传人:b****5 文档编号:7177330 上传时间:2023-01-21 格式:DOCX 页数:49 大小:1,001.15KB
下载 相关 举报
C语言程序之飞机票订票系统.docx_第1页
第1页 / 共49页
C语言程序之飞机票订票系统.docx_第2页
第2页 / 共49页
C语言程序之飞机票订票系统.docx_第3页
第3页 / 共49页
C语言程序之飞机票订票系统.docx_第4页
第4页 / 共49页
C语言程序之飞机票订票系统.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

C语言程序之飞机票订票系统.docx

《C语言程序之飞机票订票系统.docx》由会员分享,可在线阅读,更多相关《C语言程序之飞机票订票系统.docx(49页珍藏版)》请在冰豆网上搜索。

C语言程序之飞机票订票系统.docx

C语言程序之飞机票订票系统

 

软件课程设计报告

 

班级:

光电0905

姓名:

彭应钦

学号:

U200914197

 

1软件设计

1.1主要功能

本程序最多支持管理100个航班信息,10000机票信息,管理员可以进行航班信息的输入、单个或全部航班信息的删除、航班信息查询、旅客信息输入、机票信息查询、机票订购以及机票退订等功能,其中航班信息查询支持按航班号查询以及按目的地和起飞时间查询两种方式,机票信息查询支持按航班号查询、按旅客姓名查询以及按机票编号查询三种方式。

程序运行开始时要输入管理员密码(默认为U200914197),通过后可以自由进行操作,但需要按提示操作。

具体功能如下:

1.菜单

主菜单

航班信息查询方式菜单

航班信息维护方式菜单

机票信息查询方式菜单

2.文件读取

本地航班信息读取

本地机票信息读取

3.文件保存

本地航班信息保存

本地机票信息保存

4.信息输入

航班信息输入

机票信息输入

5.查询

航班信息查询

机票信息查询

6.航班信息维护

7.订票与退票

1.2程序模块

1.菜单模块

主菜单

航班信息查询方式菜单

航班信息维护方式菜单

机票信息查询方式菜单

2.文件读取模块

本地航班信息读取

本地机票信息读取

3.文件保存模块

本地航班信息保存

本地机票信息保存

4.信息输入模块

航班信息输入

机票信息输入

5.查询模块

航班信息查询

机票信息查询

6.航班信息维护模块

7.订票与退票模块

1.3结构体

structFLIGHT//航班信息结构

{

charflight_num[10];//航班号

charstart[10];//出发地

chardestination[10];//目的地

chartakeoff_time[8];//起飞时刻

chararrive_time[8];//到达时刻

unsignedintnum;//总票数

unsignedintleft;//剩余票数

unsignedintprice;//价格

};

structTICKET//机票信息结构

{

charflight_num[10];//航班号

charticket_num[10];//机票编号

charstart[10];//出发地

chardestination[10];//目的地

chartakeoff_time[8];//起飞时刻

chararrive_time[8];//到达时刻

chargate_num[5];//登机口

charseat_num[10];//座位号

charname[10];//姓名

charsex[4];//性别

charid_num[20];//身份证号

charphone_num[16];//联系电话

};

structFLIGHTall[M];//航班结构数组

structFLIGHT*pp;//指向航班的结构数组

structTICKETpassenger[N];//机票信息结构数组

structTICKET*qq;//

1.4文件指针定义

FILE*fp_flight_info,*fp_ticket_info;//航班信息文件指针,机票信息文件指针

1.5函数声明

voidflight_info_input();//航班信息输入函数

voidflight_info_delete();//单个航班信息删除

voidflight_info_deleteall();//全部航班信息删除

voidticket_info_input(structFLIGHT*p);//机票信息输入

voidticket_book();//机票订购

voidticket_cancel();//机票退订

void();//读取本地航班信息

void();//读取本地机票信息

void();//保存本地航班信息

void();//保存本地机票信息

voidsearch_flight_num();//按航班号查询航班信息

voidsearch_destination_time();//按目的地和起飞时间查询航班信息

voidsearch_ticket_flight_num();//按航班号查询机票信息

voidsearch_ticket_name();//按旅客姓名查询机票信息

voidsearch_ticket_num();//按机票编号查询机票信息

voidrootmenu();//主菜单

voidmenu1();//航班信息查询方式菜单

voidmenu2();//航班信息维护方式菜单

voidmenu3();//机票信息查询方式菜单

航班信息查询

旅客信息查询

机票订购

机票退订

航班信息维护

保存退出

退出

按目的地和起飞时间

按姓名查询

按航班号查询

退出

按机票号查询

航班信息输入

单个航班信息删除

全部航班信息删除

退出

飞机票系统

按航班号

系统总体结构

1.6流程图

 

开始

显示说明以及提示。

intx=0;

判断密码是否正确

输入密码

pp=&all[0];qq=&passenger[0];

();();

rootmenu();

结束

x++;

x==3;

结束

 

main函数流程图

 

menu1();

‘1’

‘2’

‘3’

‘4’

‘5’

‘6’

开始

显示菜单

c>='1'&&c<='6'

给c赋值

switch(c)

菜单一

保存退出

航班维护

退票

订票

菜单三

结束

 

主菜单voidrootmenu()流程图

menu1,menu2,menu3的流程图与主菜单的流程图一样,不再重复。

 

本地文件读取

航班信息读取与机票信息读取流程图是一样的,不再重复。

 

本地文件保存

 

 

航班信息输入

 

单个航班信息删除

全部航班信息删除与此流程图类似,不再重复

航班信息查询

机票信息查询与此类似,不再重复。

 

机票订购

 

机票退订

 

1.7说明

此程序中除地名人名性别用中文输入外,其他全用英文输入,时间请用24时制且按09:

04的格式输入(注意冒号为英文下输入)。

为了更流畅地运行程序请按提示操作。

正常的程序退出只能使用主菜单下的保存退出,否则将丢失信息。

系统的初始密码为U200914197。

接下来介绍关于程序中的一些具体实现。

航班信息以及机票信息用的是结构数组存储,且用结构指针进行传递。

定义了两个外部静态型变量计数航班数以及已售机票数,又定义了两个文件指针分别指向存储航班信息的文件和存储机票信息的文件。

为了将界面做的比较友好,做了四个菜单,且主函数中除了验证密码外功能外,其他均是调用函数。

航班信息包括航班号、出发地、目的地、起飞时刻、到达时刻、总票数、剩余票数、价格,机票信息包括航班号、机票编号、出发地、目的地、起飞时刻、到达时刻、登机口、座位号、姓名、性别、身份证号、联系电话,其中航班号、出发地、目的地、起飞时刻、到达时刻、价格均是真实信息,总票数、剩余票数是随手写的,航班信息在显示时均会显示,且会有一个内部编号以供订票用、删除用,这样在其它函数中就不用重复写查询函数,机票编号是用B1+机票订购次序编号而成,登机口是用A+航班号后两位而成的(用到了sprintf函数),座位号是用买票的先后顺序而生成的,且统一按三位的格式显示,由于DOS屏宽的限制机票信息不显示身份证号码以及联系电话。

菜单选项均用字符识别以避免在使用数字时会不停地显示。

文件读取时是用的fread函数的返回值是读取的项数而构成的for循环以读出所有信息且不会多读取。

保存函数是直接写信息。

该程序只读一次文件且只写一次文件,所以退出只能用主菜单下的保存退出。

航班或机票信息输入时char型均用gets函数输入,int型均用scanf函数输入。

所有查询函数均用strcmp或者直接比较数值大小来实现,其中按目的地和起飞时间查询航班信息时,时间只取前两位,所以用到strncmp函数。

此外,航班信息删除以及退票均是使用后一个信息替换前一个信息且构成for循环来实现的。

改程序中最大的亮点是可以卖出退订的机票而生成机票号和座位号时可以使用退了的号码而不出错。

改程序其实可以继续增加功能,例如更改密码的功能,有更加多的查询方式,以及可以支持不同的输入(如地名用中文、拼音、缩写等),目的地还要显示所降落的机场,所坐飞机的机型、舱位等级,支持更多的出发地(默认为武汉),还有就是支持不同的日期以及可以根据一个星期的航班信息查询以后任一天的航班信息。

 

2软件测试

 

 

3算法改进

该程序如果用链表这种非线性存储结构进行的话,效率可能会更高。

而在进行程序时,有的地方也要分配内存以进行现场保护。

这个程序中最大的问题是如何将退了之后的票再卖出,而机票号码和座位号不会发生重复,开始时没有注意到这个问题,后来发现了之后,经过认真的思考,想到了可以先进性排异性查别,如果有相同的则往前进行排查,发现有不同的就将其作为卖出票的号码

4开发体会

经过三个多星期的努力,我终于完成了此飞机票销售系统的开发调试以及最终的顺利运行,期间遇到的问题是原本在学习C语言时所未曾想到的。

我们从少数几个函数到能执行一定功能的小型软件,从单一程序到包含程序、数据、文档的软件,期间的飞跃不可谓不小。

在最开始的时候,由于文件操作以及链表操作均是上学期未学的,所以一直被阻拦到这里,不能继续进行,而后来熟悉了之后,再进行操作则会非常顺利。

期间不断的调试以及编译运行所增加的C语言知识是任何只靠记忆而知道的C语言知识多得多。

而本次课程的学习更加加深了我们对C语言以及对实际编程困难的理解。

这一次的飞机票售票系统,让我掌握了更多的编程思路和编程的经验,将在今后受益匪浅。

附录:

源代码清单

#include

#include

#include

#defineM100//所支持的航班最大数量

#defineN10000//所支持的机票最大数量

structFLIGHT//航班信息结构

{

charflight_num[10];//航班号

charstart[10];//出发地

chardestination[10];//目的地

chartakeoff_time[8];//起飞时刻

chararrive_time[8];//到达时刻

unsignedintnum;//总票数

unsignedintleft;//剩余票数

unsignedintprice;//价格

};

structTICKET//机票信息结构

{

charflight_num[10];//航班号

charticket_num[10];//机票编号

charstart[10];//出发地

chardestination[10];//目的地

chartakeoff_time[8];//起飞时刻

chararrive_time[8];//到达时刻

chargate_num[5];//登机口

charseat_num[10];//座位号

charname[10];//姓名

charsex[4];//性别

charid_num[20];//身份证号

charphone_num[16];//联系电话

};

structFLIGHTall[M];//航班结构数组

structFLIGHT*pp;//指向航班的结构数组

structTICKETpassenger[N];//机票信息结构数组

structTICKET*qq;//

FILE*fp_flight_info,*fp_ticket_info;//航班信息文件指针,机票信息文件指针

staticintflinum=0,ticnum=0;//外部静态型变量,分别用来计数航班数量与机票数量

charstr[8]={"B1"};//用来组合生成机票编号

voidflight_info_input();//航班信息输入函数

voidflight_info_delete();//单个航班信息删除

voidflight_info_deleteall();//全部航班信息删除

voidticket_info_input(structFLIGHT*p);//机票信息输入

voidticket_book();//机票订购

voidticket_cancel();//机票退订

void();//读取本地航班信息

void();//读取本地机票信息

void();//保存本地航班信息

void();//保存本地机票信息

voidsearch_flight_num();//按航班号查询航班信息

voidsearch_destination_time();//按目的地和起飞时间查询航班信息

voidsearch_ticket_flight_num();//按航班号查询机票信息

voidsearch_ticket_name();//按旅客姓名查询机票信息

voidsearch_ticket_num();//按机票编号查询机票信息

voidrootmenu();//主菜单

voidmenu1();//航班信息查询方式菜单

voidmenu2();//航班信息维护方式菜单

voidmenu3();//机票信息查询方式菜单

voidmain()

{

printf("说明:

此程序中除使用的地名人名性别用中文\n");//系统说明

printf("输入外,其他全用英文输入,时间请使\n");

printf("用24时制且按09:

08的格式输入。

为了\n");

printf("更流畅地使用请按提示操作。

正常的程\n");

printf("序退出只能使用主菜单下的保存退出,\n");

printf("否则输入的信息将丢失!

\n");

system("pause");

charcode[16];

intx=0;

begin:

printf("\n请输入管理员密码,连续三次错误将退出程序(初始为U200914197)\n");//密码保护

gets(code);

if(strcmp("U200914197",code)!

=0)

{

x++;

if(x==3)

{

exit

(1);

}

gotobegin;

}

pp=&all[0];//指针赋初值

qq=&passenger[0];

();//本地文件读取

();

rootmenu();

}

/***************************主菜单*******************************/

voidrootmenu()

{

begin:

fflush(stdin);

system("cls");

printf("*****************************欢迎使用飞机票销售系统*****************************");

printf("**");

printf("*1.航班信息查询*");

printf("*2.旅客信息查询*");

printf("*3.机票订购*");

printf("*4.机票退订*");

printf("*5.航班信息维护*");

printf("*6.保存退出*");

printf("********************************************************************************");

printf("请输入选项!

\n");

charc;

c=getchar();

if(c>='1'&&c<='6')

{

switch(c)

{

case'1':

menu1();

break;

case'2':

menu3();

break;

case'3':

ticket_book();

break;

case'4':

ticket_cancel();

break;

case'5':

menu2();

break;

case'6':

();

();

printf("谢谢使用!

\n");

exit

(1);

break;

}

}

else

{

printf("ERROR!

Pleaseinputagain\n");

system("pause");

system("cls");

gotobegin;

}

}

/********************************子菜单1***********************************/

voidmenu1()

{

begin:

fflush(stdin);

system("cls");

printf("*航班信息查询*\n");

printf("1.按航班号");

printf("2.按目的地和起飞时间");

printf("3.退出");

printf("请输入选项!

\n");

charc;

c=getchar();

if(c>='1'&&c<='3')

{

switch(c)

{

case'1':

search_flight_num();

break;

case'2':

search_destination_time();

break;

case'3':

rootmenu();

break;

}

}

else

{

printf("ERROR!

Pleaseinputagain\n");

system("pause");

system("cls");

gotobegin;

}

}

/****************************子菜单2***********************************/

voidmenu2()

{

begin:

fflush(stdin);

system("cls");

printf("*航班信息维护*\n");

printf("1.航班信息输入");

printf("2.单个航班信息删除");

printf("3.全部航班信息删除");

printf("4.退出");

printf("请输入选项!

\n");

charc;

c=getchar();

if(c>='1'&&c<='4')

{

switch(c)

{

case'1':

flight_info_input();

break;

case'2':

flight_info_delete();

break;

case'3':

flight_info_deleteall();

break;

case'4':

rootmenu();

break;

}

}

else

{

printf("ERROR!

Pleaseinputagain\n");

system("pause");

system("cls");

gotobegin;

}

}

/*************************子菜单3**************************/

voidmenu3()

{

begin:

fflush(stdin);

system("cls");

printf("*旅客信息查询*\n");

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

printf("2.按姓名查询");

printf("3.按机票号查询");

printf("4.退出");

printf("请输入选项!

\n");

charc;

c=getchar();

if(c>='1'&&c<='4')

{

switch(c)

{

case'1':

search_ticket_flight_num();

break;

case'2':

search_ticket_name();

break;

case'3':

search_ticket_num();

break;

case'4':

rootmenu();

break;

}

}

else

{

printf("ERROR!

Pleaseinputagain\n");

system("pause");

system("cls");

gotobegin;

}

}

/******************************本地文件读取************************************/

void()

{

if((fp_flight_info=fopen("flight_info.dat","rb"))==NULL)//检查能否以只读方式打开文件

{

fp_flight_info=fopen("flight_info.dat","wb");//不能打开文件就新建文件

}

rewind(fp_flight_info);//指针重新定位到文件首部

for(;fread(pp,sizeof(structFLIGHT),1,fp_flight_info)==1;pp++,flinum++)//将每个FLIGHT结构读取出来并计数

continue;

fclose(fp_flight_info);//关闭文件

}

void()

{

if((fp_ticket_info=fopen("ticket_info.dat","rb"))==NULL)

{fp_ticket_info=fopen("ticket_info.dat","wb");

}

rewind(fp_ticket_info);

for(;fread(qq,sizeof(stru

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

当前位置:首页 > 高等教育 > 研究生入学考试

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

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