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