数据结构课程设计.docx
- 文档编号:30629926
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:31
- 大小:158.05KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(31页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
数据结构课程设计
航空订票系统
一、设计目的:
编写一个航空订票系统,可以在系统中录入并修改各个航班的具体情况,帮助乘客准确的查询个航班的最新信息(包括航班号、航班的起始时间和地点。
票价)和各个项目业务的及时办理(包括订票、退票等)。
二、任务:
航空客运定票的业务活动包括:
查询航线、客票预定和办理退票等。
试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。
三、功能要求:
1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具
体数据自定)
2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵
达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,
查询飞机航班情况;
3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果
该航班已经无票,可以提供相关可选择航班;
4)退票:
可退票,退票后修改相关数据文件;
5)客户资料:
有姓名,证件号,订票数量及航班情况,订单要有编号;
6)修改航班信息:
当航班信息改变可以修改航班数据文件。
四、设计程序:
#include
#include
#include
#defineN100//最大容量
typedefstructFlight//航班信息
{
charFlightNumber[6];//航班号
charSPlace[10];//起始地
charDPlace[10];//目的地
charStime[5];//起飞时间
charEtime[5];//降落时间
intprice;//票价
intRemnantSeat;//剩余座位数
}Flight;
typedefstructOrder//订单信息
{
intOrderNumber;//订单编号
charPName[10];//乘客姓名
charID[20];//身份证号
charFlightNumber[6];//航班号
intnum;//订票数量
}Order;
Flightfl[N];
Orderod[N];
inti,j;//两个常用角标变量
intlenf=0;//航班数
intleno=0;//订单数
charch;//获取用户选择的变量
charfilenamef[]="flight.txt";//航班文件名
charfilenameo[]="order.txt";//订单文件名
voidsave()//保存信息
{
FILE*fp;
if((fp=fopen(filenamef,"w"))!
=NULL)//打开文件保存航班信息
{
for(i=0;i { fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%d\t%d\n",fl[i].FlightNumber,fl[i].SPlace,fl[i].DPlace,fl[i].Stime,fl[i].Etime,fl[i].price,fl[i].RemnantSeat); } fclose(fp);//关闭文件 } if((fp=fopen(filenameo,"w"))! =NULL)//打开文件保存订单信息 { for(i=0;i { fprintf(fp,"%d\t%s\t%s\t%s\t%d\n",od[i].OrderNumber,od[i].PName,od[i].ID,od[i].FlightNumber,od[i].num); } fclose(fp);//关闭文件 } } voidload()//读取信息 { FILE*fp; if((fp=fopen(filenamef,"r"))! =NULL)//打开文件读取航班信息 { i=0; while(! feof(fp))//读取文件 { fscanf(fp,"%s%s%s%s%s%d%d",&fl[i].FlightNumber,&fl[i].SPlace,&fl[i].DPlace,&fl[i].Stime,&fl[i].Etime,&fl[i].price,&fl[i].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",&od[i].OrderNumber,&od[i].PName,&od[i].ID,&od[i].FlightNumber,&od[i].num); if(! feof(fp)) i++; } leno=i;//订单数量 fclose(fp);//关闭文件 } } intcheck(chars[])//检查是否重复 { intg=0; for(;g if(strcmp(fl[g].FlightNumber,s)==0&&g! =i)//对比是否相同相同就说明重复了 returng;//表示重复了 return-1;//遍历了整个数组都没发现重复的表示没有重复 } voidinput()//录入信息 { system("cls");//清屏 for(i=lenf;i { printf("请输入航班号: "); gets(fl[i].FlightNumber); while(check(fl[i].FlightNumber)! =-1)//检查是否重复 { printf("航班号重复,请重新输入: "); gets(fl[i].FlightNumber); } printf("请输入下列信息: \n"); printf("出发地: "); gets(fl[i].SPlace); printf("目的地: "); gets(fl[i].DPlace); printf("起飞时间: "); gets(fl[i].Stime); printf("降落时间: "); gets(fl[i].Etime); printf("票价: "); scanf("%d",&fl[i].price); printf("剩余座位数: "); scanf("%d",&fl[i].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();//保存 } voidmodify()//修改信息 { chars[20]; system("cls");//清屏 printf("请输入要修改的航班号: "); gets(s); for(i=0;i if(strcmp(fl[i].FlightNumber,s)==0) break;//存在结束循环 if(i==lenf) { printf("没有您输入航班信息,请按回车返回"); getchar(); return; } printf("请输入新的航班号: "); gets(fl[i].FlightNumber); while(check(fl[i].FlightNumber)==1)//检查是否重复 { printf("航班号重复,请重新输入: "); gets(fl[i].FlightNumber); } printf("请更新下列信息: \n"); printf("出发地: "); gets(fl[i].SPlace); printf("目的地: "); gets(fl[i].DPlace); printf("起飞时间: "); gets(fl[i].Stime); printf("降落时间: "); gets(fl[i].Etime); printf("票价: "); scanf("%d",&fl[i].price); printf("剩余座位数: "); scanf("%d",&fl[i].RemnantSeat); getchar();//消除回车 save();//保存 printf("修改成功! \n"); system("pause");//任意键继续 } voidbook()//订票 { system("cls");//清屏 i=leno; printf("请输入您的姓名: "); gets(od[i].PName); printf("请输入您的身份证号: "); gets(od[i].ID); printf("请输入订票的航班号: "); gets(od[i].FlightNumber); for(j=0;j if(strcmp(fl[j].FlightNumber,od[i].FlightNumber)==0)//对比是否相同 break; if(j==lenf)//表示航班不存在 { printf("航班号不存在! 请按回车返回"); getchar(); return; } printf("请输入订票数量: "); scanf("%d",&od[i].num); fl[j].RemnantSeat-=od[i].num;//新的剩余票数 printf("请输入订单编号: "); scanf("%d",&od[i].OrderNumber); getchar();//消除回车 leno++;//订单数加1 save();//保存到文件 printf("定票成功。 \n"); system("pause");//任意键继续 } voidback()//退票 { intnum; system("cls");//清屏 printf("请输入要退票的订单编号: "); scanf("%d",&num); getchar();//消除回车 for(i=0;i if(od[i].OrderNumber==num)//检查是否存在订单编号 break; if(i==leno) { printf("航班号不存在! 请按回车返回"); getchar(); return; } j=check(od[i].FlightNumber);//获取航班的下标 fl[j].RemnantSeat+=od[i].num;//新的剩余票数 od[i]=od[leno-1];//最后一条订单覆盖退票的订单 leno--;//订单数减1 save();//保存 printf("退票成功。 \n"); system("pause");//任意键继续 } voidsearch_num()//航班信息查询(按航班号) { chars[20]; system("cls");//清屏 printf("请输入要查询的航班号: "); gets(s); for(i=0;i if(strcmp(fl[i].FlightNumber,s)==0) break;//存在结束循环 if(i==lenf) { printf("航班号不存在! 请按回车返回"); getchar(); return; } printf("查询成功! \n"); printf("******************************************************************************\n"); printf("航班号起始地目的地起飞时间降落时间票价剩余座位数\n\n"); printf("%-8s%-10s%-10s%-10s%-10s%-6d%d\n",fl[i].FlightNumber,fl[i].SPlace,fl[i].DPlace,fl[i].Stime,fl[i].Etime,fl[i].price,fl[i].RemnantSeat); printf("******************************************************************************\n"); system("pause");//任意键继续 } voidsearch_line()//航班信息查询(按路线) { chars[20],e[20]; intflag=0; system("cls");//清屏 printf("请输入要查询的路线的起点: "); gets(s); printf("请输入要查询的路线的终点: "); gets(e); printf("查询成功! \n"); printf("******************************************************************************\n"); printf("航班号起始地目的地起飞时间降落时间票价剩余座位数\n\n"); for(i=0;i if(strcmp(fl[i].SPlace,s)==0&&strcmp(fl[i].DPlace,e)==0) { printf("%-8s%-10s%-10s%-10s%-10s%-6d%d\n",fl[i].FlightNumber,fl[i].SPlace,fl[i].DPlace,fl[i].Stime,fl[i].Etime,fl[i].price,fl[i].RemnantSeat); flag=1;//标记找到了信息 } if(flag==0) { printf("航班信息不存在! \n"); } printf("******************************************************************************\n"); system("pause");//任意键继续 } charmenu()//菜单 { charc; system("cls");//清屏 printf("**************************主菜单****************************\n"); printf("*****1、航班数据录入*****\n"); printf("*****2、航班信息查看(按航班号)*****\n"); printf("*****3、航班信息查询(按路线)*****\n"); printf("*****4、航班预订*****\n"); printf("*****5、退票*****\n"); printf("*****6、航班信息修改*****\n"); printf("*****7、退出系统*****\n"); printf("************************************************************\n"); printf("请选择功能: "); c=getchar(); getchar();//消除缓存中的换行符 returnc; } voidmain() { load();//读取文件信息 while (1) { ch=menu();//获取选择 switch(ch) { case'1': input();break;//航班信息录入 case'2': search_num();break;//航班信息查询(按航班号) case'3': search_line();break;//航班信息查询(按路线) case'4': book();break;//订票 case'5': back();break;//退票 case'6': modify();break;//航班信息修改 case'7': exit(0);//退出 } } } 运行结果: 运动会分数统计 1、设计题目: 运动会分数统计 二、运行环境 硬件: 32位机软件: WindowsXPMicrosoftvisualstudio6.0 三、算法设计思想 由于学校个数、项目个数是确定的,并不会随时需要增加或减少,所以采用顺序存储结构较好,并且能随机存取,又不用做插入删除操作,故采用数组作为存储结构。 利用结构体创建好数组后,定义input函数向两数组逐条输入数据,其中主要用到while和for循环语句的嵌套以及if语句。 利用while (1){scanf("%d",&n);if(n>=1&&n<=20)y=1;if(y)break;elseprintf("输入数据有误,请重新输入: ");}这样的循环体现了很好的容错性,输入数据不合理会返回让用户重新输入的提示,更友好。 本程序中我设计让男子项目去前五名,女子项目取前三名。 因此对应的名次可以分别积分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、 算法流程图 五、算法设计分析 功能要求有: 可以输入各个项目的前三名或前五名的成绩;能统计各学校总分;可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号查询学校某个项目的情况。 所以利用结构体创建两个数组,数组sch[]包含学校名称、编号、总分、男子总分、女子总分等内容;数组pro[]包含项目名称、项目编号以及该项目前三名或前五名的学校编号。 需要注意的是,预处理命令中使用了iostream、iomanip、fstream等头文件,因此可以更方便的使用一些C++中的输入输出语句。 六、源代码 #include #include #include #include usingnamespacestd; intn;//n个学校 intm;//m个男子项目 intw;//w个女子项目 structpro//表示项目的结构体 { stringname;//项目名称 intsnum[6];//前3或5名学校的编号 }p[21]; structschool//表示学校的结构体 { intnum; stringname;//学校名称 intscore;//学校总分 intmale;//男子总分 intfemale;//女子总分 }sch[21]; intqianwu[5]={7,5,3,2,1};//前五名得分 intqiansan[3]={5,3,2};//前三名得分 voidinput()//输入前三或前五成绩 { inti,j,y,x; printf("输入学校数目: "); y=0; while (1) { scanf("%d",&n); if(n>=1&&n<=20)y=1; if(y)break; elseprintf("输入数据有误,请重新输入: "); } for(i=1;i<=n;i++) { printf("输入第%d个学校的名称: ",i); cin>>sch[i].name; sch[i].score=0; sch[i].female=0; sch[i].male=0; sch[i].num=i; } printf("输入男子项目数和女子项目数: "); y=0; while (1) { scanf("%d,%d",&m,&w); if(m<=20&&m>=1&&w<=20&&w>=1)y=1; if(y)break; elseprintf("输入数据有误,请重新输入: "); } for(i=1;i<=m;i++) { printf("输入第%d个项目的名称: \n",i); cin>>p[i].name; printf("输入第%d个项目(男子)的前5名的学校编号: \n",i); for(j=1;j<=5;j++) { y=0; while (1) { scanf("%d",&x); if(x>=1&&x<=20)y=1; if(y)break; elseprintf("输入数据有误,请重新输入: "); } p[i].snum[j]=x; sch[x].score+=qianwu[j-1]; sch[x].male+=qianwu[j-1]; } } for(i=m+1;i<=m+w;i++) { printf("输入第%d个项目(女子)的编号: \n",i); cin>>p[i].name;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计