抽奖系统。不光要算法,要一个完整的程序,拿过来就可以直接用的。--------------------------------------------------------------------------------------------
效果需求:界面:一个文本框,一个按钮。
状态1:文本框里有一个随机手机号(静止状态,即被抽中的手机号)。按钮文字变为开始
状态2:文本框内的手机号开始随机变化。按钮文字变为停止。操作:
起始状态为状态1(此时的手机号不被计算为中奖手机号,也不另行做记录)
每次鼠标点击按钮,界面状态就会切换。程序不限制状态切换次数(抽奖由人为关闭程序停止,程序不被关闭,永远可以进行抽奖)--------------------------------------------------------------------------------------------
程序需求:从a.txt里读取每一行信息,每行为一个可以参与抽奖的11位手机号,共N个,数目不确定。
从所有的手机号里[随机]选中一个提供给状态2使用,并不断变换(每秒换X个,X可交由使用者自行设定)。
状态1被触发时(某手机号被抽中),则将此手机号记录至b.txt文档,并将其删除,不再参与之后的抽奖。
程序开始时停留在状态1的手机号不被记录为中奖号码。--------------------------------------------------------------------------------------------
界面需求:
界面大小可控,可以放置背景图片。

解决方案 »

  1.   

    唉程序员不适合定价钱啊MD 单位加了一个功能,在我看来也就几千的事,结果业务愣是跟客户谈到加了10W 
      

  2.   

    不是啊,兄弟们。我发帖都写完了才发现这号就剩50了。
    如果有朋友可以提供demo片段的话,我可以结完再用另外一个号开个高分贴,具体多少分可以商量
      

  3.   

    我邮箱[email protected]
    有demo片段、整个程序的都可以给我发过来。分不分的都无所谓,在北京的我还可以请吃饭
      

  4.   

    java se没学完呢,做不了……
      

  5.   

    上程序 上午刚写的
    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一跳,
    当然这些你也可以改
    如果候选数被选完了,会显示:“已经抽完!”
    其他你的看下是不是满足你的要求吧
      

  6.   

    backResize = false 
    这个是决定背景图是否会根据界面大小自动缩放的
    true的时候会自动缩放,忘了在界面上做个可以修改的接口了……
    楼主需要的话自己改下这个参数吧