专业课程设计I报告( 2011 / 2012 学年第二学期)题目:民航票务管理与售票系统专业软件工程学生姓名仓业亮班级学号 B09040811指导教师李玲娟指导单位计算机学院软件工程系日期 2012年4月26日指导教师成绩评定表民航票务管理与售票系统一、课题内容和要求1.1课程简介:本次课程设计的基本要求主要是按照软件工程思想,以SQL Server 2000为后台数据库,以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开发运行环境系统开发平台:Delphi 7数据库管理系统软件:SQL Server 2000运行平台:Windows XP分辨率:最佳效果1024×768硬盘要求:CPU:300MHz以上的处理器内存:64MB,推荐128M以上硬盘:100M以上磁盘空间二、设计思路分析完成此课题的思路和基本步骤第一步:理解该系统的功能需求,进行逻辑设计,指定具体的实现计划。
第二步:数据库设计,具体包括表的划分和建立,表中的属性值的定义等。
第三步:测试连接,主要是测试开发环境delphi7与数据库sql2000的连接特性。
第四步:系统的模块划分,确定各个模块所要实现的功能。
第五步:确定测试用例和测试方法,方便程序以后的测试。
第六步:主要功能模块的设计和实现,并且辅助以测试实现。
第七步:测试所完成的应用程序,排查和纠正错误。
三、概要设计3.1数据库逻辑设计如下:3.1.1本数据库的设计中,具体涉及到了三张表的创建于修改。
Passenger—用户信息表Flight—航班信息表P_ticket—票务信息表3.1.2数据库的完整性约束规则的说明(主键、外键等)如下图所示:其中选定了级联更新和删除相关的字段和记录可以在我修改flight表和passenger表的主键信息时间接的达到修改票务信息表的目的。
四、详细设计(1).系统的登陆界面如下图所示:说明:本窗体需要和数据库里的passenger表相关联,通过ADOconnection1和ADOquery1及datasource1三个控件配合,登陆按钮被点击是触发函数如下:with adoquery1 do//对用户输入的邮箱地址和密码在passenger表中查询beginclose;sql.clear;sql.text:=('select * from passenger where 邮箱地址=:a and 密码=:b ');parameters.parambyname('a').value:=trim(edit1.text);parameters.parambyname('b').value:=trim(edit2.text);open;if recordCount=1 then //如果存在符合输入的记录则跳转到查询主页beginform1.Visible:=false ;form3.show;user_id:=edit1.Text;manager:='90231@'; //系统中自己设定的管理员账号if user_id=manager then //如果用户用的是管理员的账号beginform3.bitbtn2.Visible:=false ;//管理员不能修改用户信息form3.BitBtn8.Visible:=true; //管理员对信息管理的按钮可见bel3.caption:='管理员'endelsebeginform3.BitBtn2.Visible:=true; //允许普通用户修改用户信息form3.BitBtn8.Visible:=false; //不具有信息管理的权限bel3.Caption:='普通用户';end;endelseshowmessage('用户名或密码输入错误!');//密码验证错误,输出提示end;(2).新用户的注册界面如下图所示:说明:在输入用户邮箱的时候,光标进入到edit控件之内我写了一个触发函数:checkbox1.Checked:=false;checkbox1.Caption:='帮你验证邮箱';//显示界面友好而当光标移开edit控件后也有一个触发函数:if (pos('@',edit1.text) <=0) or (length(edit1.Text)<5) then//没有‘@’字符或者beginshowmessage('邮箱地址格式不正确,请重新输入!') ;//字符长度小于5为非法edit1.Text:='';endelsebegincheckbox1.Checked:=false; //初始化checkbox标签属性with adoquery1 do //在用户表中对此地址进行查询beginclose;sql.clear;sql.text:=('select * from passenger where 邮箱地址=:a ');parameters.parambyname('a').value:=trim(edit1.text);open;if recordCount=1 then //存在则输出提示begincheckbox1.Checked:=false ;checkbox1.Caption:='邮箱已被注册!请重新输入';edit1.Text:='' ;endelse……..end;另外,我还通过重复输入密码的验证,联系电话输入长度的限制等,使用户注册信息更加合理,也更加人性化。
(3).普通用户通过登录界面之后的查询界面如下:具体的顺序图如下:说明:用户可以通过三种条件进行查询,但是不允许多条件查询。
具体设定是比如我选择按照航班号进行查询时,则其后面的航班号dblookupcombobox 就可用而其他的查询条件框是不可用的。
源程序中dblookupcombobox的设定有必要说明一下。
首先将该控件与一个adoquery控件连接好,adoquery控件的设定略去,然后设定listsource、listfield和keyfield的值,第一次我keyfield的值没有设定是,是显示不出字段的值的。
确定查询的点击事件触发的函数如下:with adoquery4 do //在航班信息表中进行查询beginclose;sql.clear;if (dblookupcombobox1.Enabled=true) //如果选择按起降地查询and(dblookupcombobox1.Text<>'')and(dblookupcombobox2.Text<>'') thenbeginsql.text:=('select * from flight where 起点=:a and 终点=:b');parameters.parambyname('a').value:=trim(dblookupcombobox1.Text);parameters.parambyname('b').value:=trim(dblookupcombobox2.Text);end elseif (dblookupcombobox3.Enabled=true) and(dblookupcombobox3.Text<>'') then //如果选择航班号查询begin。
//代码略去end elseif (edit1.Enabled=true) and(edit1.Text<>'')and(edit2.Text<>'') thenbeginadoquery4.SQL.Add('select * from flight where 日期 between :cong and :dao');adoquery4.Parameters.ParamByName('cong').Value:=trim(edit1.Text);adoquery4.Parameters.ParamByName('dao').Value:=trim(edit2.Text);end;end;open;if recordCount>0 thenbegin endelseshowmessage('不存在符合输入的记录!');//没有检查到信息是提示end;(3).用户查询完航班信息之后可以进行订票,具体界面情况如下:说明:因为航班信息表的主键设置为了航班号和日期,所以用户在订票时必须选择航班号和日期两个选项之后才能完成航班信息的选择。