《Java语言》课程设计题目:编写一个Java应用程序,实现图形界面的抽奖应用。具体要求如下:

1. 支持图形界面。 2. 支持通过文件对话框选取文件,从文件中读取抽奖名单。 3. 支持设置一、二、三等奖个数。 4. 抽奖过程人名快速轮换,后逐渐减慢至停止。 5. 支持保存抽奖结果至文件。

Award.java

package bag6;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;


class Draw implements  ActionListener{
    boolean ifStart = true;

    ArrayList<String> arrayList = new ArrayList<>();  //定义一个字符串链表
    File file = new File("winner");     //中奖名单

    private JFrame jFrame;     //定义一个主窗口

    private JPanel jPanel1,jPanel2,jPanel3;     //定义面板
    private JTextField jTextField1,jTextField2;   //定义两个个文本框(用于显示抽奖姓名,和抽中人数设计)
    private JLabel jLabel1,jLabel2;   //定义姓名,和人数标签
    private JTextArea jTextArea;     //定义一个文本区方便查看中奖名单
    private JComboBox jComboBox;     //定义一个下拉列表(一,二,三等奖)
    private JButton jButton1,jButton2,jButton3; //定义三个按钮(导入名单,开始抽奖,中奖名单)

    private  JToggleButton jToggleButton;

    //构造函数
    public Draw(){
        jFrame = new JFrame("抽奖小程序");
        jPanel1 = new JPanel();
        jPanel2 = new JPanel();
        jPanel3 = new JPanel();


        jLabel1 = new JLabel("姓名");
        jTextField1 = new JTextField(10);
        jTextField1.setPreferredSize(new Dimension(200,80));
        jTextField1.setBackground(null);
        jTextField1.setOpaque(false);   //去掉边框线
        jTextField1.setFont(new Font("宋体",Font.ITALIC,20));   //设计字体大小
        jTextField1.setBorder(null);   //设计透明
        jTextField1.setEditable(false);   //姓名文本框不能编辑


        jLabel2 = new JLabel("人数");
        jTextField2 = new JTextField("3",2);

        jTextArea = new JTextArea();

        jComboBox = new JComboBox();
        jComboBox.addItem("一等奖");
        jComboBox.addItem("二等奖");
        jComboBox.addItem("三等奖");

        jButton1 = new JButton("导入名单");
        jButton2 = new JButton("开始抽奖");
        jButton3 = new JButton("中奖名单");

        //jToggleButton = new JToggleButton("开始抽奖");

        //设计布局
        jFrame.setLayout(new GridLayout(3,1));   //m行n列

        jPanel1.add(jLabel1);
        jPanel1.add(jTextField1);
        jPanel1.add(jButton2);   //第一块面板放(姓名标签,文本框,开始抽奖按钮)

        jPanel2.add(jComboBox);
        jPanel2.add(jLabel2);
        jPanel2.add(jTextField2);  //第二块面板放(下拉列表,人数标签,文本框)

        jPanel3.add(jButton1);
        jPanel3.add(jButton3);   //第三块面板放(导入名单按钮,和中奖名单按钮)

        //将面板放进窗口
        jFrame.add(jPanel1);
        jFrame.add(jPanel2);
        jFrame.add(jPanel3);

        //设计显示
        jFrame.setSize(600,300);
        jFrame.setLocation(600,200);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jFrame.setVisible(true);

        //接收监听
        addListener();
    }

    private void addListener(){
        jButton1.addActionListener(this);
        jButton2.addActionListener(this);
        jButton3.addActionListener(this);
    }


    public void actionPerformed(ActionEvent e){
        Object object = e.getSource();
        if(object == jButton1){
            fileOpen();    //导入文件
        }
        if(object == jButton2){
                ifStart = true;     //标志开始
            new Thread(new Runnable() {
                @Override
                public void run() {
                    int time = 250;     //设置一个抽奖时长
                    int i = 25;       //设置一个开始sleep时长
                    int j = Integer.parseInt(jTextField2.getText());   //把文本框2的内容转换为int型,用来抽奖
                    while(j>0) {   //人数大于0
                        i = 25;
                        while (true) {
                            try {
                                if (!ifStart) {
                                    synchronized (this) {
                                        this.wait();
                                    }
                                }
                                Random random = new Random();
                                if (arrayList.size() == 0) {  //用于判断是否有名单在链表中
                                    break;
                                }
                                int rd = random.nextInt(arrayList.size());
                                jTextField1.setText(arrayList.get(rd));   //将随机产生的数当作链表的下标
                                if (i < time) {
                                    Thread.sleep(i);
                                    i += 25;
                                } else {
                                    break;
                                }
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }

                        //把文本框1的内容写进winner.txt中
                        try {
                            if (!file.exists()) {
                                file.createNewFile();
                            }
                            String name = jTextField1.getText();
                            if (name.trim().length() != 0 && arrayList.contains(name)) {
                                String price = (String) jComboBox.getSelectedItem();   //获取当前数据项
                                FileWriter fileWriter = new FileWriter(file, true);
                                fileWriter.write(name + " " + price);
                                fileWriter.write("\r\n");
                                fileWriter.close();
                                Thread.sleep(2000);
                            }
                            arrayList.remove(name);
                        } catch (IOException e3) {
                            System.out.println(e3);
                        }catch (InterruptedException e2){
                            e2.printStackTrace();
                        }
                        j--;
                    }
                }
            }).start();
        }
        if(object == jButton3){    //显示winner.txt中的内容,并创建一个窗口显示名单
            JFrame jFrame = new JFrame();
            JTextArea jTextArea = new JTextArea();
            jTextArea.setEditable(false);
            JScrollPane jScrollPane = new JScrollPane(jTextArea);
            jFrame.add(jScrollPane,BorderLayout.CENTER);
            jFrame.setTitle("中奖名单");
            jFrame.setSize(300,350);
            jFrame.setVisible(true);
            jFrame.setLocation(250,200);
            try{
                FileReader inOne = new FileReader(file);
                BufferedReader inTwo = new BufferedReader(inOne);
                String s = null;
                while((s = inTwo.readLine())!=null){
                    s = s.trim();
                    jTextArea.append(s + '\n');
                }
            }catch (IOException e1){
                System.out.println(e1);
            }
        }
    }

    private void fileOpen(){
        //FileDialog和JFileChooser两个都行,喜欢那个窗口就用那个就行

        /*FileDialog fileDialog = new FileDialog(new Frame(),"默认打开目录",FileDialog.LOAD);
        fileDialog.setVisible(true);
        File [] file = fileDialog.getFiles();*/

        JFileChooser jFileChooser = new JFileChooser(new File("C:"));
        FileNameExtensionFilter filter = new FileNameExtensionFilter("txt", "txt");
        jFileChooser.setFileFilter(filter);
        jFileChooser.setMultiSelectionEnabled(true);
        jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        jFileChooser.showDialog(jFileChooser,"确定");
        File[] file = jFileChooser.getSelectedFiles();


        for(File s:file){
            System.out.println(s);
        }

        //读取listname文件内进arrayList中
        try{
            FileReader inOne = new FileReader(file[0]);
            BufferedReader inTwo = new BufferedReader(inOne);
            String name = null;
            while((name = inTwo.readLine()) != null){
                name = name.trim();
                arrayList.add(name);
            }
        }catch (IOException e){
            System.out.println(e);
        }
    }
}
public class Award {
    public static void main(String []args){
        Draw draw = new Draw();
    }
}

1.程序运行前准备一份txt的文件,里面是一份名字文档。一行一个名字.例如
在这里插入图片描述
2.运行程序
在这里插入图片描述
3.导入文件(点击导入名单,找到刚才的文件,我的是放在桌面)
在这里插入图片描述
4。可以改变(一二三等奖,和抽中人数)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.点击中奖名单(查看结果)中奖者名单(winner.txt)是建立在和项目同一个目录下了。
在这里插入图片描述

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值