飞机订票系统报告和C语言源程序文档格式.docx
《飞机订票系统报告和C语言源程序文档格式.docx》由会员分享,可在线阅读,更多相关《飞机订票系统报告和C语言源程序文档格式.docx(40页珍藏版)》请在冰豆网上搜索。
inputyour%dnumbers:
x);
//提示输入数据
for(i=0;
i<
x;
i++)//循环控制输入
scanf("
a[i]);
//输入a[i]
//换行
for(j=0;
j<
x-1;
j++)//实现x-1次循环,实现x-1趟比较
for(i=0;
x-1-j;
i++)//每一趟中进行x-1-j次比较
if(a[i]>
a[i+1])//相邻两个数比较
{t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}//如果前者大于后者,交换位置
printf("
thesortednumbers:
//提示要输出结果为从小到大
i++)//循环控制输出
{
%3d"
a[i]);
//输出排序后的数组
}
return0;
//返回函数值为0
}
1.5程序运行结果
上述程序的运行结果如图2和图3所示。
图2基本题目运行结果
图3基本题目运行结果
从图2和图3可以看出,输入不多于一百个数,总是会从小到大排列出来。
2改错题目
2.1题目
#include<
intfun()
{
inta[3][3],sum;
inti,j;
_____;
for(i=0;
i<
3;
i++)
{
for(j=0;
j<
j++)
scanf("
a[i][j]);
}
sum=sum*a[i][i];
Sum=%d\n"
sum);
main()
{fun();
2.2错误分析
没有定义主函数;
调用函数在主函数中没有声明:
sum没有赋初值:
输入矩阵的时候没有地址符;
前面定义的是sum,输出的时候是Sum;
2.3流程图
如图4图5所示:
主函数子函数
图4图5
2.4改正后程序
//编译预处理指令
intmain()//定义主函数
{//主函数体开始
intfun(inta[3][3]);
//调用函数声明
intb[3][3];
//定义数组
intm,i,j;
//定义变量
请输入一个三阶矩阵:
//提示输入矩阵
i++)//控制行循环
for(j=0;
j++)//控制列循环
b[i][j]);
//输入矩阵
m=fun(b);
//调用fun函数
sum=%d\n"
m);
//输出结果
}//主函数体结束
intfun(inta[3][3])//定义fun函数,函数值为整型,形式参数a[3][3]为整型
inti,j,sum=1;
//定义整形变量
i++)//控制行循环
{for(j=0;
j++)//控制列循环
if(i==j)//如果行标和列标相等
{sum=sum*a[i][j];
}//将行标和列标相等的数相乘,赋值给sum
return(sum);
//返回sum给主函数
2.5程序运行结果
上述程序的运行结果如图6图7所示
图6
图7
3综合题目
3.1题目
综合题目为:
《飞机订票系统》。
3.1.1问题描述
假设某航空公司只有M架N个座位的飞机,每架飞机每天飞行一趟。
通过该系统来实现机票的订购问题。
3.1.2功能要求
本系统采用一个包含N个数据的结构体数组。
每个数据的结构应当包括:
起飞地、目的地航班号、座次号码、座次订出与否标记、订座者的姓名和订座者的身份证号码。
1.本系统显示这样的菜单:
(1)输入航班信息
(2)输出航班信息
(3)查找航班信息
a.显示空座的数量
b.显示空座的信息
c.显示以定座的信息
d.起飞时间
(4)订票预约
(5)删除订票预约
(6)退出系统
3.本系统成功执行菜单的每个信息,选项4)和5)将要求额外的输入,并且它们都允许用户收回其输入。
4.查找航班信息既可按线路查,也可按目的地查。
5.在两次运行之间,数据被保存于一个文件里,当本程序重新开始的时候,它首先从该文件读入数据。
3.2设计思路
飞机定票系统,实现主题模块,应完成以下设计:
1.一个包含N个数据的结构体数组:
输入起飞地、目的地、航班号、座次号、座次订出与否标记、订座者的姓名和订座者的身份证号码
2.显示菜单:
(2)输出航班信息
3.查询
(1)查询空座信息,包括空座数量
(2)查询已定座的信息,包括起飞时间
4.订票预约
(1)填写个人信息:
包括乘客姓名、乘客所在单位,乘客身份证号
(2)填写订单信息:
包括起飞城市、起飞时间、到达城市、路径城市
5删除订票:
客户不再需要订购的飞机票,客户删除之前定的飞机票,需依次输入
航班号,座位号,确定删除。
其中包含有:
(1)显示菜单函数:
FLIGHTfltlist[5];
PASSENGERpsglist[5][12];
ReadFlight(fltlist);
PASSENGER*k;
k=(PASSENGER*)psglist;
ReadPassenger(k);
用户可以根据菜单提示,选择相关菜单。
(3)查找函数:
查询已定座信息函数chaxunyidingxinxi(PASSENGER*psglist)。
本算法实现查找航班信息功能。
用户可以根据航班号或起飞抵达城市查找航班信息。
如果没有该航班信息,将提示相关信息。
(4)订票函数:
voidBook(FLIGHTfltlist[],PASSENGER*psglist)。
本算法实现订票功能。
用户输入订票信息后,该算法就会根据用户输入信息查找航班信息,找到就显示订票成功相关信息,且该航班票量减去用户订的票数。
如没找到,则提供相关的其他航班信息。
该算法功能可以循环执行。
(5)退票函数:
voidtuipiao(FLIGHTfltlist[],PASSENGER*psglist)。
本算法实现退票功能。
用户可以根据自己的航班型号退票。
3.3流程图
主函数流程图如图8所示:
图8主函数流程图
查询航班流程图如图9所示:
图9查询航班流程图
查询空位信息流程图如图10所示:
图10查询空位信息流程图
订票函数流程图如图11所示:
图11订票函数流程图
退票函数流程图如图12所示:
图12退票函数流程图
已定座位流程图如图13所示:
图13已定座位函数流程图
3.4源程序
stdlib.h>
string.h>
#defineM5//定义符号常量M=5
#defineN12//定义符号常量N=12
typedefstruct_flight//航班数据
{
intm_fltno;
//航班号
structDATE
intm_year;
intm_month;
intm_day;
}m_Date;
//订票日期
structTIME
intm_hour;
intm_min;
}m_start;
//起飞时间
charm_szTo[30];
//到达港
charm_szPass[30];
//途经港
intm_seatno;
//座位号
intyou_wu;
//座次订出与否的标记
charm_szName[20];
//姓名
charm_szNumber[19];
//身份证号(考虑到字母的情况,故使用字符串)
}FLIGHT;
///////////////////////以上是结构体.
voidReadFlight(FLIGHT*fltlist)
inti,j;
FILE*fp;
//定义一个指向文件的指针变量fp
FLIGHT*p;
//定义结构体指针变量p,指向此结构体类型数据
if((fp=fopen("
fltlist.dat"
"
rb"
))!
=NULL)
fread(fltlist,sizeof(FLIGHT),M*N,fp);
/*从fp指向的文件中读入所有航班的座位信息,存储到数组fltlist中*/
else
{
p=fltlist;
M;
i++)
{
for(j=0;
N;
j++)
{
p->
m_fltno=i;
//对航班号进行赋值
m_seatno=j;
//对座位号进行赋值
p->
you_wu=0;
p++;
}}//使p指向下一个数组的地址
fp=fopen("
wb+"
/*打开名为“fltlist”的数据文件,使用文件的方式为“读写”*/
fwrite(fltlist,sizeof(FLIGHT),M*N,fp);
/*将数组fltlist中所有的座位信息写入fp指向的文件*/
fclose(fp);
//关闭fp所指向的文件
///////////////////////以上是读入文件函数.
voidshuruFlight(FLIGHT*fltlist)
intj;
inti;
//定义指向FLIGHT类型数据的指针变量p
FLIGHTfltlist1;
//定义结构体类型变量fltlist1
charc='
y'
;
getchar();
while(c=='
||c=='
Y'
)
{
请输入航班号(0<
=航班号<
%d):
"
M);
i);
while(i>
=M||i<
0)/*该while语句为若输入航班号超出范围时进行的操作*/
{printf("
航班不存在,"
printf("
请重新输入:
scanf("
&
}
请输入起飞时间,比如(12:
00):
%d:
(fltlist1.m_start.m_hour),&
(fltlist1.m_start.m_min));
请输入途经港,比如(tianjing):
%s"
fltlist1.m_szPass);
请输入到达港,比如(shanghai):
fltlist1.m_szTo);
p=fltlist;
//p指向fltlist数组首地址
j++)//以下6行将输入的航班信息赋给数组中对应元素
(p+i*N+j)->
m_start.m_hour=fltlist1.m_start.m_hour;
m_start.m_min=fltlist1.m_start.m_min;
strcpy((p+i*N+j)->
m_szPass,fltlist1.m_szPass);
m_szTo,fltlist1.m_szTo);
if((fp=fopen("
wb"
))==NULL)exit(0);
/*若打开名为“fltlist”的数据文件失败,终止程序*/
fwrite(fltlist,sizeof(FLIGHT),M*N,fp);
/*若成功,将fltlist数组信息写入fp所指向的文件*/
fclose(fp);
//关闭fp指向的文件
修改成功,还要修改吗?
(y/n)"
getchar();
%c"
c);
}
///////////////////////以上是输入航班函数.
voidshuchuFlight(FLIGHT*fltlist)
{printf("
0)/*该while语句为若输入航班号超出范围时进行的操作*/
起飞时间:
%d\n"
(p+i*N)->
m_start.m_hour,(p+i*N)->
m_start.m_min);
途经港:
%s\n"
m_szPass);
到达港:
m_szTo);
查询完毕,还要继续查询吗?
///////////////////////以上是输出航班函数。
voidAddPassenger(FLIGHT*fltlist)
FILE*fp;
//定义一个指向文件的指针变量fp
=NULL)//打开名为“fltlist”的数据文件
{fwrite(fltlist,sizeof(FLIGHT),M*N,fp);
/*成功则将fltlist数组数据写入fp指向的文件*/
{printf("
打开文件失败!
按任意键退出。
。
/*本行开始的4行表示打开失败进行的操作*/
exit(0);
//终止程序
///////////////////////以上是写入文件函数.
voidBook(FLIGHT*fltlist)
intw=0;
//定义结构体类型变量fltlist1
{
请输入航班号:
(0<
%d)"
loop:
fltlist1.m_fltno);
while(fltlist1.m_fltno>
=M||fltlist1.m_fltno<
航班不存在,"
请重新输入:
for(i=0;
i<
i++)
if((p+i*N)->
m_fltno==fltlist1.m_fltno)/*以下为若输入的航班号与某一结构体变量中航班号吻合进行的操作*/
printf("
检测未订的座位...\n请稍等...\n"
i=(p+i*N)->
m_fltno;
//将寻找到的航班号赋值给i
p=fltlist;
//p指向fltlist数组首地址
for(j=0;
{
if((p+i*N+j)->
you_wu==0)//以下4行为显示空余座位的座位号
{
printf("
%d\t"
j);
w++;
}}
if(w==0)//以下3行为无空余座位进行的操作
{printf("
座位已满!
请重新输入航班号:
gotoloop;
//返回loop所在行,进行操作
}
printf("
\n以上是座位号,要订票吗?
getchar();
scanf("
while(c=='
)//以下进行乘客订票信息输入
printf("
\n请输入订票日期:
(yyyy,mm,dd)"
%d,%d,%d"
fltlist1.m_Date.m_year,&
fltlist1.m_Date.m_month,&
fltlist1.m_Date.m_day);
请输入乘客姓名:
);
scanf("
fltlist1.m_szName);
请输入身份证号:
fltlist1.m_szNumber);
\n请输入订票座位号:
=座位号<
N);
fltlist1.m_seatno);
for(;
)//无条件循环语句,for(;
)=while(true)
if(fltlist1.m_seatno<
0||fltlist1.m_seatno>
=N)
printf("
没有这个座位号!
}
elseif((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->
you_wu==1)
{printf("
这个座位有人了!
elsebreak;
}
确认订票吗?
getchar();
)/*以下进行将输入的旅客信息赋给fltlist数组中相应元素*/
{strcpy((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->
m_szName,fltlist1.m_szName);
strcpy((p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->
m_szNumber,fltlist1.m_szNumber);
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->
m_Date.m_day=fltlist1.m_Date.m_day;
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->
m_Date.m_month=fltlist1.m_Date.m_month;
m_Date.m_year=fltlist1.m_Date.m_year;
(p+N*(fltlist1.m_fltno)+fltlist1.m_seatno)->
you_wu=1;
p=fltlist;
AddPassenger(p);
//调用AddPassenger函数,存储订票信息
您的订票已成功。
c='
n'
c='
}}}
你还要继续订其它航班的票吗?
(y/n)\n"
///////////////////////以上是订票函数.
voidchakongweigeshu(FLIGHT*fltlist)
{charc='
FLIG