




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计航空订票系统一、设计目的: 编写一个航空订票系统,可以在系统中录入并修改各个航班的具体情况,帮助乘客准确的查询个航班的最新信息(包括航班号、航班的起始时间和地点。票价)和各个项目业务的及时办理(包括订票、退票等)。二、任务:航空客运定票的业务活动包括:查询航线、客票预定和办理退票等。试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。三、功能要求:1) 录入:可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定)2) 查询:可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;3) 订票:(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关可选择航班;4) 退票: 可退票,退票后修改相关数据文件;5) 客户资料:有姓名,证件号,订票数量及航班情况,订单要有编号;6) 修改航班信息:当航班信息改变可以修改航班数据文件。四、设计程序:#include#include#include#define N 100/最大容量 typedef struct Flight/航班信息 char FlightNumber6;/航班号 char SPlace10;/起始地 char DPlace10;/目的地 char Stime5;/起飞时间 char Etime5;/降落时间 int price;/票价 int RemnantSeat;/剩余座位数Flight; typedef struct Order/订单信息 int OrderNumber;/订单编号 char PName10;/乘客姓名 char ID20;/身份证号 char FlightNumber6;/航班号 int num;/订票数量Order;Flight flN;Order odN;int i,j;/两个常用角标变量 int lenf=0;/航班数 int leno=0;/订单数 char ch;/获取用户选择的变量char filenamef=flight.txt;/航班文件名char filenameo=order.txt;/订单文件名void save()/保存信息 FILE *fp; if(fp=fopen(filenamef,w)!=NULL)/打开文件 保存航班信息 for(i=0;ilenf;i+)/写入文件 fprintf(fp,%st%st%st%st%st%dt%dn,fli.FlightNumber,fli.SPlace,fli.DPlace,fli.Stime,fli.Etime,fli.price,fli.RemnantSeat); fclose(fp);/关闭文件 if(fp=fopen(filenameo,w)!=NULL)/打开文件 保存订单信息 for(i=0;ileno;i+)/写入文件 fprintf(fp,%dt%st%st%st%dn,odi.OrderNumber,odi.PName,odi.ID,odi.FlightNumber,odi.num); fclose(fp);/关闭文件 void load()/读取信息 FILE *fp; if(fp=fopen(filenamef,r)!=NULL)/打开文件 读取航班信息 i=0; while(!feof(fp)/读取文件 fscanf(fp,%s%s%s%s%s%d%d,&fli.FlightNumber,&fli.SPlace,&fli.DPlace,&fli.Stime,&fli.Etime,&fli.price,&fli.RemnantSeat); if(!feof(fp) i+; lenf=i;/航班数量 fclose(fp);/关闭文件 if(fp=fopen(filenameo,r)!=NULL)/打开文件 读订单信息 i=0; while(!feof(fp)/读取文件 fscanf(fp,%d%s%s%s%d,&odi.OrderNumber,&odi.PName,&odi.ID,&odi.FlightNumber,&odi.num); if(!feof(fp) i+; leno=i;/订单数量 fclose(fp);/关闭文件 int check(char s)/检查是否重复 int g=0; for(;glenf;g+) if(strcmp(flg.FlightNumber,s)=0 & g!=i)/对比是否相同 相同就说明重复了 return g;/表示重复了 return -1;/遍历了整个数组都没发现重复的 表示没有重复void input()/录入信息 system(cls);/清屏 for(i=lenf;iN;i+) printf(请输入航班号:); gets(fli.FlightNumber); while(check(fli.FlightNumber)!=-1)/检查是否重复 printf(航班号重复,请重新输入:); gets(fli.FlightNumber); printf(请输入下列信息:n); printf(出发地:); gets(fli.SPlace); printf(目的地:); gets(fli.DPlace); printf(起飞时间:); gets(fli.Stime); printf(降落时间:); gets(fli.Etime); printf(票价:); scanf(%d,&fli.price); printf(剩余座位数:); scanf(%d,&fli.RemnantSeat); getchar();/消除回车 lenf+;/航班数加1 printf(航班信息录入完成! 是否继续录入下一列航班信息?(y/n):); while(1) ch=getchar(); getchar();/消除上一步产生的回车符 if(ch=y | ch=Y | ch=n | ch=N) break; else printf(请重新输入:); if(ch=n | ch=N) break; save();/保存 void modify()/修改信息char s20; system(cls);/清屏 printf(请输入要修改的航班号:);gets(s); for(i=0;ilenf;i+)/查询是否存在输入的信息if(strcmp(fli.FlightNumber,s)=0)break;/存在 结束循环if(i=lenf) printf(没有您输入航班信息,请按回车返回); getchar(); return; printf(请输入新的航班号:); gets(fli.FlightNumber); while(check(fli.FlightNumber)=1)/检查是否重复 printf(航班号重复,请重新输入:); gets(fli.FlightNumber); printf(请更新下列信息:n); printf(出发地:); gets(fli.SPlace); printf(目的地:); gets(fli.DPlace); printf(起飞时间:); gets(fli.Stime); printf(降落时间:); gets(fli.Etime); printf(票价:); scanf(%d,&fli.price); printf(剩余座位数:); scanf(%d,&fli.RemnantSeat); getchar();/消除回车 save();/保存 printf(修改成功!n); system(pause);/任意键继续 void book() / 订票 system(cls);/清屏i=leno;printf(请输入您的姓名:);gets(odi.PName);printf(请输入您的身份证号:);gets(odi.ID); printf(请输入订票的航班号:);gets(odi.FlightNumber);for(j=0;jlenf;j+) if(strcmp(flj.FlightNumber,odi.FlightNumber)=0 )/对比是否相同 break; if(j=lenf)/ 表示航班不存在 printf(航班号不存在!请按回车返回); getchar(); return; printf(请输入订票数量:);scanf(%d,&odi.num);flj.RemnantSeat-=odi.num;/新的剩余票数printf(请输入订单编号:);scanf(%d,&odi.OrderNumber);getchar();/消除回车 leno+;/订单数加1save();/保存到文件printf(定票成功。n);system(pause);/任意键继续 void back() / 退票 int num; system(cls);/清屏 printf(请输入要退票的订单编号:); scanf(%d,&num); getchar();/消除回车 for(i=0;ileno;i+) if(odi.OrderNumber=num)/检查是否存在订单编号 break; if(i=leno) printf(航班号不存在!请按回车返回); getchar(); return; j=check(odi.FlightNumber);/获取航班的下标 flj.RemnantSeat+=odi.num;/新的剩余票数 odi=odleno-1;/最后一条订单覆盖退票的订单 leno-;/订单数减1 save();/保存 printf(退票成功。n); system(pause);/任意键继续 void search_num() /航班信息查询(按航班号) char s20; system(cls);/清屏 printf(请输入要查询的航班号:);gets(s); for(i=0;ilenf;i+)/查询是否存在输入的信息if(strcmp(fli.FlightNumber,s)=0)break;/存在 结束循环if(i=lenf) printf(航班号不存在!请按回车返回); getchar(); return; printf( 查询成功!n);printf(*n);printf(航班号 起始地 目的地 起飞时间 降落时间 票价 剩余座位数nn);printf(%-8s%-10s%-10s %-10s%-10s %-6d%dn,fli.FlightNumber,fli.SPlace,fli.DPlace,fli.Stime,fli.Etime,fli.price,fli.RemnantSeat);printf(*n);system(pause);/任意键继续void search_line() /航班信息查询(按路线) char s20,e20;int flag=0; system(cls);/清屏 printf(请输入要查询的路线的起点:);gets(s); printf(请输入要查询的路线的终点:);gets(e); printf( 查询成功!n);printf(*n);printf(航班号 起始地 目的地 起飞时间 降落时间 票价 剩余座位数nn); for(i=0;i=1&n=20)y=1; if(y)break; else printf(输入数据有误,请重新输入:); 这样的循环体现了很好的容错性,输入数据不合理会返回让用户重新输入的提示,更友好。本程序中我设计让男子项目去前五名,女子项目取前三名。因此对应的名次可以分别积分7、5、3、2、1和5、3、2。然后定义了print函数,可以按不同要求输出成绩和编号等信息。而后定义bianhao( )、zongfen( )、malezf( )、femalezf( )可以分别按学校编号、学校总分、男子总分和女子总分输出结果。然后定义了菜单函数solve( )来调用不同的排序函数。最后定义了cxsch( )和cxxm( )两函数以实现按学校和项目查询成绩。该题我规定了男子项目取前五名,女子项目取前三名。函数调用关系如下图: main( ) Input( ) solve( ) bianhao( ) zongfen( ) malezf( ) femalezf( ) cxsch( ) cxxm( ) print( ) 开始4、 算法流程图 定义input( ) 用input()为数组赋值 定义print( ) bianhao( )、zongfen( )、malezf( )、femalezf( )cxsch( )、cxxm( )、solve( )根据Z值实现solve不同功能输出结果 结束五、算法设计分析 功能要求有:可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况。所以利用结构体创建两个数组,数组sch 包含学校名称、编号、总分、男子总分、女子总分等内容;数组pro 包含项目名称、项目编号以及该项目前三名或前五名的学校编号。 需要注意的是,预处理命令中使用了iostream、iomanip、fstream等头文件,因此可以更方便的使用一些C+中的输入输出语句。六、源代码#include #include #include #includeusing namespace std; int n; /n个学校 int m; /m个男子项目 int w; /w个女子项目 struct pro /表示项目的结构体 string name; /项目名称 int snum6; /前3或5名学校的编号 p21; struct school /表示学校的结构体 int num; string name; /学校名称 int score; /学校总分 int male; /男子总分 int female; /女子总分 sch21; int qianwu5=7,5,3,2,1; /前五名得分 int qiansan3=5,3,2; /前三名得分void input() /输入前三或前五成绩 int i,j,y,x; printf(输入学校数目:); y=0; while(1) scanf(%d,&n); if(n=1&n=20)y=1; if(y)break; else printf(输入数据有误,请重新输入:); for(i=1;; schi.score=0; schi.female=0; schi.male=0; schi.num=i; printf(输入男子项目数和女子项目数:); y=0; while(1) scanf(%d,%d,&m,&w); if(m=1&w=1)y=1; if(y)break; else printf(输入数据有误,请重新输入:); for(i=1;; printf(输入第%d个项目(男子)的前5名的学校编号:n,i); for(j=1;j=1&x=20)y=1; if(y)break; else printf(输入数据有误,请重新输入:); pi.snumj=x; schx.score+=qianwuj-1; schx.male+=qianwuj-1; for(i=m+1;;printf(输入第%d个项目的前3名的学校编号:n,i); for(j=1;j=1&x=20)y=1; if(y)break; else printf(输入数据有误,请重新输入:); pi.snumj=x; schx.score+=qiansanj-1; schx.female+=qiansanj-1; void print(int i) coutschi.numsetw(10)setw(8)schi.scoresetw(9) schi.malesetw(10)schi.femaleendl; void bianhao() /按编号排序 int i,j; school t; for(i=1;in;i+) for(j=i;jschj.num) t=schi;schi=schj;schj=t; printf(n按编号排列:n); printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) print(i); void zongfen() /按学校总分排序 int i,j; school t; for(i=1;in;i+) for(j=i;j=n;j+) if(schi.scoreschj.score) t=schi;schi=schj;schj=t; printf(n按学校总分排列:n); printf(编号 学校名称 总分 男子总分 女子总分n); for(i=1;i=n;i+) print(i); ofstream fout;fout.open(运动会分数统计.txt); fout编号 学校名称 总分 男子总分 女子总分endl;for(i=1;i=n;i+) foutschi.numsetw(13)setw(8)schi.scoresetw(9) schi.malesetw(10)schi.femaleendl; fout.close(); void ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 CASS清算直接借款合同
- 事业编合同样本
- 京东合作合同样本
- 2025上海市国内旅游合同
- 雀巢的销售合同范本
- 阳光备考计划 税务师考试试题及答案
- 2025至2030年中国单只水表检定标准装置市场调查研究报告
- 2025餐饮管理系统服务合同
- 2025至2030年中国加纤塑胶行业发展研究报告001
- 2025至2030年中国分液头行业投资前景及策略咨询报告
- 2025年境外投资融资顾问服务合同范本3篇
- 2024-2025学年人教新目标英语八年级下册期末综合检测卷(含答案)
- 331金属晶体课件高二化学人教版选择性必修2
- 矿山矿石采购合同模板
- 2024年浪潮数字企业技术有限公司社会招聘(105人)笔试核心备考题库及答案解析
- 第47届世界技能大赛江苏省选拔赛竞赛技术文件-混凝土建筑项目
- 国开2024年《数据库运维》形考1-3
- 劳动合同(模版)4篇
- 137案例黑色三分钟生死一瞬间事故案例文字版
- 药物研发监管的国际协调
- 生猪屠宰兽医卫生检验人员理论考试题及答案
评论
0/150
提交评论