要求启动开始后能随机抽取存在文本文件中的若干个观众手机号码,显示时隐藏最后两位号码,并将获奖主题、获奖等级和获奖名单、手机号、获奖时间等保存在另一个获奖的文本文件中,并可查询历史抽奖情况。
请问在已经实现部分功能的代码的基础上,如何实现记录获奖时间并保存抽奖记录于文本文件的功能
import javax.swing.;
import java.awt.;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Random;
import java.util.Vector;
public class Luckymode extends JFrame implements Runnable {
/**
文本”设置获奖人数:“
/
JLabel numLabel, prizeLabel;
JComboBox numBox, prizeBox;
JButton startBtn, endBtn;
int number = 4;
boolean IS_RUNNING = false;
int i;
String FILE_PATH = "D:/information.txt";
JTextField[] phoneList = new JTextField[10];
Vector vector = new Vector<>();
Luckymode(String s) {
super(s);
initComponents();
}
public void initComponents() {
Container jtogether = getContentPane();
JPanel jup = new JPanel();
jup.setLayout(new FlowLayout());
prizeLabel = new JLabel("奖项:");
String[] prizes = {"一等奖", "二等奖", "三等奖"};
numLabel = new JLabel("人数:");
String[] nums = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"};
prizeBox = new JComboBox(prizes);
prizeBox.setSelectedIndex(2);
prizeBox.addActionListener(e -> {
IS_RUNNING = false;
startBtn.setEnabled(true);
endBtn.setEnabled(false);
for (i = 0; i < 10; i++) {
phoneList[i].setText("");
}
});
numBox = new JComboBox(nums);
numBox.setSelectedIndex(4);
numBox.addActionListener(e -> {
if (e.getSource() == numBox) {
IS_RUNNING = false;
startBtn.setEnabled(true);
endBtn.setEnabled(false);
number = numBox.getSelectedIndex();
for (i = 0; i < 10; i++) {
phoneList[i].setEditable(i <= number);
phoneList[i].setText("");
}
}
});
jup.add(prizeLabel);
jup.add(prizeBox);
jup.add(numLabel);
jup.add(numBox);
JPanel jtemp = new JPanel();
jtemp.setLayout(new BorderLayout());
JPanel j1 = new JPanel();
j1.add(new JLabel(" "));
JPanel j2 = new JPanel();
j2.add(new JLabel(" "));
JPanel jcenter = new JPanel();
jcenter.setLayout(new GridLayout(10, 1, 20, 0));
for (i = 0; i < 10; i++)
{
phoneList[i] = new JTextField("");
phoneList[i].setHorizontalAlignment(JTextField.CENTER);
jcenter.add(phoneList[i]);
phoneList[i].setEditable(i <= number);
}
jtemp.add("Center", jcenter);
jtemp.add("West", j1);
jtemp.add("East", j2);
JPanel jdown = new JPanel();
jdown.setLayout(new FlowLayout());
startBtn = new JButton("开始");
endBtn = new JButton("结束");
startBtn.addActionListener(e ->
{
IS_RUNNING = true;
startBtn.setEnabled(false);
endBtn.setEnabled(true);
});
endBtn.addActionListener(e -> {
IS_RUNNING = false;
startBtn.setEnabled(true);
endBtn.setEnabled(false);
});
endBtn.setEnabled(false);
jdown.add(startBtn);
jdown.add(endBtn);
jtogether.setLayout(new BorderLayout());
jtogether.add("North", jup);
jtogether.add("Center", jtemp);
jtogether.add("South", jdown);
textinfile();
setVisible(true);
}
public String texthand(String a) {
//将从文件读入的数据处理
return a.replaceAll("(\d{3,3}).{4,4}(\d{4,4})", "$1****$2");
}
public void textinfile() {
//将文件中手机号码信息读入vector
try (FileReader f = new FileReader(FILE_PATH); BufferedReader br = new BufferedReader(f)) {
String strline = br.readLine();
while (strline != null) {
vector.add(texthand(strline));
strline = br.readLine();
}
} catch (IOException e) {
System.err.printf("文件不存在%s%n", e.getMessage());
}
}
public void run() { //线程运行
Random random = new Random();
while (true) {
try {
Thread.sleep((long) ((Math.random() * 100) + 50));
} catch (Exception e) {
e.printStackTrace();
}
System.out.printf("is_running:%s%n", IS_RUNNING);
if (IS_RUNNING) {
int index;
for (i = 0; i <= number; i++) {
if (vector.size() > 0) {
// 在phoneList[i]中随机显示手机号码
index = random.nextInt(vector.size() - 1);
System.out.printf("update %d %s%n", index, vector.get(index));
phoneList[i].setText(vector.get(index));
} else {
phoneList[i].setText("无");
}
}
}
}
}
public static void main(String[] args) {
Luckymode luck = new Luckymode("幸运号码抽取");
luck.setSize(300, 450);
luck.setLocation(800, 300);
luck.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(luck).start();
}
你都实现了能够获取到中奖的号码了再保存在文本文件中就好了啊。
在写入文件的那一部分直接获取时间,然后保存,难度不大
中奖后,获取当前时间,然后写入文件就好了。
是保存到原有文件,还是保存到一个新的文件呢?
中奖5个就获取5个当前时间,写入文件中,再依次给中奖号码配对
抽取中奖后记录时间写入文件
你是不是提了两个一样的,哈哈,今天我在另一个回答了,你可以看看