用Java编写一个基于图形用户界面的火车票购票模拟系统。该系统主界面包括三个售票窗口区域,以及两个按钮: “开始售票” 和“退出系统”。点击“开始售票”按钮,系统将启动三个线程同时进行售票,三个对应的窗口区域动态的显示正在售票及剩余票量信息。若票全部售完(总票量在代码中自行指定),将弹出消息框,提示“车票已售完”,点击“退出系统”按钮时,系统退出。
时间: 2023-12-27 13:02:37 浏览: 107
课程设计基于java实现火车票订票系统火车票管理系统源码+数据库(高分项目).zip
5星 · 资源好评率100%
好的,以下是符合您要求的Java代码:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class TrainTicketSystem extends JFrame {
private static final long serialVersionUID = 1L;
private int totalTickets = 300; // 总票数
private int remainingTickets = totalTickets; // 剩余票数
private JLabel[] ticketWindows = new JLabel[3]; // 三个售票窗口对应的标签
private JButton startButton; // 开始售票按钮
private JButton exitButton; // 退出系统按钮
public TrainTicketSystem() {
setTitle("火车票购票模拟系统");
setSize(500, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 票口区域面板
JPanel ticketPanel = new JPanel();
ticketPanel.setLayout(new GridLayout(1, 3));
for (int i = 0; i < 3; i++) {
ticketWindows[i] = new JLabel("窗口" + (i + 1) + ":未开始售票");
ticketWindows[i].setHorizontalAlignment(JLabel.CENTER);
ticketPanel.add(ticketWindows[i]);
}
add(ticketPanel, BorderLayout.CENTER);
// 按钮面板
JPanel buttonPanel = new JPanel();
startButton = new JButton("开始售票");
exitButton = new JButton("退出系统");
buttonPanel.add(startButton);
buttonPanel.add(exitButton);
add(buttonPanel, BorderLayout.SOUTH);
// 开始售票按钮事件处理
startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
startButton.setEnabled(false); // 禁用开始售票按钮
new Thread(new TicketSeller(1)).start(); // 启动三个售票线程
new Thread(new TicketSeller(2)).start();
new Thread(new TicketSeller(3)).start();
}
});
// 退出系统按钮事件处理
exitButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
}
// 售票员线程
class TicketSeller implements Runnable {
private int windowNumber;
public TicketSeller(int windowNumber) {
this.windowNumber = windowNumber;
}
@Override
public void run() {
while (remainingTickets > 0) {
try {
Thread.sleep((long) (Math.random() * 500)); // 模拟售票时间
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (this) { // 确保线程同步
if (remainingTickets > 0) {
remainingTickets--;
int soldTickets = totalTickets - remainingTickets;
ticketWindows[windowNumber - 1].setText("窗口" + windowNumber + ":正在售票,已售出" + soldTickets + "张票,剩余" + remainingTickets + "张票");
}
}
}
// 售票结束,弹出消息框提示
JOptionPane.showMessageDialog(TrainTicketSystem.this, "车票已售完", "提示", JOptionPane.INFORMATION_MESSAGE);
startButton.setEnabled(true); // 开启开始售票按钮
}
}
public static void main(String[] args) {
TrainTicketSystem system = new TrainTicketSystem();
system.setVisible(true);
}
}
```
这个程序使用了Java的Swing GUI库,实现了一个窗体界面,包括三个售票窗口区域和两个按钮。当点击“开始售票”按钮时,将启动三个售票员线程,每个线程模拟售票过程,同时更新对应的售票窗口标签。当所有车票售完时,将弹出提示窗口。点击“退出系统”按钮时,程序将退出。
阅读全文