首页 > 编程语言 >Java电影订票管理系统

Java电影订票管理系统

时间:2023-05-14 22:32:54浏览次数:46  
标签:Java 商家 管理系统 电影 订票 b1 b2 movie 集合

电影订票系统主要是为了实现电影院的电影信息能够实时的展现上映电影信息以及对顾客能够根据上映电影进行网上购票支付的系统。一个经典的电影订票系统一般都需要提供良好的交互界面页面,但由于还没有学习前端方面的知识,所以交互仍在控制台中。从功能上来看,需要包括网民可以通过电影名称、进行查询电影相关信息,选好好可以进行购票支付,注册成功的商家可以对自己的电影院进行定期维护,其中包括添加新的电影、编辑修改电影、下架电影等功能。最后用户可以根据自己的观感对电影进行评分。系统整体的功能模块图如下:

Java电影订票管理系统_电影购票系统

首先需要对系统中存在的事物进行抽象成具体的类,比如该电影订票管理系统中简单分析应该有用户(User),而用户又分为客户(Customer)和商家(Business),所以关系如下面类图:

Java电影订票管理系统_电影购票系统_02

其次电影系统中还该有电影抽象成一个单独的类,定义一些电影的属性,比如:片名(movieName),主演(actor),时长(time),票价(price),余票(number),放映时间(startTime)等。

把类分析定义好后,现在需要一步步完善系统逻辑,首先需要在控制台显示一个简易的登录页面,如下图:

Java电影订票管理系统_电影购票系统_03

这一点相信大家都会,不在赘述,其次就是考虑登录界面上的功能如何实现,登录逻辑是需要输入用户名和密码,与已有的用户信息进行匹配,因此这里会使用到ArrayList集合用于存放用户对象信息,包括(客户和商家),如果是新用户必须注册后才能登录,为了方便测试我在程序里使用静态代码块提前录入了一些用户信息,以便可以直接登录。静态代码块如下:

// 初始化客户和商家信息

   static {

       Customer c1 = new Customer();

       c1.setLoginName("很菜的jason");

       c1.setPassword("123456");

       c1.setName("罗易寒");

       c1.setSex('男');

       c1.setTel("159082");

       c1.setMoney(1000);

       USERS.add(c1);



       Customer c2 = new Customer();

       c2.setLoginName("很暖的snow");

       c2.setPassword("789100");

       c2.setName("江雪儿");

       c2.setSex('女');

       c2.setTel("137803");

       c2.setMoney(5000);

       USERS.add(c2);


       Business b1 = new Business();

       b1.setLoginName("黑心包租婆");

       b1.setPassword("567890");

       b1.setName("赵敏");

       b1.setSex('女');

       b1.setTel("158848");

       b1.setMoney(100000);

       b1.setShopName("黑心环球影城");

       b1.setShopAddress("建设路一段");

       USERS.add(b1);

       List<Movie>  movies1 = new ArrayList<>(); // 每个商家都对应一个电影集合 用于存放电影信息

       MAPS.put(b1,movies1);


       Business b2 = new Business();

       b2.setLoginName("热心包租公");

       b2.setPassword("666666");

       b2.setName("赵无极");

       b2.setSex('男');

       b2.setTel("134382");

       b2.setMoney(10000);

       b2.setShopName("暖心环球影城");

       b2.setShopAddress("建设路二段");

       USERS.add(b2);

       List<Movie>  movies2 = new ArrayList<>(); // 每个商家都对应一个电影集合 用于存放电影信息

       MAPS.put(b2,movies2);

   }

登录逻辑中最重要的就是遍历用户集合,判断输入的用户名和密码是否存在和匹配,如果存在还需要对该对象类型进行判定,因为Customer和Business实现的功能逻辑不同。到此登录逻辑就阐述完了,至于注册就大家照猫画虎自行理解(实在太简单)。该阶段运行图如下:

Java电影订票管理系统_电影购票系统_04

 具体的展示全部影片信息功能封装成方法:showAllMovies(),根据电影名称查询影片信息封装成方法:queryMovie(),购票功能封装成方法:buyMovie(),这里选择比较重要的两个方法(queryMovie()和buyMovie())进行详细分析:首先查询电影需要根据用户输入的电影名称在已有的存放商家和电影信息的Map集合中进行匹配啊,在这里需要新建一个临时Map容器,用来存放查找到的商家和匹配的电影信息,然后返回该集合,判断该集合是否为空,如果不为空就打印临时容器其中的信息,若为空则提示用户‘‘查无此片!’’。

该方法核心逻辑代码: // 通过电影查询具有该电影的商家

   private static Map<Business,Movie> getBusiness(String name) {

       tempMap.clear();

       for (Map.Entry<Business, List<Movie>> businessListEntry : MAPS.entrySet()) {

           List<Movie> movies = businessListEntry.getValue();

           for (Movie movie : movies) {

               if(movie.getMovieName().equals(name)){

                   Business business = businessListEntry.getKey();

                   tempMap.put(business,movie);

               }

           }

       }

       return tempMap;

   }

查询完想看的电影接下来就是买票去看电影了,用户选择购票,输入具体购买电影票的店铺,然后就进行查询该店铺中有哪些具体的电影,选择你要购买的电影,输入购买的张数,然后根据购买的单价和张数扣除客户相应的金额,同时对应商家的增加该客户扣除的金额。

该方法的核心逻辑代码:

System.out.println("请输入你要购买的电影票的名称:");

                   String movieName = Sc.nextLine();

                   // 遍历查找

                   for (Movie movie : movieList) {

                       if(movie.getMovieName().equals(movieName)) {

                           // 找到了,展示影片信息

System.out.println(movie.getMovieName() + "\t\t\t\t\t" + movie.getActor() + "\t\t\t" + movie.getPrice() +"\t\t\t" + movie.getNumber() + "\t\t" + slf.format(movie.getStartTime()) + "\t\t\t\t\t\t" + movie.getTime());

                           System.out.println("请输入你要购买电影票的张数:");

                           int number = Sc.nextInt();

                           // 判断余票是否足够

                           if(number > movie.getNumber()) {

                               // 票数不够

System.out.println("电影票数不足,你最多可买" + movie.getNumber());

                           } else{

                               // 电影票足够,再判断客户账户是否足够

                               if(USER.getMoney() >= number * movie.getPrice()) {

// 客户账户足够,进行转账操作,客户余额减少,商家余额增加,电影票数减少

movie.setNumber(movie.getNumber() - number);

USER.setMoney(USER.getMoney() - number * movie.getPrice());

business.setMoney(business.getMoney() + number * movie.getPrice());

System.out.println("购票成功,已支付" + number * movie.getPrice() + "元,余额为" + USER.getMoney());

                                   return;//结束当前方法

                               } else{

                                   // 客户账户余额不足

                                   System.out.println("余额不足,无法购票!");

                               }

                           }

                       }

                   }

                   // 没有找到该电影

                   System.out.println("对不起,你选择的电影不存在!");

说完客户的功能界面现在来看商家界面如图:

Java电影订票管理系统_电影购票系统_05

  展示详情封装成方法:showBusinessInfo()----用来显示当前商家的详细信息;上架电影封装成方法:addMovie();下架电影封装成方法deleteMovie(),修改电影封装成方法updateMovie()。重点讲解添加,删除,修改三个功能,其中的展示功能就和之前一样比遍历存放电影信息的Map集合取出即可。添加功能,需要通过当前的商家对象拿到对应Map集合中的电影信息,通过输入向电影集合中添加新的数据,唯一需要注意的是添加电影开始时间的时候会对输入的时间字符串进行转化,需要进行异常处理。删除功能,同理需要通过当前的商家对象拿到对应Map集合中的电影信息,不过在删除之前需要对当前电影集合进行判断当前商家店铺的电影集中是否有电影,才能通过输入电影名进行删除操作。修改功能,也是同上拿到对应集合,不过因为输入的都是字符串类型,需要根据需要对数据进行类型转换再存入集合。

电影上架功能如图:

Java电影订票管理系统_电影购票系统_06

Java电影订票管理系统_电影购票系统_07

电影修改功能如图:

Java电影订票管理系统_电影购票系统_08

电影删除功能如图:

Java电影订票管理系统_电影购票系统_09

本系统到此基本功能的介绍和实现就基本结束。如果想了解跟多细节请查看参考源代码文件。






标签:Java,商家,管理系统,电影,订票,b1,b2,movie,集合
From: https://blog.51cto.com/u_15101214/6275229

相关文章

  • 老杜 JavaWeb 讲解(六) ——Servlet对象的生命周期
    (八)Servlet对象的生命周期对应视频:10-Servlet对象的生命周期8.1什么是Servlet对象生命周期?Servlet对象什么时候被创建。Servlet对象什么时候被销毁。Servlet对象创建了几个?Servlet对象的生命周期表示:一个Servlet对象从出生在最后的死亡,整个过程是怎样的。8.2Servle......
  • java数组
    数组数组是相同类型数据的有序集合数组创建dataType[]arrayName或者dataTypearraName[];效果相同但是前者为首选例如:int[]a=newint[10];//声明+创建分配空间intb[]=newint[10];a[0]=1;//获取数组长度array.length内存分析java内存:堆:存放new的对象和......
  • Errors:java: 程序包org.springframework.stereotype不存在(解决方法)
    错误截图错误描述java:程序包org.springframework.stereotype不存在解决更改maven项目运行时的编译方式为maven找到File->Settings->Maven->Runner,进行勾选......
  • c#轻量级高并发物联网服务器接收程序源码(仅仅是接收硬件数据程序,没有web端,不是java,协
    c#轻量级高并发物联网服务器接收程序源码(仅仅是接收硬件数据程序,没有web端,不是java,协议自己写,如果问及这些问题统统不回复。),对接几万个设备没问题,数据库采用ef6+sqlite,可改ef+MySQL.该程序只是源码使用示例,里面有使用方法,自己研究,难度属中上层不建议新手拿YID:5999612973416375......
  • java中的一点知识
    1importjavax.swing.*;这是java导入包的语法,表示导入swing这个包的所有类和接口swing是图形可视包,导入这个包后才能进行GUI图形化软件的开发import   代表“引入”javax.swing 代表“路径”(在javax文件夹下的swing文件夹)代表“全部”总结:表示引用javax文件夹......
  • java—获取某月的第一天和最后一天
    //获取给定年、月的第1天LocalDatefirstDay=LocalDate.of(year,month,1);//获取该月的最后1天(https://java2blog.com/last-day-of-month-java)LocalDatelastDay=firstDay.withDayOfMonth(firstDay.getMonth().......
  • 01-面试必会-JAVA基础篇
    1.Final有什么用?被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的2.什么是重载(Overload)和重写(Override)?重载:发生在同一个类中,方法名相......
  • Java 网络编程 —— 非阻塞式编程
    线程阻塞概述在生活中,最常见的阻塞现象是公路上汽车的堵塞。汽车在公路上快速行驶,如果前方交通受阻,就只好停下来等待,等到公路顺畅,才能恢复行驶。线程在运行中也会因为某些原因而阻塞。所有处于阻塞状态的线程的共同特征:放弃CPU,暂停运行,只有等到导致阻塞的原因消除,才能恢复运行,......
  • JavaSE面试题【长期更新】
    面试题1包装类型的缓存机制了解过么包装类型的缓存机制了解过么/*ByteShortIntegerLong底层维护一个[-128,127]的缓存数组来提升性能Character底层维护一个[0,127]的数组Boolean包装类型直接返回true或者false*/2自动装箱和拆箱底层原理答案/*装箱将......
  • java基于springboot+vue的房屋租赁管理系统、大学生租房管理系统,附源码+数据库+lw文档
    1、项目介绍根据大学生租房系统的功能需求,进行系统设计。前台功能:进入系统可以实现首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等功能进行操作;后台主要是管理员,房主和用户,主要功能包括首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管......