⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chooseaward.java

📁 一个好用的java抽奖程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
				ex.printStackTrace(); // 输出出错信息
			}
		}
	}

	/*
	 * 启动按钮的事件
	 */
	public void b_start_ActionPerformed(ActionEvent e)
	{
		//判断存储两个标记的向量中是否为空
		if (v_identNumber.size() <= 0 || v_name.size() <= 0)
		{
			l_information.setText("数据没有加载,请加载数据!");
		}
		else
		{
			if (chooseTime > 6)
			{
				l_information.setText("抽奖结束,若要再进行一次须重新启动程序!");
			} 
			else//执行....
			{
				awardThread = new ChooseThread(this);
				awardThread.changeflag_start();
				l_information.setText("将产生:特(1名),一(1名),二(2名),三(3名)等奖");
				l_identNumber.setText("选取中...");
				b_start.setEnabled(false);
				b_stop.setEnabled(true);
			}
		}
	}

	/*
	 * 暂停按钮的事件
	 */
	public void b_stop_ActionPerformed(ActionEvent e)
	{
		//将跳转的数字置于停止状态
		awardThread.changeflag_stop();
		String awardmessage = "";
		chooseTime++;//第几次按停止按钮
		String str_name = "";
		String message="";
		/*
		 * 根据第几次来按停止按钮来决定是产生几等奖
		 */
		switch (chooseTime)
		{
		case 1:
		case 2:	
		case 3://按前三次都是产生三等奖	
			//寻找停止在号码框中的数字,是对应的的存放号码的向量中的第几个
			for (int k = 0; k < v_identNumber.size(); k++)
			{
				//找到了对应的号码
				if ((t_identNumber.getText()).equals(v_identNumber.elementAt(k)))
				{
					//取出这个号码对应的名字
					str_name = (String) v_name.elementAt(k);
					//为防止下次抽的时候再抽到相同的号码,所以把它们从向量中移除掉
					v_identNumber.removeElementAt(k);
					v_name.removeElementAt(k);
					break;//跳出循环
				}
			}
			l_identNumber.setText("三等奖");
			b_start.setText("继续");
			//这是要输出到文本文件的信息
			awardmessage = "三等奖  " + t_identNumber.getText() + str_name + "\r\n";
			//将要打印的文本信息先存放到一个可变向量中
			v_printident.addElement(awardmessage);//系统提示说要使用泛型,本人不会用,以后再研究
			message = "第"+chooseTime+"位三等奖得主为:  "+str_name;
			JOptionPane.showMessageDialog(this, message);
			break;
		case 4:
		case 5:
			for (int k = 0; k < v_identNumber.size(); k++)
			{
				if (t_identNumber.getText().equals(v_identNumber.elementAt(k)))
				{
					str_name = (String) v_name.elementAt(k);
					v_identNumber.removeElementAt(k);
					v_name.removeElementAt(k);
					break;
				}
			}
			l_identNumber.setText("二等奖");
			awardmessage = "二等奖  " + t_identNumber.getText() + str_name + "\r\n";
			v_printident.addElement(awardmessage);
			int serial=chooseTime-3;//第几位得主,排名序号
			message = "第"+serial+"位二等奖得主为:  "+str_name;
			JOptionPane.showMessageDialog(ChooseAward.this, message);
			break;
		case 6:
			for(int k=0;k<v_identNumber.size();k++)
			{
				if(t_identNumber.getText().equals(v_identNumber.elementAt(k)))
				{
					str_name=(String) v_name.elementAt(k);
					v_identNumber.removeElementAt(k);
					v_name.removeElementAt(k);
					break;
				}
			}
			l_identNumber.setText("一等奖");
			awardmessage = "一等奖  " + t_identNumber.getText() + str_name + "\r\n";
			v_printident.addElement(awardmessage);
			/*
			 * 第几位得主,排名序号,其实没必要这样写,因为本来就这一名
			 * 现在这样写的作用是为我以后改进这个程序(可以自主选择产生几名得奖主)
			 * 的时候做好准备
			 */
			//serial=chooseTime-5;
			//message = "第"+serial+"位二等奖得主为:  "+str_name;
			message = "一等奖得主为:  "+str_name;
			JOptionPane.showMessageDialog(ChooseAward.this, message);
			break;
		case 7:
			for (int k = 0; k < v_identNumber.size(); k++)
			{
				if (t_identNumber.getText().equals(v_identNumber.elementAt(k)))
				{
					str_name = (String) v_name.elementAt(k);
					v_identNumber.removeElementAt(k);
					v_name.removeElementAt(k);
					break;
				}
			}
			l_identNumber.setText("特等奖");
			awardmessage = "特等奖" + t_identNumber.getText() + str_name + "\r\n";
			v_printident.addElement(awardmessage);
			message = "特等奖得主为:  "+str_name;
			JOptionPane.showMessageDialog(ChooseAward.this, message);
			l_information.setText("此次抽奖全部结束,保存抽奖结果!");
			break;
		default:
			JOptionPane.showMessageDialog(ChooseAward.this, "抽奖已经结束");
			b_start.setText("开始");
			awardThread.changeflag_stop();
			break;
		}
		b_start.setEnabled(true);
		b_stop.setEnabled(false);
	}

	/*
	 * 输出按钮的事件
	 */
	public void b_printaward_ActionPerformed(ActionEvent e)
	{
		try
		{
			FileOutputStream fs_out = new FileOutputStream("result.txt");
			DataOutputStream out = new DataOutputStream(fs_out);
			for (int i = 0; i < v_printident.size(); i++)
			{
				System.out.println(v_printident.elementAt(i));//测试用
				out.writeUTF((String) v_printident.elementAt(i) + "\r\n");
			}
			out.close();
			l_information.setText("文件输出成功!保存在当前目录下..");
		} catch (FileNotFoundException fe)
		{
			System.err.println(fe);
		} catch (IOException ioe)
		{
			System.err.println(ioe);
		}

	}

	/*
	 * 定义一个方法,将号码和名字分离开来
	 */
	//一个是源数据文件,一个是分隔符号
	public Vector apart(String src, String separator)
	{
		//使用了泛型,用可变向量来存放等到的标记
		Vector<String> v = new Vector<String>();
		/*
		 * string tokenizer 类允许应用程序将字符串分解为标记,祥见api文档
		 */
		//src是源字符串,separator是把src分隔为几段的标记
		StringTokenizer st = new StringTokenizer(src, separator);
		//测试此 tokenizer 的字符串中是否还有更多的可用标记
		while (st.hasMoreTokens())
		{
			//返回此 string tokenizer 的下一个标记,并将它加入到可变向量中存放
			v.addElement(st.nextToken());
		}
		return v;//返回向量
	}

	/*
	 * 程序的入口
	 */
	public static void main(String[] args)
	{
		//根据经验,这条语句只能在第一行
		JFrame.setDefaultLookAndFeelDecorated(true);
		ChooseAward award = new ChooseAward();
		award.setSize(333, 209);
		award.setLocationRelativeTo(null);//居中显示
		award.setVisible(true);
		award.setAlwaysOnTop(true);//置顶
		award.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

/*
 * 定义的线程类,该线呈是循环的显示号码
 */
class ChooseThread extends Thread
{
	private boolean runFlag = true;//决定此线程是否运行的标记
    //需要该对象来读取文本框字段,不用创建它,申明下就好
	private ChooseAward chooseAward = null;
	//创建一个新的随机数生成器
	Random randomNumber = new Random();

	public ChooseThread(Object obj)
	{
		start();
		chooseAward = (ChooseAward) obj;
	}

	public void start()
	{
		runFlag = false;
		super.start();
	}

	public void changeflag_start()
	{
		runFlag = true;
	}

	public void changeflag_stop()
	{
		runFlag = false;
	}

	/*
	 *实现文本框滚动的效果
	 */
	public void run()
	{
		while (runFlag)
		{
			/*
			 * 返回一个伪随机数,它是从此随机数生成器的序列中取出的
			 * 、在 0(包括)和指定值(不包括)之间均匀分布的 int值
			 */
			//返回向量中存储了几个号码的随便一个序号
			int num = randomNumber.nextInt(chooseAward.v_identNumber.size());
		//显示那个选种的序号对应的号码
			chooseAward.t_identNumber.setText((String) chooseAward.v_identNumber
					.elementAt(num));
			try
			{
				sleep(50);
			} 
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -