MovieTest测试类: import com.gaofei.bean.Business; import com.gaofei.bean.Coustomer; import com.gaofei.bean.Movie; import com.gaofei.bean.User; import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.logging.Logger; public class MovieTest { //日志 // public static final Logger LOGGER= (Logger) LoggerFactory.getLogger("MovieTest.class"); //定义静态用户 public static User loginUser; public static final Scanner SC=new Scanner(System.in); //定义存储数据的容器 public static final Collection<User> all_User=new ArrayList<>(); //定义存储商家和影片信息 public static Map<Business, Collection<Movie>> all_Business=new HashMap<Business, Collection<Movie>>(); //时间格式 public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); //准备一些测试数据 static { Coustomer c=new Coustomer(); c.setLoginName("栓一样"); c.setPassWord("123456"); c.setUserName("张三"); c.setSex('男'); c.setMoney(23654); c.setPhoneNumber("123456987"); all_User.add(c); Coustomer c1=new Coustomer(); c1.setLoginName("不一样"); c1.setPassWord("123456"); c1.setUserName("张4"); c1.setSex('女'); c1.setMoney(23654); c1.setPhoneNumber("123456987"); all_User.add(c1); Business b = new Business(); b.setLoginName("baozugong888"); b.setPassWord("123456"); b.setUserName("包租公"); b.setMoney(0); b.setSex('男'); b.setPhoneNumber("110110"); b.setAddress("火星6号2B二层"); b.setShopName("甜甜圈国际影城"); all_User.add(b); // 注意,商家一定需要加入到店铺排片信息中去 Collection<Movie> movies = new ArrayList<>(); all_Business.put(b , movies); // b = [] Business b2 = new Business(); b2.setLoginName("baozupo888"); b2.setPassWord("123456"); b2.setUserName("包租婆"); b2.setMoney(0); b2.setSex('女'); b2.setPhoneNumber("110110"); b2.setAddress("火星8号8B八层"); b2.setShopName("巧克力国际影城"); all_User.add(b2); // 注意,商家一定需要加入到店铺排片信息中去 Collection<Movie> movies3 = new ArrayList<>(); all_Business.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("请输入上面的数字!!!"); String res=SC.nextLine();//推荐使用这种 switch (res){ case "1": //登录 longin(); break; case "2": //用户注册 break; case "3": //商家注册 break; default: System.out.println("输入错误!!"); } } } //登录方法 private static void longin() { while (true) { System.out.println("请您输入登录名称:"); String loinName=SC.nextLine(); System.out.println("请输入您登录的密码:"); String passWord=SC.nextLine(); //根据用户名查询登录对象 User u=getUsers(loinName); //判断登录名称是否存在 if (u!=null){ //判断密码是否正确 if (u.getPassWord().equals(passWord)){ //登录成功 loginUser=u; // LOGGER.info(loginUser.getLoginName()+"登录成功!!");//日志记录 //判断用户是普通用户还是商家 if (u instanceof Coustomer){//用instanceof判断类型 //普通用户 showCouster(); }else { //商家1 showBusiness(); } return; }else { //登录失败 System.out.println("你输入的密码错误,请重新登录!!"); } }else { System.out.println("登录名称错误,请重新输入!!!"); } } } //商家界面 private static void showBusiness() { 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 = SC.nextLine(); switch (command){ case "1": // 展示全部排片信息 showAllMovies(); 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; Collection<Movie> movies =all_Business.get(business); if (movies.size() == 0) { System.out.println("当期无片可以修改~~"); return; } } //下架电影功能 private static void deleteMovie() { System.out.println("================下架电影===================="); Business business = (Business) loginUser; Collection<Movie> movies = all_Business.get(business); if(movies.size() == 0) { System.out.println("当期无片可以下架~~"); return; } } private static void addMovie() { System.out.println("================上架电影===================="); // 根据商家对象(就是登录的用户loginUser),作为Map集合的键 提取对应的值就是其排片信息 :Map<Business , List<Movie>> ALL_MOVIES Business business = (Business) loginUser; Collection<Movie> movies = all_Business.get(business); System.out.println("请您输入新片名:"); String name = SC.nextLine(); System.out.println("请您输入主演:"); String actor = SC.nextLine(); System.out.println("请您输入时长:"); String time = SC.nextLine(); System.out.println("请您输入票价:"); String price = SC.nextLine(); System.out.println("请您输入票数:"); String totalNumber = SC.nextLine();; // 200\n while (true) { try { System.out.println("请您输入影片放映时间:"); String stime = 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(); System.out.println("时间解析出了毛病"); } } } // 展示全部排片信息 private static void showAllMovies() { System.out.println("=============展示全部商家排片信息================="); // LOGGER.info(loginUser.getLoginName()+"商家正在看详细");//日志记录 all_Business.forEach((business, movies) -> { System.out.println(business.getShopName() + "\t\t电话:" + business.getShopName() + "\t\t地址:" + business.getAddress()); if (movies.size()>0) { 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.getPrice() + "\t\t" + movie.getNumber() + "\t\t" + sdf.format(movie.getStartTime()));// + "\t\t" + movie.getScore() } } else { System.out.println("没有影片信息!!"); } }); } //普通用户界面 private static void showCouster() { 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 = 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; } } } // 1、查询当前登录成功的用户历史购买记录,看哪些电影是它可以评分的。 private static void scoreMovie() { Coustomer c = ( Coustomer) loginUser; Map<String, Boolean> movies = c.getBuyMovies(); if (movies.size() == 0) { System.out.println("当前您没有看过电影,不能评价!"); return; } } //用户购票功能 private static void buyMovie() { showAllMovies(); System.out.println("=============用户购票功能================="); while (true) { System.out.println("请您输入需要买票的门店:"); String shopName = SC.nextLine(); // 1、查询是否存在该商家。 Business business = getBusinessByShopName(shopName); if(business == null){ System.out.println("对不起,没有该店铺!请确认"); }else { // 2、此商家全部的排片 Collection<Movie> movies = all_Business.get(business); // 3、判断是否存在上映的电影 if(movies.size() > 0) { // 4、开始进行选片购买 while (true) { System.out.println("请您输入需要购买电影名称:"); String movieName = SC.nextLine(); // 去当前商家下,查询该电影对象。 Movie movie = getMovieByShopAndName(business, movieName); if(movie != null){ // 开始购买 while (true) { System.out.println("请您输入要购买的电影票数:"); String number = 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); Coustomer c = (Coustomer) loginUser; // 记录购买电影的信息 // 第一个参数是购买的电影,第二个参数是没有评价的标记! c.getBuyMovies().put(movie.getName(), false); return;// 结束方法 }else { // 钱不够! System.out.println("是否继续~~"); System.out.println("是否继续买票?y/n"); String command =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 = 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 = SC.nextLine(); switch (command) { case "y": break; default: System.out.println("好的!"); return; } } } } } public static Movie getMovieByShopAndName(Business business , String name){ Collection<Movie> movies = all_Business.get(business); for (Movie movie : movies) { if(movie.getName().contains(name)){ return movie; } } return null; } //根据商家店铺名称查询商家对象 public static Business getBusinessByShopName(String shopName){ Set<Business> businesses =all_Business.keySet(); for (Business business : businesses) { if(business.getShopName().equals(shopName)){ return business; } } return null; } //获取用户名 public static User getUsers(String loinName){ for (User user:all_User){ //判断这个登录名称是不是我们想要的 if(user.getLoginName().equals(loinName)){ return user; } } return null; } }
Business: public class Business extends User{//商家类 //店铺名称 private String shopName; public Business() { } public Business(String shopName) { this.shopName = shopName; } public Business(String loginName, String userName, String passWord, char sex, String phoneNumber, double money, String shopName) { super(loginName, userName, passWord, sex, phoneNumber, money); this.shopName = shopName; } 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; } //店铺地址 private String address; }
Coustomer类:
public class Coustomer extends User { public <K, V> Map getBuyMovies() { return null; }//客户类 }
Movie类 import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Collection; import java.util.Date; import java.util.Objects; 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 class User {//客户和商家父类 private String loginName; public User() { } @Override public String toString() { return "User{" + "loginName='" + loginName + '\'' + ", userName='" + userName + '\'' + ", passWord='" + passWord + '\'' + ", sex=" + sex + ", phoneNumber='" + phoneNumber + '\'' + ", 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 getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } public User(String loginName, String userName, String passWord, char sex, String phoneNumber, double money) { this.loginName = loginName; this.userName = userName; this.passWord = passWord; this.sex = sex; this.phoneNumber = phoneNumber; this.money = money; } private String userName; private String passWord; private char sex; private String phoneNumber; private double money; }