Java实现火车票售票系统

这篇具有很好参考价值的文章主要介绍了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;
    }

    @Override
    public 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;
    }

    @Override
    public 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中的票的起始站,票的数量能否自定义呢,更灵活,符合实际场景?文章来源地址https://www.toymoban.com/news/detail-505262.html

到了这里,关于Java实现火车票售票系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 火车票车票查询-Python

    一、相关代码 二、结果 三、注意12306城市对应缩写city.json的获取 1.相关链接:12306城市名对应字母缩写 - 悟透 - 博客园 (cnblogs.com) 2.在桌面创建文本文件,复制内容到文本文件中,保存后,更改后缀为.json,放到与代码同级的目录中 四、过程请查看代码注释  

    2024年01月24日
    浏览(39)
  • 基于android studio开发的火车票购票系统app,android移动开发课设,毕业设计

    基于android studio开发实现火车票购票系统app 适用于android移动开发学习项目,课程设计,毕业设计等 开发工具:android studio 或者intellij idea专业版 操作系统:windows10 java: JDK11 构建工具Gradle : gradle-7.0.0 模拟器AVD:pixel 3XL API 30 具体AVD配置详情如下 APP功能 该APP包含17个Activity,每

    2024年02月09日
    浏览(46)
  • python项目练习——28.自动抢火车票脚本

    确定抢购信息 : 出发站:例如,\\\"北京\\\" 到达站:例如,\\\"上海\\\" 出发日期:例如,\\\"2024-05-01\\\" 确定登录12306账号信息 : 用户名 密码 环境准备 : 安装Python编程环境 安装相关第三方库:requests、selenium等 网页自动化登录 : 使用Selenium模拟浏览器操作,实现自动登录12306账号 查询

    2024年04月23日
    浏览(69)
  • 手把手教你用python一键抢12306火车票(附代码)

    哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕… 然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难! 那么作为程序猿的你,当然要用程序猿的方式来抢票!下面分享用python来抢票! 城市cookie可根据具体需求自

    2024年02月15日
    浏览(54)
  • 自动化测试、爬虫、秒杀抢购、数据获取新方案,利用docker镜像运行安卓云手机,同时模拟运行多个手机进行数据抓取,可实现火车票、演唱会门票、茅台、直播、iPhone手机自动下单等各种多任务

    自动化测试、爬虫、秒杀抢购、数据获取新方案,利用docker镜像运行安卓云手机,同时模拟运行多个手机进行数据抓取,可实现火车票、演唱会门票、茅台、直播、iPhone手机自动下单等各种多任务。 这里选择的是Redroid,ReDroid(Re mote an Droid)是一个 GPU 加速的 AIC(Android In

    2024年02月03日
    浏览(58)
  • vb火车站售票管理系统设计与实现

    一个大型的计算机管理系统必须有一个正确的设计指导思想,通过合理的选择数据结构,操作系统以及开发环境,构成一个完善的网络系统,才能充分发挥计算机信息管理优势。现代化的车站售票是集预定车票、售票 、退票、车次查询、报表及其他各种服务,车站售票组织庞

    2024年02月09日
    浏览(39)
  • 基于JSP微信小程序汽车票订票售票系统设计与实现

    第1步(数据库操作):     导入sql数据库 第2步(网站发布):     使用ideal导入管理系统     设置根目录下 conn.jsp的数据库连接 和 网址地址(小程序使用)     运行站点,登录后台测试 第3步(小程序发布):     导入小程序     设置app.js后台管理系统的网址     微信

    2024年02月11日
    浏览(39)
  • 基于java微信小程序景区景点售票系统设计与实现

    开发概要 小程序开发:微信开发者工具(MINA框架) 后台环境:JDK1.8 + Tomcat8 后台开发语言:Java 后台开发框架:springboot 后台模板引擎:Thymeleaf 后台开发工具:Idea2020 数据库:mysql8 数据库管理工具:navicat 其他开发语言:html + css +javascript

    2024年02月11日
    浏览(35)
  • 基于Java(SpringBoot框架)毕业设计作品成品(05)旅游景区景点售票订票系统设计与实现

    博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、PPT、论文模版

    2024年02月08日
    浏览(41)
  • 基于Java+SpringBoot+Vue前后端分离电影院售票订票系统设计与实现(有演示视频)

    博主介绍: ✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品: 《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包