面向对象课程设计《民航订票系统》.docx
《面向对象课程设计《民航订票系统》.docx》由会员分享,可在线阅读,更多相关《面向对象课程设计《民航订票系统》.docx(38页珍藏版)》请在冰豆网上搜索。
![面向对象课程设计《民航订票系统》.docx](https://file1.bdocx.com/fileroot1/2022-10/19/544e4067-d316-433c-ae02-1c6456cc603d/544e4067-d316-433c-ae02-1c6456cc603d1.gif)
面向对象课程设计《民航订票系统》
《面向对象程序设计》课程设计报告
题目:
民航订票系统
班级:
学号:
姓名:
指导老师:
时间:
15-16周/2015年12月7日至2015年12月18日
成绩等级:
一、需求分析
设计一个民航订票系统,实现如下功能:
(1)录入:
可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自定);
(2)查询:
可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓);可以输入起飞抵达城市,查询飞机航班情况;
(3)订票:
(订票情况可以存在一个数据文件中,结构自己设定)可以订票,如果该航班已经无票,可以提供相关提示信息;
(4)退票:
可退票,退票后修改相关数据文件;
(5)客户资料:
有姓名,证件号,订票数量及航班情况,订单要有编号;
(6)修改航班信息:
当航班信息改变可以修改航班数据文件。
二、对每个类的说明,包括数据成员、成员函数的含义与功能
本程序中所用到的数据类型有:
int,chat,结构,指针
数据结构有链表,其中链表的数据域是结构。
结构等数据的定义如下:
typedefstructCustomer//已定票乘客信息
{
charName[7];//姓名
intAmount;//定票数
charRank;//舱位等级
intSeat_No;//座位号
structCustomer*Next;
}Customer;
typedefstructReplace//替补乘客信息
{
charName[7];//姓名
intAmount;//定票数
charRank;//舱位等级
charSeat_No;//座位号
structReplace*Next;
}Replace,*PReplace;
typedefstructFlight//航线信息
{
charDes_Name[10];//终点站名
charFlight_No[6];//航班号
charPlane_No[6];//飞机号
charWeek_Day;//飞行周日
intCustomer_Amount;//乘员定额
intFree_Amount;//剩余票数
floatPrice[3];//舱位等级的价格
Replace*ReplName;//该航班的候补乘客名单
Customer*CustName;//该航班的已定票乘客名单
structFlight*Next;//指示下一航线结点
}Flight,*PFlight;
intCustomer_Count=0;//所有航线的定票乘客总数
Flight*Head;//航线头指针
Flight*p2;//航线结点指针
Customer*Custp1[MAX];//各条航线乘客结点指针
Replace*Replp1[MAX];//各条航线候补结点指针
intIsEmpty=1;//是否有定票乘客
intIsReplace=1;//是否有候补乘客
Customer*prior;//满足要求的定票乘客的前结点,以作删除操作
三、系统框架图
四、调试分析
在调试过程中,由于没有做出界面而是在DOS环境下实现的,所以要想得到比较友好的DOS界面必须耐心地调整.。
在密码登陆时,输入密码出现实心黑圆点也是通过循环语句多次慢慢调试出的。
在分析实现时,首先想到的是用链表来存放记录,但每个记录包括的许多信息最好是存放在结构中,故选取以结构为链表信息域的数据结构来实现。
改进之处:
1>用可视化做出界面,让程序实现起来更加好看。
2>用文件实现数据信息的存取,本题中可以通过改动来增加此项功能。
3>退票时,若乘客定的是多票,则出现询问其退几张票。
五、用户手册
编绎连接得到EXE文件,运行程序,出现如下密码登陆界面(以lyh为密码)
输入lyh,
按下回车
接着出现
选取1,按下回车
选取1,按下回车
按提示输入并按回车,最后出现如下界面:
按Y或y继续录入航班信息,输入N或n退回。
输入Y继续输入一些信息..(;输入的航班号若不唯一则出现提示信息,并要求重新输入)
输入N,回车,返回航线管理子菜单
输入2,回车查看航线信息
按下任意键返回航线管理子菜单
输入3对航线进个修改;输入4返回主菜单,
输入2,回车,进入订票办理界面如下:
若输入的航班号有误,则出现如下提示界面:
按下Y,继续
按提示一步步输入,直到输入完毕,出现如下界面
由于本人比较懒,所以没有在订票人所定票数为所有时显示”包机”0.0
输入y,继续定票,输入N返回主菜单
若余票不足,则出现如下界面:
输入N出现是否退出“订票办理”的提示信息,输入Y出现:
按提示,输入信息,直至出下如下界面:
输入Y继续订票,输入N返回主菜单界面
输入4,查看乘客信息,界面如下:
输入1,回车
按下任意键,返回乘客管理子菜单
输入2,回车,查看候补乘客信息:
按下任意键返回乘客管理子菜单
输入3返回主菜单
输入3,回车,进入退票办理界面
按提示一步步输入
(本系统只有“一退全光”的效果>-<)
按下任意键返回主菜单
输入5,回车
输入N返回主菜单,输入Y退出航空订票管理系统
汪:
1>凡提示输入Y或N时不分大小写
2>在主菜单及子菜单界面时,若输入的菜单项不存在,则出现(以主界面为例)
按下任意键返回主菜单界面,可以继续输入菜单项
六、附录
#include
#include
#include
#include
#include
#include
#defineMAX50
#defineNULL0
typedefstructCustomer//已定票乘客信息
{
charName[7];//姓名
intAmount;//定票数
charRank;//舱位等级
intSeat_No;//座位号
structCustomer*Next;
}Customer;
typedefstructReplace//替补乘客信息
{
charName[7];//姓名
intAmount;//定票数
charRank;//舱位等级
charSeat_No;//座位号
structReplace*Next;
}Replace,*PReplace;
typedefstructFlight//航线信息
{
charDes_Name[10];//终点站名
charFlight_No[6];//航班号
charPlane_No[6];//飞机号
charWeek_Day;//飞行周日
intCustomer_Amount;//乘员定额
intFree_Amount;//剩余票数
floatPrice[3];//舱位等级的价格
Replace*ReplName;//该航班的候补乘客名单
Customer*CustName;//该航班的已定票乘客名单
structFlight*Next;//指示下一航线结点
}Flight,*PFlight;
intCustomer_Count=0;//所有航线的定票乘客总数
Flight*Head;//航线头指针
Flight*p2;//航线结点指针
Customer*Custp1[MAX];//各条航线乘客结点指针
Replace*Replp1[MAX];//各条航线候补结点指针
intIsEmpty=1;//是否有定票乘客
intIsReplace=1;//是否有候补乘客
Customer*prior;//满足要求的定票乘客的前结点,以作删除操作
//-------密码登入窗口函数----------
intCode_Verify()
{
charb[10];
charc[10]="lyh";//已经进行简单加密
chara;
inti=0,j,k=1,x;
//system("cls");
//cout<<"\n\n\n\n\n\n\n\n\n\t\t\t请输入系统密码:
";
while
(1)
{
system("cls");
cout<<"\n\n\n\n\n\n\n\n\n\t\t\t请输入系统密码:
";
for(j=0;j
cout<<"●";
cout<a=getch();
if(int(a)!
=8||int(a)!
=13)//不等于回车或退格键
b[i]=a;
if(int(a)==8)
{
i-=2;
system("cls");
cout<<"\n\n\n\n\n\n\n\n\n\t\t\t请输入系统密码:
";
for(j=0;j
cout<<"●";
cout<}
if(int(a)==13)
{
b[i]='\0';
if(strcmp(c,b)==0)
return0;
else
{
if(k==3)
{
while(!
kbhit())
{
system("cls");
for(x=0;x<100000000;x++);
cout<<"\n\n\n\n\n\n\n\n\t\t你无权使用本系统,任意键退出系统..."<for(x=0;x<100000000;x++);
}
return1;
}
cout<<"\n\t\t密码错误,你还有"<<3-k<<"次机会.请按任意键,重新输入."<k++;
getch();
}
i=-1;
}
i++;
}
}
//-------启动画面函数----------
voidCover()
{
charline[]={"━━━━━━━━━━"};
charbar[]={"...."};
inti,j,k=0,x=0,y=0;
for(i=1;i<=strlen(line)/2;)
{
system("cls");
for(j=0;j<9;j++)//改变行坐标
cout<for(j=0;j<(75-strlen(line))/2;j++)//改变列坐标
cout<<"";
for(j=1;j<=i;j++)//进度显示器
cout<<"■";
for(x=strlen(line)/2;x>i;x--)
cout<<"□";
if(k==4)
i++;
cout<for(j=0;j<(75-strlen(line))/2;j++)//行坐标定位
cout<<"";
cout<cout<for(j=0;j<(65-strlen(bar))/2;j++)
cout<<"";
cout<<(i-1)*10<<"%Loading";