目录
一、系统角色分析
基础搭建,导入依赖包和核心配置文件,最关键的一点:不要忘记导入依赖,将jar包全选右键。
定义系统类都是基础操作,此处不添加代码,直接实现功能。
准备好两个静态常量集合
用户类采用统一User类,使用多态的方式,对登录的账户进行判断是商户还是客户。
/**
* 1、定义一个容器用来存储用户信息,由于这个容器只需要一个,定义成静态常量类型
*/
public static final List<User> ALL_USERS = new ArrayList<>();
/**
* 2、定义一个容器存储全部商家和其排片信息,也只需要一个容器
* 商家1 = [p1,p2,p3]
* 商家2 = [p1,p2,p3]
...
*/
public static final Map<Business,List<Movie>> ALL_MOVIES = new HashMap<>();
//将扫描器设为静态常量,公共使用
public static final Scanner SC = new Scanner(System.in);
//定义静态用户对象,存储当前登录的用户信息
public static User loginUser;
二、系统功能实现
1、首页的实现
通过while死循环当用户输入错误命令时重新输入
public static void homePage(){
System.out.println("===============欢迎来到黑马影院============");
while (true) {
System.out.println("请选择您要操作的功能:");
System.out.println("1、登录");
System.out.println("2、商家入驻");
System.out.println("3、客户注册");
System.out.print("请输入您要操作的命令:");
String options = SC.nextLine();
switch (options){
case "1":
//判断是商家还是客户
login();
break;
case "2":
//商家入驻
//settledMerchant();
break;
case "3":
//客户注册
userRegister();
break;
default:
System.out.println("命令有误,请重新输入!");
}
}
}
2、登录操作
通过判断账户是用户还是商家进入不同的功能页面。
/**
* 登录操作
*/
private static void login() {
while (true) {
System.out.print("请输入您的用户名:");
String loginName = SC.nextLine();
System.out.print("请输入您的登陆密码:");
String loginPassword = SC.nextLine();
//通过工具类的方法,校验用户名
User u = MoviesUtil.checkoutName(loginName,loginPassword);
loginUser = u;
if (u != null){
//判断对象是否属于另一个对象的类或子类
if (u instanceof Customer){
//进入用户页面
CustomerOptions.showCustomerPage();
}else
//进入商家界面
BussinessOptions.showBusinessPage();
}else {
System.out.println("您输入的用户名或密码错误,请重新输入!");
}
}
}
//工具类MoviesUtil
/**
* 判断用户名密码是否正确
*
* @param loginName 用户名
* @return 用户对象
*/
public static User checkoutName(String loginName,String loginPassword) {
for (User user : ALL_USERS) {
if (loginName.equals(user.getUserName())) {
if (loginPassword.equals(user.getPassword())){
System.out.println("登陆成功");
return user;
}
}
}
return null;
}
3、商家页面的实现
商家页面中的影片下架功能,我这里采用的是对影片再增加一个属性isAddMovie,对每一个上架的电影设置属性值为Y,如果下架则改为N,对影片遍历时只遍历出属性值为Y 的影片。
/**
* 显示商家页面
*/
public static void showBusinessPage() {
System.out.println("=================黑马商家界面================");
System.out.println("用户名:" + loginUser.getUserName() + "欢迎您进入系统!");
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("6、退出系统");
while (true) {
System.out.print("请输入您要进行的操作:");
String options = SC.nextLine();
switch (options){
case "1":
//展示全部排片信息
showMovies();
break;
case "2":
//上架电影信息
addMovies();
break;
case "3":
//下架电影信息
offMovies();
break;
case "4":
//修改电影信息
changeMovies();
break;
case "5":
//查看账户收益
checkAccountMoney();
break;
case "6":
//退出系统
return;
default:
System.out.println("您输入的操作有误,请重新输入");
}
}
}
具体代码:电影院系统商家页面的实现-Java文档类资源-CSDN下载
4、用户界面的实现
public static void showCustomerPage() {
System.out.println("=================黑马用户界面================");
System.out.println("用户名:" + loginUser.getUserName() + "欢迎您进入系统!");
while (true) {
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.print("请输入您要进行的操作:");
String options = SC.nextLine();
switch (options) {
case "1":
//展示全部影片信息
showMovies();
break;
case "2":
//根据电影名称查询电影信息
quaryMovies();
break;
case "3":
//评分功能
rateMovie();
break;
case "4":
//购票功能
buytickets();
break;
case "5":
//退出系统
System.out.println("您已成功退出系统!");
return;
default:
System.out.println("您输入的操作有误,请重新输入");
}
}
}
具体代码: 电影院系统客户操作界面-Java文档类资源-CSDN下载
三、项目总结
- 键盘输入数据最好使用 nextLine()方法,一次输入一行数据,然后对这一行数据进行类型转换 (Integer.valueOf(String s))、(Double.valueOf(String s)),不会引起数据类型接收错误而报错
- 将不同的操作封装成方法进行调用,简化代码书写,不至于一个方法又臭又长。
- 注意子类继承父类的构造器后重写构造方法时,记住toString方法打印对象内容也要记得更改,否则父类的属性不打印。
private static final Scanner SC = new Scanner(System.in);通过将扫描器设置成静态常量,只需要创建一次对象,全局使用。