C语言飞机订票系统.docx

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

C语言飞机订票系统.docx

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

C语言飞机订票系统.docx

C语言飞机订票系统

 

飞机订票系统

 

一、课程设计目的

(1)了解并掌握算法的设计方法,具备初步的独立分析和设计能力;

(2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

(3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;

二、课程设计的内容和要求

本程序主要用于机票的管理,甩以提供了以下功能,行班信息输入输出保

存、航线查询、订票,退票,和修改航班信息。

创建航班信息:

包括航班号、起飞时间、降落时间、起飞抵达城市、航班票价、及票价的折扣,票数等信息.录入的信息应该保存在一个文件里。

浏览航班信息:

通过浏览系统,客户可以根据自己时间、金钱等多方面的因素选择适合自己的航班。

修改航班信息:

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

查询航班信息:

可通过航班号查询,可通过飞机终点站查询,也可以按航线查询。

删除航班信息:

可通过航班号删除,也可以按航线删除。

添加航班信息:

按添加的航班数量依次添加航班信息

订票:

可以订票,如果该航班已经无票,可以推荐相关航班

退票:

不满意所订的票时可进行退票

三、算法的基本思想

1.涉及到的数据结构

typedefstructflightnode//定义结构体数组

{

intnum;//航班号

charstart[20];//起始城市

charover[20];//终点城市

charStime[10];//起始时间

harEtime[10];

intPrice;

intDiscount;//折扣

intcount;//机票数

structflightnode*next;

}NODE;

2.基本功能模块

 

 

主函数模块。

1)函数原形:

voidmain();

2)功能:

调用initlist(&h)函数和menu()函数,初始化函数和显示主界面

创建航班信息模块

1)函数原形:

voidcreat();

2)功能:

本模块是对程序中的create()函数和save()函数的详细说明——链表的存储结构,对该创建的链表调用save()函数,存储到数据文件中去

浏览航班信息模块

1)函数原形:

voidprint();

2)功能:

输出航班信息

修改航班信息模块

1)函数原形:

voidchange()

2)功能:

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

20查找航班信息模块

1)函数原形:

NODE*search():

查找航班信息数据

2)功能:

由于航班的录入和保存是由链表存储结构进行的,所以此查询就可通过链表对该文件进行查看或者查询,查询我们可根据航班号和航班抵达的城市和航线匹配查询,在查询中将需要查询的航班号no和文件阅读时指针所指的值num进行比较,而按抵达城市查找则利用函数strcmp(p->next->start,name1)若匹配则输出;

删除航班信息模块

1)函数原形:

voiddel()

2)功能:

选择按什么方式删除,然后按该方式删除

添加航班信息模块

1)函数原形:

voidadd();

2)功能:

按添加的航班数量依次添加航班信息

订票信息模块

1)函数原形:

intbook_tickets()

2)功能:

先根据search()函数查询要订票的航班,在订票时应先按乘客想要定的航班号或者抵达城市或航线查询,并按乘客欲定的票的数目与查询数目进行比较,若订票的票数小于该航班票数,则输出订票成功,,且在整个定票系统中,所有的定票都用链表进行存储管理

退票信息模块

1)函数原形:

inttuipiao()

2)功能:

在退票系统中即对航班票的数据文件进行管理,所以可先按照查询航班票的方法,若查询到的票的信息和乘客此时要求退票的信息相匹配,则在该定票数据文件中删除相应的该票的节点,再修改其航班信息

 

3.主要功能模块流程图

 

四、系统测试

1.选择1,运行界面如下:

 

2.选择2,运行界面如下:

3.选择3,运行界面如下:

 

4.选择4,运行界面如下:

5.选择5,运行界面如下:

 

6.选择6,运行界面如下:

7.选择7,运行界面如下:

 

8.选择8,运行界面如下:

9.选择0,运行界面如下:

五.结论

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

使我对数据结构有了更深一层的认识,特别是对动态链表和文件的运用得到了很大的提高。

在本次实验中程序曾多次编译、运行出错,多亏了王帅老师的指导才将错误找出并改正,通过本次实验,我认识到实践和动手的重要性。

六.源程序及系统文件使用说明

程序清单

#include//标准输入、输出头文件

#include//包含字符串函数处理头文件

#include//包含动态存储与释放函数头文件

typedefstructflightnode//定义结构体数组

{

intnum;//航班号

charstart[20];//起始城市

charover[20];//终点城市

charStime[10];//起始时间

charEtime[10];

intPrice;

floatDiscount;//折扣

intcount;//机票数

structflightnode*next;

}NODE;

#definePRINT"%4d%9.6s%9.6s%9.6s%9.6s%9d%.1f%9d\n",p->next->num,p->next->start,p->next->over,p->next->Stime,p->next->Etime,p->next->Price,p->next->Discount,p->next->count//定义输出格式

voidcreat();//创建航班信息文件

voidprint();//输出航班信息

voidsave();//保存航班信息

intread();//读取航班信息

NODE*search();//查找航班信息

voiddel();//删除航班信息

intbook_tickets();//订票信息

inttuipiao();//退票信息

voidchange();//修改信息

voidmenu();//菜单

voidinitlist(NODE**);//初始化函数

voidadd();//添加信息函数

NODE*h=NULL;//建立全局变量,存链表头指针

intm=0;//航班数量

voidinitlist(NODE**h)

{

*h=(NODE*)malloc(sizeof(NODE));

(*h)->next=NULL;

}

voidcreat()//打印模块程序

{

FILE*fp;

NODE*p=NULL;//定义移动指针

inti,flightnum;

chary;

p=h;

if((fp=fopen("air.dat","rb"))!

=NULL)//打开文件,并判断是否出错

{

printf("信息文件已经存在,不必创建!

按任意键后回车返回\n\n\n");//打印出错提示

fclose(fp);

fflush(stdin);

getchar();

return;

}

p=h;

printf("请输入要输入的航班数量:

");

fflush(stdin);//清除文件缓冲区

scanf("%d",&flightnum);//读取航班数

system("cls");//清屏

printf("请依次输入航班信息:

\n\n");//打印提示信息

printf("--------------------------------------------------------------------------\n");

for(i=0;i

{

p->next=(NODE*)malloc(sizeof(NODE));

p->next->next=NULL;

printf("航班号:

");

fflush(stdin);

scanf("%d",&p->next->num);//读取航班号

printf("起始站:

");

fflush(stdin);

scanf("%10s",&p->next->start);//读取起飞城市

printf("终点站:

");

fflush(stdin);

scanf("%10s",&p->next->over);//读取抵达城市

printf("起始时间:

");

fflush(stdin);

scanf("%10s",&p->next->Stime);//读取起飞时间

printf("抵达时间:

");

fflush(stdin);

scanf("%10s",&p->next->Etime);//读取抵达时间

printf("航班票价:

");

fflush(stdin);

scanf("%d",&p->next->Price);//读取航班票价

printf("票价折扣:

");

fflush(stdin);

scanf("%10f",&p->next->Discount);//读取票价折扣

printf("机票数:

",m);

fflush(stdin);

scanf("%d",&p->next->count);//读取机票数

printf("第%d个信息已经输完\n",i+1);

p=p->next;

m++;

}

printf("信息输入完毕,是否存盘:

存盘按0,不存盘按其他任意键");

fflush(stdin);

y=getchar();

if(y=='0')

{

save();//将结构体信息存盘

print();//输出输入的航班信息

}

}

voidsave()//保存模块程序

{

NODE*p=NULL;//定义移动指针

FILE*fp,*fp1;//定义指向文件指针

p=h;

if((fp=fopen("air.dat","wb"))==NULL)//打开文件并判断是否出错

{

printf("创建文件失败!

\n\n\n");//打印出错提示

fflush(stdin);

getchar();

return;

}

if((fp1=fopen("num.dat","wb"))==NULL)//打开文件并判断是否出错

{

printf("创建文件失败!

\n\n\n");//打印出错提示

fflush(stdin);

getchar();

return;

}

while(p->next!

=NULL)

{

if(fwrite(p->next,sizeof(NODE),1,fp)==0)//向文件写入数据,并判断是否出错

{

printf("向文件输入数据失败!

\n\n\n");

break;

}

elsep=p->next;

}

fprintf(fp1,"%d",m);//按指定的格式输出到fp1所指定的文件中

fclose(fp);//关闭文件

fclose(fp1);//关闭文件

}

intread()//从文件读取信息模块

{

FILE*fp,*fp1;//定义文件指针

NODE*p=NULL;

inti;

initlist(&h);

p=h;

if((fp=fopen("air.dat","rb"))==NULL)//打开文件,并判断是否出错

{

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

fflush(stdin);

getchar();

return0;

}

if((fp1=fopen("num.dat","rb"))==NULL)//打开文件并判断是否出错

{

printf("创建文件失败!

\\n\n\n");//打印出错提示

fflush(stdin);

getchar();

return0;

}

fscanf(fp1,"%d",&m);//从fp1所指定的文件中按给定的格式将输入数据送内存中

fclose(fp1);//关闭文件

printf("\n总共%d个航班信息\n",m);

for(i=0;i

{

p->next=(NODE*)malloc(sizeof(NODE));

p->next->next=NULL;

fread(p->next,sizeof(NODE),1,fp);//从文件中读取信息

p=p->next;

}

fclose(fp);//关闭文件

return1;

}

voidprint()//打印模块

{

NODE*p=NULL;

if(read()==0)return;//调用读取文件函数,并判断是否文件存在。

p=h;

printf("═══════════════════════════════════════\n");

printf("航班号起始站终点站起始时间抵达时间航班票价票价折扣票数\n");

while(p->next!

=NULL)

{

printf(PRINT);//打印信息

p=p->next;

}

printf("═══════════════════════════════════════");

printf("\n\n\n\n\n\n请按任意键后回车结束返回上层菜单:

\n");

fflush(stdin);

getchar();

}

NODE*search()//查询模块

{

NODE*p=NULL;

NODE*x=NULL;/*用于记录查询到的记录*/

charname1[20];

charname2[20];

charii[10];

intn,no;

intflag=0;

if(read()==0)return0;

p=h;

do

{

printf("请选择查找方式:

\n\n");//打印查询方式菜单

printf("--------------------------------------------------------------------------\n");

printf("1.按航班号查找\n\n"

"2.按终点站查找\n\n"

"3.按航线查找\n\n"

"0.返回\n\n");

printf("请在0-3中选择:

\n\n"

"按其他键后回车返回主菜单:

\n\n\n\n\n");

fflush(stdin);

scanf("%d",&n);//读取查找方式

if(n==0)

break;

switch(n)

{

case1:

printf("请输入航班号:

\n");

fflush(stdin);

scanf("%d",&no);//航班号

break;

case2:

printf("请输入终点站名称:

\n");

fflush(stdin);

scanf("%10s",name2);//读取终点站

break;

case3:

printf("请输入起始站名称:

\n");

fflush(stdin);

scanf("%10s",name1);//读取起始站

printf("请输入终点站名称:

\n");

fflush(stdin);

scanf("%10s",name2);//终点站

break;

default:

printf("请选择有效查询方式!

\n\n\n");

}

while(p->next!

=NULL)

{

if(strcmp(p->next->start,name1)==0||strcmp(p->next->over,name2)==0)//按终点站起始站判断输出条件

{

printf("\n查找航班信息成功!

\n\n\n");

printf("航班号起始站终点站起始时间抵达时间航班票价票价折扣票数\n");

printf(PRINT);//打印信息

x=p->next;

flag=1;

break;

}

if(p->next->num==no)//按航班号判断输出条件

{

printf("\n查找航班信息成功!

\n\n\n");

printf("航班号起始站终点站起始时间抵达时间航班票价票价折扣票数\n");

printf(PRINT);//打印信息

x=p->next;

flag=1;

break;

}

p=p->next;

}

if(!

flag)printf("查找失败!

\n\n\n\n\n");

printf("\n\n\n"

"是否重新查找?

\n"

"请键入yes或no\n"

"后回车键结束\n"

"-------------------------------------------------\n\n\n\n\n");

no=0;//将航班号赋值为0

p=h;

flag=0;

fflush(stdin);

scanf("%10s",ii);

}while(strcmp(ii,"yes")==0);//判断结束

return(x);

}

voidadd()

{

intflightnum;

inti,y;

NODE*p=NULL;

i=read();

if(i==0)return;

p=h;

while(p->next!

=NULL)p=p->next;

printf("请输入要输入的航班数量:

");

fflush(stdin);

scanf("%d",&flightnum);//读取航班数

system("cls");

printf("请依次输入航班信息:

\n\n");//打印提示信息

printf("--------------------------------------------------------------------------\n");

for(i=0;i

{

p->next=(NODE*)malloc(sizeof(NODE));

p->next->next=NULL;

printf("航班号:

");

fflush(stdin);

scanf("%d",&p->next->num);//读取航班号

printf("起飞城市:

");

fflush(stdin);

scanf("%10s",&p->next->start);//读取起飞城市

printf("抵达城市:

");

fflush(stdin);

scanf("%10s",&p->next->over);//读取抵达城市

printf("起飞时间:

");

fflush(stdin);

scanf("%10s",&p->next->Stime);//读取起飞时间

printf("抵达时间:

");

fflush(stdin);

scanf("%10s",&p->next->Etime);//读取抵达时间

printf("航班票价:

");

fflush(stdin);

scanf("%d",&p->next->Price);//读取航班票价

printf("票价折扣:

");

fflush(stdin);

scanf("%10f",&p->next->Discount);//读取票价折扣

printf("机票数:

",m);

fflush(stdin);

scanf("%d",&p->next->count);//读取机票数

printf("第%d个信息已经输完\n",i+1);

p=p->next;

m++;

}

printf("信息输入完毕,是否存盘:

存盘按0,不存盘按其他任意键后回车");

fflush(stdin);

scanf("%d",&y);

if(y==0)

{

save();//将结构体信息存盘

print();//输出输入的航班信息

}

}

voiddel()//删除模块

{

NODE*p=NULL;

NODE*temp=NULL;

charname1[20];

charname2[20];

charii[10];

intno,n;

intflag=0;

if(read()==0)return;;//调用读取函数

do

{

printf("请选择删除以方式回车键结束:

\n\n");

printf("*1.按航班号删除\n\n"

"*2.按航线删除\n\n"

"*0.返回\n\n");

printf("请在0-2中选择以回车键结束:

\n\n\n");

fflush(stdin);

scanf("%d",&n);//读取删除方式

if(n==0)

break;//跳出循环

switch(n)

{

case1:

printf("航班号:

\n");

fflush(stdin);

scanf("%d",&no);//读取航班号

p=h;

break;//跳出循环

case2:

printf("起始站名称:

\n");

fflush(stdin);

scanf("%10s",name1);//读取起始站

printf("终点站名称:

\n");

fflush(stdin);

scanf("%10s",name2);//读取终点站

p=h;

break;//跳出循环

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

当前位置:首页 > 表格模板 > 调查报告

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

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