专业课程设计I报告民航票务管理与售票系统.docx
《专业课程设计I报告民航票务管理与售票系统.docx》由会员分享,可在线阅读,更多相关《专业课程设计I报告民航票务管理与售票系统.docx(23页珍藏版)》请在冰豆网上搜索。
专业课程设计I报告民航票务管理与售票系统
专业课程设计I报
告民航票务管理与
售票系统
专业课程设计I报告
(/年第二学期)
题目:
民航票务管理与售票系统
支
业
软件工程
学
生
姓
名
仓业亮
班
级
学
号
B09040811
指
导
教
师
李玲娟
指
导
单
位
计算机学院软件工程系
日
期
4月26日
指导教师成绩评定表
学生姓名
班级学号专业
评分内容
评分标准
优秀
良好
中等
差
平时成绩
认真对待课程设计,遵守实验室规定,上机不退到早退,不做和设计无关的事
设计成果
设计的科学、合理性
功能丰富、符合题目要求
界面友好、外观漂晃、大方
程序功能执行的正确性
程序算法执行的效能
设计报告
设计报告正确合理、反映系统设计流程
文档内容详实程度
文档格式规范、排版美观
验收答辩
简练、准确阐述设计内容,能准确有条理回答各种问题,系统演示顺利。
评分等级
指导教师
简短评语
指导教师签名日期
备注评分等级有五种:
优秀、良好、中等、及格、不及格
民航票务管理与售票系统
一、课题内容和要求
1.1课程简介:
本次课程设计的基本要求主要是按照软件工程思想,以SQL
Server为后台数据库,以Delphi为前端开发工具,设计并实现一
个民航票务管理与售票系统。
其中,系统实现的功能主要有
(1)能够进行航班信息、票务信息的添加、修改和删除。
(2)允许普通用户和各类人员查询有关民航航班的时刻表,包括
航班号、起点、终点、日期、起飞时刻、到达时刻、剩余座位
数、票价、航班所属航空公司等方面的准确信息。
也能够按照终点和日期进行查询。
1.2.需求描述
1.2.1我把本系统的用户统一分为普通用户和具有信息管理职
责的管理员特殊用户,其中,管理员是系统指定的用户,不用注册,且本身也不必具备修改用户信息的功能。
而普通用户初次登陆时是需要注册的,注册完了之后,如果数据成功添加在了数据库的passenger表中,则显示成功注册,然后重新登陆。
1.2.2能够进行航班信息、票务信息的添加、修改和删除。
该功能只能有管理员实现,其中票务信息我是不允许修改的,
只有删除的选项,之因此这么做,第一是票务信息(p_ticket)关联
的关联的两张表passenger乘客信息表和flight航班信息表都是能够修改的,因此票务信息的修改本质上意义不大;第二就是我的三张表都是有外键约束的,因此当票务信息被修改的时候,必然
影响到其它主键表,因此技术上也添了麻烦。
1.2.3用户能够对航班信息表进行一定限度的查询,包括按航班号查询,按起点和终点查询和按日期查询。
三种条件选一种
1.2.4售票信息实时更新:
具体要做到的是当某个航班被售票的时候,其剩余座位数也要跟着减少一个,相应的退票的时候,座位数也要跟着加一。
需要注意的是用户不具有退票的功能,必须由管理员操作。
1.2.5非功能需求
(1)可读性:
程序的源代码要书写规整,要求容易理解,以便于日后程序调试时容易测试和修改。
(2)界面的设计:
应本着简洁、漂亮、通俗易懂,操作简便,并具有一定的灵活性;尽可能采用开发工具构造界面,使需求定义和设计、编码相衔接;参考、比较已经成熟的软件的界面的风格,提取有用的设计方法。
(3)可测试性:
这是建立在可读性的基础之上的,如果程序不易于理解则测试起来相当麻烦,而且有可能造成灾难性后果。
1.3开发运行环境
系统开发平台:
Delphi7
数据库管理系统软件:
SQLServer
运行平台:
WindowsXP
分辨率:
最佳效果1024X768
硬盘要求:
CPU:
300MHz以上的处理器
内存:
64MB,推荐128M以上
硬盘:
100M以上磁盘空间
二、设计思路分析
完成此课题的思路和基本步骤
第一步:
理解该系统的功能需求,进行逻辑设计,指定具
体的实现计划。
第二步:
数据库设计,具体包括表的划分和建立,表中的属性值的定义等。
第三步:
测试连接,主要是测试开发环境delphi7与数据库
sql的连接特性。
第四步:
系统的模块划分,确定各个模块所要实现的功能。
第五步:
确定测试用例和测试方法,方便程序以后的测试。
第六步:
主要功能模块的设计和实现,而且辅助以测试实现。
第七步:
测试所完成的应用程序,排查和纠正错误。
三、概要设计
3.1数据库逻辑设计如下:
3.1.1本数据库的设计中,具体涉及到了三张表的创立于修
改。
Passenger—用户信息表
Flight—航班信息表
P_ticket—票务信息表
3.1.2数据库的完整性约束规则的说明(主键、外键等)如下
图所示:
主舞表t)夕卜健表包)
flightp„tickat
航班号
二1航碰号
A
日期
日期
—-
v|
-创建中松查现存数据重〕
。
对夏制理制关家(E)
V对IMSERT和UPBATE强制关系堡)
P濒更制相关前宇段QD
P缴联捌惭目美的记录。
其中选定了级联更新和删除相关的字段和记录能够在我修
改flight表和passenger表的主键信息时间接的达到修改票务信息
表的目的
主健表⑥外健表皿)
II■
nacseng&rp_tictet
邮箱地址
」曲箱地址
姓名
姓名
联系电情
联系电话
r创建中检查现存数据⑥
w对复制强制关耒⑥
w对IFSERT和UPDA.TE强制美系色)
[?
氧联更新相关的字段也)
V级联册脍相关的记
四、详细设计
(1).系统的登陆界面如下图所示:
ADOconnectionl和ADOqueryl及datasourcel三个控件配合,登陆按钮被点击是触发函数如下:
withadoqueryldo//对用户输入的邮箱地址和密码在passenger表中查询
begin
close;
sql.clear;
sql.text:
=('select*frompassengerwhere由S箱地址=:
aand密码=:
b');
parameters.parambyname('a').value:
=trim(edit1.text);
parameters.parambyname('b').value:
=trim(edit2.text);
open;
ifrecordCount=1then//如果存在符合输入的记录则跳转到查
询主页
begin
form1.Visible:
=false;
form3.show;
user_id:
=edit1.Text;
manager:
='';//系统中白己设定的管理员账号
ifuser_id=managerthen//如果用户用的是管理员的账号begin
form3.bitbtn2.Visible:
=false;//管理员不能修改用户信息
form3.BitBtn8.Visible:
=true;//管理员对信息管理的按钮可
见
form3.label3.caption:
='管理员'
end
else
begin
form3.BitBtn2.Visible:
=true;//允许普通用户修改用户信息
form3.BitBtn8.Visible:
=false;//不具有信息管理的权限
form3.Label3.Caption:
='普通用户';
end;
end
else
showmessage(用户名或密码输入错误!
');//密码验证错
误,输出提示
end;
写了一个触发函数:
checkbox1.Checked:
=false;
checkbox1.Caption:
='帮你验证邮箱';//显示界面友好
而当光标移开edit控件后也有一个触发函数:
if(pos('@',edit1.text)<=0)or(length(edit1.Text)<5)then//没有
begin
showmessage('邮箱地址格式不正确,请重新输入!
');〃字符长度
小于5为非法
edit1.Text:
='';
end
else
begin
checkbox1.Checked:
=false;/初始化checkbox标签属性
withadoquery1do//在用户表中对此地址进行查询
begin
close;
sql.clear;
sql.text:
=('select*frompassengerwhere由S箱地址=:
a');
parameters.parambyname('a').value:
=trim(edit1.text);
open;
ifrecordCount=1then〃存在则输出提示
begin
checkbox1.Checked:
=false;
checkbox1.Caption:
='邮箱已被注册!
请重新输入';
edit1.Text:
='';
end
else
end;
另外,我还经过重复输入密码的验证,联系电话输入长度的限制等,使用户注册信息更加合理,也更加人性化。
(3).普通用户经过登录界面之后的查询界面如下:
|曰独
*;U:
」.r
剂芝:
町
」、
1
抓心
-1寸
M.HW
口书
益m山
IMP
900
l&M
ED11
ZDQ1-4-2
四J盼/
ZdCEl
i3:
m
902
JD0I[■1
让蓦n事
1100
幻因
■
的必巧而
冲
寸CKl
£DG
£D01耻
云ii
223
4.00
•Igf
可曜/毋璧I
具体的顺序图如下:
SA查询消目.曜摩图
杏句才修檀陆甜岂特;fe姑始沔犒底回酸
[dick航班号】
mmd喉册号)
II
TalutTiflag
「1
iiIIII
return
>ii
ii
[dickM
wi«3(起坡城2__^,
return±lag
;Lfi
return
说明:
用户能够经过三种条件进行查询,可是不允许多条件
查询。
具体设定是比如我选择按照航班号进行查询时,则其后面
的航班号dblookupcombobox就可用而其它的查询条件框是不可用
的。
源程序中dblookupcombobox的设定有必要说明一下。
首先将
该控件与一个adoquery控件连接好,adoquery控件的设定略去,然后设定listsource、listfield和keyfield的值,第一次我keyfield的值没有设定是,是显示不出字段的值的。
确定查询的点击事件触发的函数如下:
withadoquery4do//在航班信息表中进行查询
begin
close;
sql.clear;
if(dblookupcombobox1.Enabled=true)//如果选择按起降地查
询
and(dblookupcombobox1.Text<>'')and(dblookupcombobox2.Text
<>'')then
begin
sql.text:
=('select*fromflightwhere起点=:
aand终点=:
b');
parameters.parambyname('a').value:
=trim(dblookupcombobox1.Text);
parameters.parambyname('b').value:
=trim(dblookupcombobox2.Text);
endelse
if(dblookupcombobox3.Enabled=true)
and(dblookupcombobox3.Text<>'')then//如果选择航班号查询begin
。
。
。
〃代码略去
endelse
if(edit1.Enabled=true)and(edit1.Text<>'')and(edit2.Text<>'')then
begin
adoquery4.SQL.Add('select*fromflightwhere日期between:
congand:
dao');
adoquery4.Parameters.ParamByName('cong').Value:
=trim(edit1.Text);
adoquery4.Parameters.ParamByName('dao').Value:
=trim(edit2.Text);
end;
end;
open;
ifrecordCount>0then
beginend
else
showmessage(不存在符合输入的记录!
');//没有检查到信
息是提示
end;
(3).用户查询完航班信息之后能够进行订票,具体界面情况如
下:
说明:
因为航班信息表的主键设置为了航班号和日期,因此用户在订票时必须选择航班号和日期两个选项之后才能完成航班
信息的选择。
为方便用户,我在选择完了航班号之后,下一个日期选项白动定位到字段值为所选航班号的所有日期,缩小了选择范围,避免了一些不必要的选项。
具体代码如下:
withform6.ADOQuery3do//日期复选框用到的组件
begin
close;
sql.clear;
sql.text:
=('select*fromflightwhere航班号=:
a');//查询符合
的值
parameters.parambyname('a').value:
=trim(dblookupcombobox1.Text);
open;
end;
底下的用户信息是随着用户的登陆信息白动更新的无需用户
进行输入,具体实现代码如下:
withform6.ADOQuery5do//定位用户信息
begin
close;
sql.clear;
sql.text:
=('select*fromp_ticketwhere邮箱地址=:
a');
parameters.parambyname('a').value:
=trim(user_id);//用户登
陆时白动赋
open;值的变量
end;
确定订票时需要对其所对应的航班信息的剩余座位数进行验证,如果为零,则不允许订票,另外还要对是否进行了重复订票进行检查,具体代码如下:
if(dblookupcombobox1.Text='')or(dblookupcombobox2.Text='')
or
(adoquery4.FieldByName('剩余座位数').Value=0)then
Begin〃剩余座位数为零,则不能完成订票
showmessage(没有座位了,订票失败!
');
end
else
withform6.ADOQuery5do//检查票务信息是否重复
begin
close;
sql.clear;
sql.text:
=('select*fromp_ticketwhere航班号=:
aand日期
=:
band邮箱地址=:
c');
parameters.parambyname('a').value:
=trim(dblookupcombobox
1.Text);
parameters.parambyname('b').value:
=trim(dblookupcombobox
2.Text);
parameters.parambyname('c').value:
=trim(dbedit1.Text);
open;
ifrecordCount=1then〃在票务信息已有记录时
begin
showmessage(票务信息重复,添加失败!
');
end;
另外需要完成的一项重要的功能是实现剩余座位数的动态更
新,具体完成的代码如下所示:
withADOQuery4do//更新座位数
begin
i:
=fieldbyname('剩余座位数’).Value-1;//i是上文定义的整型
变量
str(i,s);//将i转换成s字符串型的变量
Close;
SQL.Clear;
SQL.Text:
='UpdateflightSETJ余座位数=:
剩余座位数where航班号=:
aand日期=:
b';
parameters.parambyname('a').value:
=trim(dblookupcombobox1.Text);
parameters.parambyname('b').value:
=trim(dblookupcombobo
x2.Text);Parameters.ParamByNamS(余
座位数').Value:
=s;//更新座位数的值ExecSQL;close;
SQL.Add('select*fromflight');
sql.clear;〃更新座位信息
sql.text:
=('select*fromflightwhere航班号=:
aand日期=:
b');
parameters.parambyname('a').value:
=trim(dblookupcomboboxl.Text);
parameters.parambyname('b').value:
=trim(dblookupcombobox2.Text);open;
end;
至此普通用户的功能都已经实现了,下文将讨论管理员的功能
实现:
系统中对管理员的账号信息固定为,因此管理员的用户信
息是不允许修改的,实际中也没有多大的意义。
以管理员身份登录之后系统的航班信息查询界面会增加一个信息管理选项,同时用户信息修改的按钮被隐藏,同时提醒用户是管理员身份登录,具体界面如下所示:
W是善理员]航班信息卷诃:
点击信息管理则进入到下一个界面如图所示:
昼示州户信用
副n
SL
袒啊
到连*
*
unij
20DH2
叫晌
劄J0
134J
QjlS
胡山
阿
SQQ
ig.in
mi
AMIW
蔺京
明㈣
20国
□ai
002
I3CM1
23M
(U7
洲强
r(n
13G[
COO
mH
颂
在本界面中一个dbgrid主要显示了三张表的信息,经过上方
的按钮进行控制,具体的代码如下:
bitbtn6.Enabled:
=true;bitbtn7.Enabled:
=true;
bitbtn8.Enabled:
=true;
〃使下方的查询、修改、删除按钮有效
flight_in:
=true;user_in:
=false;ticket_in:
=false;//上文定义的三个
变量
withadoquery1do//选择航班信息表进行信息显示
begin
close;
sql.clear;
sql.text:
=('select*fromflight');
open;
end;//如果没有记录则不支持修改和删除
ifdbgrid1.DataSource.DataSet.RecordCount=0then
begin
bitbtn7.Enabled:
=false;
bitbtn8.Enabled:
=false;
end;
当要修改数据时,首先选中记录:
航班号
日期
起点
ggno
200V4-2
南毋
四脸
Q01C
20Q5-4-3
■1_Lil■■7«■■■li—j■■■■"riFii^rriis_imHITik_a111■i■”im_UiI~FrT'Ae币EI■!
_.■11.iaim■,■niinniin._d
就
0011
2001-4-2
南刀
四皿
002
2001*5-1
北京
江苏库
007
2009-E-6
天律
拉萨
呗
2001-34
南黛
天津
然后点击修改按钮,出现如下界面:
关键代码如下:
ifflight_in=truethen//如果选中了航班信息进行修改
begin
form5.Enabled:
=false;
form7.show;
form7.dbedit1.enabled:
=false;
form7.dbedit2.enabled:
=false;//主键不允许修改
s:
=adoquery1.fieldbyname('航班号').AsString;
s1:
=adoquery1.fieldbyname('日期').AsString;读取光标的那一行的值
withform7.ADOQuery1do//从航班信息表中进行定位
begin
close;
sql.clear;
sql.text:
=('select*fromflightwhere航班号=:
aand日期=:
b');
parameters.parambyname('a').value:
=s;
parameters.parambyname('b').value:
=s1;
open;
end;
end;
因为航班信息的显示用的都是dbedit控件,因此确定修改的
代码非常简单:
form7.ADOQuery1.UpdateBatch;保存修改
form7.Visible:
=false;
form5.show;返回原来得界面form5.enabled:
=true;
而对于其它两个票务信息表和航班信息表我是不允许修改的,具体原因我上文已经说过了。
当选中了票务信息表的时候,在点击添加按钮,即出现如下界
面:
if(dblookupcombobox1.Text=”)or(dblookupcombobox2.Text=”)
or(dblookupcombobox3.Text=”)
or(form10.DBEdit3.Text=”)or(adoquery4.FieldByName('剩余座位数
).Value=0)then
begin
showmessage(信息不完整或者没有剩余座位了,无法完成订
票!
’);
endelsebegin
withform10.ADOQuery7do//对票务信息表进行查询
begin
close;
sql.clear;
sql.text:
=('select*