简单抽奖软件java程序设计

一.设计任务

   摇奖 描述:从候选手机号码里随机选取号码显示在屏幕上作为获奖手机号。此题训练多线程操作。 描述 提示和要求: 提示和要求 候选号码可以保存在数组中,也可以保存在数据库中。 抽奖人点击开始按钮时,号码开始翻动,点击停止按钮时,显示的号码即为获奖号码。 为保证公平,应该使每个号码被选中的几率相同。

 

二.功能描述

 

 

用户界面简介:用户界面如图所示;界面包括一个顶层容器框架;两个按钮控件:开始和停止;一个编辑框控件;和一个标注为“抽奖机”的标签。

功能简介:点击开始按钮如图所示号码快速闪动,以至于不能看清号码。

 

然后点击停止按钮,选出幸运号码;如图:

 

点击消息框的确定按钮,继续抽奖!!!!!

    

三.各功能具体完成的功能

   框架代码:

       Final Liu form = new Liu();//Liu是一个自定义的框架类

    form.setLocation(400,200);//设置框架位置坐标

    form.setSize(455,300);//设置框架大小(长度和宽度)

    form.setVisible(true);//设置框架是否可见

开始按钮代码:

   JButton startButton = new JButton("开始");

    startButton.addActionListener(new ActionListener() {

       public void actionPerformed(ActionEvent e) {

       

       str[0] = "b";

       new Thread(new Runnable(){  

       

       public void run(){  

       new Main().string();

       for(int i = 0;;++i)

           {

       if(str[0] == "a")

              break;

             form.getTextField().setText(new Main().string());

       }  

       }}).start();

       }

       });

    startButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));

        startButton.setBackground(Color.ORANGE);

     startButton.setBounds(80, 165, 117, 46);

     form.getContentPane().add(startButton);

开始按钮代码里面有一个内部线程new Thread(new Runnable)(){}).start(),这是我编程中的难点。

停止按钮代码:

       JButton stopButton = new JButton("\u505C\u6B62");

     stopButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

str[0] = "a";

   String st = form.getTextField().getText();

   st = "恭喜手机号为:" + st + "的用户获得百元大奖!!!!";

         new JOptionPane().showMessageDialog(null, st);

        }

      });

     stopButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));

       stopButton.setBackground(Color.magenta);

    stopButton.setBounds(240, 165, 117, 46);

 form.getContentPane().add(stopButton);

停止按钮代码里遇到线程结束问题非常头痛,通过多方面的查看资料,不断地调试,勉强解决,以后要加强线程的训练。

标签代码:

      JLabel lblNewLabel = new JLabel("抽奖机");

   lblNewLabel.setBackground(Color.MAGENTA);

   lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 30));

         lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);

   lblNewLabel.setBounds(150, 21, 136, 50);

   getContentPane().add(lblNewLabel);

编辑框代码:

       txtEdit = new JTextField();

   txtEdit.setFont(new Font("微软雅黑", Font.PLAIN, 24));

   txtEdit.setBounds(118, 90, 200, 50);

   getContentPane().add(txtEdit);

txtEdit.setColumns(10);

   本程序中编辑框读写号码是问题的关键,这也是我非常头痛的问题之一。

四.功能实现的流程

            

 

      

五.实验体会

编程遇到的困难:

 编程过程中遇到很多困难,由于是第一次用可视化编程控件编程,所以对各个控件不太熟悉,走了很多弯路。由于对各个控件创建和设置都不能很好地把握,因此我运用eclipsewindowBuilder来编辑控件和设置属性等。其次就是对事件源,事件监听器,事件处理方法运用的不太熟练掌握的不太透彻。最大的困难就是创建线程和结束线程;尤其是结束线程可谓是绞尽脑汁。但是功夫不负有心人,在不断的坚持当中终于完成了任务。

经验总结:

  以后要加强自己的编程训练,提高自己的编程能力。一定要敢想,敢写,敢做。在本次编程中使我更加深刻的了解了java面向对象的编程思想和编程方法。对java类有了更深刻的理解。对线程的应用更得心应手。

附录:

Liu.Java:

package java课程设计;

 

import javax.swing.JFrame;

import javax.swing.JButton;

import javax.swing.JOptionPane;

 

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

 

import javax.swing.JTextField;

import java.awt.Font;

import java.awt.Color;

import javax.swing.JLabel;

import javax.swing.SwingConstants;

 

public class Liu extends JFrame

{

   public JTextField txtEdit;

   public Liu()

   {

   super();

   getContentPane().setBackground(Color.GREEN);

   getContentPane().setForeground(Color.MAGENTA);

   getContentPane().setFont(new Font("微软雅黑", Font.PLAIN, 30));

   getContentPane().setLayout(null);

        

   txtEdit = new JTextField();

   txtEdit.setFont(new Font("微软雅黑", Font.PLAIN, 24));

   txtEdit.setBounds(118, 90, 200, 50);

   getContentPane().add(txtEdit);

   txtEdit.setColumns(10);

   

   JLabel lblNewLabel = new JLabel("抽奖机");

   lblNewLabel.setBackground(Color.MAGENTA);

   lblNewLabel.setFont(new Font("微软雅黑", Font.PLAIN, 30));

   lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);

   lblNewLabel.setBounds(150, 21, 136, 50);

   getContentPane().add(lblNewLabel);

   

   }

   public JTextField getTextField()

   {

return txtEdit;   

   }

}


Main.java:

package java课程设计;

 

import java.awt.Color;

import java.awt.Container;

import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Random;

 

import javax.swing.JButton;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

 

 

public class Main

{

String string()

{

String [] phone = {"14854268096","17864268097","12345678912","13864268096","18964268097","12345678912","14564268096","16764268097","12345678912","13864268096","13864268097","12345678912","13864268096","13864268097","12345678912","13864268096","13864268097","12345678912","13864268096","13864268097","12345678912"};

    Random random = new Random();

        int ran = random.nextInt(20);

        return phone[ran];

}

    public static void main(String [] args)

    {

    final String [] str = new String [5];

    final Liu form = new Liu();

    form.setLocation(400,200);

    form.setSize(455,300);

    form.setVisible(true);

    JButton startButton = new JButton("开始");

    startButton.addActionListener(new ActionListener() {

       public void actionPerformed(ActionEvent e) {

       

       str[0] = "b";

       new Thread(new Runnable(){  

       

       public void run(){  

       new Main().string();

       for(int i = 0;;++i)

           {

       if(str[0] == "a")

              break;

             form.getTextField().setText(new Main().string());

       }  

       }}).start();

       }

       });

    startButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));

        startButton.setBackground(Color.ORANGE);

     startButton.setBounds(80, 165, 117, 46);

     form.getContentPane().add(startButton);

     

     JButton stopButton = new JButton("\u505C\u6B62");

     stopButton.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

str[0] = "a";

   String st = form.getTextField().getText();

   st = "恭喜手机号为:" + st + "的用户获得百元大奖!!!!";

         new JOptionPane().showMessageDialog(null, st);

        }

      });

     stopButton.setFont(new Font("微软雅黑", Font.PLAIN, 24));

        stopButton.setBackground(Color.magenta);

    stopButton.setBounds(240, 165, 117, 46);

    form.getContentPane().add(stopButton);

   

    }
}


  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分享出来的是一个32颗灯摇摇棒的制作,包括焊接说明,常见问题分析,让你轻松DIY。感兴趣了可以下载了收藏,春节有空的时候DIY一个也是不错的。 一. 说明: 8个IO驱动32颗高亮发光二极管,对自己之前做的一个版本的程序进行了改进,显示效果更好,自适应的更好。另外增加了上位机改字的功能,从而大大减少了改动源程序的麻烦,也使得改字很方便,上位机功能可支持输入文字,大小任意,只要在32*64这个区域内就行。支持画图,导入BMP格式图片及保存图片,一共可以配置8张图片,每个图片独立,软件自带各种图案,也可从Word里导出图案,显示图案在范围内随便定义大小。 32颗灯摇摇棒原理图截图: 二.元件清单: 三.焊接说明以及注意事项: 1.LED灯是从原理图可以看出,是正负正负接的。请看好PCB板子上的标号。 另外板上一共有8条跳线,利用LED剪下的管脚当跳线用。 2.滚珠开关焊接方向: 如下图,摇摇棒竖直放,滚珠开关金色那头靠左边焊接,如果焊反显示效果也是反的。 3.电池盒焊接: 电池盒采用3V7号电池盒,放置在握手的地方,使得摇晃起来很舒适。 两个电池盒串联的方式,多一个电池槽需短路,因为3个电池电压已够供单片机所需电源。另外需要用双面胶把电池盒固定在板上。 4.下载口 从PCB板上的标号也可看出VCC P30 P31 GND 下载程序或者配置字幕数据时请正确连接。 常见问题分析: 焊接完成后,上电池,由于电池盒都带电源开关,因此有两个电源开关需要同时拨到开的位置。 摇晃时出现个别LED不亮,请检查是否有断线。 如果摇晃时,亮度不均匀,请更换该LED,由于此种接法的特殊,需要各个灯的特性要尽量相同。 程序下载不进去,检查下载口的线是否正确连接,单片机下载需要冷启动,意思是重新上电,单片机型号STC11F02E,选择对型号,使用内部晶振下载。 一般源程序不需要下载的,发货前都已烧好程序。如果真需要烧写,可按照步骤烧写。这里特别声明一下,由于有些初学者没操作过下载,特别是USB转串口的使用这里我觉得有必要提一下。见下图: 32颗灯摇摇棒使用说明 如何摇晃效果最佳。 手握着电池盒位置,手臂不需要摆动,只需要靠手腕的摆动来形成一个扇区, 摇晃速度不需要很快,可以自己感觉一下,可以自适应的很好,摇晃很小的范围都能正常显示。效果很赞!!!! 上位机软件说明请看:“64x32摇摇棒取模软件帮助文档” 下载波特率:2400 8-N-1 下载字幕数据: 请正确连接4P下载线,如下图: 下载时请这样放置,让摇摇棒竖着放,意在不让滚珠开关导通,这样会导致下载不了。上电后有些LED会亮,指示可以下载字幕数据,如果不亮请重新上电。 软件配置:生成方式配置 串口设置中:请务必选择2400波特率,串口选择对应的串口号。或者从设备管理器COM管理看对应串口号。一般软件会自动搜索,前提是先插了USB转串口再打开软件。 图片不居中可以通过上下左右来移动,制定出满意的图片。
网上看到的,著名电子游戏——幸运转盘设计方案,觉得不错,就分享给大家。可以做着玩玩,娱乐一下! 幸运转盘的pcb: 幸运转盘原理图: 操作: 当你按下开关S1,游戏开始,轮盘周围的LED灯将开始沿着旋转轮的旋转发光,就像一个机械式的转轮,它会渐渐减慢并停止在某一点上。 该电路执行以下操作: 轮盘的转盘是由很多LED灯,布置成一个圆圈,轮流发光(可以说是一个圆形的追逐)。 就像它的机械对应物,转盘的转速逐渐减小为零。 当然,它必须是不可能提前预知停止在哪个位置(或哪个LED最终还会一直亮)。 最后,组件的数量和建设成本保留在边界内(因此没有“外来”的部分)。 对于一个变化,我们不会从头开始,但在最后,环形计数器和LED灯。该电路的这一部分是由IC3和IC4 (确切地说,是一半为IC4 ,而另一半并未使用)形成。IC3和CD4017是一对老朋友: CMOS十进制计数器。时钟信号提供给IC3 (引脚14 )的时钟输入,复位和启动输入(引脚15或13 )被连接到地面,从而开始IC3的操作。在时钟信号上升之际,输出Q0 到Q9依次一个比一个高,之后调转,依次从Q9到Q0渐渐升高,重复轮转。输出提供足够的电力来驱动LED 。传输到LED阳极的每个输出,并且这十个LED灯的阴极通过一个共同的串联电阻(为了限制电流)接地,这是一个LED灯发光。普通可接受的轮盘有十个LED灯,但是,我们经过特别设计,使用IC3 ( CD4017 )的十个输出变成20个LED灯。 为了达到这个目的,我们使用实际输出IC3(CD4017)的(CO,引脚12)。这个输出是为了控制。当输出Q0为高位时,分压器电路的跟随ICs也是高位,在输出Q5高位时,其跟随ICs为低位。 我们用它来输出发送到与两个D型触发器IC4 CD4013连接的分频器。这个触发器的时钟输入端响应CO信号的上升沿。从输出(引脚2)到D输入(引脚5)的回馈,我们要确保Q和出口交汇处,在时钟信号的每个上升沿的极性,所以如果Q是高和低,接着的那个时钟脉冲Q将为低和高。 我们用它来输出发送到与两个D型触发器IC4 CD4013连接的分频器。这个触发器的时钟输入端响应CO信号的上升沿。从输出(引脚2)到D输入(引脚5)的回馈,我们要确保Q和出口交汇处,在时钟信号的每个上升沿的极性,所以如果Q是高和低,接着的那个时钟脉冲Q将为低和高。 正如你在电路图中看到的,触发器的两个Q输出装有一个开关晶体管。随着对应的Q输出为高,10个LED灯全部熄灭。我们现在可以提出操作如下:假设IC4A的Q输出为高(因此为低输出),然后T5导通且T4被切断关闭。取决于IC3 的十个输出分压器中哪个为高,其中一个LED灯 - LED1到LED10发光。然后,IC3的超过10个时钟脉冲Q0将为高值,同时CO输出也为高值。由于这个上升沿与触发器交叠,T5和T4导通。在下一层级的时钟脉冲,依次触发LED11 到LED20,触发器再次消减,轮到LED1到LED10发光,如此重。 振荡器: 在最后的情况下,轮到环计数器的时钟脉冲,我们有著名的CD4060(IC1),该IC除了有14个系列(正式名称为级联)的实际振荡器之外,也可切换两个分频器(类似于IC4A)。 振荡器频率由R7确定,C3将近450赫兹(精确值并不非常重要)。两个分频器内部的十四个输出,并非所有都送出:Q3 到Q9和Q11到Q13。 然后,在Q3(引脚7)处,第四个双分频器的输出端,频率为450赫兹:16到28赫兹;在450赫兹频率的输出Q4(第五个双分频器,引脚5):32≈14赫兹,等等。你可能会开始疑惑我们设计的是什么?实际上,如果我们依次使用其中一个这些以往较低频率的时钟信号锁定到环形计数器,将会得到我们想要的结果,即一个轮盘,渐渐变慢只停止。
计算机软件项目设计方案(2020)全文共10页,当前为第1页。计算机软件项目设计方案(2020)全文共10页,当前为第1页。计算机软件项目设计方案 计算机软件项目设计方案(2020)全文共10页,当前为第1页。 计算机软件项目设计方案(2020)全文共10页,当前为第1页。 1 系统开发方案 1.1 项目建设目标 目前XX有限公司干部管理依然停留在原始状态,主要采用手工录入表格的方式进行统一管理,无法对当前各干部任职情况进行多条件灵活査询,工作效率低,更无法充分利用数据实现多角度统计分析,在基于以上数据管理效率低、操作不方便等原因的基础上,XX有限公司干部数据管理需要实现对企业仼职干部统一、规范的信息化管理,提高企业内部的管理效率,实现对职位分布总体情况进行了解、管理、考核,使干部仼用、选拔等管理过程更全面、更科学,决策更精准。 1.2 技术方案 系统的技术总体结构分为四层:LEAF平台、J2EE平台、操作系统、基础设施四部分。 系统的技术总体结构分为四层:LEAF平台、J2EE平台、操作系统、基础设施四部分。 1.2.1基于云架构的LEAF6平台框架 在传统架构下,一旦系统压力增大到一定程度,就需要对小型机进行纵向扩容(加CPU、加内存),则导致在超大规模的省级集中系统建设场景下,传统架构的支撑能力受到挑战,仍然需要面临分布式扩展问题。 计算机软件项目设计方案(2020)全文共10页,当前为第2页。计算机软件项目设计方案(2020)全文共10页,当前为第2页。在云架构下,系统的硬件核心是X86服务器,以虚拟化技术为硬件基础,数据库可以采用非Oracle的产品,数据存储可以落在本地磁盘。云架构在硬件、虚拟化、数据存储、应用软件等多方面实现横向扩展,使系统最终体现出整体计算能力的横向扩展性,即云的弹性伸缩特性。 计算机软件项目设计方案(2020)全文共10页,当前为第2页。 计算机软件项目设计方案(2020)全文共10页,当前为第2页。 LEAF6平台是人力资源社会保障行业云架构应用支撑平台,遵循Java EE体系规范,以Spring框架为基础,沿用LEAF5框架的逻辑分层结构,结合云计算技术体系及相关技术产品,进行总体架构设计和基础支撑功能规划,支持了应用层和数据库层的分布式实现。引入分布式服务、分布式缓存、并行计算、分布式消息队列、分布式日志、分布式数据访问代理、非结构化存储等技术,支持云应用规划部署和运维管理。划分了数据访问逻辑层次,并定义各层次的职责及技术实现规范;可采用微服务的思想,将人力资源社会保障的业务进行拆分,利用分布式服务弹性伸缩的特性,提高业务处理性能;通过调用数据访问代理服务,实现分库分表环境下的数据透明访问,支持底层数据库的水平扩展。 1.2.2LEAF6平台总体架构 LEAF6平台核心框架定义控制层、业务层、数据访问层的命名方式和实现规则,制定了分布式缓存、并行计算、分布式消息队列、非结构化存储可扩展技术服务的接口规范,对应用集成管理、组织机构管理、操作员管理、角色管理、菜单管理、权限管理、日志跟踪管理等分布式应用管理功能进行封装,分布式应用管理功能可在应用层面复用。LEAF6平台总体逻辑架构如下图: 在技术架构设计上,LEAF6平台以Java EE体系和Spring核心框架为基础,采用Spring MVC结合Spring Security完成权限验证和请求控制服务,使用AOP切面计算机软件项目设计方案(2020)全文共10页,当前为第3页。计算机软件项目设计方案(2020)全文共10页,当前为第3页。技术实现事务管理、服务日志、统一异常处理,在远程服务调用中使用RPC Context实现上下文管理,持久化框架采用Hibernate、Mybatis双框架兼容设计,使用数据访问代理服务,实现分库分表环境下的透明数据访问。LEAF6平台总体技术架构如下图所示: 计算机软件项目设计方案(2020)全文共10页,当前为第3页。 计算机软件项目设计方案(2020)全文共10页,当前为第3页。 分布式缓存、分布式消息队列等技术支撑服务在数据中心进行共享,LEAF6 平台通过技术支撑服务实现与基础技术平台进行对接。 1.2.3LEAF6平台核心框架实现 1.2.3.1数据访问逻辑层次说明 LEAF6核心框架(LEAF6-Core)中,定义了UI视图层的数据交互规范,控制层、分布式服务层、业务模型层、持久化层、数据访问代理层、数据库层的数据访问逻辑规则及实现方式,各层次具体说明如下: 视图层:LEAF6平台没有对视图组件进行封装,只是对UI视图数据交互规范进行了定义,不同的UI组件或客户端,按照规定的JSON标准,可以实现与LEAF6框架进行集成。而LEAF5框架中视图层对ExtJSUI框架进行了封装。 控制层:LE

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值