抽奖系统。不光要算法,要一个完整的程序,拿过来就可以直接用的。--------------------------------------------------------------------------------------------
效果需求:界面:一个文本框,一个按钮。
状态1:文本框里有一个随机手机号(静止状态,即被抽中的手机号)。按钮文字变为开始
状态2:文本框内的手机号开始随机变化。按钮文字变为停止。操作:
起始状态为状态1(此时的手机号不被计算为中奖手机号,也不另行做记录)
每次鼠标点击按钮,界面状态就会切换。程序不限制状态切换次数(抽奖由人为关闭程序停止,程序不被关闭,永远可以进行抽奖)--------------------------------------------------------------------------------------------
程序需求:从a.txt里读取每一行信息,每行为一个可以参与抽奖的11位手机号,共N个,数目不确定。
从所有的手机号里[随机]选中一个提供给状态2使用,并不断变换(每秒换X个,X可交由使用者自行设定)。
状态1被触发时(某手机号被抽中),则将此手机号记录至b.txt文档,并将其删除,不再参与之后的抽奖。
程序开始时停留在状态1的手机号不被记录为中奖号码。--------------------------------------------------------------------------------------------
界面需求:
界面大小可控,可以放置背景图片。
效果需求:界面:一个文本框,一个按钮。
状态1:文本框里有一个随机手机号(静止状态,即被抽中的手机号)。按钮文字变为开始
状态2:文本框内的手机号开始随机变化。按钮文字变为停止。操作:
起始状态为状态1(此时的手机号不被计算为中奖手机号,也不另行做记录)
每次鼠标点击按钮,界面状态就会切换。程序不限制状态切换次数(抽奖由人为关闭程序停止,程序不被关闭,永远可以进行抽奖)--------------------------------------------------------------------------------------------
程序需求:从a.txt里读取每一行信息,每行为一个可以参与抽奖的11位手机号,共N个,数目不确定。
从所有的手机号里[随机]选中一个提供给状态2使用,并不断变换(每秒换X个,X可交由使用者自行设定)。
状态1被触发时(某手机号被抽中),则将此手机号记录至b.txt文档,并将其删除,不再参与之后的抽奖。
程序开始时停留在状态1的手机号不被记录为中奖号码。--------------------------------------------------------------------------------------------
界面需求:
界面大小可控,可以放置背景图片。
解决方案 »
- Java 信息框
- JFrame的size问题
- 在内网如何使用JavaMail向外网发送邮件,且不需要验证用户名和密码.
- 如何覆盖的写文件?
- Java 基础问题,String ss[]=new String[]{"11","222","33333"}; 和String ss[]={"11","222","33333"}有什么区别
- 菜鸟问个TOMCAT 配置简单问题,劳烦解答下
- 查询出数据的处理
- 有没有办法获取jLabel某个角在屏幕上的坐标?
- HelloWorld中的问题!!!为什么main前需要加上static
- System.in.read 的问题
- 谁有孙鑫老师的《java从入门到精通》第十课“java网络编程”的视频?
- 求助,标题要长长长长长
如果有朋友可以提供demo片段的话,我可以结完再用另外一个号开个高分贴,具体多少分可以商量
有demo片段、整个程序的都可以给我发过来。分不分的都无所谓,在北京的我还可以请吃饭
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;public class LuckyDraw extends JFrame{ private static final long serialVersionUID = 1L;
private static final String INPUT = "a.txt";//输入文件
private static final String OUTPUT = "b.txt";//输出文件
private static final String BACK = "back.png";//背景图片
private static final int FASTSPEED = 10;//10ms跳动一次
private static final int NORMALSPEED = 100;//100ms跳动一次
private static final int SLOWSPEED = 1000;//1000ms跳动一次
//以上参数可自行修改
private Container content = null;
private JButton btnStart = null;
private JTextField fldNum = null;
private JPanel pnlMain = null;
private JMenuBar menuBar = null;
private JCheckBoxMenuItem fastItem = null;
private JCheckBoxMenuItem normalItem = null;
private JCheckBoxMenuItem slowItem = null;
private Vector<String> waiting = null;
private Vector<String> done = null;
private Random random = null;
private Timer timer = null;
private TimerTask task = null;
private int speed = FASTSPEED;
private int drawNum = -1;
private boolean backResize = false;
private boolean running = false; public LuckyDraw() {
setSize(800,600);
setToCenter();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initialize();
}
private void initialize() {
Font font = new Font("Dialog",Font.PLAIN,12);
UIManager.put("MenuBar.font",font);
UIManager.put("Menu.font",font);
UIManager.put("CheckBoxMenuItem.font",font);
content = getContentPane();
pnlMain = new MainPanel();
btnStart = new JButton("开始");
fldNum = new JTextField();
btnStart.setFont(new Font("宋体", Font.PLAIN, 50));
btnStart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if (waiting.size()>0) {
if (running) {
btnStart.setText("开始");
running = false;
if (timer != null) {
timer.cancel();
timer = null;
}
done.add(waiting.get(drawNum));
waiting.remove(drawNum);
try {
writeNums();
} catch (IOException e1) {
e1.printStackTrace();
}
} else {
btnStart.setText("停止");
running = true;
if (timer == null) {
timer = new Timer();
task = new TimerTask() {
public void run(){
if (running && waiting.size()>0) {
drawNum = random.nextInt(waiting.size());
fldNum.setText(waiting.get(drawNum));
}
}
};
timer.schedule(task, 0, speed);
}
}
} else {
fldNum.setText("已经抽完!");
}
}
});
fldNum.setFont(new Font("宋体", Font.PLAIN, 120));
fldNum.setEnabled(false);
fldNum.setHorizontalAlignment(JTextField.CENTER);
fldNum.setText("00000000000");
fldNum.setPreferredSize(new Dimension(670,120));
fldNum.setMinimumSize(new Dimension(670,120));
fldNum.setBackground(null);
fldNum.setDisabledTextColor(Color.BLACK);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
pnlMain.setLayout(gridbag);
c.gridx = 0;
c.weighty = 1.0;
c.weightx = 1.0;
gridbag.setConstraints(btnStart, c);
pnlMain.add(btnStart);
c.weighty = 10.0;
c.gridy = 10;
gridbag.setConstraints(fldNum, c);
pnlMain.add(fldNum);
content.add(pnlMain);
makeMenuBar();
try {
readNums();
} catch (IOException e) {
e.printStackTrace();
}
random = new Random();
}
private void makeMenuBar() {
if (menuBar == null) {
menuBar = new JMenuBar();
menuBar.setBorder(null);
setJMenuBar(menuBar);
JMenu menu;
menu = new JMenu("速度");
fastItem = new JCheckBoxMenuItem("快", true);
normalItem = new JCheckBoxMenuItem("中", false);
slowItem = new JCheckBoxMenuItem("慢", false);
menu.add(fastItem);
menu.add(normalItem);
menu.add(slowItem);
menuBar.add(menu);
fastItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
speed = FASTSPEED;
fastItem.setSelected(true);
normalItem.setSelected(false);
slowItem.setSelected(false);
}
});
normalItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
speed = NORMALSPEED;
fastItem.setSelected(false);
normalItem.setSelected(true);
slowItem.setSelected(false);
}
});
slowItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
speed = SLOWSPEED;
fastItem.setSelected(false);
normalItem.setSelected(false);
slowItem.setSelected(true);
}
});
}
}
private void readNums() throws IOException {
waiting = new Vector<String>();
done = new Vector<String>();
File file = new File(INPUT);
InputStream input = new FileInputStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line;
line = reader.readLine();
while (line != null) {
waiting.add(line);
line = reader.readLine();
}
reader.close();
input.close();
} private void writeNums() throws IOException {
File file = new File(OUTPUT);
OutputStream output = new FileOutputStream(file);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output));
for (String str : done) {
writer.write(str);
writer.newLine();
}
writer.flush();
writer.close();
output.close();
} private void setToCenter() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screen = tk.getScreenSize();
setLocation((screen.width-getWidth())/2, (screen.height-getHeight())/2);
}
public static void main(String arg[]) {
LuckyDraw luckydraw = new LuckyDraw();
luckydraw.setVisible(true);
}
private class MainPanel extends JPanel { private static final long serialVersionUID = 1L;
private Image imgBack = new ImageIcon(BACK).getImage(); protected void paintComponent(Graphics g) {
if (backResize) {
g.drawImage(imgBack, 0, 0, getWidth(), getHeight(), null);
} else {
g.drawImage(imgBack, (getWidth()-imgBack.getWidth(null))/2, (getHeight()-imgBack.getHeight(null))/2, null);
}
}
}
}
使用说明:a.txt和背景图back.png的位置目前需要和jar包在同一目录下
如果是在eclipse下运行,那要放在工程的根目录下,
当然位置你可以在程序里改
速度分快、中、慢
分别对应10ms一跳,100ms一跳,1000ms一跳,
当然这些你也可以改
如果候选数被选完了,会显示:“已经抽完!”
其他你的看下是不是满足你的要求吧
这个是决定背景图是否会根据界面大小自动缩放的
true的时候会自动缩放,忘了在界面上做个可以修改的接口了……
楼主需要的话自己改下这个参数吧