数据结构课程设计.docx

上传人:b****8 文档编号:30629926 上传时间:2023-08-18 格式:DOCX 页数:31 大小:158.05KB
下载 相关 举报
数据结构课程设计.docx_第1页
第1页 / 共31页
数据结构课程设计.docx_第2页
第2页 / 共31页
数据结构课程设计.docx_第3页
第3页 / 共31页
数据结构课程设计.docx_第4页
第4页 / 共31页
数据结构课程设计.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

数据结构课程设计.docx

《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(31页珍藏版)》请在冰豆网上搜索。

数据结构课程设计.docx

数据结构课程设计

数据结构课程设计

航空订票系统

一、设计目的:

编写一个航空订票系统,可以在系统中录入并修改各个航班的具体情况,帮助乘客准确的查询个航班的最新信息(包括航班号、航班的起始时间和地点。

票价)和各个项目业务的及时办理(包括订票、退票等)。

二、任务:

航空客运定票的业务活动包括:

查询航线、客票预定和办理退票等。

试设计一个航空客运定票系统,以使上述业务可以借助计算机来完成。

三、功能要求:

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;

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

当前位置:首页 > 自然科学 > 物理

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

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