用Java编写多窗口卖票情况进度显示: (1)界面上显示两个以上的窗口卖票情况, 每个窗口内容包括窗口名称,该窗口分配的票数,已卖票数(建议用进度条加数字显示) (2)所有窗口分配的票数总和等于自己学号的后三位数字,每个窗口每次卖出的票数 由随机数指定, (3)启动卖票行为,由每次通过按键手工启动或通过自动按钮一键完成(建议自动), 窗口的每次卖票间隔不少于1秒。
时间: 2024-02-18 16:59:00 浏览: 106
好的,我可以给你一些基本的代码示例,帮助你创建多窗口卖票情况进度显示程序。
首先,你需要使用Java的Swing库来创建窗口和组件。下面是一个示例代码,可以创建多个窗口来显示卖票情况:
```java
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class TicketSystem {
private static final int WINDOW_COUNT = 3; // 窗口数量
private static final int TICKET_COUNT = Integer.parseInt(System.getProperty("user.name").substring(System.getProperty("user.name").length() - 3)); // 票数总和
private JFrame[] windows; // 窗口数组
private int[] assignedTickets; // 每个窗口分配的票数
private int[] soldTickets; // 每个窗口已卖出的票数
private boolean running; // 是否正在卖票
public TicketSystem() {
// 初始化窗口数组和分配票数数组
windows = new JFrame[WINDOW_COUNT];
assignedTickets = new int[WINDOW_COUNT];
soldTickets = new int[WINDOW_COUNT];
// 随机分配票数
Random random = new Random();
int remainingTickets = TICKET_COUNT;
for (int i = 0; i < WINDOW_COUNT; i++) {
assignedTickets[i] = random.nextInt(remainingTickets) + 1;
remainingTickets -= assignedTickets[i];
}
// 创建窗口并显示每个窗口的卖票情况
for (int i = 0; i < WINDOW_COUNT; i++) {
windows[i] = new JFrame("窗口 " + (i + 1));
windows[i].setLayout(new BorderLayout());
JProgressBar progressBar = new JProgressBar(0, assignedTickets[i]);
progressBar.setValue(soldTickets[i]);
progressBar.setStringPainted(true);
windows[i].add(progressBar, BorderLayout.NORTH);
JLabel label = new JLabel("已卖 " + soldTickets[i] + " 张票 / 共 " + assignedTickets[i] + " 张票");
windows[i].add(label, BorderLayout.CENTER);
windows[i].pack();
windows[i].setVisible(true);
}
}
public void start() {
running = true;
while (running) {
// 随机选择一个窗口进行卖票
int windowIndex = new Random().nextInt(WINDOW_COUNT);
if (soldTickets[windowIndex] < assignedTickets[windowIndex]) {
soldTickets[windowIndex]++;
updateWindow(windowIndex);
}
// 间隔1秒
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void stop() {
running = false;
}
private void updateWindow(int windowIndex) {
JProgressBar progressBar = (JProgressBar) windows[windowIndex].getContentPane().getComponent(0);
progressBar.setValue(soldTickets[windowIndex]);
JLabel label = (JLabel) windows[windowIndex].getContentPane().getComponent(1);
label.setText("已卖 " + soldTickets[windowIndex] + " 张票 / 共 " + assignedTickets[windowIndex] + " 张票");
windows[windowIndex].repaint();
}
public static void main(String[] args) {
TicketSystem ticketSystem = new TicketSystem();
JButton startButton = new JButton("开始卖票");
startButton.addActionListener(e -> new Thread(ticketSystem::start).start());
JButton stopButton = new JButton("停止卖票");
stopButton.addActionListener(e -> ticketSystem.stop());
JButton autoButton = new JButton("自动卖票");
autoButton.addActionListener(e -> {
new Thread(ticketSystem::start).start();
try {
Thread.sleep(10000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
ticketSystem.stop();
});
JFrame controlWindow = new JFrame("控制面板");
controlWindow.setLayout(new FlowLayout());
controlWindow.add(startButton);
controlWindow.add(stopButton);
controlWindow.add(autoButton);
controlWindow.pack();
controlWindow.setVisible(true);
}
}
```
在这个示例代码中,我们创建了一个名为TicketSystem的类来管理卖票情况。在构造函数中,我们随机分配票数,创建窗口并显示每个窗口的卖票情况。
然后,我们编写了一个start方法来启动卖票行为。在start方法中,我们随机选择一个窗口进行卖票,直到所有窗口的票都卖完为止。每次卖票后,我们使用updateWindow方法更新对应窗口的卖票情况。
最后,我们创建了一个控制面板窗口,用于手动启动和停止卖票,以及自动卖票。自动卖票会在10秒后自动停止。
阅读全文