伪代码
系统的角色类准备

用户购票

用户评分

商家功能

首页设计

先封装


public class Business extends User{// 店铺名称private String shopName;// 店铺地址private String address;public String getShopName() {return shopName;}public void setShopName(String shopName) {this.shopName = shopName;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}
/**用户类(客户和商家的父类 )*/
public class User {private String loginName;  // 假名  不能重复private String userName; // 真名private String passWord;private char sex;private String phone;private double money;public User(){}public User(String loginName, String userName, String passWord, char sex, String phone, double money) {this.loginName = loginName;this.userName = userName;this.passWord = passWord;this.sex = sex;this.phone = phone;this.money = money;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassWord() {return passWord;}public void setPassWord(String passWord) {this.passWord = passWord;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}
}
import MovieSystem;import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.List;public class Movie {private String name;private String actor;private double time;private double price;private int number; // 余票private Date startTime; // 放映时间public Movie() {}public Movie(String name, String actor, double time, double price, int number, Date startTime) {this.name = name;this.actor = actor;this.time = time;this.price = price;this.number = number;this.startTime = startTime;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getActor() {return actor;}public void setActor(String actor) {this.actor = actor;}public double getScore() {List<Double> scores = MovieSystem.MOVIES_SCORE.get(name);if(scores!=null && scores.size() > 0){double sum = 0;for (Double score : scores) {sum += score;}return BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(scores.size()), 2 , RoundingMode.UP).doubleValue();}else {return 0;}}public double getTime() {return time;}public void setTime(double time) {this.time = time;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}public Date getStartTime() {return startTime;}public void setStartTime(Date startTime) {this.startTime = startTime;}
}
import java.util.HashMap;
import java.util.Map;/**客户角色*/
public class Customer extends User{// 定义一个属性存储购买记录。private Map<String, Boolean> buyMovies = new HashMap<>();public Map<String, Boolean> getBuyMovies() {return buyMovies;}public void setBuyMovies(Map<String, Boolean> buyMovies) {this.buyMovies = buyMovies;}
}
import Business;
import Customer;
import Movie;
import User;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.math.BigDecimal;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;public class MovieSystem {/**定义系统的数据容器用户存储数据1、存储很多用户(客户对象,商家对象)*/public static final List<User> ALL_USERS = new ArrayList<>();/**2、存储系统全部商家和其排片信息 。商家1 = [p1,p2,p3,...]商家2 = [p2,p3,...]...*/public static final Map<Business, List<Movie>> ALL_MOVIES = new HashMap<>();public static final Scanner SYS_SC = new Scanner(System.in);// 定义一个静态的User类型的变量记住当前登录成功的用户对象public static User loginUser;public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");public static final Logger LOGGER = LoggerFactory.getLogger("MovieSystem.class");/**3、准备一些测试数据*/static {Customer c = new Customer();c.setLoginName("zyf888");c.setPassWord("123456");c.setUserName(mm刘德华");c.setSex('男');c.setMoney(10000);c.setPhone("110110");ALL_USERS.add(c);Customer c1 = new Customer();c1.setLoginName("gzl888");c1.setPassWord("123456");c1.setUserName("mm关之琳");c1.setSex('女');c1.setMoney(2000);c1.setPhone("111111");ALL_USERS.add(c1);Business b = new Business();b.setLoginName("baozugong888");b.setPassWord("123456");b.setUserName("mm包租公");b.setMoney(0);b.setSex('男');b.setPhone("110110");b.setAddress("火星6号2B二层");b.setShopName("甜甜圈国际影城");ALL_USERS.add(b);// 注意,商家一定需要加入到店铺排片信息中去List<Movie> movies = new ArrayList<>();ALL_MOVIES.put(b , movies); // b = []Business b2 = new Business();b2.setLoginName("baozupo888");b2.setPassWord("123456");b2.setUserName("mm包租婆");b2.setMoney(0);b2.setSex('女');b2.setPhone("110110");b2.setAddress("火星8号8B八层");b2.setShopName("巧克力国际影城");ALL_USERS.add(b2);// 注意,商家一定需要加入到店铺排片信息中去List<Movie> movies3 = new ArrayList<>();ALL_MOVIES.put(b2 , movies3); // b2 = []}public static void main(String[] args) {showMain();}/**首页展示*/private static void showMain() {while (true) {System.out.println("===============mm电影首页=================");System.out.println("1、登录");System.out.println("2、用户注册");System.out.println("3、商家注册");System.out.println("请输入操作命令:");String command = SYS_SC.nextLine();switch (command) {case "1":// 登录了login();break;case "2"://break;case "3":break;default:System.out.println("命令有误,请确认!");}}}/**登录功能*/private static void login() {while (true) {System.out.println("请您输入登录名称:");String loginName = SYS_SC.nextLine();System.out.println("请您输入登录密码:");String passWord = SYS_SC.nextLine();// 1、根据登录名称查询用户对象。User u = getUserByLoginName(loginName);// 2、判断用户对象是否存在,存在说明登录名称正确了if(u != null){// 3、比对密码是否正确if(u.getPassWord().equals(passWord)){// 登录成功了:...loginUser = u; // 记住登录成功的用户LOGGER.info(u.getUserName() +"登录了系统~~~");// 判断是用户登录的,还是商家登录的。if(u instanceof Customer) {// 当前登录的是普通用户showCustomerMain();}else {// 当前登录的肯定是商家用户showBusinessMain();}return;}else {System.out.println("密码有毛病~~");}}else {System.out.println("登录名称错误,请确认");}}}/**商家的后台操作界面*/private static void showBusinessMain() {while (true) {System.out.println("============黑马电影商家界面===================");System.out.println(loginUser.getUserName() + (loginUser.getSex()=='男'? "先生":"女士" + "欢迎您进入系统"));System.out.println("1、展示详情:");System.out.println("2、上架电影:");System.out.println("3、下架电影:");System.out.println("4、修改电影:");System.out.println("5、退出:");System.out.println("请输入您要操作的命令:");String command = SYS_SC.nextLine();switch (command){case "1":// 展示全部排片信息showBusinessInfos();break;case "2":// 上架电影信息addMovie();break;case "3":// 下架电影信息deleteMovie();break;case "4":// 修改电影信息updateMovie();break;case "5":System.out.println(loginUser.getUserName() +"请您下次再来啊~~~");return; // 干掉方法default:System.out.println("不存在该命令!!");break;}}}/**影片修改功能*/private static void updateMovie() {System.out.println("================修改电影====================");Business business = (Business) loginUser;List<Movie> movies = ALL_MOVIES.get(business);if(movies.size() == 0) {System.out.println("当期无片可以修改~~");return;}// 2、让用户选择需要下架的电影名称while (true) {System.out.println("请您输入需要修改的电影名称:");String movieName = SYS_SC.nextLine();// 3、去查询有没有这个影片对象。Movie movie = getMovieByName(movieName);if(movie != null){// 修改它System.out.println("请您输入修改后的片名:");String name  = SYS_SC.nextLine();System.out.println("请您输入修改后主演:");String actor  = SYS_SC.nextLine();System.out.println("请您输入修改后时长:");String time  = SYS_SC.nextLine();System.out.println("请您输入修改后票价:");String price  = SYS_SC.nextLine();System.out.println("请您输入修改后票数:");String totalNumber  = SYS_SC.nextLine(); // 200\nwhile (true) {try {System.out.println("请您输入修改后的影片放映时间:");String stime  = SYS_SC.nextLine();movie.setName(name);movie.setActor(actor);movie.setPrice(Double.valueOf(price));movie.setTime(Double.valueOf(time));movie.setNumber(Integer.valueOf(totalNumber));movie.setStartTime(sdf.parse(stime));System.out.println("恭喜您,您成功修改了该影片了!!!");showBusinessInfos();return; // 直接退出去} catch (Exception e) {e.printStackTrace();LOGGER.error("时间解析出了毛病");}}}else {System.out.println("您的店铺没有上架该影片!");System.out.println("请问继续修改吗?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("好的!");return;}}}}/**影片下架功能*/private static void deleteMovie() {System.out.println("================下架电影====================");Business business = (Business) loginUser;List<Movie> movies = ALL_MOVIES.get(business);if(movies.size() == 0) {System.out.println("当期无片可以下架~~");return;}// 2、让用户选择需要下架的电影名称while (true) {System.out.println("请您输入需要下架的电影名称:");String movieName = SYS_SC.nextLine();// 3、去查询有没有这个影片对象。Movie movie = getMovieByName(movieName);if(movie != null){// 下架它movies.remove(movie);System.out.println("您当前店铺已经成功下架了:" + movie.getName());showBusinessInfos();return;}else {System.out.println("您的店铺没有上架该影片!");System.out.println("请问继续下架吗?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("好的!");return;}}}}/**去查询当前商家下的排片*/public static Movie getMovieByName(String movieName){Business business = (Business) loginUser;List<Movie> movies = ALL_MOVIES.get(business);for (Movie movie : movies) {if(movie.getName().contains(movieName)) {return movie;}}return null;}/**商家进行电影上架Map<Business , List<Movie>> ALL_MOVIESu1 = [p1,p2,p3]u2 = [p1,p2,p3]*/private static void addMovie() {System.out.println("================上架电影====================");// 根据商家对象(就是登录的用户loginUser),作为Map集合的键 提取对应的值就是其排片信息 :Map<Business , List<Movie>> ALL_MOVIESBusiness business = (Business) loginUser;List<Movie> movies = ALL_MOVIES.get(business);System.out.println("请您输入新片名:");String name  = SYS_SC.nextLine();System.out.println("请您输入主演:");String actor  = SYS_SC.nextLine();System.out.println("请您输入时长:");String time  = SYS_SC.nextLine();System.out.println("请您输入票价:");String price  = SYS_SC.nextLine();System.out.println("请您输入票数:");String totalNumber  = SYS_SC.nextLine(); // 200\nwhile (true) {try {System.out.println("请您输入影片放映时间:");String stime  = SYS_SC.nextLine();// public Movie(String name, String actor, double time, double price, int number, Date startTime)        // 封装成电影对象 ,加入集合movices中去Movie movie = new Movie(name, actor ,Double.valueOf(time) , Double.valueOf(price), Integer.valueOf(totalNumber) ,  sdf.parse(stime));movies.add(movie);System.out.println("您已经成功上架了:《" + movie.getName() + "》");return; // 直接退出去} catch (ParseException e) {e.printStackTrace();LOGGER.error("时间解析出了毛病");}}}/**定义一个静态的Map集合存储电影的评分*/public static final Map<String , List<Double>> MOVIES_SCORE = new HashMap<>();/**展示商家的详细:展示当前商家的信息。*/private static void showBusinessInfos() {System.out.println("================商家详情界面=================");LOGGER.info(loginUser.getUserName() +"商家,正在看自己的详情~~~");// 根据商家对象(就是登录的用户loginUser),作为Map集合的键 提取对应的值就是其排片信息 :Map<Business , List<Movie>> ALL_MOVIESBusiness business = (Business) loginUser;System.out.println(business.getShopName() + "\t\t电话:" + business.getPhone()+ "\t\t地址:" + business.getAddress() + "\t\t余额:" + business.getMoney());List<Movie> movies = ALL_MOVIES.get(business);if(movies.size() > 0) {System.out.println("片名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");for (Movie movie : movies) {System.out.println(movie.getName()+"\t\t\t" + movie.getActor()+ "\t\t" + movie.getTime()+ "\t\t" + movie.getScore() + "\t\t" + movie.getPrice() + "\t\t" + movie.getNumber() + "\t\t"+   sdf.format(movie.getStartTime()));}}else {System.out.println("您的店铺当前无片在放映~~~~");}}/**客户操作界面*/private static void showCustomerMain() {while (true) {System.out.println("============黑马电影客户界面===================");System.out.println(loginUser.getUserName() + (loginUser.getSex()=='男'? "先生":"女士" + "欢迎您进入系统" +"\t余额:" + loginUser.getMoney()));System.out.println("请您选择要操作的功能:");System.out.println("1、展示全部影片信息功能:");System.out.println("2、根据电影名称查询电影信息:");System.out.println("3、评分功能:");System.out.println("4、购票功能:");System.out.println("5、退出系统:");System.out.println("请输入您要操作的命令:");String command = SYS_SC.nextLine();switch (command){case "1":// 展示全部排片信息showAllMovies();break;case "2":break;case "3":// 评分功能scoreMovie();showAllMovies();break;case "4":// 购票功能buyMovie();break;case "5":return; // 干掉方法default:System.out.println("不存在该命令!!");break;}}}private static void scoreMovie() {// 1、查询当前登录成功的用户历史购买记录,看哪些电影是它可以评分的。Customer c = (Customer) loginUser;Map<String, Boolean> movies = c.getBuyMovies();if(movies.size() == 0 ){System.out.println("当前您没有看过电影,不能评价!");return;}// 买过了 ,看哪些电影是它可以评分的。movies.forEach((name, flag) -> {if(flag){System.out.println(name +"此电影已评价");}else {System.out.println("请您对:" + name +"进行打分(0-10):");double score = Double.valueOf(SYS_SC.nextLine());// 先根据电影名称拿到评分数据List<Double> scores = MOVIES_SCORE.get(name); // MOVIES_SCORE = [ 名称=[10] , ... ]if(scores == null){// 说明此电影是第一次评价scores = new ArrayList<>();scores.add(score);MOVIES_SCORE.put(name , scores);}else {scores.add(score);}movies.put(name, true);}});}/**用户购票功能  ALL_MOVIES = {b1=[p1,p2,p3,..] , b2=[p2,p3,...]}*/private static void buyMovie() {showAllMovies();System.out.println("=============用户购票功能=================");while (true) {System.out.println("请您输入需要买票的门店:");String shopName = SYS_SC.nextLine();// 1、查询是否存在该商家。Business business = getBusinessByShopName(shopName);if(business == null){System.out.println("对不起,没有该店铺!请确认");}else {// 2、此商家全部的排片List<Movie> movies = ALL_MOVIES.get(business);// 3、判断是否存在上映的电影if(movies.size() > 0) {// 4、开始进行选片购买while (true) {System.out.println("请您输入需要购买电影名称:");String movieName = SYS_SC.nextLine();// 去当前商家下,查询该电影对象。Movie movie = getMovieByShopAndName(business, movieName);if(movie != null){// 开始购买while (true) {System.out.println("请您输入要购买的电影票数:");String number = SYS_SC.nextLine();int buyNumber = Integer.valueOf(number);// 判断电影是否购票if(movie.getNumber() >= buyNumber){// 可以购买了// 当前需要花费的金额double money = BigDecimal.valueOf(movie.getPrice()).multiply(BigDecimal.valueOf(buyNumber)).doubleValue();if(loginUser.getMoney() >= money){// 终于可以买票了System.out.println("您成功购买了"+ movie.getName() + buyNumber +"张票!总金额是:" + money);// 更新自己的金额 更新商家的金额loginUser.setMoney(loginUser.getMoney() - money);business.setMoney(business.getMoney() + money);movie.setNumber(movie.getNumber() -  buyNumber);Customer c = (Customer) loginUser;// 记录购买电影的信息// 第一个参数是购买的电影,第二个参数是没有评价的标记!c.getBuyMovies().put(movie.getName(), false);return;// 结束方法}else {// 钱不够!System.out.println("是否继续~~");System.out.println("是否继续买票?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("好的!");return;}}}else {// 票数不够System.out.println("您当前最多可以购买:" + movie.getNumber());System.out.println("是否继续买票?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("好的!");return;}}}}else {System.out.println("电影名称有毛病~~");}}}else {System.out.println("该电影院关门了~~~");System.out.println("是否继续买票?y/n");String command = SYS_SC.nextLine();switch (command) {case "y":break;default:System.out.println("好的!");return;}}}}}public static Movie getMovieByShopAndName(Business business , String name){List<Movie> movies = ALL_MOVIES.get(business);for (Movie movie : movies) {if(movie.getName().contains(name)){return movie;}}return null;}/**根据商家店铺名称查询商家对象* @return*/public static Business getBusinessByShopName(String shopName){Set<Business> businesses = ALL_MOVIES.keySet();for (Business business : businesses) {if(business.getShopName().equals(shopName)){return  business;}}return null;}/**用户功能:展示全部商家和其排片信息*/private static void showAllMovies() {System.out.println("=============展示全部商家排片信息=================");ALL_MOVIES.forEach((business, movies) -> {System.out.println(business.getShopName() + "\t\t电话:" + business.getPhone() + "\t\t地址:" + business.getAddress());System.out.println("\t\t\t片名\t\t\t主演\t\t时长\t\t评分\t\t票价\t\t余票数量\t\t放映时间");for (Movie movie : movies) {System.out.println("\t\t\t" + movie.getName()+"\t\t\t" + movie.getActor()+ "\t\t" + movie.getTime()+ "\t\t" + movie.getScore() + "\t\t" + movie.getPrice() + "\t\t" + movie.getNumber() + "\t\t"+   sdf.format(movie.getStartTime()));}});}public static User getUserByLoginName(String loginName){for (User user : ALL_USERS) {// 判断这个用户的登录名称是否是我们想要的if(user.getLoginName().equals(loginName)){return user;}}return null; // 查询此用户登录名称}
}

运行之前要加入这个

运行结果

JAVA学习笔记(三十一)-电影系统案例相关推荐

  1. [go学习笔记.第十一章.项目案例] 2.客户信息管理系统

    一.基本介绍 1.需求说明 项目需求分析 1.模拟实现基于文本界面的 < 客户信息管理软件 > 2.该软件实现对客户对象的插入.修改和删除(用切片实现),并能够打印客户明细表 2.界面设计 ...

  2. [go学习笔记.第十一章.项目案例] 1.家庭收支记账软件项目

    一.基本介绍 1.项目开发流程说明 2.项目需求说明 目标: 模拟实现一个基于文本界面的<<家庭记账软件>> 掌握初步的编程技巧和调试技巧 主要涉及以下知识点 : (1).局部 ...

  3. java学习笔记(三):前端miniUI控件库入门

    java学习笔记(三):前端miniUI控件库入门 最近在一家公司实习学习,一上来就需要学习了解相关的前端内容--miniUI.而这个内容自己本身并没有了解学习过,上手也是遇到了不少的问题,于是想把自 ...

  4. JAVA学习笔记_银行账户系统

    大家好,我是一枚JAVA学习的小白,初次来到SCND还请多多指教!!!! 最近上编程课学习都挺晚的,没时间逛论坛了,今天休息正好也赶上线上,所以来发点学习笔记,一起讨论学习.(看我这个标点符号就知道我 ...

  5. java注解和反射——狂神说java学习笔记三

    原文链接:公众号狂神说 视频教程[狂神说B站]: https://www.bilibili.com/video/BV12J41137hu 如有侵权,联系立删 什么是注解 Annotation是从JDK ...

  6. Java学习笔记(十一)--类与对象

    类和对象 一.面向对象编程 在面向对象编程中,对象是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位.对象由一组属性和一组行为构成,属性是用来描述对象静态特征的数据项,行为是用来描述对 ...

  7. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

  8. java学习笔记(十一)常用类、反射、垃圾回收

    常用类: System类代表当前java程序的运行平台,Runtime类代表当前java程序的运行时环境. String代表一个不可变的字符串,StringBuffer和Stringbulider代表 ...

  9. JAVA学习笔记(三十九)-打印流

    import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintStream; i ...

最新文章

  1. C#编程语言之常见的异常类型
  2. 记一次 .NET 某新能源汽车锂电池检测程序 UI挂死分析
  3. 《C++ Primer》7.2.1节练习
  4. RS(2)--从文本数据到用户画像
  5. 小学少年宫计算机组活动教案,小学少年宫计算机兴趣小组活动记录表汇编
  6. 作者:李崇纲,男,北京金信网银金融信息服务有限公司常务副总经理。
  7. 当我们在谈论单测时我们在谈论什么
  8. python中ttk详解_Python 中的Property 动态属性和特性详解
  9. 视频工作者应该知道的几个网站
  10. linux命令行使用
  11. machine learning 之 Neural Network 3
  12. IDEA 导出UML类图
  13. 4.1 51单片机-定时器使用
  14. 各代iphone尺寸_iPhone12系列尺寸对比-历代iPhone机型尺寸比较
  15. 小哈智能机器人的功能_小哈智能教育机器人H2产品外观参数说明
  16. 人生如梦,一尊还酹江月(评倚天屠龙记)
  17. 用Python把它做出来:EXCEL文件合并/拆分工具 (含VBA版)
  18. [论文笔记]Deep Neural Networks are Easily Fooled: High Confidence Predictions for Unrecognizable Images
  19. SM2263XT贴四片PF29F01T2ANCTH2,SM2263XT量产工具成功开卡
  20. 数码相框解决方案深度分析

热门文章

  1. oracle 没有锁 ora00054,ORA-00054锁等待问题
  2. 如何让iPad变成Mac的扩展屏幕
  3. 易语言如何调用c dll文件,易语言调用C++写的DLL
  4. 免费申报!5G网络Awards参评企业征集,欢迎参与!
  5. tsp java_基于贪心算法求解TSP问题(JAVA)
  6. [Elasticsearch]4.可伸缩性解密:集群、节点和分片
  7. 潜在解决方法-系统映像还原失败,找不到可用于恢复系统盘的磁盘
  8. 如何一天深度睡眠4个小时
  9. 3.17 学习情况总结
  10. linux bash 漏洞修复方法