public class MovieApp {
//1.定义List集合来存储用户
public static final List<User> ALL_USERS = new ArrayList<>();
//2.定义Map集合存储商家电影信息
public static final Map<Business, List<Movie>> ALL_MOVIES = new HashMap<>();
public static final Scanner SYS_SC = new Scanner(System.in);
public static User loginUser;
public static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static final Logger LOGGER = LoggerFactory.getLogger("MovieApp.class");
//3.准备测试数据
static {
Customer c = new Customer();
c.setLoginName("zyf888");
c.setPassword("123456");
c.setUserName("黑马刘德华");
c.setSex('男');
c.setMoney(10000);
c.setPhoneNumber("110110");
ALL_USERS.add(c);
Customer c1 = new Customer();
c1.setLoginName("gzl888");
c1.setPassword("123456");
c1.setUserName("黑马关之琳");
c1.setSex('女');
c1.setMoney(2000);
c1.setPhoneNumber("111111");
ALL_USERS.add(c1);
Business b = new Business();
b.setLoginName("ztt1022");
b.setPassword("123456");
b.setUserName("张霞");
b.setMoney(0);
b.setSex('女');
b.setPhoneNumber("110110");
b.setAddress("火星6号2B二层");
b.setCinemaName("甜甜圈国际影城");
ALL_USERS.add(b);
// 注意,商家一定需要加入到店铺排片信息中去
List<Movie> movies = new ArrayList<>();
ALL_MOVIES.put(b, movies); // b = []
Business b2 = new Business();
b2.setLoginName("zxp0611");
b2.setPassword("123456");
b2.setUserName("宝刚");
b2.setMoney(0);
b2.setSex('男');
b2.setPhoneNumber("110110");
b2.setAddress("火星8号8B八层");
b2.setCinemaName("巧克力国际影城");
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("请输入你要进行的操作");
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() {
String regex = "\\w{6,}";
while (true) {
System.out.println("请输入你的登录名称:");
String loginName = SYS_SC.nextLine();
if (loginName.matches(regex)) {
System.out.println("请输入你的登录密码:");
String password = SYS_SC.nextLine();
User u = searchUserByLoginName(loginName);
if (u != null) {
if (u.getPassword().equals(password)) {
loginUser = u;
LOGGER.info(u.getUserName() + "登录了系统");
if (u instanceof Business) {
showBusinessMain();
} else if (u instanceof Customer) {
showCustomerMain();
}
return;
} else {
System.out.println("密码错误,请重新输入");
}
} else {
System.out.println("密码错误,请重新输入");
}
} else {
System.out.println("格式不正确");
}
}
}
/**
* 根据用户名查找用户对象
*/
private static User searchUserByLoginName(String loginName) {
for (int i = 0; i < ALL_USERS.size(); i++) {
User user = ALL_USERS.get(i);
if (user.getLoginName().equals(loginName)) {
return user;
}
}
return null;
}
/**
* 顾客操作界面
*/
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":
//查询电影
while (true) {
System.out.println("请输入你要查询的电影名称");
String movieName = SYS_SC.nextLine();
Movie movie = searchMovieByName(movieName);
if (movie != null) {
showMovieInfos(movie);
break;
}else {
System.out.println("影片不存在");
}
}
case "3":
// 评分功能
break;
case "4":
// 购票功能
buyTicket();
break;
case "5":
return; // 干掉方法
default:
System.out.println("不存在该命令!!");
break;
}
}
}
/**
* 用户功能:买票
*/
private static void buyTicket() {
while (true) {
System.out.println("请输入您想看的影片:");
String movieName = SYS_SC.nextLine();
Business business = searchBusinessByMovieName(movieName);
if (business != null){
Movie movie = searchMovieByName(movieName);
System.out.println("上映影院:" + business.getCinemaName());
showMovieInfos(movie);
System.out.println("票价为:" + movie.getPrice() + ",是否确定购买: y/n");
String command = SYS_SC.nextLine();
switch (command){
case "y":
movie.setTicketNumber(movie.getTicketNumber() - 1);
loginUser.setMoney(loginUser.getMoney() - movie.getPrice());
System.out.println("购买成功!");
return;
default:
System.out.println("取消购买");
return;
}
}else {
System.out.println("影片未上架");
}
}
}
/**
* 用户功能:展示所有电影信息
*/
private static void showAllMovies() {
ALL_MOVIES.forEach((business, movies) -> {
System.out.println(business.getCinemaName());
for (Movie movie : movies) {
showMovieInfos(movie);
}
});
}
/**
* 商家操作界面
*/
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() {
Business loginBusiness = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(loginBusiness);
if (movies.size() > 0) {
System.out.println("影片列表如下:");
for (Movie movie : movies) {
System.out.println(movie.getMovieName());
}
while (true) {
System.out.println("请输入你要修改的影片名称:");
String movieName = SYS_SC.nextLine();
Movie movie = searchMovieByName(movieName);
if (movie != null) {
while (true) {
System.out.println("请选择你要修改的信息:");
System.out.println("1.修改价格");
System.out.println("2.修改上映时间");
String command = SYS_SC.nextLine();
switch (command) {
case "1":
System.out.println("请输入修改后的价格:");
String price = SYS_SC.nextLine();
movie.setPrice(Double.valueOf(price));
return;
case "2":
System.out.println("请输入修改后的上映时间:");
String date = SYS_SC.nextLine();
try {
movie.setStartTime(sdf.parse(date));
} catch (ParseException e) {
e.printStackTrace();
LOGGER.error("修改上映时间出错");
}
return;
default:
System.out.println("没有该选项");
}
}
} else {
System.out.println("名称错误,请重新输入");
}
}
} else {
System.out.println("没有可以修改的影片");
return;
}
}
/**
* 商家功能:下架影片
*/
private static void deleteMovie() {
Business loginBusiness = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(loginBusiness);
if (movies.size() > 0) {
System.out.println("影片列表如下:");
for (Movie movie : movies) {
System.out.println(movie.getMovieName());
}
while (true) {
System.out.println("请输入你要下架的影片名称:");
String movieName = SYS_SC.nextLine();
Movie movie = searchMovieByName(movieName);
if (movie != null) {
movies.remove(movie);
System.out.println(movieName + "下架成功");
return;
} else {
System.out.println("名称错误,请重新输入");
}
}
} else {
System.out.println("没有可以下架的影片");
return;
}
}
/**
* 商家功能:上架影片
*/
private static void addMovie() {
Movie movie = new Movie();
Business loginBusiness = (Business) loginUser;
List<Movie> movies = ALL_MOVIES.get(loginBusiness);
System.out.println("请您输入新片名:");
String name = SYS_SC.nextLine();
movie.setMovieName(name);
System.out.println("请您输入主演:");
String actor = SYS_SC.nextLine();
movie.setActor(actor);
System.out.println("请您输入时长:");
String duration = SYS_SC.nextLine();
movie.setDuration(Integer.valueOf(duration));
System.out.println("请您输入票价:");
String price = SYS_SC.nextLine();
movie.setPrice(Double.valueOf(price));
System.out.println("请您输入票数:");
String ticketNumber = SYS_SC.nextLine(); // 200\n
movie.setTicketNumber(Integer.valueOf(ticketNumber));
while (true) {
try {
System.out.println("请输入影片上映时间:");
String startTime = SYS_SC.nextLine();
movie.setStartTime(sdf.parse(startTime));
movies.add(movie);
System.out.println(movie.getMovieName() + "上架成功");
return;
} catch (ParseException e) {
e.printStackTrace();
LOGGER.error("时间解析错误");
}
}
}
/**
* 商家功能:展示商家的详细信息
*/
private static void showBusinessInfos() {
System.out.println("==========商家详细信息==========");
Business loginBusiness = (Business) loginUser;
System.out.println("名称:" + loginBusiness.getCinemaName());
System.out.println("电话:" + loginBusiness.getPhoneNumber());
System.out.println("地址:" + loginBusiness.getAddress());
List<Movie> movies = ALL_MOVIES.get(loginBusiness);
if (movies.size() > 0) {
for (Movie movie : movies) {
showMovieInfos(movie);
}
} else {
System.out.println("没有电影上架");
}
}
/**
* 根据电影名称查找电影对象
*/
private static Movie searchMovieByName(String movieName) {
Set<Business> businesses = ALL_MOVIES.keySet();
for (Business business : businesses) {
List<Movie> movies = ALL_MOVIES.get(business);
for (Movie movie : movies) {
if (movie.getMovieName().contains(movieName)){
return movie;
}
}
}
return null;
}
/**
* 根据电影名查找上映的商家
*/
private static Business searchBusinessByMovieName(String movieName){
Set<Business> businesses = ALL_MOVIES.keySet();
for (Business business : businesses) {
List<Movie> movies = ALL_MOVIES.get(business);
for (Movie movie : movies) {
if (movie.getMovieName().contains(movieName)){
return business;
}
}
}
return null;
}
/**
* 根据名称展示电影信息
*/
private static void showMovieInfos(Movie movie){
System.out.println("==========电影信息==========");
System.out.println("电影名称:" + movie.getMovieName());
System.out.println("主演:" + movie.getActor());
System.out.println("时长:" + movie.getDuration());
System.out.println("评分:" + movie.getStar());
System.out.println("票价:" + movie.getPrice());
System.out.println("剩余票数:" + movie.getTicketNumber());
System.out.println("放映时间:" + sdf.format(movie.getStartTime()));
System.out.println("==========================");
}
}
User类:
public class User {
private String loginName;
private String password;
private String userName;
private char sex;
private String phoneNumber;
private double money;
public User() {
}
public User(String loginName, String password, String userName, char sex, String phoneNumber, double money) {
this.loginName = loginName;
this.password = password;
this.userName = userName;
this.sex = sex;
this.phoneNumber = phoneNumber;
this.money = money;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
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;
}
}
Business类:
public class User {
private String loginName;
private String password;
private String userName;
private char sex;
private String phoneNumber;
private double money;
public User() {
}
public User(String loginName, String password, String userName, char sex, String phoneNumber, double money) {
this.loginName = loginName;
this.password = password;
this.userName = userName;
this.sex = sex;
this.phoneNumber = phoneNumber;
this.money = money;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
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;
}
}
Customer类:
public class Customer extends User {
public Customer() {
}
public Customer(String loginName, String password, String userName, char sex, String phoneNumber, double money) {
super(loginName, password, userName, sex, phoneNumber, money);
}
}
Movie类:
public class Movie {
private String movieName;
private String actor;
private double star;
private int duration;
private double price;
private int ticketNumber;
private Date startTime;
public Movie() {
}
public Movie(String movieName, String actor, double star, int duration, double price, int ticketNumber, Date startTime) {
this.movieName = movieName;
this.actor = actor;
this.star = star;
this.duration = duration;
this.price = price;
this.ticketNumber = ticketNumber;
this.startTime = startTime;
}
public String getMovieName() {
return movieName;
}
public void setMovieName(String movieName) {
this.movieName = movieName;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
public double getStar() {
return star;
}
public void setStar(double star) {
this.star = star;
}
public int getDuration() {
return duration;
}
public void setDuration(int duration) {
this.duration = duration;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getTicketNumber() {
return ticketNumber;
}
public void setTicketNumber(int ticketNumber) {
this.ticketNumber = ticketNumber;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
}