抽奖程序设计说明书
1 概述
1.1 系统简述
学院将举行庆元旦暨迎新春联欢晚会,其中有抽奖活动,需要一个抽奖程序。抽奖程序在联欢会由抽奖活动主持人,输入奖票号码范围,并指定获奖等级后,在给定的号码范围内产生一个随机号码,作为该获奖等级的一个中奖号码。如果产生的中奖号码与已产生的中奖号码重复,则给出明确的提示,由操作人员选择中奖号“有效”(即中奖规则允许一个奖票重复获奖),或者是“无效” (即不允许一个奖票重复获奖)。可随时显示或打印抽奖结果。
1.2 软件设计目标
1.2.1、程序功能:
1.输入中奖规则:输入最小奖票号码,输入最大奖票号码,输入是否允许重复获奖。
2.产生中奖号码:产生一个界于最小奖票号和最大奖票号之间的数。并且判定该数是否为一个有效的中奖号。
3.显示中奖信息:以表格的形式显示到目前为止所有抽出的中奖奖票号码和中奖等级。
4.更新中奖记录:将中奖奖票号和中奖等级写入“LuckyRecord”文件。
1
5.打印中奖记录:以表格形式打印“LuckyRecord”文件的内容。
1.2.2运行环境和用户
1设备需求:学校工会的手提电脑(P3 CPU,256M内存)。
2操作系统:WINDOWS2000。无需其它支撑软件。
3用户界面:WINDOWS风格界面。
4 使用者可以是抽奖的操作人员,兑奖人员。
1.2.3 外部接口
1 系统输入:从用户界面输入抽奖规则
2 系统输出:存放“中奖信息”的文本文件。
3 硬件接口:一般的PIII机或更高档微机或手提电脑
4 软件接口:Windows2000或以上版本
1.3 参考资料
2
见《抽奖程序需求规格说明书》
1.4 修订版本记录
抽奖程序设计说明书,第1版,设计者:06软件游戏2-2
2 术语表
见《抽奖程序需求规格说明书》数据字典
3 用例
抽奖程序抽出中奖号码活动主持人《include》查询中奖情况活动主持人打印中奖记录兑奖者《include》兑奖者显示中奖记录查询中奖情况奖票持有者奖票持有者3
图1 抽奖程序细化的用例图
1、抽出中奖号码用例:它产生一个有效的中奖号码,它包含查询中奖情况用例。
2、打印中奖记录用例:从连接的打印设备上以表格形式打印中奖记录,它包含显示中奖记录用例。
3、显示中奖记录用例:以表格的形式在屏幕上显示中奖记录。
4、查询中奖情况用例:对用户输入的奖票号,搜索中奖记录,如果该给定的奖票号在中奖记录中,则给出中奖等级,否则,给出没有中奖的信息。
4 设计概述
抽奖程序采用面向对象的方法进行需求捕获、分析与设计,用面向对象的程序设计语言C++实现,系统主要的算法是产生中奖号码的算法,查询中奖信息的算法,显示中奖信息的算法。由于程序适用的范围是局部的,要求不高,采用随机函数产生中奖号码。查询中奖情况由于中奖记录不多,采用顺序查询。显示中奖记录方式按中奖记录顺序逐个显示。整个程序很小是一个整体,没有子系统,没有构架的太多考虑。采用UML对系统进行建模。
4.3 系统界面
在《抽奖程序需求规格说明书》中已经对用户界面有了初步的设想,这里给出用户界面具体的设计,总共有八个界面。
4
初始界面深圳市信息职业技术学院迎新春趣味抽奖X请先输入最大奖票号,最小奖票号,再点击“开始抽奖”最小奖票号:XXXXXX最大奖票号:XXXXXXX开始抽奖显示或打印中奖记录查询中奖信息结束程序等待中奖号码产生的界面深圳市信息职业技术学院迎新春趣味抽奖X请确认抽奖等级,点击“选定中奖号码”得到一个中奖号正在抽取X等奖中奖号码:XXXXXXXXXXXXXXXXX选定中奖号码返回初始界面
重复号处理界面中奖号重复,请选定有效,还是丢弃?有效丢弃
5
产生了一个中奖号码界面深圳市信息职业技术学院迎新春趣味抽奖X又有一个幸运者中奖中奖号码:XXXXXXXXXXXXXXXXX中奖等级X确定
显示中奖记录界面深圳市信息职业技术学院迎新春趣味抽奖X打印中奖记录返回初始界面结束程序中奖记录中奖等级奖票号码XXXXXXXXXXXXXXXXXXXX..........
查询中奖情况界面深圳市信息职业技术学院迎新春趣味抽奖X请先输入奖票号码,再点击“查询”按钮奖票号: XXXXXX查询查询中奖情况结果界面之一深圳市信息职业技术学院迎新春趣味抽奖X奖票号: XXXXXX恭喜您中了 X 等奖确定6
查询中奖情况结果界面之二深圳市信息职业技术学院迎新春趣味抽奖X奖票号: XXXXXX不好意思,您这次运气不太好没有中奖!确定
图2 抽奖程序界面
初始界面点击“返回初始界面”点击“开始抽奖”点击“选定中奖号码”产生一个中奖号码等待中奖号码产生点击“确定”初始界面点击“显示或打印中奖记录”点击“返回初始界面”显示中奖记录
初始界面点击“查询中奖信息”查询中奖信息点击“查询”点击“确定”or点击“查询”查询中奖信息结果界面之一查询中奖信息结果界面之二图3抽奖程序界面间的转换(界面流)
7
点击“确定”
4.4 约束和假定
1 用户期望程序的界面是Windows风格。界面设计已满足。
2 用户期望中奖信息显示成表格形式。因此设计决定在显示中奖记录用例中采用网格控件。
3 抽奖和打印中奖信息分开在不同时间完成,所以中奖信息必须以文件形式保存在硬盘里。
4 抽奖程序将安装在工会的一台手提电脑(配置:PIII CPU,256内存,Windows2000操作系统)上运行。经分析,抽奖程序无需复杂的构架设计,系统中所有构件都驻留一台电脑内可行。
5 本程序只限于内部使用,考虑到工会部门人员的操作水平,工会的手提电脑上不一定有数据库支持环境,所以采用文本文件来记录“中奖信息”。因为用文本文件记录中奖奖信息,工会的工作人员,尤其是兑奖人员,可以直接用Windows自带的记事本打开中奖信息和打印中奖信息,方便工作。将网格控件中显示的信息存入文本文件,每个字段间插入空格,每条中奖记录中间插入一个空行,将文本文件的内容按顺序显示在网格控件中,技术上可行。可以实现第2条和本条限制。
6 因为是院内娱乐性活动,没有严格的法律公证,奖票的有效性验证也只是增加趣味性。
7 抽奖规则(Rule)是系统的初始化信息,它应该包含所有初始化信息,但是用户要求将中奖等级,每个等级中奖的人数,是否允许重复中奖三个规则留给主持者现场人工控制以增加抽奖的趣味性。设计时,在整个系统中只有Chooser类使用最大号码和最小号码两个属性,按信息封装原则,将它们划归Chooser类,去掉初步类图中的Rule 类。
8
5 对象模型
5.1 系统对象模型
ChooserMinNumberTicketNumberMaxNumberChoose()1..*1RecordsLeverAddRecord()Printing()Searching()
图4抽奖程序类图
6 对象描述
chooser类:只能产生一个对象,它是一个临时对象
属性1:MinNumber,int,限定:界于1~20000之间,如果为空则取1
属性2:MaxNumber,int,限定:界于1~20000之间,如果为空则取1000
方法:choose() ,返回值:int
9
Choose()算法描述:利用随机函数,产生一个介于最大奖票号码和最小奖票号码范围内的一个随机数据,作为预备中奖号码,查询中奖情况,如果该号码重复中奖,显示重复号处理对话框由主持人现场决定该号有效或无效,如选择有效,则增加一条记录,如选择无效,则返回等待中奖号码产生界面。
Ticket类:可产生多个对象,它是一个临时对象
属性1:Number,int ,限定界于1~20000之间
Records类:只能产生一个对象,它是一个持久对象
属性1:继承Ticket类的Number属性。
属性2:Lever, int ,如果没有给定则“等待中奖号码产生”界面中的“选定中奖号码按钮”无效。
方法1:Add(),正常执行,无返回值。如果发生错误,显示操作系统返回的出错提示。
Add():打开LuckyRecord.txt文件,在文件最未尾增加一条中奖记录。写入信息按中奖号码,空格,中奖等级,回车换行符的顺序写入文本文件末尾,关闭LuckyRecord.txt。
方法2:Printing()
Printing():打开LuckyRecord.txt文件,在屏幕上逐条显示中奖记录,等待用户点击“打印中奖信息”按钮后逐条打印中奖信息,关闭LuckyRecord.txt。
10
方法3:Searching()
Searching():打开LuckyRecord.txt文件,逐条读出LuckyRecord.txt文件的中奖记录,比较中奖记录中的奖票号与查询奖票号,如果奖票号在LuckyRecord.txt中,则显示“中奖号码,中奖等级”,否则显示“没有中奖”,关闭LuckyRecord.txt。
测试用例:
测试用例1:
MaxNumber = 5 MinNumber = 1,抽出10个号码,分别选定允许重复,不允许重复,当选择不允许重复时,没法产生10个中奖号码,因为最大号和最小号中间只有5个数,测试打印中奖信息,测试查询中奖情况。
测试用例2:
MaxNumber = 1000 MinNumber = 1,五个中奖等级,特等奖1名,一等奖3名,二等奖8名,三等奖8名,没有其它的奖,不允许重复。抽出20个中奖人数,测试抽奖情况与实际是否相符,测试打印功能,测试查询功能。
7 动态模型
有三个场景:抽出一个中奖号码,显示中奖记录并打印中奖记录,查询中奖情况
11
:抽出一个中奖号码场景
:GUI:Chooser:Recordsenter(MaxNumber)初始enter(MinNumber)状enter(\"开始抽奖\")态等待查询中奖情况(Ticket.Number)中奖号码产生[不允许重复中奖][奖票没有重复中奖][奖票重复中奖]重复号增加一个中奖记录处理[允许重复中奖]产生一个中奖号码图5 抽出一个中奖号码场景顺序图
初始界面点击“返回初始界面”点击“开始抽奖”点击“选定中奖号码”产生一个中奖号码等待中奖号码产生点击“确定”
图6 抽出一个中奖号码场景用户界面间的转换
12
7.1 场景1
7.2场景2:显示中奖记录并打印中奖记录场景
:GUI:Records:打印机初始状态Keystroke显示中奖enter(打印)打印记录
图7 显示并打印中奖记录场景顺序图
初始界面点击“显示或打印中奖记录”点击“返回初始界面”显示中奖记录
图8 显示并打印中奖记录场景用户界面间的转换7.3场景3:查询中奖情况场景
13
:GUI:Records初始状态Keystroke查询中奖情况Ticket.Number查询中奖情况结果界面之一[中奖]查询中奖情况结果界面之二[未中奖]
图9查询中奖情况场景顺序图
初始界面点击“查询中奖信息”查询中奖信息点击“查询”点击“确定”or点击“查询”点击“确定”查询中奖信息结果界面之一查询中奖信息结果界面之二
图10查询中奖情况场景用户界面转换图
8 非功能性需求
抽奖程序的运行速度,响应时间,安全性,稳定性等性能要求较低,除操作系统外没有其它的软件环境要求,
14
全部组件都安装在一台个人电脑或手提电脑上,没有硬件接口要求,前面的设计可以满足用户的非功能性要求。
9 辅助文档
《抽奖程序需求规格说明书》
15
因篇幅问题不能全部显示,请点此查看更多更全内容