当前位置:   article > 正文

JAVA电影购票系统

电影购票系统

一、功能描述

电影购票系统简介、项目功能演示

日志框架搭建、系统角色分析

首页设计、登录、商家界面、用户界面实现

商家-详情页设计、影片上架、退出

商家-影片下架、影片修改

用户-展示全部影片

用户-购票功能 用户-评分功能

用户-评分降序展示

用户-根据片名查询全部影片信息

  1. D:\Java\jre\bin\java.exe "-javaagent:D:\java\Intellij_IDEA\IntelliJ IDEA 2021.1.1\lib\idea_rt.jar=64025:D:\java\Intellij_IDEA\IntelliJ IDEA 2021.1.1\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jre\jre\lib\charsets.jar;D:\java\jre\jre\lib\deploy.jar;D:\java\jre\jre\lib\ext\access-bridge-64.jar;D:\java\jre\jre\lib\ext\cldrdata.jar;D:\java\jre\jre\lib\ext\dnsns.jar;D:\java\jre\jre\lib\ext\jaccess.jar;D:\java\jre\jre\lib\ext\jfxrt.jar;D:\java\jre\jre\lib\ext\localedata.jar;D:\java\jre\jre\lib\ext\nashorn.jar;D:\java\jre\jre\lib\ext\sunec.jar;D:\java\jre\jre\lib\ext\sunjce_provider.jar;D:\java\jre\jre\lib\ext\sunmscapi.jar;D:\java\jre\jre\lib\ext\sunpkcs11.jar;D:\java\jre\jre\lib\ext\zipfs.jar;D:\java\jre\jre\lib\javaws.jar;D:\java\jre\jre\lib\jce.jar;D:\java\jre\jre\lib\jfr.jar;D:\java\jre\jre\lib\jfxswt.jar;D:\java\jre\jre\lib\jsse.jar;D:\java\jre\jre\lib\management-agent.jar;D:\java\jre\jre\lib\plugin.jar;D:\java\jre\jre\lib\resources.jar;D:\java\jre\jre\lib\rt.jar;D:\java\code\javase\out\production\Movie;D:\java\code\javase\Movie\lib\logback-classic-1.2.3.jar;D:\java\code\javase\Movie\lib\logback-core-1.2.3.jar;D:\java\code\javase\Movie\lib\slf4j-api-1.7.26.jar com.lou.run.movieSystem
  2. =========电影首页=========
  3. 1、登录
  4. 2、用户注册
  5. 3、商家注册
  6. 4、退出系统
  7. 请输入操作命令:
  8. 2
  9. =============================用户注册========================
  10. 请输入登录名称:
  11. 老白
  12. 请输入登录密码:
  13. 121
  14. 请再次输入登录密码:
  15. 121
  16. 请输入真实名称:
  17. 白展堂
  18. 请输入性别:
  19. 请输入电话:
  20. 12
  21. 请输入账户金额:
  22. 123
  23. 老白注册成功
  24. =========电影首页=========
  25. 1、登录
  26. 2、用户注册
  27. 3、商家注册
  28. 4、退出系统
  29. 请输入操作命令:
  30. 1
  31. 请输入登录名称:
  32. 老白
  33. 请输入登录密码:
  34. 111
  35. 密码错误
  36. 请输入登录名称:
  37. 老白
  38. 请输入登录密码:
  39. 121
  40. 登录成功
  41. 白展堂女士欢迎您进入系统 余额:123.0
  42. ============电影客户界面===================
  43. 请您选择要操作的功能:
  44. 1、展示全部影片信息功能:
  45. 2、根据电影名称查询电影信息:
  46. 3、评分功能:
  47. 4、购票功能:
  48. 5、显示用户详细信息:
  49. 6、评分降序展示:
  50. 7、退出系统:
  51. 请输入您要操作的命令:
  52. 1
  53. =============================展示全部商家排片信息========================
  54. 橘子国际影城 电话:110110 地址:火星62B二层
  55. 片名 主演 时长 评分 票价 余票数量 放映时间
  56. 东邪西毒 大环境 180.0 0.0 100.0 200 2022/05/18 12:00:00
  57. ==================================================================================
  58. 青苹果国际影城 电话:110110 地址:火星88B八层
  59. 片名 主演 时长 评分 票价 余票数量 放映时间
  60. 武林外传 白展堂 180.0 0.0 100.0 200 2022/05/18 18:00:00
  61. ==================================================================================
  62. ============电影客户界面===================
  63. 请您选择要操作的功能:
  64. 1、展示全部影片信息功能:
  65. 2、根据电影名称查询电影信息:
  66. 3、评分功能:
  67. 4、购票功能:
  68. 5、显示用户详细信息:
  69. 6、评分降序展示:
  70. 7、退出系统:
  71. 请输入您要操作的命令:
  72. 5
  73. 白展堂先生您好 余额:123.0
  74. 您还没有购买记录
  75. ============电影客户界面===================
  76. 请您选择要操作的功能:
  77. 1、展示全部影片信息功能:
  78. 2、根据电影名称查询电影信息:
  79. 3、评分功能:
  80. 4、购票功能:
  81. 5、显示用户详细信息:
  82. 6、评分降序展示:
  83. 7、退出系统:
  84. 请输入您要操作的命令:
  85. 6
  86. 还没有评分数据
  87. ============电影客户界面===================
  88. 请您选择要操作的功能:
  89. 1、展示全部影片信息功能:
  90. 2、根据电影名称查询电影信息:
  91. 3、评分功能:
  92. 4、购票功能:
  93. 5、显示用户详细信息:
  94. 6、评分降序展示:
  95. 7、退出系统:
  96. 请输入您要操作的命令:
  97. 4
  98. =============================展示全部商家排片信息========================
  99. 橘子国际影城 电话:110110 地址:火星62B二层
  100. 片名 主演 时长 评分 票价 余票数量 放映时间
  101. 东邪西毒 大环境 180.0 0.0 100.0 200 2022/05/18 12:00:00
  102. ==================================================================================
  103. 青苹果国际影城 电话:110110 地址:火星88B八层
  104. 片名 主演 时长 评分 票价 余票数量 放映时间
  105. 武林外传 白展堂 180.0 0.0 100.0 200 2022/05/18 18:00:00
  106. ==================================================================================
  107. =============================用户购票功能========================
  108. 请输入您想要买票的影城:
  109. 青苹果
  110. 请输入需要购买电影的名称:
  111. 武林
  112. 请您输入需要购买的票数:
  113. 12
  114. 您的钱不够
  115. 是否继续买票?(y/f):
  116. y
  117. 请您输入需要购买的票数:
  118. 1
  119. 您成功购买了1张《武林外传》,花费了100.0元钱
  120. ============电影客户界面===================
  121. 请您选择要操作的功能:
  122. 1、展示全部影片信息功能:
  123. 2、根据电影名称查询电影信息:
  124. 3、评分功能:
  125. 4、购票功能:
  126. 5、显示用户详细信息:
  127. 6、评分降序展示:
  128. 7、退出系统:
  129. 请输入您要操作的命令:
  130. 5
  131. 白展堂先生您好 余额:23.0
  132. 您已经购买的电影为:
  133. 武林外传
  134. ============电影客户界面===================
  135. 请您选择要操作的功能:
  136. 1、展示全部影片信息功能:
  137. 2、根据电影名称查询电影信息:
  138. 3、评分功能:
  139. 4、购票功能:
  140. 5、显示用户详细信息:
  141. 6、评分降序展示:
  142. 7、退出系统:
  143. 请输入您要操作的命令:
  144. 3
  145. 请您对:武林外传进行打分(0-10):
  146. 5
  147. =============================展示全部商家排片信息========================
  148. 橘子国际影城 电话:110110 地址:火星62B二层
  149. 片名 主演 时长 评分 票价 余票数量 放映时间
  150. 东邪西毒 大环境 180.0 0.0 100.0 200 2022/05/18 12:00:00
  151. ==================================================================================
  152. 青苹果国际影城 电话:110110 地址:火星88B八层
  153. 片名 主演 时长 评分 票价 余票数量 放映时间
  154. 武林外传 白展堂 180.0 0.0 100.0 199 2022/05/18 18:00:00
  155. ==================================================================================
  156. ============电影客户界面===================
  157. 请您选择要操作的功能:
  158. 1、展示全部影片信息功能:
  159. 2、根据电影名称查询电影信息:
  160. 3、评分功能:
  161. 4、购票功能:
  162. 5、显示用户详细信息:
  163. 6、评分降序展示:
  164. 7、退出系统:
  165. 请输入您要操作的命令:
  166. 6
  167. 武林外传 5.0
  168. ============电影客户界面===================
  169. 请您选择要操作的功能:
  170. 1、展示全部影片信息功能:
  171. 2、根据电影名称查询电影信息:
  172. 3、评分功能:
  173. 4、购票功能:
  174. 5、显示用户详细信息:
  175. 6、评分降序展示:
  176. 7、退出系统:
  177. 请输入您要操作的命令:
  178. 7

二、功能实现

1、系统角色类准备

集成日志框架、用于后期记录日志信息。

定义一个电影类Movie类,Movie类包含:片名、主演、评分、时长、票价、余票 系统包含2个用户角色:客户、商家。存在大量相同属性信息。

定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额

定义Business类代表商家角色,属性:店铺名称、地址。

定义Customer类代表客户角色,属性: 空

定义集合List<User>用户存放系统注册的用户对象信息。

定义集合Map<Business, List<Movie>>存放商家和其排片信息。

准备一些测试数据。

(1)定义一个电影类Movie类,Movie类包含:片名、主演、评分、时长、票价、余票

  1. package com.lou.bean;
  2. import java.util.Date;
  3. /**
  4. * 定义一个电影类Movie类,Movie类包含:片名、主演、评分、时长、票价、余票
  5. */
  6. public class movie {
  7. private String name;
  8. private String actor;
  9. private double score;
  10. private double time;
  11. private double price;
  12. private int num;
  13. private Date startData;//放映时间
  14. public movie() {
  15. }
  16. @Override
  17. public String toString() {
  18. return "movie{" +
  19. "name='" + name + '\'' +
  20. ", actor='" + actor + '\'' +
  21. ", score=" + score +
  22. ", time=" + time +
  23. ", price=" + price +
  24. ", num=" + num +
  25. ", startData=" + startData +
  26. '}';
  27. }
  28. public movie(String name, String actor, double score, double time, double price, int num, Date startData) {
  29. this.name = name;
  30. this.actor = actor;
  31. this.score = score;
  32. this.time = time;
  33. this.price = price;
  34. this.num = num;
  35. this.startData = startData;
  36. }
  37. public String getName() {
  38. return name;
  39. }
  40. public void setName(String name) {
  41. this.name = name;
  42. }
  43. public String getActor() {
  44. return actor;
  45. }
  46. public void setActor(String actor) {
  47. this.actor = actor;
  48. }
  49. public double getScore() {
  50. return score;
  51. }
  52. public void setScore(double score) {
  53. this.score = score;
  54. }
  55. public double getTime() {
  56. return time;
  57. }
  58. public void setTime(double time) {
  59. this.time = time;
  60. }
  61. public double getPrice() {
  62. return price;
  63. }
  64. public void setPrice(double price) {
  65. this.price = price;
  66. }
  67. public int getNum() {
  68. return num;
  69. }
  70. public void setNum(int num) {
  71. this.num = num;
  72. }
  73. public Date getStartData() {
  74. return startData;
  75. }
  76. public void setStartData(Date startData) {
  77. this.startData = startData;
  78. }
  79. }

(2)定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额

  1. package com.lou.bean;
  2. import java.io.InputStreamReader;
  3. /**
  4. * 定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额
  5. */
  6. public class User {
  7. private String loginName;
  8. private String password;
  9. private String userName;
  10. private char sex;
  11. private String phone;
  12. private double money;
  13. public User(String loginName, String password, String userName, char sex, String phone, double money) {
  14. this.loginName = loginName;
  15. this.password = password;
  16. this.userName = userName;
  17. this.sex = sex;
  18. this.phone = phone;
  19. this.money = money;
  20. }
  21. public User() {
  22. }
  23. public String getLoginName() {
  24. return loginName;
  25. }
  26. public void setLoginName(String loginName) {
  27. this.loginName = loginName;
  28. }
  29. public String getPassword() {
  30. return password;
  31. }
  32. public void setPassword(String password) {
  33. this.password = password;
  34. }
  35. public String getUserName() {
  36. return userName;
  37. }
  38. public void setUserName(String userName) {
  39. this.userName = userName;
  40. }
  41. public char getSex() {
  42. return sex;
  43. }
  44. public void setSex(char sex) {
  45. this.sex = sex;
  46. }
  47. public String getPhone() {
  48. return phone;
  49. }
  50. public void setPhone(String phone) {
  51. this.phone = phone;
  52. }
  53. public double getMoney() {
  54. return money;
  55. }
  56. public void setMoney(double money) {
  57. this.money = money;
  58. }
  59. }

(3)定义Business类代表商家角色,属性:店铺名称、地址。定义Customer类代表客户角色,属性: 空

  1. package com.lou.bean;
  2. /**
  3. * 定义Business类代表商家角色,属性:店铺名称、地址。
  4. *
  5. * 定义Customer类代表客户角色,属性: 空
  6. */
  7. public class Business extends User{
  8. //独有属性
  9. private String shopName;
  10. private String shopAddress;
  11. public String getShopName() {
  12. return shopName;
  13. }
  14. public void setShopName(String shopName) {
  15. this.shopName = shopName;
  16. }
  17. public String getShopAddress() {
  18. return shopAddress;
  19. }
  20. public void setShopAddress(String shopAddress) {
  21. this.shopAddress = shopAddress;
  22. }
  23. }
  1. package com.lou.bean;
  2. public class Custom extends User{
  3. }

(4)定义集合List<User>用户存放系统注册的用户对象信息。 定义集合Map<Business,List<Movie>>存放商家和其排片信息

  1. //定义集合List<User>用户存放系统注册的用户对象信息。
  2. public static final List<User>ALL_USERS=new ArrayList<>();
  3. //定义集合Map<Business, List<Movie>>存放商家和其排片信息。
  4. public static final Map<Business, List<movie>>ALL_MOVIE=new HashMap<>();

(5)准备一些测试数据(代码块)

  1. //准备一些测试数据。(代码块)
  2. static {
  3. Custom c = new Custom();
  4. c.setLoginName("备");
  5. c.setPassword("123456");
  6. c.setUserName("刘备");
  7. c.setSex('男');
  8. c.setMoney(10000);
  9. c.setPhone("110110");
  10. ALL_USERS.add(c);
  11. Custom c1 = new Custom();
  12. c1.setLoginName("羽");
  13. c1.setPassword("123456");
  14. c1.setUserName("羽");
  15. c1.setSex('女');
  16. c1.setMoney(2000);
  17. c1.setPhone("111111");
  18. ALL_USERS.add(c1);
  19. Business b = new Business();
  20. b.setLoginName("小猫");
  21. b.setPassword("123456");
  22. b.setUserName("小明");
  23. b.setMoney(0);
  24. b.setSex('男');
  25. b.setPhone("110110");
  26. b.setShopAddress("火星6号2B二层");
  27. b.setShopName("橘子国际影城");
  28. ALL_USERS.add(b);
  29. // 注意,商家一定需要加入到店铺排片信息中去
  30. List<movie> movies = new ArrayList<>();
  31. ALL_MOVIES.put(b , movies); // b = []
  32. Business b2 = new Business();
  33. b2.setLoginName("小狗");
  34. b2.setPassword("123456");
  35. b2.setUserName("小玲");
  36. b2.setMoney(0);
  37. b2.setSex('女');
  38. b2.setPhone("110110");
  39. b2.setShopAddress("火星8号8B八层");
  40. b2.setShopName("青苹果国际影城");
  41. ALL_USERS.add(b2);
  42. // 注意,商家一定需要加入到店铺排片信息中去
  43. List<movie> movies3 = new ArrayList<>();
  44. ALL_MOVIES.put(b2 , movies3); // b2 = []
  45. }

2、首页、登录、商家界面、用户界面实现

首页需要包含登录,商家入驻,客户注册功能。

商家和客户可以共用一个登录功能。

判断登录成功的用户的真实类型,根据用户类型完成对应的操作界面设计。

(1) 首页需要包含登录,商家入驻,客户注册功能

  1. /**
  2. * 首页
  3. */
  4. private static void showMain() {
  5. System.out.println("=========电影首页=========");
  6. System.out.println("1、登录");
  7. System.out.println("2、用户注册");
  8. System.out.println("3、商家注册");
  9. System.out.println("请输入操作命令:");
  10. String command = SC.nextLine();
  11. while (true) {
  12. switch (command) {
  13. case "1":
  14. break;
  15. case "2":
  16. break;
  17. case "3":
  18. break;
  19. default:
  20. System.out.println("命令有误,请重新确认");
  21. }
  22. }
  23. }

(2)商家和客户可以共用一个登录功能

  1. /**
  2. * 登录
  3. */
  4. private static void login() {
  5. while (true) {
  6. System.out.println("请输入登录名称:");
  7. String loginName=SC.nextLine();
  8. System.out.println("请输入登录密码:");
  9. String loginPassword=SC.nextLine();
  10. //根据登录名称查询用户对象
  11. User user=getUserByLoginName(loginName);
  12. if(user!=null){
  13. //比对密码是否正确
  14. if(user.getPassword().equals(loginPassword)){
  15. System.out.println("登录成功");
  16. }
  17. else {
  18. System.out.println("密码错误");
  19. }
  20. }
  21. else {
  22. System.out.println("登录名称错误,请确认");
  23. }
  24. }
  25. }

(3)判断登录成功的用户的真实类型,根据用户类型完成对应的操作界面设计

  1. if(user instanceof Custom){
  2. //普通用户
  3. showCustomer();
  4. }
  5. else {
  6. //商家用户
  7. showBusiness();
  8. }

 3、商家功能-展示详情、影片上架、退出

展示本商家的信息和其排片情况。

提供影片上架功能:就是创建一个影片对象,存入到商家的集合中去。

退出,需要回到登录的首页。

提供影片下架功能:其实就是从商家的集合中删除影片对象。

影片修改功能:拿到需要修改的影片对象,修改里面的数据。

(1) 展示本商家的信息和其排片情况

  1. /**
  2. * 展示本商家的信息和其排片情况。
  3. */
  4. private static void showBusinessInfos() {
  5. //根据商家对象,作为Map集合的键,提取对应的值就是排片信息
  6. //loginUser属于User类,要转为Business类才能访问到商家独有属性
  7. Business business=(Business)loginUser;
  8. System.out.println(business.getShopName()+"\t\t电话:"+business.getPhone()+"\t\t地址:"+business.getShopAddress());
  9. List<movie>movies=ALL_MOVIES.get(loginUser);
  10. if(movies.size()>0){
  11. System.out.println("片名\t\t\t主演\t\t\t时长\t\t\t评分\t\t\t票价\t\t\t余票数量\t\t\t放映时间");
  12. for(movie m:movies){
  13. System.out.println(m.getName()+"\t\t"+m.getActor()+"\t\t\t"+m.getTime()+"\t\t\t"+m.getScore()+"\t\t\t"+
  14. m.getPrice()+"\t\t\t"+m.getNum()+"\t\t\t"+sdf.format(m.getStartData()));
  15. }
  16. }
  17. else {
  18. System.out.println("当前影院无影片");
  19. }
  20. }

(2)提供影片上架功能:就是创建一个影片对象,存入到商家的集合中去

  1. /**
  2. * 提供影片上架功能:就是创建一个影片对象,存入到商家的集合中去
  3. */
  4. private static void addMovie() {
  5. Business business = (Business) loginUser;
  6. List<movie> movies = ALL_MOVIES.get(loginUser);
  7. System.out.println("请您输入新片名:");
  8. String name = SC.nextLine();
  9. System.out.println("请您输入主演:");
  10. String actor = SC.nextLine();
  11. System.out.println("请您输入时长:");
  12. String time = SC.nextLine();
  13. System.out.println("请您输入票价:");
  14. String price = SC.nextLine();
  15. System.out.println("请您输入票数:");
  16. String totalNumber = SC.nextLine(); // 200\n
  17. while (true) {
  18. try {
  19. System.out.println("请您输入影片放映时间:");
  20. String stime = SC.nextLine();
  21. movie m = new movie(name, actor, Double.valueOf(time), Double.valueOf(price)
  22. , Integer.valueOf(totalNumber), sdf.parse(stime));
  23. movies.add(m);
  24. System.out.println("您已经成功上架了:《" + m.getName() + "》");
  25. return; // 直接退出去
  26. }
  27. catch (ParseException e) {
  28. e.printStackTrace();
  29. logger.error("时间解析出了问题");
  30. }
  31. }
  32. }

(3)提供影片下架功能:其实就是从商家的集合中删除影片对象

  1. /**
  2. * 提供影片下架功能:其实就是从商家的集合中删除影片对象
  3. */
  4. private static void deleteMovie() {
  5. Business business = (Business) loginUser;
  6. List<movie> movies = ALL_MOVIES.get(business);
  7. if (movies.size() == 0) {
  8. System.out.println("当前无影片可以下架");
  9. return;
  10. }
  11. System.out.println("输入要下架的电影名称:");
  12. String name = SC.nextLine();
  13. movie m = getMovieByName(name);
  14. if (m != null) {
  15. System.out.println("下架《"+m.getName()+"》成功");
  16. movies.remove(m);
  17. return;
  18. }
  19. System.out.println("没有找到这个名称的电影");
  20. }

(4)影片修改功能:拿到需要修改的影片对象,修改里面的数据

  1. /**
  2. * 影片修改功能:拿到需要修改的影片对象,修改里面的数据
  3. */
  4. private static void updateMovie() {
  5. Business business = (Business) loginUser;
  6. List<movie> movies = ALL_MOVIES.get(business);
  7. if (movies.size() == 0) {
  8. System.out.println("当前无影片可以修改");
  9. return;
  10. }
  11. System.out.println("输入要修改的电影名称:");
  12. String filmName = SC.nextLine();
  13. movie m = getMovieByName(filmName);
  14. if (m != null) {
  15. System.out.println("是否要修改片名(y/f):");
  16. String command1 = SC.nextLine();
  17. if (command1.equals("y")) {
  18. System.out.println("请您输入新片名:");
  19. String name = SC.nextLine();
  20. m.setName(name);
  21. }
  22. System.out.println("是否要修改主演(y/f):");
  23. String command2 = SC.nextLine();
  24. if (command2.equals("y")) {
  25. System.out.println("请您输入主演:");
  26. String actor = SC.nextLine();
  27. m.setActor(actor);
  28. }
  29. System.out.println("是否要修改时长(y/f):");
  30. String command3 = SC.nextLine();
  31. if (command3.equals("y")) {
  32. System.out.println("请您输入时长:");
  33. String time = SC.nextLine();
  34. m.setTime(Double.valueOf(time));
  35. }
  36. System.out.println("是否要修改票价(y/f):");
  37. String command4 = SC.nextLine();
  38. if (command4.equals("y")) {
  39. System.out.println("请您输入票价:");
  40. String price = SC.nextLine();
  41. m.setPrice(Double.valueOf(price));
  42. }
  43. System.out.println("是否要修改票数(y/f):");
  44. String command5 = SC.nextLine();
  45. if (command5.equals("y")) {
  46. System.out.println("请您输入票数:");
  47. String totalNumber = SC.nextLine(); // 200\n
  48. m.setNum(Integer.valueOf(totalNumber));
  49. }
  50. System.out.println("是否要修改影片放映时间(y/f):");
  51. String command6 = SC.nextLine();
  52. if (command6.equals("y")) {
  53. while (true) {
  54. try {
  55. System.out.println("请您输入影片放映时间(2022/05/18 12:00:00):");
  56. String stime = SC.nextLine();
  57. m.setStartData(sdf.parse(stime));
  58. System.out.println("您已经成功修改了:《" + m.getName() + "》");
  59. showBusinessInfos();
  60. return; // 直接退出去
  61. } catch (ParseException e) {
  62. e.printStackTrace();
  63. logger.error("时间解析出了问题");
  64. }
  65. }
  66. }
  67. System.out.println("您已经成功修改了:《" + m.getName() + "》");
  68. showBusinessInfos();
  69. return;
  70. }
  71. System.out.println("没有找到这个名称的电影");
  72. }

4、用户功能

展示全部影片信息

购票操作

评分功能[拓展]

评分降序展示

根据片名查询全部影片信息

(1) 展示全部影片信息

  1. /**
  2. * 展示全部影片信息
  3. */
  4. private static void showAllMovies() {
  5. System.out.println("=============================展示全部商家排片信息========================");
  6. ALL_MOVIES.forEach((business, movies) -> {
  7. System.out.println(business.getShopName() + "\t\t电话:" + business.getPhone() + "\t\t地址:" + business.getShopAddress());
  8. System.out.println("片名\t\t\t主演\t\t\t时长\t\t\t评分\t\t\t票价\t\t\t余票数量\t\t\t放映时间");
  9. for (movie m : movies) {
  10. System.out.println(m.getName() + "\t\t" + m.getActor() + "\t\t" + m.getTime() + "\t\t" + m.getScore() + "\t\t\t" +
  11. m.getPrice() + "\t\t\t" + m.getNum() + "\t\t\t" + sdf.format(m.getStartData()));
  12. }
  13. System.out.println("==================================================================================");
  14. });
  15. }

(2)购票操作

  1. /**
  2. * 用户购票功能
  3. */
  4. private static void buyMovie() {
  5. showAllMovies();
  6. System.out.println("=============================用户购票功能========================");
  7. while (true) {
  8. System.out.println("请输入您想要买票的影城:");
  9. String shopName = SC.nextLine();
  10. //查询是否存在该商家
  11. Business business = getUserByShopName(shopName);
  12. if (business != null) {
  13. //此商家全部影片
  14. List<movie> movies = ALL_MOVIES.get(business);
  15. if (movies.size() > 0) {
  16. while (true) {
  17. System.out.println("请输入需要购买电影的名称:");
  18. String movieName=SC.nextLine();
  19. //在当前商家查询该电影对象
  20. movie m=getMovieByShopName(movieName,business);
  21. if(m!=null){
  22. while (true) {
  23. //开始购票
  24. System.out.println("请您输入需要购买的票数:");
  25. String movieNum=SC.nextLine();
  26. int buyNum=Integer.valueOf(movieNum);
  27. //判断电影票数是否足够
  28. if(m.getNum()>=buyNum){
  29. //当前需要花费的金额
  30. double money= BigDecimal.valueOf(m.getPrice()).multiply(BigDecimal.valueOf(buyNum)).doubleValue();
  31. if(loginUser.getMoney()>=money){
  32. System.out.println("您成功购买了"+buyNum+"张《"+m.getName()+"》,花费了"+money+"元钱");
  33. //更新客户和商家数据
  34. loginUser.setMoney(loginUser.getMoney()-money);
  35. m.setNum(m.getNum()-buyNum);
  36. business.setMoney(business.getMoney()+money);
  37. return;
  38. }
  39. else {
  40. System.out.println("您的钱不够");
  41. System.out.println("是否继续买票?(y/f):");
  42. String command = SC.nextLine();
  43. switch (command) {
  44. case "y":
  45. break;
  46. default:
  47. System.out.println("好的");
  48. return;
  49. }
  50. }
  51. }
  52. else {
  53. System.out.println("票数不够,您当前最多购买"+m.getNum()+"张");
  54. System.out.println("是否继续买票?(y/f):");
  55. String command = SC.nextLine();
  56. switch (command) {
  57. case "y":
  58. break;
  59. default:
  60. System.out.println("好的");
  61. return;
  62. }
  63. }
  64. }
  65. }
  66. else {
  67. System.out.println("该影城无该电影");
  68. }
  69. }
  70. } else {
  71. System.out.println("该影城无电影放映");
  72. System.out.println("是否继续买票?(y/f):");
  73. String command = SC.nextLine();
  74. switch (command) {
  75. case "y":
  76. break;
  77. default:
  78. System.out.println("好的");
  79. return;
  80. }
  81. }
  82. } else {
  83. System.out.println("对不起没有该影城");
  84. }
  85. }
  86. }

(3)评分功能[拓展]

  1. /**
  2. * 评分功能
  3. */
  4. private static void scoreMovie() {
  5. // 1、查询当前登录成功的用户历史购买记录,看哪些电影是它可以评分的。
  6. Custom c = (Custom) loginUser;
  7. Map<String, Boolean> movies = c.getBuyMovies();
  8. if(movies.size() == 0 ){
  9. System.out.println("当前您没有看过电影,不能评价!");
  10. return;
  11. }
  12. // 买过了 ,看哪些电影是它可以评分的。
  13. movies.forEach((name, flag) -> {
  14. if(flag){
  15. System.out.println(name +"此电影已评价");
  16. }else {
  17. System.out.println("请您对:" + name +"进行打分(0-10):");
  18. double score = Double.valueOf(SC.nextLine());
  19. // 先根据电影名称拿到评分数据
  20. List<Double> scores = MOVIES_SCORE.get(name); // MOVIES_SCORE = [ 名称=[10] , ... ]
  21. if(scores == null){
  22. // 说明此电影是第一次评价
  23. scores = new ArrayList<>();
  24. scores.add(score);
  25. MOVIES_SCORE.put(name , scores);
  26. }else {
  27. scores.add(score);
  28. }
  29. movies.put(name, true);
  30. }
  31. });
  32. }

(4)评分降序展示

  1. /**
  2. * 评分降序展示
  3. */
  4. private static void scoreSort() {
  5. if (MOVIES_SCORE.size() > 0) {
  6. List<Score> scores = new ArrayList<>();
  7. MOVIES_SCORE.forEach(new BiConsumer<String, List<Double>>() {
  8. @Override
  9. public void accept(String s, List<Double> doubles) {
  10. List<Double> list = MOVIES_SCORE.get(s);
  11. double sum = 0;
  12. for (Double d : list) {
  13. sum = BigDecimal.valueOf(sum).add(BigDecimal.valueOf(d)).doubleValue();
  14. }
  15. scores.add(new Score(s, BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(list.size())).doubleValue()));
  16. }
  17. });
  18. scores.sort((o1, o2)->Double.compare(o2.getScore(),o1.getScore()));
  19. scores.forEach(score->System.out.println(score.getMovieName()+"\t\t"+score.getScore()));
  20. }
  21. else {
  22. System.out.println("还没有评分数据");
  23. }
  24. }

(5)根据片名查询全部影片信息

  1. public static void getInfoByMovieName() {
  2. System.out.println("请输入想要查询的电影名称:");
  3. String movieName=SC.nextLine();
  4. ALL_MOVIES.forEach((business, movies) -> {
  5. for (movie m : movies) {
  6. if(m.getName().equals(movieName)) {
  7. System.out.println("==================================================================================");
  8. System.out.println(business.getShopName() + "\t\t电话:" + business.getPhone() + "\t\t地址:" + business.getShopAddress());
  9. System.out.println("片名\t\t\t主演\t\t\t时长\t\t\t评分\t\t\t票价\t\t\t余票数量\t\t\t放映时间");
  10. System.out.println(m.getName() + "\t\t" + m.getActor() + "\t\t" + m.getTime() + "\t\t" + m.getScore() + "\t\t\t" +
  11. m.getPrice() + "\t\t\t" + m.getNum() + "\t\t\t" + sdf.format(m.getStartData()));
  12. }
  13. }
  14. });
  15. }

5、客户注册

  1. /**
  2. * 用户注册
  3. */
  4. private static void customerRegister() {
  5. Custom user = new Custom();
  6. System.out.println("=============================用户注册========================");
  7. //定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额
  8. System.out.println("请输入登录名称:");
  9. String loginName = SC.nextLine();
  10. while (true) {
  11. System.out.println("请输入登录密码:");
  12. String loginPasswordFirst = SC.nextLine();
  13. System.out.println("请再次输入登录密码:");
  14. String loginPasswordSecond = SC.nextLine();
  15. if (loginPasswordSecond.equals(loginPasswordFirst)) {
  16. user.setPassword(loginPasswordSecond);
  17. break;
  18. } else {
  19. System.out.println("两次输入的密码不一致,请再次输入");
  20. }
  21. }
  22. System.out.println("请输入真实名称:");
  23. String userName = SC.nextLine();
  24. System.out.println("请输入性别:");
  25. String sex = SC.nextLine();
  26. System.out.println("请输入电话:");
  27. String phone = SC.nextLine();
  28. System.out.println("请输入账户金额:");
  29. String money = SC.nextLine();
  30. user.setMoney(Double.valueOf(money));
  31. user.setUserName(userName);
  32. user.setPhone(phone);
  33. user.setSex(sex);
  34. user.setLoginName(loginName);
  35. ALL_USERS.add(user);
  36. System.out.println(user.getLoginName() + "注册成功");
  37. }

6、商家注册

  1. /**
  2. * 商家注册
  3. */
  4. private static void businessRegister() {
  5. Business user = new Business();
  6. System.out.println("=============================商家注册========================");
  7. //定义User类作为父类,属性:登录名称、密码、真实名称、性别、电话、账户金额
  8. System.out.println("请输入登录名称:");
  9. String loginName = SC.nextLine();
  10. while (true) {
  11. System.out.println("请输入登录密码:");
  12. String loginPasswordFirst = SC.nextLine();
  13. System.out.println("请再次输入登录密码:");
  14. String loginPasswordSecond = SC.nextLine();
  15. if (loginPasswordSecond.equals(loginPasswordFirst)) {
  16. user.setPassword(loginPasswordSecond);
  17. break;
  18. } else {
  19. System.out.println("两次输入的密码不一致,请再次输入");
  20. }
  21. }
  22. System.out.println("请输入真实名称:");
  23. String userName = SC.nextLine();
  24. System.out.println("请输入性别:");
  25. String sex = SC.nextLine();
  26. System.out.println("请输入电话:");
  27. String phone = SC.nextLine();
  28. System.out.println("请输入账户金额:");
  29. String money = SC.nextLine();
  30. System.out.println("请输入店铺名称:");
  31. String shopName = SC.nextLine();
  32. System.out.println("请输入店铺地址:");
  33. String address = SC.nextLine();
  34. user.setMoney(Double.valueOf(money));
  35. user.setUserName(userName);
  36. user.setPhone(phone);
  37. user.setSex(sex);
  38. user.setLoginName(loginName);
  39. user.setShopAddress(address);
  40. user.setShopName(shopName);
  41. ALL_USERS.add(user);
  42. System.out.println(user.getLoginName() + "注册成功");
  43. }

基于Java的电影购票系统-Java文档类资源-CSDN下载日志框架搭建、系统角色分析首页设计、登录、商家界面、用户界面实现商家-详情页设计、影片上架、更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/qq_44771627/85095268

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1007370
推荐阅读
相关标签
  

闽ICP备14008679号