面向对象设计大作业——火车售票系统

面向对象设计大作业——火车售票系统

Git地址

Gitee仓库

程序运行效果

用户注册登录:
面向对象设计大作业——火车售票系统
按始发地、目的地查询购票:
面向对象设计大作业——火车售票系统
按车次号查询购票:
面向对象设计大作业——火车售票系统
查看已购车票,退票,注销:
面向对象设计大作业——火车售票系统
管理员登录,查看所有用户信息:
面向对象设计大作业——火车售票系统
录入车次:
面向对象设计大作业——火车售票系统
删除车次:
面向对象设计大作业——火车售票系统
修改车次信息:
面向对象设计大作业——火车售票系统
查看所有车次:
面向对象设计大作业——火车售票系统
管理员注销:
面向对象设计大作业——火车售票系统

系统结构功能图

面向对象设计大作业——火车售票系统

系统描述

点击运行火车售票系统软件,用户输入用户名密码,或者直接注册一个账号。登录成功后进入用户界面,可以选择按始发地、目的地或者车次号查询购票,点击用户信息里面的已购车票,可以查看已经购买的车票和进行退票,操作完成后进行注销。管理员输入唯一的账号进行登录,可以点击功能查看所有用户信息或者注销返回登录界面。管理员可以录入车次,修改车次信息,删除车次和查看所有车次信息

UML类图

面向对象设计大作业——火车售票系统

MVC模式

MVC模式中,M指Model(业务模型),V指View(视图),C指Controller(控制器),其中Controller也就是事件监听器。就让我们拿
MVC模式的好处:
1.代码耦合度低。每个模块各司其职,M、V、C分别负责不同的功能,对界面的操作代码和业务逻辑代码之间分离。
2.可以做到分层开发。编写业务逻辑代码的程序员不用考虑界面操作,编写控制器的只需要处理与view交互的数据,并选择合适的业务逻辑代码处理数据即可。
3.扩展性和可维护性高。由于各功能模块之间代码分离,修改某部分代码时只要处理好接口,就不会影响到其他代码。
面向对象设计大作业——火车售票系统

MVC模式在程序中的体现

面向对象设计大作业——火车售票系统

DAO模式

DAO模式,是将业务逻辑与数据的具体访问相分离的一种模式,它可以根据后台数据存储方式的不同,定义不同的实现方法。例如,编写GUI相关代码时,无需考虑数据操作的具体实现方法,只需要调用相应DAO方法。如果底层数据存储方式需要改变,只要增加DAO接口的新实现类即可,有利于不同人员的分工合作,提高效率。
面向对象设计大作业——火车售票系统
面向对象设计大作业——火车售票系统
面向对象设计大作业——火车售票系统

项目包结构和关键代码

包结构

面向对象设计大作业——火车售票系统

关键代码

用户进行购票:

private void purchaseActionPerformed(java.awt.event.ActionEvent evt) {
   //GEN-FIRST:event_purchaseActionPerformed
        // TODO add your handling code here:
        int[] selectRows=trainNumberInformation.getSelectedRows();
        AlreadyBoughtTheTicketOperationExcelImpl alreadyBoughtTheTicketOperationExcel = new AlreadyBoughtTheTicketOperationExcelImpl();
        TrainNumberInfoOperationExcelImpl trainNumberInfoOperationExcel = new TrainNumberInfoOperationExcelImpl();
        DefaultTableModel model=(DefaultTableModel)trainNumberInformation.getModel();
        TableModel model1=trainNumberInformation.getModel();
        for (int i = selectRows.length - 1; i >= 0; i--) {
   
            int selectRow = selectRows[i];
            if (selectRow!=-1) {
   
                int count=(Integer) model1.getValueAt(selectRow,5);
                count--;
                AlreadyBoughtTheTicket alreadyBoughtTheTicket1=new AlreadyBoughtTheTicket(this.user.getUserName(),this.user.getPassword(),(String)model1.getValueAt(selectRow,0),(String)model1.getValueAt(selectRow,1),(String)model1.getValueAt(selectRow,2),(String)model1.getValueAt(selectRow,3),(String)model1.getValueAt(selectRow,4),1,(Double) model1.getValueAt(selectRow,6));
                if ( alreadyBoughtTheTicketOperationExcel.purchase(alreadyBoughtTheTicket1)==null) {
   
                    JOptionPane.showMessageDialog(null, "该票已经购买过!,请重新选择");
                    break;
                } else {
   
                    TrainNumberInfo trainNumberInfo=new TrainNumberInfo((String)model1.getValueAt(selectRow,0),(String)model1.getValueAt(selectRow,1),(String)model1.getValueAt(selectRow,2),(String)model1.getValueAt(selectRow,3),(String)model1.getValueAt(selectRow,4),count,(Double) model1.getValueAt(selectRow,6));
                    trainNumberInfoOperationExcel.reduce(trainNumberInfo);
                }
                if (count== 0) {
   
                    model.removeRow(selectRow);
                    break;
                }
                trainNumberInformation.setValueAt(count,selectRow,5);
            }
        }
    }//GEN-LAST:event_purchaseActionPerformed

用户进行退票:

private void refundActionPerformed(java.awt.event.ActionEvent evt) {
   //GEN-FIRST:event_refundActionPerformed
        // TODO add your handling code here:
        AlreadyBoughtTheTicket alreadyBoughtTheTicket1=null;
        TrainNumberInfoOperationExcelImpl trainNumberInfoOperationExcel = new TrainNumberInfoOperationExcelImpl();
        AlreadyBoughtTheTicketOperationExcelImpl alreadyBoughtTheTicketOperationExcel=new AlreadyBoughtTheTicketOperationExcelImpl();
        int[] selectRows=alreadyBoughtTheTicket.getSelectedRows();
        DefaultTableModel model=(DefaultTableModel)alreadyBoughtTheTicket.getModel();
        TableModel model1=alreadyBoughtTheTicket.getModel();
        for (int i = selectRows.length - 1; i >= 0; i--) {
   
            int selectRow = selectRows[i];
            if (selectRow!=-1) {
   
                int count=(Integer) model1.getValueAt(selectRow,5);
                count--;
                alreadyBoughtTheTicket1=new AlreadyBoughtTheTicket(this.user.getUserName(),this.user.getPassword(),(String)model1.getValueAt(selectRow,0),(String)model1.getValueAt(selectRow,1),(String)model1.getValueAt(selectRow,2),(String)model1.getValueAt(selectRow,3),(String)model1.getValueAt(selectRow,4),(Integer) model1.getValueAt(selectRow,5),(Double) model1.getValueAt(selectRow,6));
                alreadyBoughtTheTicketOperationExcel.refund(alreadyBoughtTheTicket1);
                TrainNumberInfo trainNumberInfo=new TrainNumberInfo((String)model1.getValueAt(selectRow,0),(String)model1.getValueAt(selectRow,1),(String)model1.getValueAt(selectRow,2),(String)model1.getValueAt(selectRow,3),(String)model1.getValueAt(selectRow,4),1,(Double) model1.getValueAt(selectRow,6));
                trainNumberInfoOperationExcel.add(trainNumberInfo);
                if (count== 0) {
   
                    model.removeRow(selectRow);
                    break;
                }
                alreadyBoughtTheTicket.setValueAt(count,selectRow,5);
            }
        }
    }//GEN-LAST:event_refundActionPerformed

特色

该程序的所有信息都是通过excel文档进行存储,能够方便地写入和读取信息,不需要担心像txt文档存储格式的问题,所用到的是阿里巴巴开发的EasyExcel工具,它能够实现对excel文档快速,方便地进行一系列操作。
如果对这个感兴趣,可以观看教学视频
该程序实现了从jar到exe的转换,可以在任一一台电脑安装使用,即使该电脑没有安装jdk,都可以使用。
实现方法,参考以下链接
https://blog.csdn.net/mawei7510/article/details/89638126
https://blog.csdn.net/mawei7510/article/details/89675034

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114440.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux下更新pip3「建议收藏」

    本机linux下有python(表示python2)和python3,其中python3对应pip3。1.首先下载pip#wgethttps://bootstrap.pypa.io/get-pip.py如果没有wget,先安装wget#yum-yinstallwget在python3下执行脚本#python3get-pip.py#执行成功后查看版本…

    2022年4月11日
    230
  • 大数据学习方法

    大数据学习方法有很多学习大数据的朋友,在初期学习时,通常会对如何学习而感到迷茫。我经常在知乎上收到朋友关于如何入门、如何规划学习大数据、大数据的学习流程是什么的一些问题。今天我就粗浅的总结几点学习大数据方法。一、兴趣建立兴趣是可以让一个人持续关注一个事物的核心动力,那么兴趣的培养就非常重要了。如果你把写程序单纯作为赚钱手段,久而久之疲劳感会越来越强,会给今后的工作和生活带来很大的压力。那么如何建立起…

    2022年6月4日
    33
  • Zuul网关集群_zuul网关

    Zuul网关集群_zuul网关1,Zuul网关集群原理![在这里插入图片描述](https://img-blog.csdnimg.cn/20201019212045203.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4ODQ1Mjcx,size_16,color_FFFFFF,t_70#pic_center)…

    2022年8月15日
    6
  • Source Insight 3.X 插件支持utf8,完美解决中国乱码,连接到美丽的轮廓

    Source Insight 3.X 插件支持utf8,完美解决中国乱码,连接到美丽的轮廓

    2022年1月13日
    226
  • Java实现矩阵转置

    Java实现矩阵转置//矩阵转置classArrayUtil{ //输入矩阵和其列大小 publicstaticint[][]transpose(int[][]arr,intcolumn){ int[][]arr2=newint[column][arr.length]; for(inti=0;i<arr.length;i++){ intk=0…

    2022年6月17日
    83
  • 卡巴斯基爱好者见面会 卡巴斯基先生与卡fans亲密互动

    卡巴斯基爱好者见面会 卡巴斯基先生与卡fans亲密互动3月31日,国际著名的技术先锋人物、领先的反病毒厂商卡巴斯基实验室的创始人&CEO尤金•卡巴斯基由莫斯科飞抵北京。阔别中国两年之久,尤金抵京后做的第一件事就是出席与卡巴fans的见面会,与其“

    2022年7月2日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号