
package com.itheima.run;import com.itheima.bean.Business;import com.itheima.bean.Customer;import com.itheima.bean.Movie;import com.itheima.bean.User;import javax.naming.NamingEnumeration;import java.util.*;public class MovieSystem { /** * 定义系统的数据容器用户存储数据 * 1. 存储很多用户(客户对象,商家对象) */ // 定义成一个常量集合,表示这个集合容器不能被改变(地址不能变,可以加数据,地址永远指向ArrayList public static final List<User> ALL_USERS = new ArrayList<>(); // 这里用List存储,也可以用Set集合,只不过顺序是无序的 /** * 存储系统全部商家和 其排片信息 * 商家1 = 【p1,p2,p3...] * 商家2 = 【p2,p3,...] * 。。。。 使用map集合,键值对的形式 * @param args */ public static final Map<Business,List<Movie>> ALL_MOVIES = new HashMap<>(); // 经典的Map集合写法代码 // 定义一个静态常量的扫描器,防止别人修改(加final修饰) public static final Scanner SYS_SC = new Scanner(System.in); // 定义一个静态的User类型的变量记住当前登录成功的用户类型 // 一开始没有记住用户,这个变量加载一次 // 静态变量成员 (共享的,在本类中直接调用变量名即可) public static User loginUser; // 这是一个静态的变量,每次登录一个用户,就传给这个变量 /** * 3. 准备一些测试数据 * @param args */ static { // Customer 是自己定义的用户类(继承了User类),为成员添加值 // 可以继承父类的私有成员,不能直接访问,但是可以通过geter,seter访问 // 然后将 用户对象,添加到集合中去 c对象有LoginName等成员且被重新赋值,不能直接访问 // 然后将 用户对象,添加到集合中去 // 因为Business类继承了User类, 作为子类对象可以扔进去(ALL_USERS集合接收的是父类对象,子类也可以进去) // 然后将 用户对象,添加到集合中去 // 注意: 商家一定需要加入到店铺排片信息中去 // 键值对形式 {商家:电影名) // b = [] Customer c = new Customer(); c.setLoginName("zyf888"); c.setPassWord("123456"); c.setUserName("黑马刘德华"); c.setSex('男'); c.setMoney(10000); c.setPhone("110110"); ALL_USERS.add(c); Customer c1 = new Customer(); c1.setLoginName("gzl888"); c1.setPassWord("123456"); c1.setUserName("黑马关之琳"); c1.setSex('女'); c1.setMoney(2000); c1.setPhone("111111"); ALL_USERS.add(c1); Business b = new Business(); b.setLoginName("baozugong888"); b.setPassWord("123456"); b.setUserName("黑马包租公"); 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("黑马包租婆"); 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("==========黑马电影首页============"); System.out.println("1. 登录"); System.out.println("2. 用户注册"); System.out.println("3. 商家注册"); System.out.println("请输入操作命令:"); // 使用扫描器的API nextLine 扫描一行的数据, next是扫描输入的数据,但是遇到空格会停止扫描,nextLine扫描一整行 String command = SYS_SC.nextLine(); // 用switch分支,当用户输入对应的数字命令,会跳到对应的分支里面去 switch (command){ case "1": // 登录了 (像这种要定义独立功能的,要写独立方法) login(); break; case "2": break; case "3": break; case "4": 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){ // 像这种一直要判断的,要定义死循环 // 如果该用户不为空,说明存在,存在说明登录名称正确了 // 登录名称正确要验证密码是否正确 if (u.getPassWord().equals(passWord)){ // 登录成功 // 登录成功后将这个对象 传给 先前创建的静态变量 loginUser = u; // 判断是用户登录的,还是商家登录的 instanceof是判断对象类型 if (u instanceof Customer){ // 判断出如果是客户对象 // 当前登录的是普通用户 showCustomerMain(); }else { // 当前用户肯定是商家用户(因为User类就存储了两种继承子类对象) 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": // 展示全部排片信息 break; case "2": // 上架电影信息 break; case "3": // 下架电影信息 break; case "4": // 修改电影信息 break; case "5": return; // 干掉方法 default: System.out.println("不存在该命令!!"); break; } } } private static void showCustomerMain() { while (true) { System.out.println("============黑马电影客户界面==================="); System.out.println(loginUser.getUserName() + (loginUser.getSex() == '男' ? "先生": "女生" + "欢迎来到该系统")); 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": // 展示全部排片信息 break; case "2": break; case "3": // 评分功能 break; case "4": // 购票功能 break; case "5": return; // 干掉方法 default: System.out.println("不存在该命令!!"); break; } } } // 定义一个搜索用户名的方法 getUserByLoginName public static User getUserByLoginName (String loginName) { // 遍历用户集合的每个元素ALL_USERS for (User user : ALL_USERS) { // 遍历出来的都是存储在User类的对象 // 判断这个用户的登录名称是否是我们想要的 if (user.getLoginName().equals(loginName)){ // 判断用户的登录名是否和搜索的登录名是否一样 return user; // 如果一样,返回该用户对象,代表查到了 } } return null; // 否则就没查到,结束方法 }}