售票管理系统。 有A、B、C三班车次,共20个售票员,每班车次各20张票,售完为止,每个售票员卖出5张票之后就休息,不再卖票,模拟该售票过程。Java包括图像化界面的代码

时间: 2024-03-05 09:55:05 浏览: 24
以下是一个简单的Java图像化界面的代码,用于展示售票进度和剩余票数: ```java import javax.swing.*; import java.awt.*; import java.util.ArrayList; public class TicketSystem extends JFrame { private JLabel aLabel, bLabel, cLabel; private ArrayList<JLabel> sellerLabels; public TicketSystem() { setTitle("售票管理系统"); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 车次信息展示 JPanel trainPanel = new JPanel(new GridLayout(1, 3)); aLabel = new JLabel("A车次剩余票数:20"); bLabel = new JLabel("B车次剩余票数:20"); cLabel = new JLabel("C车次剩余票数:20"); trainPanel.add(aLabel); trainPanel.add(bLabel); trainPanel.add(cLabel); add(trainPanel, BorderLayout.NORTH); // 售票员信息展示 JPanel sellerPanel = new JPanel(new GridLayout(5, 4)); sellerLabels = new ArrayList<>(); for (int i = 1; i <= 20; i++) { JLabel label = new JLabel("售票员" + i + ":已售0张,剩余5张"); sellerLabels.add(label); sellerPanel.add(label); } add(sellerPanel, BorderLayout.CENTER); setVisible(true); } // 更新车次信息 public void updateTrainInfo(String trainName, int remainingTickets) { switch (trainName) { case "A": aLabel.setText("A车次剩余票数:" + remainingTickets); break; case "B": bLabel.setText("B车次剩余票数:" + remainingTickets); break; case "C": cLabel.setText("C车次剩余票数:" + remainingTickets); break; } } // 更新售票员信息 public void updateSellerInfo(int sellerIndex, int soldTickets, int remainingTickets) { JLabel label = sellerLabels.get(sellerIndex - 1); label.setText("售票员" + sellerIndex + ":已售" + soldTickets + "张,剩余" + remainingTickets + "张"); } public static void main(String[] args) { TicketSystem ticketSystem = new TicketSystem(); } } ``` 接下来,您需要编写售票员类和车次类,以及主程序来模拟售票过程。以下是一个简单的示例代码: ```java import java.util.ArrayList; import java.util.List; import java.util.Random; public class TicketSystemSimulator { private static final int NUM_SELLERS = 20; private static final int MAX_TICKETS_PER_SELLER = 5; private static final int NUM_TRAINS = 3; private static final int NUM_TICKETS_PER_TRAIN = 20; private List<Seller> sellers; private List<Train> trains; private TicketSystem ticketSystem; public TicketSystemSimulator() { sellers = new ArrayList<>(); for (int i = 1; i <= NUM_SELLERS; i++) { sellers.add(new Seller(i)); } trains = new ArrayList<>(); for (int i = 1; i <= NUM_TRAINS; i++) { trains.add(new Train(i, NUM_TICKETS_PER_TRAIN)); } ticketSystem = new TicketSystem(); } public void start() { Random random = new Random(); while (!trains.isEmpty()) { for (Train train : trains) { // 检查该车次是否还有票 if (train.getRemainingTickets() <= 0) { ticketSystem.updateTrainInfo(train.getName(), 0); trains.remove(train); break; } // 售票员随机抢票 for (Seller seller : sellers) { if (!seller.isWorking()) { continue; } if (seller.getNumSoldTickets() >= MAX_TICKETS_PER_SELLER) { seller.setWorking(false); continue; } int numTicketsToSell = random.nextInt(3) + 1; // 每个售票员最多抢3张票 if (numTicketsToSell > train.getRemainingTickets()) { numTicketsToSell = train.getRemainingTickets(); } if (numTicketsToSell > MAX_TICKETS_PER_SELLER - seller.getNumSoldTickets()) { numTicketsToSell = MAX_TICKETS_PER_SELLER - seller.getNumSoldTickets(); } train.sellTickets(numTicketsToSell); seller.sellTickets(numTicketsToSell); ticketSystem.updateTrainInfo(train.getName(), train.getRemainingTickets()); ticketSystem.updateSellerInfo(seller.getId(), seller.getNumSoldTickets(), MAX_TICKETS_PER_SELLER - seller.getNumSoldTickets()); } } } } public static void main(String[] args) { TicketSystemSimulator simulator = new TicketSystemSimulator(); simulator.start(); } } class Seller { private int id; private int numSoldTickets; private boolean working; public Seller(int id) { this.id = id; this.numSoldTickets = 0; this.working = true; } public int getId() { return id; } public int getNumSoldTickets() { return numSoldTickets; } public boolean isWorking() { return working; } public void setWorking(boolean working) { this.working = working; } public void sellTickets(int numTickets) { numSoldTickets += numTickets; } } class Train { private int id; private String name; private int remainingTickets; public Train(int id, int numTickets) { this.id = id; switch (id) { case 1: name = "A"; break; case 2: name = "B"; break; case 3: name = "C"; break; } remainingTickets = numTickets; } public String getName() { return name; } public int getRemainingTickets() { return remainingTickets; } public void sellTickets(int numTickets) { remainingTickets -= numTickets; } } ``` 这段代码模拟了售票员随机抢票,每个售票员最多抢3张票,每个售票员卖出5张票之后就休息,不再卖票的过程。每售出一张票,更新界面信息。 希望这份代码能帮助到您!

相关推荐

最新推荐

recommend-type

ASP.NET火车票网上售票系统

系统包括:管理员登陆,基础信息管理,票务信息管理,信息查询,订单管理,新闻动态更新等模块,实现了车次查询,票价查询,车票预定,订单查询,新闻动态浏览等功能,为旅客提供了一个火车票查询预定的信息平台。...
recommend-type

铁路订票系统查询VB ADO ACCESS

摘 要 如今,电子计算机技术得到了前所未有的发展和应用,随着时代的进步,科技的发展,计算机的应用已经非常普遍。... 只需数名信息录入员即可操作管理系统,节省大量人力; 3 . 可以迅速查询所需信息。
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取整函数与Web开发的作用:round、fix、floor、ceil在Web开发中的应用

![MATLAB取整函数与Web开发的作用:round、fix、floor、ceil在Web开发中的应用](https://img-blog.csdnimg.cn/2020050917173284.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2thbmdqaWVsZWFybmluZw==,size_16,color_FFFFFF,t_70) # 1. MATLAB取整函数概述** MATLAB取整函数是一组强大的工具,用于对数值进行
recommend-type

我想做python的算法工程师,我应该学什么?学习的顺序是什么?网上有什么推荐的免费课程吗?回答具体精确一点不要太笼统

对于想要成为 Python 算法工程师的人来说,他们应该先从掌握 Python 的基础语法开始,然后学习数据结构和算法,并且要深入了解 Python 中的一些科学计算和数据处理库,比如 NumPy、Pandas 等。 学习的顺序可以是先学习基础语法和编程技巧,然后再学习数据结构和算法相关的知识,最后深入了解数据处理和科学计算相关的库。 对于免费课程的推荐,我建议你可以先去 Coursera、edX、Udacity 等网站上寻找相关课程,这些网站上有很多优质的 Python 编程和算法课程,你可以根据自己的需求和学习进度进行选择。此外,还可以考虑一些在线编程网站,如 HackerRank、L
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。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

MATLAB取整函数与数据分析的应用:round、fix、floor、ceil在数据分析中的应用

![MATLAB取整函数与数据分析的应用:round、fix、floor、ceil在数据分析中的应用](https://img-blog.csdnimg.cn/img_convert/a12c695f8b68033fc45008ede036b653.png) # 1. MATLAB取整函数概述 MATLAB提供了一系列取整函数,用于对数值进行四舍五入或截断操作。这些函数包括: - `round`:四舍五入到最接近的整数 - `floor`:向下取整到最小的整数 - `ceil`:向上取整到最大的整数 - `fix`:截断小数部分,返回整数部分 这些函数在数据分析、可视化和特定领域(如金融
recommend-type

r语言如何调用split函数按照factor分开后得到的dataframe

可以使用如下语句: split_dataframe <- split(original_dataframe, original_dataframe$factor_column) 其中,original_dataframe为待拆分的原始数据框,$factor_column为按照哪一列分组(即因子列),split_dataframe为拆分后得到的数据框列表。