Java实现火车票售票系统
一.思路
首先需要一个火车票实体Ticket,用来充当火车票角色;
其次需要一个单例的售票系统TicketSystem,用来售卖火车票;
最后需要具体的售票处Window,用来买票;
二.实现
1.火车票实体Ticket
class Ticket {// 起始站private String start;// 终点站private String end;// 票价,用BigDecimal防止后续需要计算,能保证精度private BigDecimal price;public Ticket() {}public Ticket(String start, String end, BigDecimal price) {this.start = start;this.end = end;this.price = price;}public String getStart() {return start;}public String getEnd() {return end;}public BigDecimal getPrice() {return price;}public void setStart(String start) {this.start = start;}public void setEnd(String end) {this.end = end;}public void setPrice(BigDecimal price) {this.price = price;}@Overridepublic String toString() {return "Ticket{" +"start='" + start + '\'' +", end='" + end + '\'' +", price=" + price +'}';}
}
2.单例线程安全的售票系统
// 单例系统,双重校验锁
class TicketSystem {private volatile static TicketSystem system = new TicketSystem();// 存储所有车票,其中CopyOnWriteArrayList保证线程安全读写private CopyOnWriteArrayList<Ticket> list = new CopyOnWriteArrayList<>();// 给车票赋值,类加载前就给list车票集合赋值{for (int i = 0; i < 100; i++) {list.add(new Ticket("北京" + i, "深圳" + i, new BigDecimal(i * 200 + 100)));}}private TicketSystem() {}// 双重锁校验生成系统对象public static TicketSystem getSystem() {if (system == null) {synchronized (TicketSystem.class) {if (system == null) {system = new TicketSystem();}}}return system;}// 买票方法public Ticket sellTicket() {try {return list.remove(0);} catch (IndexOutOfBoundsException e) {// 发生异常说明票卖完了return null;}}
}
3.售票窗口WIndow
// 当前窗口
class Window extends Thread {//当前窗口名称private String winName;public Window(String winName) {this.winName = winName;}public String getWinName() {return winName;}public void setWinName(String winName) {this.winName = winName;}@Overridepublic void run() {this.sellTicket();}// 买票系统public void sellTicket() {TicketSystem system = TicketSystem.getSystem();while (true) {Ticket ticket = system.sellTicket();if (ticket != null) {System.out.println("从" + this.winName + "售出一张票" + ticket);} else {System.out.println(this.winName + "票卖光了");break;}}}
}
测试类:
class Test {public static void main(String[] args) {for (int i = 0; i < 3; i++) {Window window = new Window("北京" + i + "站");window.start();}}
}
总结:运用了双重校验锁的单例模式写售票系统,实现了类的复用,不会被频繁的创建和销毁,节省了时间和空间资源。通过CopyOnWriteArrayList实现线程安全的集合。
拓展:TicketSystem中的票的起始站,票的数量能否自定义呢,更灵活,符合实际场景?
Java实现火车票售票系统相关推荐
- java火车票订票系统 论文_毕业设计(论文)-基于JAVA的火车票售票系统.doc
毕业设计(论文)-基于JAVA的火车票售票系统.doc 还剩 45页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点 ...
- java火车票售票系统_基于java的火车票售票系统,界面Swing
[实例简介] 本系统是一个基于java的火车票管理系统,用Swing显示信息. 开发环境Eclipes,mysql数据库 用户分为 用户和管理员. Main.java 为程序入口 [实例截图] [核心 ...
- java火车票售票系统,火车购票系统,系统实现了用户会员管理、火车车次管理、火车座位管理、系统公告管理、火车票退票、火车票换乘、换乘查询、直达查询、乘车人管理、订单管理、个人中心管理等
火车票售票系统 java火车票售票系统,系统实现了用户会员管理.火车车次管理.火车座位管理.系统公告管理.火车票退票.火车票换乘.换乘查询.直达查询.乘车人管理.订单管理.个人中心管理等. 数据库采用 ...
- Java Web之从零开始开发火车票售票系统( 一 )
本章将实现用户后台管理的添加(已完成).查询(已完成).修改(已完成).删除(已完成)功能.(由于前期处于测试阶段,未对数据进行限制,后期将进行完善) 系统开发平台 任务陈述 创建数据库(trainb ...
- 数据库课程设计——MySQL火车票售票系统
数据库课程设计--火车票售票系统 很烦数据库课程设计?阅读本篇文章会让你不那么烦躁~ 话不多说先放源代码: https://github.com/shadowings-zy/TrainTicketsS ...
- 基于python的火车票订票系统的设计与实现_火车票售票系统的设计与实现毕业论文.doc...
郑州轻工业学院 本科毕业设计(论文) 题 目: 火车票售票系统的设计与实现 . 学生姓名: . 院 (系): 计算机与通信工程学院 . 专业班级: 网络工程(物联网技术13-01) . 学 号: . ...
- 基于JAVA网上汽车售票系统计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA网上汽车售票系统计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA网上汽车售票系统计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
- 基于python的火车票售票系统/基于django火车票务网站/火车购票系统
摘 要 随着科学技术的飞速发展,社会的方方面面.各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,火车票售票系统当然也不能排除在外.火车票售票系统是以实际运用为开发背景,运用软件工 ...
- 数据库课程设计——火车票售票系统
摘要 数据库课程设计的题目,设计了一个火车票售票系统,实现了列车信息查询,车票查询及购买,订单查询,个人信息管理等功能,数据是从12306爬取的真实数据. 项目链接 前端项目链接:https://gi ...
最新文章
- Github for Windows使用图文教程
- HIN2Vec:异质信息网络中的表示学习 | PaperDaily #18
- php模拟表单提交登录,PHP模拟表单的post请求实现登录
- 还服务器网站被k,导致网站被K的主要原因,看看你有没有中招!
- 计算机算法可分为两大类别_广东元耀:您了解过防水淋雨试验箱可分为哪几种类别吗?...
- 前端—每天5道面试题(十三)
- 下载 针式PKM V9.08 版
- windows核心编程之DIPS工具学习总结
- 系统设计-HIPO图
- idea使用教程-安装
- 寻找“最好”(2)——欧拉-拉格朗日方程
- matlab绘制蜗牛圈圈图,Matlab实现的图像中的圆、矩形、正方形等形状识别
- 移动新魔百和M302A-YS代工_卡刷固件包
- android跳转到锁屏及后台管理界面,Android 锁屏状态下后台弹出界面
- python 全栈开发,Day88(csrf_exempt,ES6 快速入门,Vue)
- excel中vlookup函数的使用方法_Excel教程:函数VLOOKUP实用技巧
- Solidworks部分报错及解决方法
- latex tips 偏导数符号 单词partial+倒三角 \nabla
- GDPR: Impact to Your Data Management Landscape: Part 2
- 第九章-项目人力资源管理
热门文章
- C 小树快长高 SDUT
- “字节一年,人间三年!”
- 拯救移动硬盘实录 - 参数不正确 卡系统
- 03-STM32+BC26丨260Y远程升级篇(自建物联网平台)-功能测试-STM32+BC26丨260Y实现利用http远程更新STM32程序(单片机程序检查更新)
- 新冠肺炎疫情引发空前应用需求,Dynatrace助企业轻松应对
- Android硬件加速原理与实现
- 【安卓】rxjava2的disposable
- RxJava(八)Disposable和Transformer
- 17个不得不知的WIN7快捷键
- Fixed There was a problem with the editor 'vi'