C语言飞机订票系统.docx
- 文档编号:11568742
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:29
- 大小:104.76KB
C语言飞机订票系统.docx
《C语言飞机订票系统.docx》由会员分享,可在线阅读,更多相关《C语言飞机订票系统.docx(29页珍藏版)》请在冰豆网上搜索。
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)功能:
在退票系统中即对航班票的数据文件进行管理,所以可先按照查询航班票的方法,若查询到的票的信息和乘客此时要求退票的信息相匹配,则在该定票数据文件中删除相应的该票的节点,再修改其航班信息
。
开始
创建航班信息
选择7
选择操作
选择8
选择1
选择2
选择3
选择4
选择5
选择6
输出界面
浏览航班信息
修改航班信息
查找航班信息
删除航班信息
添加航班信息
订票信息
退票信息
选择0
退出
按航班号或航线
结束
按航班或终点站或航线
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; br
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 飞机 订票 系统