1、现代彩票在我国发展有十几年历史。目前,可以在全国发行的彩票只有中国体育彩票和中国福利彩票。彩票产业在促进消费,拉动经济增长等方面起到巨大的推动作用,为国家带来了惊人的经济效益和社会效益。随着彩票成为平常百姓生活的一部分,彩票因为其自身的独特魅力影响着现代人的生活,火爆的彩票成了人们广泛参与、广泛议论的热点。大部分人们更关心的是:买哪种类型的彩票、选择什么号码中奖几率更高!彩票号码分析成为人们议论的一个主要话题。一款优秀的彩票查询软件,可以更加方便帮助彩民进行分析、预测,提高彩票中奖率。当今彩票玩法多样,品种繁多。本系统主要为乐透型彩票和数字型彩票设计。用户可以将每期的彩票信息输入系统,对以前的
2、彩票信息进行查询。帮助用户分析彩票号码走势,决定购买哪种类型和号码的彩票。1.3 需求描述小王最近迷上了玩彩票,看着报纸上或者网上总是报道有人中了大奖,小王心里挺痒痒的。小王决定,要坚持坚持再坚持,一定要中次大奖。小王心想:现在市面上的彩票种类也太多了,都买的话不现实,钱包也不允许,看来只能瞄准一个或几个买,好!决定了,就买七星彩、超级大乐透和排列5。心动不如行动,既然决定买了就付诸实践。几个月过去了,小王的买彩票的劲头一直很高,并且一次也没有落下过,每个星期开3期,每期彩票都买,而且小王的运气不错,竟然还中了几千块,这样辉煌的战绩使得小王热情更高涨了。不过事事难料,有一次小王由于工作需要没有
3、时间买彩票,所以有几期彩票没买,等工作忙完了后,小王去投注站打探彩票情报,看看自己没买的那几期中奖号码是什么。幸好,这几期自己想买的号都没中,也不亏。但是突然小王心里一动,那么我买的彩票号码在以前的我不知道的开奖号码中出现过吗?而且现在什么都讲究一个计算,不能打无把握之仗,听说这彩票还有个概率什么的,那么我把以前开奖的号码记录下来便于自己留意分析岂不是更好?带着这种想法,小王找到了做程序开发的朋友小张。小张一听此事,便笑着说:“这个好说,朋友说话我岂能不帮忙?你的想法我知道了,看我来帮你解决。”2. 分析设计2.1 进度控制20-25分钟2.2 需求分析根据用户的需求我们得知:1. 每次彩票开
4、奖后,该系统需要将每期的不同类型的彩票中奖号码记录下来,方便以后进行讨论分析。2. 现在的彩民希望可以在多期的中奖彩票号码中进行彩票号码分析和号码组合,为了可以方便的结合历次彩票中奖号码进行对比分析,该系统需要可以按彩票期数和彩票号码组合的方式查找出彩票号码,并且可以统计此号码组合的出现次数,从而方便彩民研究号码的出现概率。3. 由于是彩民操作该系统,所以将不可避免的出现彩票录入出错的情况,基于此情况该系统需要可以删除彩民想要删除的彩票号码。通过上面总结出来的3点,我们可以得出以下的系统功能:1. 添加彩票功能:将用户录入的彩票保存起来,其中包括彩票号码,彩票期数和彩票类型。2. 查询彩票功能
5、:在查询彩票功能中包括按彩票期数查询和按彩票号码组合查询,在按号码组合查询功能中还需要拥有统计用户录入的号码组合在以往中奖号码中出现次数的功能。3. 删除彩票功能:对用户选择的彩票号码进行删除。系统总体用例图如下:图 1-1 系统用例图2.3 模块划分根据用户的功能需求,对功能模块的划分如下表:模块类别功能彩票查询按号码查询按照类型和号码查询,统计,删除按期号查询按照类型和期数查询,删除添加彩票添加彩票信息退出系统保存操作信息,关闭窗口,退出彩票信息查询系统表 1-1 模块划分2.4 概要设计架构分析:彩票信息查询系统包含frames、jbean和operdb三个包。各个包中包含的类及功能如下
6、:包名包含的类主要作用framesAddLotFrame、MainJFrame、SeaByNumFrame、SeaByTermFrame、FrameFactory包含所有窗体类、与显示窗体相关的功能类jbeanLotteryBean包含数据实体类operdbDBConnection、OperInfo包含连接数据库类、业务逻辑操作类表 1-2 各个包中的类及功能系统中每一个包都有自己的职责,frames包放置窗体类,负责系统的表示,该包下包含所有的窗体类、与显示窗体相关的功能类。jbean包中包含系统中数据实体类,针对每一个表都存在一个数据实体,它负责封装每一个实体的属性。在查询系统中,我们只用
7、到一个实体类LotteryBean类。operdb包中包含了得到数据库的连接类(DBConnection类)和处理业务逻辑类(OperInfo类)。DBConnection类提供了对数据库的连接。OperInfo类提供了业务逻辑的操作方法,完成每次的业务操作。frames包中各个类的作用:frames包中放置窗体类和FrameFactory类,各个类功能如下:界面名称界面标识功能说明主界面MainJFrame菜单选项,多文档窗体SeaByNumFrame按照号码查询信息,管理信息按期数查询SeaByTermFrame按照期数查询信息,管理信息AddLotFrameFrameFactory创建内
8、联窗体表 1-3 frames包中的类教学阶段二:详细设计及实现任务一:制作MainJFrame主窗体,实现添加彩票信息功能教学指导讲解时间:5分钟任务需求、流程图、输入输出设计、数据库设计、界面设计讲解时间:10分钟主窗体功能:20分钟学生完成代码量:全部完成学生上机时间:30分钟添加彩票信息功能:50-60分钟60分钟1.2 任务需求1. MainJFrame主窗体任务需求:MainJFrame主窗体中包含一个菜单栏,包括“彩票查询”,“添加彩票”,“退出系统”三个菜单。在彩票查询菜单下包括按号码查询和按期数查询两个菜单项。选择按号码查询弹出SeaByNumFrame窗体,选择按期数查询弹
9、出SeaByTermFrame窗体。点“添加彩票”菜单,弹出AddLotFrame窗体。点“退出系统”菜单,关闭所有窗体,退出系统。2. 添加彩票信息功能任务需求:用户选择“添加信息”菜单,打开添加彩票信息窗体,选择要添加的彩票类型,填写期数、号码等信息,点“添加”按钮,实现添加彩票信息功能。如果彩票信息输入错误,点“清空”按钮,清除输入的彩票期数、号码等信息。点“退出”按钮,退出添加彩票信息窗口。各个信息输入限制如下:期数:必须是5位数字,不能为空号码:必须是1-2位数字,不能为空1.3 流程图主窗体中点击不同菜单流程如下:图 2-1 点不同菜单项弹出相应窗体图 2-2 添加彩票流程上图是添
10、加彩票信息流程图,用户在主窗体中点“添加彩票”菜单,弹出“添加彩票信息”窗体。在该窗体中,选择彩票类型,输入彩票期数和号码,点“添加”按钮,调用后台方法对输入的彩票信息进行验证。如果验证失败,弹出提示信息,重新输入彩票信息。如果验证成功,执行添加彩票信息的操作。如果添加信息成功,弹出信息提示“添加信息成功”,失败则提示“添加失败,请重新添加”。1.4 输入输出设计名称数据类型I/O要求必填/必显范围举例彩票类型字符I10位七星彩期数5位08023号码2位9表 2-1 输入输出设计1.5 数据库设计下面我们将要创建数据库和表,数据库的名称确定为lottery。通过需求分析,我们得知在此系统中我们
11、需要对彩票号码、彩票期数和彩票类型等相关数据进行操作,由此可以得到我们需要拥有彩票号码字段、彩票期数字段和彩票类型字段,我们还需要一个自动标识列作为主键,所以就又拥有了一个主键ID字段。在对此系统的分析过程中还可以发现,彩票的号码是按位数进行选取排列的,所以将彩票号码字段分为7个字段,即将每一位的号码作为一个字段进行存储。下表是其数据字典说明:表名t_LotInfo(彩票信息表)列名数据类型(精度范围)空/非空约束条件说明LotInfoIDInt非空PK,自增信息编号LotTypevarchar(20)空LotNum1varchar(4)第一个号码LotNum2第二个号码LotNum3第三个号
12、码LotNum4第四个号码LotNum5第五个号码LotNum6第六个号码LotNum7第七个号码LotTermvarchar(5)彩票期数补充说明表 2-2 彩票信息表1.6 界面设计界面设计的必要性在很多的建筑工程设计的时候,都有相应的建筑微缩模型来更好地展示将来实体建筑。在软件工程中也使用这种方法。它不是实现过程的一部分,而是设计过程的一部分。当然,在完成设计阶段的任务后,原型可以成为实现过程的一个起点,原型主要解决了分析用户需求、评估关键技术和性能瓶颈等方面的问题。分析用户需求如同“需求分析”中介绍的一样,用户有时也不知道,更说不清楚什么是理想的系统,只是有个大概的想法而已。有个实实在
13、在的界面交互原型可以让用户有个感觉和评价的机会,这样可以更好地总结出用户的需求。虽然开发原型比简单的文档描述或者使用UML画用例图看起来多花时间,但总体的效率可能会更高,而且通过原型方法得出的用户需求更具体,更接近真正的需要。评估关键技术和性能瓶颈在项目之初,对有些技术的适用性、可行性以及可能存在的性能瓶颈等,并没有实在的把握,有个简单的原型系统可以大概地回答这些问题。界面设计的基本要求界面设计要完整地体现出用户需求的表现形式。界面设计要美观大方。界面设计中的交互操作过程要符合用户的习惯性的工作过程。界面设计的步骤第一步:收集各个阶段的业务操作展示界面。第二步:选择必要的界面元素。第三步:对界
14、面进行统一化处理和修饰。第四步:进行必要的审核和管理。第五步:不断修改系统的界面,根据需求的不同进行相应的调整。第六步:交付给开发人员进行后续的工作。主窗体的界面设计根据需求,系统中需要一个主窗体,主窗体中的菜单栏里包含“彩票查询”,“添加彩票”,“退出系统”三个菜单。点击不同菜单实现功能如下:菜单名称弹出窗体(实现功能)弹出SeaByNumFrame窗体弹出SeaByTermFrame窗体弹出AddLotFrame窗体关闭所有窗体,退出系统表 2-3 菜单功能表主窗体界面如下:图 2-3 菜单栏设计主窗体中组件设置:组件类型组件名称属性设置JMenuBarlotMenuBarJMenuadd
15、Lot编辑文本为“添加彩票”,可访问的父组件为“lotMenuBar”Exit编辑文本为“退出系统”,可访问的父组件为“lotMenuBar”searLot编辑文本为“彩票查询”,可访问的父组件为“lotMenuBar”JMenuItemsearByNumtext属性为“按号码查询”searByTermtext属性为“按期数查询”表 2-4 菜单栏设计添加彩票窗体界面设计添加彩票窗体界面如下:图 2-4 添加彩票信息添加彩票信息窗体中组件设置:JLabelselectLotTypetext为“选择彩票类别:ChoicetypeListlotTypetext为“彩票期数:JTextFielden
16、LotTypeenterNumtext为“输入号码:fNumsecNumthiNumforNumfifNumsixNumsevNumJButtonaddLotInfotext为“添加”clearButtontext为“清空”exitSystext为“退出”表 2-5 控件设置1.7 重难点分析主菜单中重难点分析:MDI是Multiple Document Interface的简称,即多文档界面,与SDI(单文档界面)相对。MDI最早出现于Windows 2.0中,最先使用到MDI的应用程序是Excel电子表格。到了Wi-ndows3.1中,MDI在应用程序中得到了更大范围的应用。其中Windo
17、ws 3.1中的程序管理器和文件管理器都采用了MDI。对于C/S结构的软件MDI应用非常常见,可以在一个窗体中的有限空间里提供多个文档同时编辑使用的功能。在Swing中提供了JDesktopPane和JInternalFrame两个类来帮助我们实现MDI的效果。JDesktopPane是用于创建多文档界面或虚拟桌面的容器,它扩展了JLayeredPane类来管理重叠内部窗体。此类通常用作 JInternalFrame的父类,为JInternalFrame提供一个可维护的DesktopManager对象,DesktopManager对象为JInternalFrame提供了一些自定义方法。JInt
18、ernalFrame提供了很多窗体功能,这些功能包括拖动、关闭、调整大小、标题显示和支持菜单栏等。通常,用户可创建JInternalFrame对象并将其添加到JDesktopPane中来实现MDI的效果。在创建主窗体的过程中,比较困难的是点击不同的菜单项显示相应的窗体。下面我们重点介绍其实现的步骤:点击菜单项显示窗体流程如下:用户点击菜单项,触发了相应的点击事件。在事件里调用显示窗体的方法。在方法中对窗体是否创建进行判断,如果已经创建,则显示该窗体;如果没有创建,则进行创建窗体操作。下面我们以显示“按号码查询”窗体为例,介绍显示窗体的具体步骤:1. 编写触发事件:在MainJFrame窗体中,
19、点击“彩票查询”,右击其下面伸展的“按号码查询”菜单项,依次选择“事件”“Action”“ActionPerformed”。在触发事件代码中调用显示窗体方法: /显示按号码查询窗体 private void searByNumActionPerformed(java.awt.event.ActionEvent evt) showFrame(SearchByNumber); 在触发事件中,调用s howFrame()方法,将要显示的窗体类的标示设置为“SearchByNumber”,以“SearchByNumber”为参数传递到showFrame()方法中。2. 调用显示窗体方法调用显示窗体方法
20、,即调用上面代码中的showFrame()方法。该方法主要代码如下: private void showFrame(String frameName) /建立一个Hashtable对象来管理窗体 Hashtable hashtable=new Hashtable(); /判断窗体是否已经创建 if(internaleFrame!=null) internaleFrame.dispose(); /Hashtable对象中如果没有该窗体,执行创建窗体操作 if(hashtable.get(frameName)=null) /新建以frameName为名称的JInternalFrame窗体 inte
21、rnaleFrame=(JInternalFrame)FrameFactory. buildFrameFactory(frameName); /将窗体存入Hashtable对象中 hashtable.put(frameName,internaleFrame); /显示窗体 internaleFrame.setVisible(true); this.add(internaleFrame); try /选定内部窗体 internaleFrame.setSelected(true); catch (java.beans.PropertyVetoException e) e.printStackTra
22、ce();在showFrame()方法中,主要分为以下三个步骤:创建一个Hashtable对象用来管理窗体,如果在Hashtable对象中不能找到以fr-ameName参数为名称的窗体,则表明窗体没有被创建,执行创建窗体操作。如果没有创建窗体,用FrameFactory类的buildFrameFactory()方法创建以frameName参数为名称的JInternalFrame窗体,并把窗体存入Hashtable对象中,这样在下次的窗体查找时,就能判断该窗体已经被创建。创建窗体后,执行显示窗体操作:用setVisiblev()方法显示窗体,把窗体添加到MainJFrame主窗体中。由于JInt
23、ernalFrame是内部窗体,所以要调用setSelected()方法选定该窗体。3. 创建FrameFactory类在showFrame()方法中,我们用FrameFactory类的buildFrameFactory()方法创建窗体。以下是buildFrameFactory()方法的主要代码: public static JComponent buildFrameFactory(String frameName) /创建添加彩票窗口 if(frameName.equals(AddLottery) return new AddLotFrame(添加彩票信息, false, false, fa
24、lse,true); /创建按照号码查询窗口 return new SeaByNumFrame(按照号码查询窗口 false,false,false,true); /创建按照期数查询窗口SearchByTerm return new SeaByTermFrame(按照期数查询彩票信息,false, false,false,true); return null;buildFrameFactory()方法是FrameFactory类中的一个静态方法。它根据frameName参数值返回相应的业务窗体。实际上是调用窗体类中的构造函数,返回经过该构造函数初始化的窗体。4. 编写窗体构造函数在buildF
25、rameFactory()方法中根据frameName参数值调用相应的窗体类中的构造函数。以按号码查询窗体为例,其构造函数如下:public SeaByNumFrame(String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable) super(title,resizable,closable,maximizable,iconifiable);构造函数中各个参数表示的含义如下:参数名称作用title设置窗体的标题resizable是否可调整大小closable是否可关闭ma
26、ximizable是否可最大化iconifiable是否可设置图标表 2-6 参数含义我们可以根据实际需要,进行相应的设置,使系统更加美观合理。添加彩票信息重难点分析:在添加彩票信息的过程中,我们要对输入的彩票信息进行验证,对不符合的输入信息弹出警告提示:验证彩票期数:彩票期数要求输入的必须是5位数字。我们先编写判断是否是数字的验证方法,代码如下: public boolean numTest(String vaNum) String numBer =0123456789; boolean orNotNum = false; char c; for(int i = 0; i vaNum.length(); i+) c = vaNum.charAt(i); if(numBer.indexOf(c)=-1) return true; return orN
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1