java编程 多窗口卖票情况进度显示: (1)界面上显示两个以上的白口卖票情况, 每个盲口内容包括口口名称(WY 1 131 1本人姓名的首字母,班级号, 对应的学号后三位和自口号码), 该官口分配的票数,已卖票数字(2)所有自口分配的票数总和等于自己学号的后三位数字,每个窗口每次卖出的票数随机指定, (3)启动买票行为,由每次通过自动按钮一键完成,窗口的每次卖票间网不少于1秒 的程序
时间: 2024-02-17 15:04:39 浏览: 119
以下是一个Java Swing实现的多窗口卖票程序,满足您的要求:
```java
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class TicketSales {
private static final int WINDOW_COUNT = 2;
private static final int TICKET_COUNT = 100;
private static final int SELL_INTERVAL = 1000; // 单位:毫秒
private static final String NAME_PREFIX = "WY 1 131 1"; // 口口名称前缀,根据个人情况修改
private JFrame frame;
private JLabel[] nameLabel;
private JLabel[] ticketLabel;
private JLabel[] soldLabel;
private JButton autoButton;
private int[] ticketCountArray;
private int sumTicketCount;
private Random random;
public TicketSales() {
// 初始化票数和随机对象
ticketCountArray = new int[WINDOW_COUNT];
random = new Random();
// 创建窗口界面
frame = new JFrame("多窗口卖票程序");
frame.setSize(600, 400);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 创建卖票口和对应的显示区域
nameLabel = new JLabel[WINDOW_COUNT];
ticketLabel = new JLabel[WINDOW_COUNT];
soldLabel = new JLabel[WINDOW_COUNT];
JPanel panel = new JPanel(new GridLayout(WINDOW_COUNT, 3));
for (int i = 0; i < WINDOW_COUNT; i++) {
nameLabel[i] = new JLabel(NAME_PREFIX + (i + 1));
ticketLabel[i] = new JLabel("票数:" + TICKET_COUNT);
soldLabel[i] = new JLabel("已售:" + ticketCountArray[i]);
panel.add(nameLabel[i]);
panel.add(ticketLabel[i]);
panel.add(soldLabel[i]);
}
frame.add(panel, BorderLayout.CENTER);
// 创建自动按钮
autoButton = new JButton("自动");
autoButton.addActionListener(e -> {
// 禁用自动按钮
autoButton.setEnabled(false);
// 重置票数和总售票数
for (int i = 0; i < WINDOW_COUNT; i++) {
ticketCountArray[i] = 0;
soldLabel[i].setText("已售:" + ticketCountArray[i]);
}
sumTicketCount = 0;
// 计算自口分配的票数
int lastThreeDigits = Integer.parseInt(NAME_PREFIX.substring(NAME_PREFIX.length() - 3));
int selfTicketCount = lastThreeDigits % WINDOW_COUNT;
int remainingTicketCount = TICKET_COUNT - selfTicketCount;
ticketCountArray[0] = selfTicketCount;
sumTicketCount += selfTicketCount;
for (int i = 1; i < WINDOW_COUNT; i++) {
int randomTicketCount = random.nextInt(remainingTicketCount + 1);
ticketCountArray[i] = randomTicketCount;
sumTicketCount += randomTicketCount;
remainingTicketCount -= randomTicketCount;
}
// 创建销售线程
Thread[] threads = new Thread[WINDOW_COUNT];
for (int i = 0; i < WINDOW_COUNT; i++) {
int windowIndex = i;
threads[i] = new Thread(() -> {
while (ticketCountArray[windowIndex] > 0) {
try {
// 随机生成卖出的票数
int soldTicketCount = random.nextInt(ticketCountArray[windowIndex] + 1);
ticketCountArray[windowIndex] -= soldTicketCount;
sumTicketCount -= soldTicketCount;
// 更新界面显示
soldLabel[windowIndex].setText("已售:" + (TICKET_COUNT - ticketCountArray[windowIndex]));
frame.setTitle("总售票数:" + (TICKET_COUNT - sumTicketCount));
// 等待指定时间间隔
Thread.sleep(SELL_INTERVAL);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
});
threads[i].start();
}
// 等待销售线程结束
for (int i = 0; i < WINDOW_COUNT; i++) {
try {
threads[i].join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
// 启用自动按钮
autoButton.setEnabled(true);
});
frame.add(autoButton, BorderLayout.SOUTH);
// 显示窗口
frame.setVisible(true);
}
public static void main(String[] args) {
new TicketSales();
}
}
```
在该程序中,我们使用了一个JFrame作为窗口界面,并在窗口中创建了多个卖票口和对应的显示区域。我们使用了一个ticketCountArray数组来记录每个窗口的票数和已售票数,并在每个窗口线程中随机生成每次卖出的票数,并更新该窗口的已售票数和总体进度显示。我们还使用了Java定时器来控制每次卖票的时间间隔,确保每个窗口之间的卖票不少于1秒。最后,我们在界面上添加了一个“自动”按钮,用于启动买票行为。当用户点击该按钮后,所有窗口线程开始执行卖票操作。
阅读全文
相关推荐
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)