文档内容
1
《五.详细设计说明书》
1、 引言:
1、1 编写目的:
在前一阶段(概要设计说明书)中,已解决了实现该系统需求的程序模块设计
问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间
传递的信息,以及数据结构、模块结构的设计等。在以下的详细设计报告中将对在
本阶段中对系统所做的所有详细设计进行说明。
在本阶段中,确定应该如何具体地实现所要求的系统,从而在编码阶段可以把这
个描述直接翻译成用具体的 程序语言书写的程序。主要的工作有:根据在《需求分
析说明书》中所描述的数据、功能、运行、性能需求,并依照《概要设计说明书》
所确定的处理流程、总体结构和模块外部设计,设计软件系统的结构设计、逐个模
块的程序描述(包括各模块的功能、性能、输入、输出、算法、程序逻辑、接口等
等),解决如何
1. 输入:用户输入信息;
2. 输出:系统输出;
3. 网络输出和加密,输入和解密;
4. 分辨信息的种类并采取相应的处理步骤;
5. 判断信息的正误并采取相应的处理步骤;
6. 进行数据库的查询、修改工作;
7. 接受并判断错误,输出相应的出错消息;
在以下的各个阶段中,《用户操作手册》将与本阶段的工作紧密结合,
努力作到 让用户易懂易学。《测试报告》和《维护报告》也将参考本说明书,
检验本系统的各项性能指标,及时发现纰漏及时修补,一定要把功能强大、稳定可靠、
便于维护的机票预定系统交到用户手中。
1、2 项目背景:
本项目(机票预定系统)时由浙江航空公司委托,由《》软件开发小组负责开发。
本 机票预定系统项目主要由两部分形成:
1、 各旅行社中的前台客户程序;
2、 航空公司中的数据库服务器程序;
12
1、3 文中特殊的定义和缩写:
1.3.1 定义
SQL SERVER: 系统服务器所使用的数据库管理系统(DBMS)。
SQL: 一种用于访问查询数据库的语言
事务流:数据进入模块后可能有多种路径进行处理。
主键:数据库表中的关键域。值互不相同。
外部主键:数据库表中与其他表主键关联的域。
ROLLBACK: 数据库的错误恢复机制。
1.3.2 缩写
系统:若未特别指出,统指本机票预定系统。
SQL: Structured Query Language(结构化查询语言)。
ATM: Asynchronous Transfer Mode (异步传输模式)。
1、4 参考资料:
以下列出在概要设计过程中所使用到的有关资料:
1. 机票预定系统项目计划任务书 浙江航空公司
2. 机票预定系统项目开发计划 《》软件开发小组
3. 需求规格说明书 《》软件开发小组
4. 概要设计说明书
《》软件开发小组
4. 用户操作手册(初稿) 《》软件开发小组
5. 软件工程及其应用 周苏、王文等 天津科学技术出版社
6. 软件工程 张海藩 清华大学出版社
7. Computer Network A.S.Tanenbaun Prentice Hall
文档所采用的标准是参照《软件工程导论》沈美明著 的“计算机软件开发文档
编写指南”。
23
2.总体设计:
2、1 需求概要:
浙江航空公司为方便旅客,需开发一个机票预定系统。为便于旅客由旅行社代
替航空公司负责为旅客定票,旅行社把预定机票的旅客信息,包括姓名、性别、工
作单位、身份证号码、旅行时间、旅行目的地,输入机票预定系统的客户端程序,
系统经过查询航空公司内的航班数据服务器后,为旅客安排航班,印出取票通知。
旅客在飞机起飞前一天凭取票通知和帐单交款后取票,系统校对无误后即印出机票
给旅客。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要
求客户机的 界面要单明了,易于操作,服务器程序利于维护。
2、2 软件结构:
各模块之间的关系已由概要设计给出。
1、客户机接受信息模块结构图:
旅客信息输入界面 1 帐单和通
知输入界面2
PersInfoExam ( ) CheckNoticeExam( )
IErrorHandle( ) CheckNoticeInput( )
PersInfoInput( )
PersInfoTempSave( ) JudgeOrderOrCash ( ) CheckNoticeTempSave( )
34
OrderTransPre ( ) CashTransPre( )
SetCSFlag( )
网络接受
和发送模块
2.客户机输出信息模块:
网络接受和发送
模块
CDataRecPre( )
DBOperaCheck( )
JudgeOrderOrCash ( )
CheckNoticeComp()
PersInfoComp1( )
PersInfoComp2( )
OErrorHandle( )
TicketOutput( )
CheckNoticeOutput()
错误输出的
界面3
帐单和取票通知的输出界面 1
机票的输出界面 2
45
3. 网络接受和发送模块结构:
客户机 接受信息模块
或 服务器输出信息模块
NetCheck( )
RecPre( )
SendPre( )
NErrorHandle()
NetReceive ( ) NetDataPack( )
NetDataDiscry ( )
NetDataEncry ( )
NetDataUnpack( )
NetSend ( )
客户机 输出信息模块 服务器输入信息模块
5
NetMonitor
(
)
JudgeCSFlag ( )6
4.服务器模块:
网络接受和发送
模块
SDataRecPre( )
JudgeOrderOrCash( )
TicketAvailable( ) InfoComp( )
DBErrorHandle( )
LockTicket( )
GetoutTicket( )
AddPers ( )
DBErrorTransPre( )
DelItem ( )
GetoutCheck( )
JudgeCheckTicket( )
CheckTransPre( ) TicketTransPre( )
SetCSFlag( )
67
网络接受和发送
模块
3、程序描述:
3、1 客户机接受信息模块
:
1、PersInfoExam 过程:
对在旅客信息界面中输入的各项信息进行初步检验。若发现错误,令
PErrorAppear=T,判断错误类型,并将相应的 错误类型PErrorType或PErrorRank作为参数,转入
IErrorHandle过程。若未发现错误,转入PersInfoInput过程。其中的错误种类有:
1.数据类型不匹配,PErrorType =T;否则=F;
姓名 string 旅行目的地 string
性别 string 旅行时间 date
工作单位 string (年/月/日 yy/mm/dd)
身份证号码 long int 定票/取票 boolean
2、数据超出规定范围PErrorRank =T; 否则=F;等等
性别只能是‘男’或‘女’;身份证号码按规定必须是13位;旅行时间必须
在定票的当天过一天以后; 等等
2、PersInfoInput 过程:
经检验无误后,将输入界面表单中的数据输入到Class PersInfo
Class PersInfo{ /* 伪码 */
String name= 姓名 ;
String sex= 性别;
String company= 工作单位;
Long int idcode= 身份证号码;
Date stime= 旅行时间;
(syear/smonth/stime=年/月/日)
String denist= 目的地
Bool ocflag= 定票/取票
}
78
3.PersInfoTempSave 过程:
将由PersInfoInput输入的旅客信息 保存在一个临时文件PersInfoTemp.txt中。以
备与将来从服务器经网络传输过来的数据校验。 此类temp文件在每次软件的完全过程操作后,
须删除。
4.CheckNoticeExam 过程:
对在帐单和取票通知的信息界面中输入的各项信息进行初步检验。若发现错误,
令CErrorAppear=T,判断错误类型,并将相应的 错误类型CErrorType或CErrorRank作为
参数,转入IErrorHandle过程。若未发现错误,转入CheckNoticeInput过程。其中的错
误种类有:
1.数据结构不匹配,CerrorType=T,否则=F;
帐单号 long int
姓名 string
身份证号码 long int
付款金额 money
航班号 string
取票截止日期 date
目的地 string
2.数据超出规定范围CErrorRank =T; 否则=F;
如帐单号不是规定的15位;金额为负;取票截止日期已过;等等
5.CheckNoticeInput 过程:
经检验无误后,将输入界面表单中的数据输入到Class CheckNotice
Class CheckNotic{
Long int cncode=帐单号
String name=姓名
Long int idcode=身份证号码
Money bill = 付款金额
String planecode= 航班号
Date dtime= 取票截止日期
String denist= 目的地
89
}
6.CheckNoticeSave 过程:
将由CheckNoticeInput输入的旅客信息 保存在一个临时文件CheckNoticeTemp.txt中。以
备与将来从服务器经网络传输过来的数据校验。 此类temp文件在每次软件的完全过程操作后,
须删除。
7.IErrorHandle 过程:
在PersInfoExam或CheckNoticeExam过程中若发现错误,就转入本过程,执行相应的处理,并
输出相应的出错信息。
If (PErrorType==T)
输出“您的个人信息可能输错了位置。请重试。”
If (PErrorRank==T)
输出“您的个人信息不适应规定范围。请重试。”
再转入旅客信息输入的界面中。
If (CErrorType==T)
输出“您的帐单信息可能输错了位置。请重试。”
If (CErrorRank==T)
输出“您的帐单信息不适应规定范围。请重试。”
再转入帐单和取票通知信息的输入界面。
8.JudgeOrderOrCash 过程:
根据PersInfoInput输入的ocflag 判断本次操作是定票或取票,相应的设置标志,相应的转
入OrderTransPre或CashTransPre过程.
9.OrderTransPre 过程:
定票要求传输前,作好各方面(硬件、软件)的准备。如准备好要传输的定票信息,包括
旅客信息,客户机信息等等。客户机信息包括唯一序列号c_id,并设置等待标志waitflag =T和
等待开始时间waitstime,等等。转入网络模块后,此过程仍处于等待状态,并一直记时,当
waitflag==T且系统时间超过waitstime比如十分钟后,结束操作,输出操作超时的出错信息。
当客户机接受到数据库的信息,客户机输入模块中的DataRecPre过程会置waitflag=F,这样本过
程就会结束。
10.CashTranPre 过程:
取票要求传输前,作好各方面(硬件、软件)的准备。如准备好要传输的取票信息,包括
帐单和取票通知的信息,客户机信息等等。客户机信息包括唯一序列号c_id,并设置等待标志
910
waitflag =T和等待开始时间waitstime,等等。转入网络模块后,此过程仍处于等待状态,并一
直记时,当waitflag==T且系统时间超过waitstime比如十分钟后,结束操作,输出操作超时的
出错信息。当客户机接受到数据库的信息,客户机输入模块中的DataRecPre过程会置
waitflag=F,这样本过程就会结束。
11.SetCSFlag 过程:
设置客户机/服务器标志CSFlag=T(表示将要进行的传输是从客户机到服务器)。以备网络
模块中的JudgeCSFlag过程使用。
3.2 客户机输出信息模块:
1.CDataRecPre 过程:
作好各方面(硬件、软件)的准备,以便接受网络传输来的数据。如设置服务器的空闲
与否状态s_idle =F,继承正在工作联系的客户机序列号c_id 。完成后转入下一个过程
DBOperaCheck.
2.DBOperaCheck 过程:
检验网络传输过来的数据。若是出错信息,转入OErrorHandle过程。否则转入
JudgeOrderOrCheck过程。
3.JudgeOrderOrCheck 过程:
根据网络传输来的数据中的ocflag 判断本次操作是定票或取票,相应的设置标志,相应的
转入PersInfoComp或CheckNoticeComp过程.
4.PersInfoComp1 过程:
将数据库中的旅客信息与临时文件PersInfoTemp.txt中的旅客信息进行比较,如果吻合,
就转入CheckNoticeOutput 过程。否则出错,转入OErrorHandle过程。
1011
5. CheckNoticeOutput 过程:
将帐单和取票通知输出到界面1中。注意格式。
Long int cncode =帐单号;
String name= 姓名 ;
String sex= 性别;
String company= 工作单位;
Long int idcode= 身份证号码;
Date stime= 旅行时间;
(syear/smonth/stime=年/月/日)
String denist= 目的地
Bool ocflag= 定票/取票
6. CheckNoticeComp 过程:
将数据库中的帐单和取票通知信息与临时文件CheckNoticeTemp.txt中的旅客信息进行比
较,如果吻合,就转入PersInfoComp 过程。否则出错,转入OErrorHandle过程。
7.PersInfoComp2 过程:
将数据库中的旅客信息与临时文件PersInfoTemp.txt中的旅客信息进行比较,如果吻合,
就转入TicketOutput 过程。否则出错,转入OErrorHandle过程。
8.TicketOutput 过程:
将机票输出到界面2。注意格式。
Long int planecode=航班号;
Date/time stime=起飞时间;
String name=姓名;
Long int idcode=身份证号码;
Int seatcode = 座位号;
Money price= 票价;
1112
9.OErrorHandle 过程:
处理各个过程产生的错误,输出相应的出错信息到输出界面3 。由DBErrorCheck过程转
入的,是数据库操作失效,如:所需机票已被定光;数据库中无对应的帐单或旅客信息;等等。
由PersInfoComp过程转入的,是数据库处理有误,返回的旅客信息无法与原先输入的旅客信
息吻合。由CheckNoticeComp过程转入的,是数据库处理有误,返回的帐单和取票通知信息无
法与原先输入的帐单和取票通知信息吻合。
3.3 网络接受和发送模块结构:
1.NetCheck 过程:
检查网路的工作状况。发送一些检验消息,接受一些反馈信息,查询要建立通路的终端是
否有效,若有效就作好响应的准备,转入RecPre和SendPre过程;若无效就转入NErrorHandle
过程。
如服务器要传输信息给某客户机,可先发检验消息,包括由服务器发送的c_id可检验相应
的客户机是否仍处于等待状态,客户机再将waitflag反馈给服务器;客户机要传输信息给服务
器,若服务器的s_idle=T,由客户机发送的c_id的值可赋予服务器中的c_id,再将s_idle反馈给客
户机.
2. RecPre 过程:
经过NetCheck过程检验网路后,作好接受数据的准备。若是服务器客户机,应该只要
相应c_id的客户机做准备,激活客户机输出模块。若是客户机服务器,由于服务器始终处于
活动状态,无须 激活 。
3. NetReceive 过程:
接受网络数据包。在分包接受的过程中,始终保持与NetMonitor过程联系 ,接受和反馈网
络数据传输状况的 信息,根据这些信息继续接受数据包,或做相应的调整。
4.NetDataDiscry 过程:
将由网络传输来的数据依据一定的算法解密。
1213
5.NetDataUnpack 过程:
将经解密后的数据(被压缩过的)依据一定的算法解压。
6.SendPre 过程:
经过NetCheck过程检验网路后,作好发送数据的准备。若是服务器客户机,
应该只要相应c_id的客户机做准备,激活客户机输出模块。若是客户机服务器,由于服
务器始终处于活动状态,无须 激活 。
7.NetDataPack 过程:
将由服务器模块传过来的数据依据一定的算法压缩,打包。
8.NetDataEncry 过程:
将准备送网络发送的数据依据一定的算法加密。
9.NetSend 过程:
发送经过压缩打包和加密的数据包。在分包发送的过程中,始终保持与NetMonitor
过程联系 ,接受和反馈网络数据传输状况的 信息,根据这些信息继续发送数据包,或做相
应的调整。
10. NetMonitor 过程:
从服务器与某客户机建立网络联系开始,到数据传输完成,联系断开为止,NetMonitor过
程始终监视着网络状况。并将状况信息随时传给NetReceive和NetSend过程,同时从这两个过
程接受数据接受和发送的状况信息。如果以上的状况信息反映出错误 ,就转入NErrorHandle
过程处理。
11. NErrorHandle 过程:
网络模块的错误处理过程。主要的错误种类有:1。无法建立服务器与某客户机建立网络
联系,由NetCheck 过程转来;2。联系建立后,网络数据传输出现错误,由NetMonitor过程转
来。
1314
12. JudgeCSFlag 过程:
本过程根据由客户机输入模块中的SetCSFlag过程或服务器模块中的SetCSFlag 过
程来确定网络模块完成后应转入哪一个模块,客户机输出模块或服务器模块。
3.4 服务器模块:
1. SDataRecPre 过程:
作好服务器各方面(硬件、软件)的准备,以便接受网络传输来的数据。如设置服务器的
空闲与否状态s_idle =F,继承正在工作联系的客户机序列号c_id 。完成后转入下一个过程
JudgeOrderOrCash .
2. JudgeOrderOrCash 过程:
根据网络输入的数据中的ocflag 判断本次操作是定票或取票,相应的设置标志,相应的转
入TicketAvailable或InfoComp过程.
3. TicketAvailable 过程:
根据旅客信息中的旅行时间(日期)查询数据库,若Ticket表中在此日期仍有票剩余(未被定
票或购票),就转入LockTicket 过程;若无余票,就转入DBErrorHandle 过程.
4. LockTicket 过程:
根据旅客信息中的旅行时间(日期),在Ticket表中,把相应数量的起飞日期等于此日期
的机票锁住,作为已定的机票.
5. AddPers 过程:
把已定票的旅客信息添加到PerInfo表中.
姓名 性别 身份证 工作单位 旅 旅行时间
号码 行目的地
1415
6. GetoutCheck 过程:
把查询后许可的定票信息添加到Check表中,同时准备把此信息向网络输出.
帐单号 姓名 身份证号码 金额 航班号 截止日期 目的地
7.InfoComp 过程:
检查输入的旅客信息、帐单和取票通知信息在数据库的PersInfo和Check 表中是否有对应
的项。如果有,就转入DelItem 过程;如果无,就转入DBErrorHandle过程。
8. GetoutTicket 过程:
在Ticket表中取出并删除对应的被锁住的机票信息,准备把此信息向网络输出.
9. DelItem 过程:
在数据库的PersInfo 和Check 表中,删除已取票的旅客信息、帐单和取票通知信息。
10. JudgeCheckTicket 过程:
根据数据库输出的数据 判断本次输出是帐单和取票通知或机票,相应的设置标志,相应
的转入CheckTransPre或TicketTransPre过程.
1516
11.CheckTransPre 过程:
帐单和取票通知 传输前,作好各方面(硬件、软件)的准备。如准备好要传输信息,包
括帐单信息,要联系的客户机信息等等。客户机信息包括唯一序列号c_id。
12.TicketTransPre 过程:
机票 传输前,作好各方面(硬件、软件)的准备。如准备好要传输信息,包括机票信息,
要联系的客户机信息等等。客户机信息包括唯一序列号c_id。
13.SetCSFlag 过程:
设置客户机/服务器标志CSFlag=F(表示将要进行的传输是从服务器到客户机)。以备网络
模块中的JudgeCSFlag过程使用。
14.DBErrorHandle 过程:
判断数据库操作中出现的错误,并处理和返回到客户机上。由TicketAvailable过
程转入的错误,是Ticket表中在相应日期无票剩余(全被定票或购票,或者飞机已起飞);
由Infocomp 过程转入的错误,是输入的旅客信息、帐单和取票通知信息在数据库的
PersInfo和Check 表中没有对应的项,说明取票信息和定票信息不符。
15.DBErrorTransPre 过程:
错误信息 传输前,作好各方面(硬件、软件)的准备。如准备好要传输信息,包括错误
类别信息,要联系的客户机信息等等。客户机信息包括唯一序列号c_id。接着转入网络接受和
发送模块。
1617
17