image.png

    1. package com.itheima.run;
    2. import com.itheima.bean.Business;
    3. import com.itheima.bean.Customer;
    4. import com.itheima.bean.Movie;
    5. import com.itheima.bean.User;
    6. import javax.naming.NamingEnumeration;
    7. import java.util.*;
    8. public class MovieSystem {
    9. /**
    10. * 定义系统的数据容器用户存储数据
    11. * 1. 存储很多用户(客户对象,商家对象)
    12. */
    13. // 定义成一个常量集合,表示这个集合容器不能被改变(地址不能变,可以加数据,地址永远指向ArrayList
    14. public static final List<User> ALL_USERS = new ArrayList<>(); // 这里用List存储,也可以用Set集合,只不过顺序是无序的
    15. /**
    16. * 存储系统全部商家和 其排片信息
    17. * 商家1 = 【p1,p2,p3...]
    18. * 商家2 = 【p2,p3,...]
    19. * 。。。。 使用map集合,键值对的形式
    20. * @param args
    21. */
    22. public static final Map<Business,List<Movie>> ALL_MOVIES = new HashMap<>(); // 经典的Map集合写法代码
    23. // 定义一个静态常量的扫描器,防止别人修改(加final修饰)
    24. public static final Scanner SYS_SC = new Scanner(System.in);
    25. // 定义一个静态的User类型的变量记住当前登录成功的用户类型
    26. // 一开始没有记住用户,这个变量加载一次
    27. // 静态变量成员 (共享的,在本类中直接调用变量名即可)
    28. public static User loginUser; // 这是一个静态的变量,每次登录一个用户,就传给这个变量
    29. /**
    30. * 3. 准备一些测试数据
    31. * @param args
    32. */
    33. static {
    34. // Customer 是自己定义的用户类(继承了User类),为成员添加值
    35. // 可以继承父类的私有成员,不能直接访问,但是可以通过geter,seter访问
    36. // 然后将 用户对象,添加到集合中去 c对象有LoginName等成员且被重新赋值,不能直接访问
    37. // 然后将 用户对象,添加到集合中去
    38. // 因为Business类继承了User类, 作为子类对象可以扔进去(ALL_USERS集合接收的是父类对象,子类也可以进去)
    39. // 然后将 用户对象,添加到集合中去
    40. // 注意: 商家一定需要加入到店铺排片信息中去
    41. // 键值对形式 {商家:电影名) // b = []
    42. Customer c = new Customer();
    43. c.setLoginName("zyf888");
    44. c.setPassWord("123456");
    45. c.setUserName("黑马刘德华");
    46. c.setSex('男');
    47. c.setMoney(10000);
    48. c.setPhone("110110");
    49. ALL_USERS.add(c);
    50. Customer c1 = new Customer();
    51. c1.setLoginName("gzl888");
    52. c1.setPassWord("123456");
    53. c1.setUserName("黑马关之琳");
    54. c1.setSex('女');
    55. c1.setMoney(2000);
    56. c1.setPhone("111111");
    57. ALL_USERS.add(c1);
    58. Business b = new Business();
    59. b.setLoginName("baozugong888");
    60. b.setPassWord("123456");
    61. b.setUserName("黑马包租公");
    62. b.setMoney(0);
    63. b.setSex('男');
    64. b.setPhone("110110");
    65. b.setAddress("火星6号2B二层");
    66. b.setShopName("甜甜圈国际影城");
    67. ALL_USERS.add(b);
    68. // 注意,商家一定需要加入到店铺排片信息中去
    69. List<Movie> movies = new ArrayList<>();
    70. ALL_MOVIES.put(b , movies); // b = []
    71. Business b2 = new Business();
    72. b2.setLoginName("baozupo888");
    73. b2.setPassWord("123456");
    74. b2.setUserName("黑马包租婆");
    75. b2.setMoney(0);
    76. b2.setSex('女');
    77. b2.setPhone("110110");
    78. b2.setAddress("火星8号8B八层");
    79. b2.setShopName("巧克力国际影城");
    80. ALL_USERS.add(b2);
    81. // 注意,商家一定需要加入到店铺排片信息中去
    82. List<Movie> movies3 = new ArrayList<>();
    83. ALL_MOVIES.put(b2 , movies3); // b2 = []
    84. }
    85. public static void main(String[] args) {
    86. // 将首页展示定义成一个方法,然后调用就可以了
    87. showMain();
    88. }
    89. private static void showMain() {
    90. while (true) {
    91. System.out.println("==========黑马电影首页============");
    92. System.out.println("1. 登录");
    93. System.out.println("2. 用户注册");
    94. System.out.println("3. 商家注册");
    95. System.out.println("请输入操作命令:");
    96. // 使用扫描器的API nextLine 扫描一行的数据, next是扫描输入的数据,但是遇到空格会停止扫描,nextLine扫描一整行
    97. String command = SYS_SC.nextLine();
    98. // 用switch分支,当用户输入对应的数字命令,会跳到对应的分支里面去
    99. switch (command){
    100. case "1":
    101. // 登录了 (像这种要定义独立功能的,要写独立方法)
    102. login();
    103. break;
    104. case "2":
    105. break;
    106. case "3":
    107. break;
    108. case "4":
    109. break;
    110. default:
    111. System.out.println("命令有误,请确认!");
    112. }
    113. }
    114. }
    115. private static void login() {
    116. while (true) {
    117. System.out.println("请您输入登录名称:");
    118. String loginName = SYS_SC.nextLine();
    119. System.out.println("请您输入登录密码:");
    120. String passWord = SYS_SC.nextLine();
    121. // 1. 根据登录名称查询用户对象
    122. User u = getUserByLoginName(loginName); // 在这里传入用户名
    123. // 2. 判断用户对象是否存在,存在则说明登录名称正确
    124. if (u != null){ // 像这种一直要判断的,要定义死循环
    125. // 如果该用户不为空,说明存在,存在说明登录名称正确了
    126. // 登录名称正确要验证密码是否正确
    127. if (u.getPassWord().equals(passWord)){
    128. // 登录成功
    129. // 登录成功后将这个对象 传给 先前创建的静态变量
    130. loginUser = u;
    131. // 判断是用户登录的,还是商家登录的 instanceof是判断对象类型
    132. if (u instanceof Customer){ // 判断出如果是客户对象
    133. // 当前登录的是普通用户
    134. showCustomerMain();
    135. }else {
    136. // 当前用户肯定是商家用户(因为User类就存储了两种继承子类对象)
    137. showBusinessMain();
    138. }
    139. return; // 判断出用户登录后登录成功结束该方法
    140. }else {
    141. System.out.println("密码有毛病 ");
    142. }
    143. }else {
    144. System.out.println("登录名称错误,请确认");
    145. }
    146. }
    147. }
    148. private static void showBusinessMain() {
    149. while (true) {
    150. System.out.println("============黑马电影商家界面===================");
    151. // 获取当前登录对象的用户名
    152. System.out.println(loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生": "女生" + "欢迎来到该系统"));
    153. System.out.println("1、展示详情:");
    154. System.out.println("2、上架电影:");
    155. System.out.println("3、下架电影:");
    156. System.out.println("4、修改电影:");
    157. System.out.println("5、退出:");
    158. System.out.println("请输入您要操作的命令:");
    159. String command = SYS_SC.nextLine();
    160. switch (command){
    161. case "1":
    162. // 展示全部排片信息
    163. break;
    164. case "2":
    165. // 上架电影信息
    166. break;
    167. case "3":
    168. // 下架电影信息
    169. break;
    170. case "4":
    171. // 修改电影信息
    172. break;
    173. case "5":
    174. return; // 干掉方法
    175. default:
    176. System.out.println("不存在该命令!!");
    177. break;
    178. }
    179. }
    180. }
    181. private static void showCustomerMain() {
    182. while (true) {
    183. System.out.println("============黑马电影客户界面===================");
    184. System.out.println(loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生": "女生" + "欢迎来到该系统"));
    185. System.out.println("请您选择要操作的功能:");
    186. System.out.println("1、展示全部影片信息功能:");
    187. System.out.println("2、根据电影名称查询电影信息:");
    188. System.out.println("3、评分功能:");
    189. System.out.println("4、购票功能:");
    190. System.out.println("5、退出系统:");
    191. System.out.println("请输入您要操作的命令:");
    192. String command = SYS_SC.nextLine();
    193. switch (command){
    194. case "1":
    195. // 展示全部排片信息
    196. break;
    197. case "2":
    198. break;
    199. case "3":
    200. // 评分功能
    201. break;
    202. case "4":
    203. // 购票功能
    204. break;
    205. case "5":
    206. return; // 干掉方法
    207. default:
    208. System.out.println("不存在该命令!!");
    209. break;
    210. }
    211. }
    212. }
    213. // 定义一个搜索用户名的方法 getUserByLoginName
    214. public static User getUserByLoginName (String loginName) {
    215. // 遍历用户集合的每个元素ALL_USERS
    216. for (User user : ALL_USERS) { // 遍历出来的都是存储在User类的对象
    217. // 判断这个用户的登录名称是否是我们想要的
    218. if (user.getLoginName().equals(loginName)){
    219. // 判断用户的登录名是否和搜索的登录名是否一样
    220. return user; // 如果一样,返回该用户对象,代表查到了
    221. }
    222. }
    223. return null; // 否则就没查到,结束方法
    224. }
    225. }