彩票信息查询文档格式.docx
《彩票信息查询文档格式.docx》由会员分享,可在线阅读,更多相关《彩票信息查询文档格式.docx(149页珍藏版)》请在冰豆网上搜索。
![彩票信息查询文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/9/0e3e48cf-e303-4f85-b492-154dc5925fd8/0e3e48cf-e303-4f85-b492-154dc5925fd81.gif)
现代彩票在我国发展有十几年历史。
目前,可以在全国发行的彩票只有中国体育彩票和中国福利彩票。
彩票产业在促进消费,拉动经济增长等方面起到巨大的推动作用,为国家带来了惊人的经济效益和社会效益。
随着彩票成为平常百姓生活的一部分,彩票因为其自身的独特魅力影响着现代人的生活,火爆的彩票成了人们广泛参与、广泛议论的热点。
大部分人们更关心的是:
买哪种类型的彩票、选择什么号码中奖几率更高!
彩票号码分析成为人们议论的一个主要话题。
一款优秀的彩票查询软件,可以更加方便帮助彩民进行分析、预测,提高彩票中奖率。
当今彩票玩法多样,品种繁多。
本系统主要为乐透型彩票和数字型彩票设计。
用户可以将每期的彩票信息输入系统,对以前的彩票信息进行查询。
帮助用户分析彩票号码走势,决定购买哪种类型和号码的彩票。
1.3需求描述
小王最近迷上了玩彩票,看着报纸上或者网上总是报道有人中了大奖,小王心里挺痒痒的。
小王决定,要坚持坚持再坚持,一定要中次大奖。
小王心想:
现在市面上的彩票种类也太多了,都买的话不现实,钱包也不允许,看来只能瞄准一个或几个买,好!
决定了,就买七星彩、超级大乐透和排列5。
心动不如行动,既然决定买了就付诸实践。
几个月过去了,小王的买彩票的劲头一直很高,并且一次也没有落下过,每个星期开3期,每期彩票都买,而且小王的运气不错,竟然还中了几千块,这样辉煌的战绩使得小王热情更高涨了。
不过事事难料,有一次小王由于工作需要没有时间买彩票,所以有几期彩票没买,等工作忙完了后,小王去投注站打探彩票情报,看看自己没买的那几期中奖号码是什么。
幸好,这几期自己想买的号都没中,也不亏。
但是突然小王心里一动,那么我买的彩票号码在以前的我不知道的开奖号码中出现过吗?
而且现在什么都讲究一个计算,不能打无把握之仗,听说这彩票还有个概率什么的,那么我把以前开奖的号码记录下来便于自己留意分析岂不是更好?
带着这种想法,小王找到了做程序开发的朋友小张。
小张一听此事,便笑着说:
“这个好说,朋友说话我岂能不帮忙?
你的想法我知道了,看我来帮你解决。
”
2.分析设计
2.1进度控制
20-25分钟
2.2需求分析
根据用户的需求我们得知:
1.每次彩票开奖后,该系统需要将每期的不同类型的彩票中奖号码记录下来,方便以后进行讨论分析。
2.现在的彩民希望可以在多期的中奖彩票号码中进行彩票号码分析和号码组合,为了可以方便的结合历次彩票中奖号码进行对比分析,该系统需要可以按彩票期数和彩票号码组合的方式查找出彩票号码,并且可以统计此号码组合的出现次数,从而方便彩民研究号码的出现概率。
3.由于是彩民操作该系统,所以将不可避免的出现彩票录入出错的情况,基于此情况该系统需要可以删除彩民想要删除的彩票号码。
通过上面总结出来的3点,我们可以得出以下的系统功能:
1.添加彩票功能:
将用户录入的彩票保存起来,其中包括彩票号码,彩票期数和彩票类型。
2.查询彩票功能:
在查询彩票功能中包括按彩票期数查询和按彩票号码组合查询,在按号码组合查询功能中还需要拥有统计用户录入的号码组合在以往中奖号码中出现次数的功能。
3.删除彩票功能:
对用户选择的彩票号码进行删除。
系统总体用例图如下:
图1-1系统用例图
2.3模块划分
根据用户的功能需求,对功能模块的划分如下表:
模块类别
功能
彩票查询
按号码查询
按照类型和号码查询,统计,删除
按期号查询
按照类型和期数查询,删除
添加彩票
添加彩票信息
退出系统
保存操作信息,关闭窗口,退出彩票信息查询系统
表1-1模块划分
2.4概要设计
架构分析:
彩票信息查询系统包含frames、jbean和operdb三个包。
各个包中包含的类及功能如下:
包名
包含的类
主要作用
frames
AddLotFrame、MainJFrame、SeaByNumFrame、SeaByTermFrame、FrameFactory
包含所有窗体类、与显示窗体相关的功能类
jbean
LotteryBean
包含数据实体类
operdb
DBConnection、OperInfo
包含连接数据库类、业务逻辑操作类
表1-2各个包中的类及功能
系统中每一个包都有自己的职责,frames包放置窗体类,负责系统的表示,该包下包含所有的窗体类、与显示窗体相关的功能类。
jbean包中包含系统中数据实体类,针对每一个表都存在一个数据实体,它负责封装每一个实体的属性。
在查询系统中,我们只用到一个实体类——LotteryBean类。
operdb包中包含了得到数据库的连接类(DBConnection类)和处理业务逻辑类(OperInfo类)。
DBConnection类提供了对数据库的连接。
OperInfo类提供了业务逻辑的操作方法,完成每次的业务操作。
frames包中各个类的作用:
frames包中放置窗体类和FrameFactory类,各个类功能如下:
界面名称
界面标识
功能说明
主界面
MainJFrame
菜单选项,多文档窗体
SeaByNumFrame
按照号码查询信息,管理信息
按期数查询
SeaByTermFrame
按照期数查询信息,管理信息
AddLotFrame
FrameFactory
创建内联窗体
表1-3frames包中的类
教学阶段二:
详细设计及实现
任务一:
制作MainJFrame主窗体,实现添加彩票信息功能
教学指导讲解时间:
5分钟
任务需求、流程图、输入输出设计、数据库设计、界面设计讲解时间:
10分钟
主窗体功能:
20分钟
学生完成代码量:
全部完成
学生上机时间:
30分钟
添加彩票信息功能:
50-60分钟
60分钟
1.2任务需求
1.MainJFrame主窗体任务需求:
MainJFrame主窗体中包含一个菜单栏,包括“彩票查询”,“添加彩票”,“退出系统”三个菜单。
在彩票查询菜单下包括按号码查询和按期数查询两个菜单项。
选择按号码查询弹出SeaByNumFrame窗体,选择按期数查询弹出SeaByTermFrame窗体。
点“添加彩票”菜单,弹出AddLotFrame窗体。
点“退出系统”菜单,关闭所有窗体,退出系统。
2.添加彩票信息功能任务需求:
用户选择“添加信息”菜单,打开添加彩票信息窗体,选择要添加的彩票类型,填写期数、号码等信息,点“添加”按钮,实现添加彩票信息功能。
如果彩票信息输入错误,点“清空”按钮,清除输入的彩票期数、号码等信息。
点“退出”按钮,退出添加彩票信息窗口。
各个信息输入限制如下:
期数:
必须是5位数字,不能为空
号码:
必须是1-2位数字,不能为空
1.3流程图
主窗体中点击不同菜单流程如下:
图2-1点不同菜单项弹出相应窗体
图2-2添加彩票流程
上图是添加彩票信息流程图,用户在主窗体中点“添加彩票”菜单,弹出“添加彩票信息”窗体。
在该窗体中,选择彩票类型,输入彩票期数和号码,点“添加”按钮,调用后台方法对输入的彩票信息进行验证。
如果验证失败,弹出提示信息,重新输入彩票信息。
如果验证成功,执行添加彩票信息的操作。
如果添加信息成功,弹出信息提示“添加信息成功”,失败则提示“添加失败,请重新添加”。
1.4输入输出设计
名称
数据类型
I/O
要求
必填/必显
范围
举例
彩票类型
字符
I
√
10位
七星彩
期数
5位
08023
号码
2位
9
表2-1输入输出设计
1.5数据库设计
下面我们将要创建数据库和表,数据库的名称确定为lottery。
通过需求分析,我们得知在此系统中我们需要对彩票号码、彩票期数和彩票类型等相关数据进行操作,由此可以得到我们需要拥有彩票号码字段、彩票期数字段和彩票类型字段,我们还需要一个自动标识列作为主键,所以就又拥有了一个主键ID字段。
在对此系统的分析过程中还可以发现,彩票的号码是按位数进行选取排列的,所以将彩票号码字段分为7个字段,即将每一位的号码作为一个字段进行存储。
下表是其数据字典说明:
表名
t_LotInfo(彩票信息表)
列名
数据类型(精度范围)
空/非空
约束条件
说明
LotInfoID
Int
非空
PK,自增
信息编号
LotType
varchar(20)
空
LotNum1
varchar(4)
第一个号码
LotNum2
第二个号码
LotNum3
第三个号码
LotNum4
第四个号码
LotNum5
第五个号码
LotNum6
第六个号码
LotNum7
第七个号码
LotTerm
varchar(5)
彩票期数
补充说明
表2-2彩票信息表
1.6界面设计
界面设计的必要性
在很多的建筑工程设计的时候,都有相应的建筑微缩模型来更好地展示将来实体建筑。
在软件工程中也使用这种方法。
它不是实现过程的一部分,而是设计过程的一部分。
当然,在完成设计阶段的任务后,原型可以成为实现过程的一个起点,原型主要解决了分析用户需求、评估关键技术和性能瓶颈等方面的问题。
分析用户需求
如同“需求分析”中介绍的一样,用户有时也不知道,更说不清楚什么是理想的系统,只是有个大概的想法而已。
有个实实在在的界面交互原型可以让用户有个感觉和评价的机会,这样可以更好地总结出用户的需求。
虽然开发原型比简单的文档描述或者使用UML画用例图看起来多花时间,但总体的效率可能会更高,而且通过原型方法得出的用户需求更具体,更接近真正的需要。
评估关键技术和性能瓶颈
在项目之初,对有些技术的适用性、可行性以及可能存在的性能瓶颈等,并没有实在的把握,有个简单的原型系统可以大概地回答这些问题。
界面设计的基本要求
界面设计要完整地体现出用户需求的表现形式。
界面设计要美观大方。
界面设计中的交互操作过程要符合用户的习惯性的工作过程。
界面设计的步骤
第一步:
收集各个阶段的业务操作展示界面。
第二步:
选择必要的界面元素。
第三步:
对界面进行统一化处理和修饰。
第四步:
进行必要的审核和管理。
第五步:
不断修改系统的界面,根据需求的不同进行相应的调整。
第六步:
交付给开发人员进行后续的工作。
主窗体的界面设计
根据需求,系统中需要一个主窗体,主窗体中的菜单栏里包含“彩票查询”,“添加彩票”,“退出系统”三个菜单。
点击不同菜单实现功能如下:
菜单名称
弹出窗体(实现功能)
弹出SeaByNumFrame窗体
弹出SeaByTermFrame窗体
弹出AddLotFrame窗体
关闭所有窗体,退出系统
表2-3菜单功能表
主窗体界面如下:
图2-3菜单栏设计
主窗体中组件设置:
组件类型
组件名称
属性设置
JMenuBar
lotMenuBar
JMenu
addLot
编辑文本为“添加彩票”,可访问的父组件为“lotMenuBar”
Exit
编辑文本为“退出系统”,可访问的父组件为“lotMenuBar”
searLot
编辑文本为“彩票查询”,可访问的父组件为“lotMenuBar”
JMenuItem
searByNum
text属性为“按号码查询”
searByTerm
text属性为“按期数查询”
表2-4菜单栏设计
添加彩票窗体界面设计
添加彩票窗体界面如下:
图2-4添加彩票信息
添加彩票信息窗体中组件设置:
JLabel
selectLotType
text为“选择彩票类别:
Choice
typeList
lotType
text为“彩票期数:
JTextField
enLotType
enterNum
text为“输入号码:
fNum
secNum
thiNum
forNum
fifNum
sixNum
sevNum
JButton
addLotInfo
text为“添加”
clearButton
text为“清空”
exitSys
text为“退出”
表2-5控件设置
1.7重难点分析
主菜单中重难点分析:
MDI是MultipleDocumentInterface的简称,即多文档界面,与SDI(单文档界面)相对。
MDI最早出现于Windows2.0中,最先使用到MDI的应用程序是Excel电子表格。
到了Wi-ndows3.1中,MDI在应用程序中得到了更大范围的应用。
其中Windows3.1中的程序管理器和文件管理器都采用了MDI。
对于C/S结构的软件MDI应用非常常见,可以在一个窗体中的有限空间里提供多个文档同时编辑使用的功能。
在Swing中提供了JDesktopPane和JInternalFrame两个类来帮助我们实现MDI的效果。
JDesktopPane是用于创建多文档界面或虚拟桌面的容器,它扩展了JLayeredPane类来管理重叠内部窗体。
此类通常用作JInternalFrame的父类,为JInternalFrame提供一个可维护的DesktopManager对象,DesktopManager对象为JInternalFrame提供了一些自定义方法。
JInternalFrame提供了很多窗体功能,这些功能包括拖动、关闭、调整大小、标题显示和支持菜单栏等。
通常,用户可创建JInternalFrame对象并将其添加到JDesktopPane中来实现MDI的效果。
在创建主窗体的过程中,比较困难的是点击不同的菜单项显示相应的窗体。
下面我们重点介绍其实现的步骤:
点击菜单项显示窗体流程如下:
用户点击菜单项,触发了相应的点击事件。
在事件里调用显示窗体的方法。
在方法中对窗体是否创建进行判断,如果已经创建,则显示该窗体;
如果没有创建,则进行创建窗体操作。
下面我们以显示“按号码查询”窗体为例,介绍显示窗体的具体步骤:
1.编写触发事件:
在MainJFrame窗体中,点击“彩票查询”,右击其下面伸展的“按号码查询”菜单项,依次选择“事件”è
“Action”è
“ActionPerformed”。
在触发事件代码中调用显示窗体方法:
//显示按号码查询窗体
privatevoidsearByNumActionPerformed(java.awt.event.ActionEventevt){
showFrame("
SearchByNumber"
);
}
在触发事件中,调用showFrame()方法,将要显示的窗体类的标示设置为“SearchByNumber”,以“SearchByNumber”为参数传递到showFrame()方法中。
2.调用显示窗体方法
调用显示窗体方法,即调用上面代码中的showFrame()方法。
该方法主要代码如下:
privatevoidshowFrame(StringframeName){
//建立一个Hashtable对象来管理窗体
Hashtablehashtable=newHashtable();
//判断窗体是否已经创建
if(internaleFrame!
=null){
internaleFrame.dispose();
}
//Hashtable对象中如果没有该窗体,执行创建窗体操作
if(hashtable.get(frameName)==null){
//新建以frameName为名称的JInternalFrame窗体
internaleFrame=(JInternalFrame)FrameFactory.
buildFrameFactory(frameName);
//将窗体存入Hashtable对象中
hashtable.put(frameName,internaleFrame);
//显示窗体
internaleFrame.setVisible(true);
this.add(internaleFrame);
try{
//选定内部窗体
internaleFrame.setSelected(true);
}catch(java.beans.PropertyVetoExceptione){
e.printStackTrace();
在showFrame()方法中,主要分为以下三个步骤:
创建一个Hashtable对象用来管理窗体,如果在Hashtable对象中不能找到以fr-ameName参数为名称的窗体,则表明窗体没有被创建,执行创建窗体操作。
如果没有创建窗体,用FrameFactory类的buildFrameFactory()方法创建以frameName参数为名称的JInternalFrame窗体,并把窗体存入Hashtable对象中,这样在下次的窗体查找时,就能判断该窗体已经被创建。
创建窗体后,执行显示窗体操作:
用setVisiblev()方法显示窗体,把窗体添加到MainJFrame主窗体中。
由于JInternalFrame是内部窗体,所以要调用setSelected()方法选定该窗体。
3.创建FrameFactory类
在showFrame()方法中,我们用FrameFactory类的buildFrameFactory()方法创建窗体。
以下是buildFrameFactory()方法的主要代码:
publicstaticJComponentbuildFrameFactory(StringframeName){
//创建添加彩票窗口
if(frameName.equals("
AddLottery"
)){
returnnewAddLotFrame("
添加彩票信息"
false,false,false,true);
//创建按照号码查询窗口
returnnewSeaByNumFrame("
按照号码查询窗口"
false,false,false,true);
//创建按照期数查询窗口
SearchByTerm"
returnnewSeaByTermFrame("
按照期数查询彩票信息"
false,
false,false,true);
returnnull;
buildFrameFactory()方法是FrameFactory类中的一个静态方法。
它根据frameName参数值返回相应的业务窗体。
实际上是调用窗体类中的构造函数,返回经过该构造函数初始化的窗体。
4.编写窗体构造函数
在buildFrameFactory()方法中根据frameName参数值调用相应的窗体类中的构造函数。
以按号码查询窗体为例,其构造函数如下:
publicSeaByNumFrame(Stringtitle,booleanresizable,
booleanclosable,booleanmaximizable,booleaniconifiable){
super(title,resizable,closable,maximizable,iconifiable);
构造函数中各个参数表示的含义如下:
参数名称
作用
title
设置窗体的标题
resizable
是否可调整大小
closable
是否可关闭
maximizable
是否可最大化
iconifiable
是否可设置图标
表2-6参数含义
我们可以根据实际需要,进行相应的设置,使系统更加美观合理。
添加彩票信息重难点分析:
在添加彩票信息的过程中,我们要对输入的彩票信息进行验证,对不符合的输入信息弹出警告提示:
验证彩票期数:
彩票期数要求输入的必须是5位数字。
我们先编写判断是否是数字的验证方法,代码如下:
publicbooleannumTest(StringvaNum){
StringnumBer="
0123456789"
;
booleanorNotNum=false;
charc;
for(inti=0;
i<
vaNum.length();
i++){
c=vaNum.charAt(i);
if(numBer.indexOf(c)==-1){
returntrue;
}
returnorN