不同的乘客类型具有不同的机票折扣,详情请见乘客折扣。
在这三种乘客类型中,成人和儿童占用座位,而婴儿不占用座位,婴儿票不能单独出售,一张婴儿票必须凭一张成人票售出。
飞机机型:
(AirplaneModel):
用来描述执行某个航班计划的飞机的型号,一般来讲,一个航班计划的各次航班都应该采用同种机型的飞机来执行。
不同的飞机型号有不同的航程及各舱座位数。
详情请参见附录II民航飞机型号一览表。
**实际情况中,各种机型的座位数是不一样的,同一机型还分好几个系列,如B737(波音737)有B737_200、B737_300....B737_900等多个系列,每个系列座位数都不一样。
即使是同一型号、同一系列的机型,所属的航空公司不同,座位数也会不同,因为航空公司在购买飞机时,会根据自己的需要要求厂家采用不同的布局,不同的布局会有不同的头等舱、公务舱、经济舱座位数。
在本项目中为简化业务模型,我们认为同种型号的飞机各舱座位数是固定的。
基准票价:
(FullPrice):
是指某个航班在没有季节折扣时的一张经济舱成人票的价格,该价格作为该航班计划的基准价格,最终机票价格应该在此基础上乘以季节折扣,舱位折扣和乘客类型折扣。
基准票价=[航班里程*0.75],对个位四舍五入,保留整十位,该票价是可修改的。
季节折扣:
(SeasonDiscount):
航空公司根据不同季节的客流状况调整的航班的折扣,只有经济舱的成人票才享受季节折扣。
舱位折扣:
(ClassDiscount):
不同舱位在基准价格基础上的价格系数,头等舱为1.5,公务舱为1.3,经济舱为1.0
乘客类型折扣:
(PassengerDiscount):
不同乘客类型在基准票价基础上的价格系数,成人为1.0,儿童为0.5,婴儿为0.1。
机票(Ticket):
一位乘客乘坐某次航班的确定的出票记录
机票价格:
(TicketPrice):
一张机票的价格,机票价格由以下公式计算:
经济舱成人票票价=基准价格*季节折扣
其他舱位乘客票价=基准价格*舱位折扣*乘客类型折扣
燃油税:
国家统一征收的,由乘坐民航飞机的乘客负担的一种税收,计算办法:
800KM以内(含)的航程,每人税费为60元,800KM以上的航程每人税费为100元,儿童票减半收取,婴儿票免收燃油税。
燃油税的征收不区分乘客舱位。
该项税费捆绑在机票上由航空公司代收代缴。
燃油税的收取额度和征收办法取决于国家相关部门的政策,该政策可能随时调整。
【参考文档2】
机场建设费:
国家统一收取的,由乘坐民航飞机的乘客负担的一种收费项目,用于支援民航机场的建设。
收取办法:
乘坐70座以下(含)的小飞机,每人每次收取10元;乘坐70座以上的大飞机,每人每次收取50元。
儿童和婴儿都不收取机场建设费。
机场建设费的征收不区分乘客舱位。
该项收费捆绑在机票上由航空公司代收代缴。
机场建设费的收取额度和征收办法取决于国家相关部门的政策,该政策可能随时调整。
【参考文档2】
机票应收款:
一张机票的应收款=机票价格+燃油税+机场建设费。
三、系统用例
1、用例描述
概述:
用例编号:
Case_01
用例名称:
登录
活动者:
用户
用例编号:
Case_02
用例名称:
退出登录状态
活动者:
用户
用例编号:
Case_03
用例名称:
更改密码
活动者:
用户
用例编号:
Case_04
用例名称:
查询航班
活动者:
营业员
用例编号:
Case_05
用例名称:
购票
活动者:
营业员
用例编号:
Case_06
用例名称:
退票
活动者:
营业员
用例编号:
Case_07
用例名称:
添加航班计划
活动者:
航班管理员
用例编号:
Case_08
用例名称:
删除航班计划
活动者:
航班管理员
用例编号:
Case_09
用例名称:
更改航班计划
活动者:
航班管理员
用例编号:
Case_10
用例名称:
查询航班计划
活动者:
航班管理员
用例编号:
Case_11
用例名称:
添加用户
活动者:
系统管理员
用例编号:
Case_12
用例名称:
删除用户
活动者:
系统管理员
用例编号:
Case_13
用例名称:
查询用户
活动者:
系统管理员
用例编号:
Case_14
用例名称:
修改用户
活动者:
系统管理员
用例编号:
Case_15
用例名称:
浏览用户
活动者:
系统管理员
详细描述:
用例编号
Case_01
用例名称
登录
活动者
用户
前置条件
启动应用程序
事件流
1、输入工号
2、输入密码
3、选择“登录”选项
4、成功登入相应的主界面
异常事件流
1、若在第3步,输入的帐号密码不正确,则弹出错误提示
2、重新输入
后置事件
用例编号
Case_02
用例名称
退出登录状态
活动者
用户
前置条件
在登录完成的基础上
事件流
1、保存更新的数据
2、成功退出
异常事件流
后置条件
用例编号
Case_03
用例名称
更改密码
活动者
用户
前置条件
在成功登录成功后,选择“密码修改”选项,并成功进入密码修改界面
事件流
1、选择修改密码选项
2、出现一个修改密码的界面
3、输入旧密码
4、输入新密码
5、再次输入新密码
6、选择“确定”选项
7、修改密码成功
异常事件流
1、提示出错信息
后置事件
用例编号
Case_04
用例名称
查询航班
活动者
营业员
前置条件
在成功登录到主界面后,选择“查询航班”选项,成功进入航班查询界面
事件流
1、根据顾客提供的信息,选择出发地与目的地和出发时间
2、告诉乘客具体信息
异常事件流
1、不存在输入的出发地和目的地之间的航线,弹出无直达信息
后置事件
用例编号
Case_05
用例名称
售票
活动者
营业员
前置条件
成功进入主界面后,选择“售票”选项,成功进入售票界面
事件流
1、根据顾客要求选择的某个航班后
2、如果存在所需航班,选择对应的航班,否则返回主界面
3、成功显示填入乘客信息文本
4、根据乘客提供的有效证件,输入乘客信息(姓名,证件号码),选择舱位信息和乘客类型
异常事件流
后置事件
用例编号
Case_06
用例名称
退票
活动者
营业员
前置条件
成功登录主界面后,选择“退票”选项
事件流
1、根据乘客提供的有效证件,输入机票编号或者输入乘客的证件号码或者乘客
2、成功显示查询结果
3、选择“退票”选项
4、成功退票
异常事件流
1、提示相应的出错信息
后置事件
用例编号
Case_07
用例名称
添加航班计划
活动者
航班管理员
前置条件
登录完成后,进入航班管理界面
事件流
1、选择'添加航班计划'选项;
2、进入添加航班计划界面表;
3、输入航班号;
4、输入出发地;
5、输入目的地;
6、输入航班班期;
7、输入起飞时间;
8、输入到达时间;
9、输入航班里程;
10、输入航班各舱载客最大容量;
11、成功添加航班计划;
异常事件流
1、显示相应的出错信息
后置条件
用例编号
Case_08
用例名称
删除航班计划
活动者
航班管理员
前置条件
进入航班管理界面,选择删除航班计划选项
事件流
1、输入航班号;
2、输入出发地;
3、输入目的地;
4、选择'确认'选项;
5、成功删除航班计划;
异常事件流
1、在第3步后,如果航班号错误,则显示“不存在的航班,请重新输入”;
后置条件
用例编号
Case_09
用例名称
更改航班计划
活动者
航班管理员
前置条件
进入航班管理界面
事件流
1、选择'修改航班计划'选项;
2、进入修改航班计划界面;
3、选择相应的修改选项(如:
航班日历,起飞时间,到达时间等);
4、选择'确定'选项
5、成功修改航班计划
异常事件流
显示相应的出错信息
后置条件
用例编号
Case_10
用例名称
查询航班计划
活动者
航班管理员
前置条件
进入航班管理界面
事件流
1、输入航班号;
2、输入出发地;
3、输入目的地;
4、输出信息;
异常事件流
1、在第3步后,如果航班号错误,则显示“不存在的航班,请重新输入”;
后置条件
用例编号:
Case_11
用例名称:
添加用户
活动者:
系统管理员
前置条件
成功进入用户管理界面
事件流
1、填写帐户信息(帐号,密码等);
2、成功创建帐户。
异常事件流
1、显示相应的出错信息
后置条件
用例编号:
Case_12
用例名称:
删除用户
活动者:
系统管理员
前置条件
成功进入系统管理员主界面。
事件流
1、输入要删除的用户ID;
2、成功显示查询的结果;
3、选择确认选项;
4、成功删除所选帐户。
异常事件流
1、显示相应的出错信息
后置条件
用例编号:
Case_13
用例名称:
查询用户
活动者:
系统管理员
前置条件
成功进入系统管理员主界面
事件流
1、选择查询用户选项;
2、成功进入查询用户界面;
3、填写创建信息;(用户ID,用户名称,权限编号)
4、成功创建一个用户。
异常事件流
显示相应的出错信息
后置条件
得到创建许可。
用例编号:
Case_14
用例名称:
修改用户
活动者:
系统管理员
前置条件
成功进入系统管理员主界面
事件流
1、选择修改用户选项;
2、成功进入修改用户界面;
3、选择相应的修改选项(用户ID,用户名称,权限编号);
4、成功修改相应选项。
异常事件流
显示相应的出错信息
后置条件
得到修改许可。
用例编号:
Case_15
用例名称:
浏览用户
活动者:
系统管理员
前置条件
成功进入系统管理员主界面
事件流
1、选择浏览用户选项;
2、成功进入浏览用户界面;
异常事件流
显示相应的出错信息
后置条件
四、主要的数据结构设计
1、航班计划表:
flight
字段名
字段描述
字段类型(长度)
是否为空
范例样本
flightnum
航班号
Char(8)
TL2010
startdate
起始日期
Int
Notnull
20100401
enddate
结束日期
Int
Notnull
20100630
departure
离港时间
Char(6)
Notnull
08:
00
arrival
到港时间
Char(6)
Notnull
09:
00
num
余座
Int
Notnull
sche
班期
Int
Notnull
0110110
max
各舱容量
Int(3)
Notnull
psger
乘客头指针
passenger(367)
mileage
航班里程
Int
Notnull
400
2、用户表:
user
字段名
字段描述
字段类型
是否为空
范例
Worknum
工号
Int
2
name
姓名
Char(10)
NOTNULL
“张三”
password
用户密码
varChar(12)
NOTNULL
“zhangx”
level
角色
Int
NOTNULL
1
usernum
用户总数
Int
NOTNULL
12
3、乘客:
passenger
字段名
字段描述
数据类型
是否为空
范例
idcard
证件号
Char(20)
Notnull
344523452345
fnum
航班编号
Char(8)
Notnull
TL2010
name
乘客姓名
Char(10)
Notnull
Chen
date
航班日期
timestamp
Notnull
20100822
cabin
舱位等级
Char
(1)
Notnull
F
seatnum
座位号
Int
Notnull
A
price
最终票价
Double
4000.00
四、总结
首先,我在本次课程设计开发过程中,充分理解了拥有吃苦耐劳的品质对我们是多么的重要,不管做任何事,它的地位是不可忽视的。
其次,在课程设计的开发中,我认识到了前期开发所作的工作的重要性,在以后的开发中一定要做好前期的工作。
前期工作没有多好,整个设计开发就等于失败。
最后,我明白了有关模块化程序设计的要点:
一、模块与模块之间的耦合性要低;
二、模块的划分要尽量的细;
三、模块的边界要分明,不能模糊;
总之,要想做好课程设计,必须保持高度清晰的头脑,要想做好这一点,至关重要的一点就是做好开发文档,并不断完善之。
C程序代码
/************************************************************
航空管理系统
作者:
罗树英
时间:
2011年05月04日
*************************************************************/
#include
#include
#include
#include
#include
#defineseason_discount0.9/*季度折扣*/
typedefstructuser/*用户定义*/
{
charname[10];
intworknum;
intusernum;
charpassword[12];
intlevel;
structuser*next;
}user,*linkuser;
typedefstructpassenger/*乘客定义*/
{
charname[10];
charidcard[20];
intage;
charfnum[8];
intdate;
charcabin;
intprice;
intseatnum;
structpassenger*next;
}passenger,*linkpsger;
typedefstructflight/*航班定义*/
{
charflightnum[8];
charfcity[10];
chartcity[10];
intstartdate;
intenddate;
chardeparture[6];
chararrival[6];
intsche;
intmileage;
intnum[367][3],max[3];
structpassenger*psger[367];
structflight*next;
}flight,*linkflight;
linkflightfhead;/*航班表头*/
linkuseruhead;/*用户表头*/
linkusernowuser;/*当前用户*/
linkflightpre_f;
linkuserpre_user;
intw,f=0;
character[4][12]={"营业员","航班管理员","系统管理员"};
linkusersearch_user(int);
linkflightsearch();
intbelong(int);
voidsave2();
voidsave1();
voidprint_user(linkuser);
voidmenu1();
voidmenu2();
voidmenu3();
voidmenupass();
voidloginmenu();
intdaynum(int);
voidscan_passenger();
voidscan_user()/*浏览用户信息模块*/
{
linkuseru=uhead->next;
system("cls");
puts("\t\t\t\t欢迎查询用户信息!
\n\n");
printf("\t\t\t\t\t活动者:
%s用户:
%s\n",acter[nowuser->level-1],nowuser->name);
puts("\t\t*********************MENU*********************\n\n");
puts("\n\n\t\t用户名工号密码等级职位员工数\n");
while(u)
{
print_user(u);
u=u->next;
}
puts("\n\n\t\t**********************************************\n\n");