Java编写一个图形界面的火车票售票程序,有三个窗口用来显示售票及余票信息,两个按钮,分别为 开始售票 和 退出系统 点击开始售票按钮 三个窗口同时进行售票 票售完时 弹出消息框 提示已售完 点击 退出系统按钮 系统退出

时间: 2024-02-22 19:55:43 浏览: 29
好的,这是一个比较完整的Java GUI程序,需要用到Swing和多线程编程。下面是大致的代码框架,您可以根据需要进行修改和完善。 ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TicketSellingSystem extends JFrame implements ActionListener { private JLabel[] labels; private JTextArea[] textAreas; private JButton startButton, exitButton; private int totalTickets = 100; private int soldTickets = 0; public TicketSellingSystem() { // 初始化界面 labels = new JLabel[3]; textAreas = new JTextArea[3]; for (int i = 0; i < 3; i++) { labels[i] = new JLabel("窗口" + (i + 1) + "售票情况:"); textAreas[i] = new JTextArea(10, 20); textAreas[i].setEditable(false); } JPanel infoPanel = new JPanel(new GridLayout(3, 2)); for (int i = 0; i < 3; i++) { infoPanel.add(labels[i]); infoPanel.add(new JScrollPane(textAreas[i])); } startButton = new JButton("开始售票"); exitButton = new JButton("退出系统"); startButton.addActionListener(this); exitButton.addActionListener(this); JPanel buttonPanel = new JPanel(new FlowLayout()); buttonPanel.add(startButton); buttonPanel.add(exitButton); setLayout(new BorderLayout()); add(infoPanel, BorderLayout.CENTER); add(buttonPanel, BorderLayout.SOUTH); setSize(500, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == startButton) { // 开始售票 Thread[] threads = new Thread[3]; for (int i = 0; i < 3; i++) { threads[i] = new TicketSellingThread(i + 1); threads[i].start(); } } else if (e.getSource() == exitButton) { // 退出系统 System.exit(0); } } // 售票线程 private class TicketSellingThread extends Thread { private int window; public TicketSellingThread(int window) { this.window = window; } public void run() { while (true) { synchronized (TicketSellingSystem.this) { if (totalTickets == 0) { // 已售完 JOptionPane.showMessageDialog(TicketSellingSystem.this, "已售完!"); break; } if (soldTickets == 100) { // 售票已经完成 break; } // 售票 totalTickets--; soldTickets++; textAreas[window - 1].setText("售票窗口" + window + ":已售" + soldTickets + "张,余票" + totalTickets + "张"); } // 模拟售票过程 try { Thread.sleep((long) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { new TicketSellingSystem(); } } ``` 在程序中,我们首先定义了三个JLabel和三个JTextArea用来显示售票情况,以及两个JButton分别用来开始售票和退出系统。在开始售票按钮的事件处理方法中,我们创建了三个售票线程,并启动它们。售票线程中,我们使用synchronized关键字控制对售票数据(totalTickets和soldTickets)的访问,保证了线程安全性。同时,我们使用Thread.sleep()方法模拟了售票的时间过程。 注意,本程序中的售票数量和时间都是随机的,您可以根据需要进行调整。此外,本程序中并没有保存售票情况,您可以自行添加相关的数据结构和方法来实现。

相关推荐

最新推荐

recommend-type

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

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

java多线程之火车售票系统模拟实例

下面小编就为大家带来一篇java多线程之火车售票系统模拟实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
recommend-type

sasasasasasasasas

sasasasasasasasas
recommend-type

VBA按模板生成表格.xlsm

VBA按模板生成表格.xlsm
recommend-type

QRBiTCN双向时间卷积神经网络分位数回归区间预测(Matlab完整源码和数据)

1.Matlab实现QRBiTCN双向时间卷积神经网络分位数回归区间预测 2.包括点预测+概率预测曲线,MatlabR2023a及以上版本运行!评价指标包括R2、MAE、RMSE、MAPE、区间覆盖率picp、区间平均宽度百分比pinaw等。 3.直接替换Excel数据即可用,注释清晰,适合新手小白,直接运行main文件一键出图。 4.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 5.适用对象:大学生课程设计、期末大作业和毕业设计。 6.作者介绍:某大厂资深算法工程师,从事Matlab、Python算法仿真工作8年;擅长智能优化算法、神经网络预测、信号处理、元胞自动机等多种领域的算法仿真实验,更多仿真源码、数据集定制私信+。
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遗传算法自动优化指南:解放算法调优,提升效率

![MATLAB遗传算法自动优化指南:解放算法调优,提升效率](https://help-static-aliyun-doc.aliyuncs.com/assets/img/zh-CN/8487939061/p208348.png) # 1. MATLAB遗传算法概述** 遗传算法是一种受生物进化启发的优化算法,它模拟了自然选择和遗传的过程。在MATLAB中,遗传算法工具箱提供了丰富的函数和类,用于创建和运行遗传算法。 **1.1 遗传算法的基本原理** 遗传算法的工作原理如下: - **初始化:**创建由随机个体组成的初始种群。 - **评估:**根据目标函数计算每个个体的适应度。 -
recommend-type

failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar: invalid tar header

很抱歉听到这个问题。这个错误通常是由于Docker镜像损坏或Docker存储库中缺少所需的图层引起的。您可以尝试以下几种方法来解决这个问题: 1. 清理Docker镜像和容器:使用命令“docker system prune”清理不再使用的Docker对象。 2. 检查Docker存储库:确保您正在使用可靠的Docker存储库,并检查是否存在所有必需的图层。 3. 重新下载Docker镜像:如果您确定问题是由于损坏的Docker镜像引起的,则可以尝试重新下载Docker镜像。 4. 更新Docker版本:如果您使用的是旧版Docker,则可能会出现此问题。尝试更新到最新版本的Docke
recommend-type

JSBSim Reference Manual

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