用Java编写一个基于图形用户界面的火车票购票模拟系统。该系统主界面包括三个售票窗口区域,以及两个按钮: “开始售票” 和“退出系统”。点击“开始售票”按钮,系统将启动三个线程同时进行售票,三个对应的窗口区域动态的显示正在售票及剩余票量信息。若票全部售完(总票量在代码中自行指定),将弹出消息框,提示“车票已售完”,点击“退出系统”按钮时,系统退出。

时间: 2023-12-27 21:02:37 浏览: 46
好的,以下是符合您要求的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库,实现了一个窗体界面,包括三个售票窗口区域和两个按钮。当点击“开始售票”按钮时,将启动三个售票员线程,每个线程模拟售票过程,同时更新对应的售票窗口标签。当所有车票售完时,将弹出提示窗口。点击“退出系统”按钮时,程序将退出。

相关推荐

最新推荐

recommend-type

多线程设计一个火车售票模拟程序

java通过并发进程实现火车自动售票程序,假如火车站有100张火车票要卖出去,现在有5个售票点同时售票,用5个线程模拟这5个售票点的售票情况。
recommend-type

Python编写车票订购系统.docx

3.用数据库存储每一次售票记录,包括售票流水号,起点站,终点站,里程,金额等数据,并统计所有存储记录的总售票金额及各站的旅客流量(进站流量+出站流量) 4.能够打印票据信息,包括订票人信息,票价,票据号,...
recommend-type

基于SSH的火车票购票系统论文

一套完整论文,包括:绪论;开题报告;英文翻译;目录;数据库;数据表;总结;心得。完整的论文模式。
recommend-type

火车票网上售票系统软件项目管理分析

① 增加售票途径 ② 简化售票程序 ③ 解决买票难问题
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【实战演练】MATLAB用遗传算法改进粒子群GA-PSO算法

![MATLAB智能算法合集](https://static.fuxi.netease.com/fuxi-official/web/20221101/83f465753fd49c41536a5640367d4340.jpg) # 2.1 遗传算法的原理和实现 遗传算法(GA)是一种受生物进化过程启发的优化算法。它通过模拟自然选择和遗传机制来搜索最优解。 **2.1.1 遗传算法的编码和解码** 编码是将问题空间中的解表示为二进制字符串或其他数据结构的过程。解码是将编码的解转换为问题空间中的实际解的过程。常见的编码方法包括二进制编码、实数编码和树形编码。 **2.1.2 遗传算法的交叉和
recommend-type

openstack的20种接口有哪些

以下是OpenStack的20种API接口: 1. Identity (Keystone) API 2. Compute (Nova) API 3. Networking (Neutron) API 4. Block Storage (Cinder) API 5. Object Storage (Swift) API 6. Image (Glance) API 7. Telemetry (Ceilometer) API 8. Orchestration (Heat) API 9. Database (Trove) API 10. Bare Metal (Ironic) API 11. DNS
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依