Java基础十二(练习,oop)

开发喵影院


根据要求完成开发喵影院的开发。

  1. 定义用户类 User ,包含以下属性:用户的名称(username)、用户登录手机号(phone)、用户的密码(password)、用户的身份(role int类型 1 表示管理员 2 表示普通用户)
  2. 定义电影类 Movie ,包含以下属性:电影的名称(name)、电影的价格(price)、电影的导演(director)、上映时间(date int类型,比如:2023年1月1日 写成20230101)。
  3. 定义电影院类 MovieTheater ,包含以下属性:电影集合 Movie[] movies; 用户集合 User[] users 用来存储多部电影对象及用户对象。
  4. 完成以下功能展示
    • 重写 toString 方法,输出对象的所有信息。
    • 重写 equals 方法
    • 当电影院类中存储电影集合或存储用户的数组超过指定容量时,要进行扩容。
    • 进入系统后可看到如下功能列表:
        1. 查询电影信息
        1. 显示所有电影信息 (按照评分降序显示)
        1. 管理员登录
        1. 用户登录
        1. 用户注册
        1. 退出
    • 用户登录之后可看到如下功能列表:
        1. 修改用户信息
        1. 查询用户信息
        1. 退出
    • 管理员登录可以看到如下功能列表:
        1. 新增电影
        1. 删除电影(输入电影名称,删除对应电影)
        1. 修改电影(输入电影名称,展示电影信息,选择要修改的内容(价格/上映时间),输入内容,修改已存储的电影信息)
        1. 查看所有用户信息
        1. 退出
      1. 界面要求
        1. 通过控制台输入
        1. 通过控制台输出
    • 注释要求
        1. 合理注释

代码实现

1. User 类
package kfm.bases.OOPMovie;

public class User {
    private String username;
    private String phone;
    private String password;
    private Integer role;

    public User(String username, String phone, String password, int role) {
        this.setUsername(username);
        this.setPhone(phone);
        this.setPassword(password);
        this.setRole(role);
    }

    public void setUsername(String username) {
        this.username = username;
    }
    public String getUsername() {
        return username;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getPhone() {
        return phone;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPassword() {
        return password;
    }

    public void setRole(Integer role) {
        this.role = role;
    }
    public Integer getRole() {
        return role;
    }

    @Override
    public String toString() {
        return ((role == 1)?"管理员":"普通用户 ") + username + " 手机号:" + phone;
    }

    // 重写 equals
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        if (obj instanceof User user) {
            if (!user.username.equals(this.username)) {
                return false;
            }
            if (!user.phone.equals(this.phone)) {
                return false;
            }
            if (!user.password.equals(this.password)) {
                return false;
            }
            if (user.role != this.role) {
                return false;
            }
            return true;
        }
        return false;
    }

    @Override
    public int hashCode() {
        int result = 17; // 初始值

        // 计算每个参与哈希计算的属性
        result = 31 * result + (username != null ? username.hashCode() : 0);
        result = 31 * result + (phone != null ? phone.hashCode() : 0);
        result = 31 * result + (password != null ? password.hashCode() : 0);
        result = 31 * result + role;

        return result;
    }

}

2. Movie 类

package kfm.bases.OOPMovie;

public class Movie {
    private String name;
    private Double price;
    private String director;
    private Integer date;

    public Movie(String name, double price, String director, int date) {
        this.name = name;
        this.price = price;
        this.director = director;
        this.date = date;
    }

    public void setPrice(double price) {
        this.price = price;
    }
    public void setDate(int date) {
        this.date = date;
    }
    public String getName() {
        return name;
    }

    public Double getPrice() {
        return price;
    }

    public String getDirector() {
        return director;
    }

    public Integer getDate() {
        return date;
    }

    @Override
    public String toString() {
        return "《" + name + "》\t" + date + "上映\t" + "导演:" + director + "\t价格:" + price;
    }
}

3. MovieTheater 类

package kfm.bases.OOPMovie;

import java.util.Arrays;

public class MovieTheater {
    private Movie[] movies = new Movie[10];
    private User[] users = new User[10];
    private int movNum = 0;
    private int userNum = 0;

    {
        Movie movie1 = new Movie("流浪地球", 45.0, "郭帆", 20190205);
        addMovie(movie1);

        Movie movie2 = new Movie("战狼2", 38.0, "吴京", 20170727);
        addMovie(movie2);

        Movie movie3 = new Movie("复仇者联盟4:终局之战", 58.0, "安东尼·罗素", 20190424);
        addMovie(movie3);

        Movie movie4 = new Movie("你好,李焕英", 42.0, "贾玲", 20210212);
        addMovie(movie4);

        Movie movie5 = new Movie("红海行动", 39.0, "林超贤", 20180216);
        addMovie(movie5);

        Movie movie6 = new Movie("我和我的祖国", 46.0, "陈凯歌", 20190930);
        addMovie(movie6);

        User user1 = new User("小羊呆呆", "123520","5201314", 2);
        addUser(user1);

        User user2 = new User("犯困桃子", "123123","5201314", 1);
        addUser(user2);
    }
    // 向电影数组中添加电影
    public void addMovie(Movie movie) {
        movExpansion();
        movies[movNum] = movie;
        movNum++;
    }

    // 电影集合扩容
    public void movExpansion() {
        if (movNum == movies.length) {
            movies = Arrays.copyOf(movies,movNum * 2);
        }
    }

    // 添加用户
    public void addUser(User user) {
        // 判断是否需要扩容
        userExpansion();
        users[userNum] = user;
        userNum ++;
    }

    // 用户集合扩容
    public void userExpansion() {
        if (userNum == users.length) {
            users = Arrays.copyOf(users,userNum * 2);
        }
    }

    // 遍历现在数组在的电影
    public void show() {
        if (movNum == 0) {
            System.out.println("\u001B[31m 目前电影无在映!\u001B[0m");
        } else {
            for (int i = 0; i < movNum; i++) {
                System.out.println(movies[i].toString());
            }
        }
    }
    // 遍历所有用户
    public void showUser() {
        for (int i = 0; i < userNum; i++) {
            System.out.println((i + 1) + '\t' + users[i].toString());
        }
    }

    // 查找用户
    public User searchUser(String phone, String password, Integer role) {
        for (int i = 0; i < userNum; i++) {
            if (users[i].getPhone().equals(phone) && users[i].getPassword().equals(password) && users[i].getRole() == role) {
                return users[i];
            }
        }
        return null;
    }

    // 查找电影
    public Movie search(String name) {
        for (int i = 0; i < movNum; i++) {
            if (movies[i].getName().equals(name)) {
                return movies[i];
            }
        }
        return null;
    }

    // 删除电影
    public void deleteMovie(String name) {
        for (int i = 0; i < movNum; i++) {
            if (movies[i].getName().equals(name)) {
                if (i != movNum - 1) {
                    movies[i] = movies[i + 1];
                } else {
                    movies[i] = null;
                }
            }
        }
        movNum --;
    }
}

4. Main

package kfm.bases.OOPMovie;

import java.util.Scanner;

public class Main {
    static Scanner input = new Scanner(System.in);
    static MovieTheater movieTheater = new MovieTheater();

    public static void start() {
        System.out.println("欢迎使用开发喵影院系统");
        showMenu();
    }

    private static void showMenu() {
        System.out.println();
        System.out.println("开发喵影院");
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
        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. 退出");
        System.out.print("请输入:");
        int menu = input.nextInt();
        selectMenu(menu);
    }
    private static void selectMenu(int menu) {
        switch (menu) {
            case 1 -> searchMovie();
            case 2 -> showMovie();
            case 3 -> adminlogin();
            case 4 -> userlogin();
            case 5 -> userRegistr();
            default -> exit();
        }

        // 再次展示菜单
        showMenu();
    }

    // 用户登录列表
    private static void showUser(User user) {
        System.out.println("开发喵影院");
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
        System.out.println("欢迎光临!" + user.getUsername());
        System.out.println("请选择功能:");
        System.out.println("1. 修改用户信息");
        System.out.println("2. 查询用户信息");
        System.out.println("3. 退出");
        System.out.print("请输入:");
        int menu = input.nextInt();
        selectUser(menu, user);
    }
    private static void selectUser(int menu, User user) {
        switch (menu) {
            case 1 -> modifyUserInformation(user);
            case 2 -> earchUser(user);
            default -> showMenu();
        }
        // 再次展示菜单
        showUser(user);
    }

    // 查询用户信息
    private static void earchUser(User user) {
        System.out.println(user.toString());
    }
    // 修改用户信息
    private static void modifyUserInformation(User user) {
        System.out.println("修改信息");
        System.out.println();
        System.out.println("请输入你的用户名:");
        user.setUsername(input.next());
        System.out.println("请输入你的电话号码:");
        user.setPhone(input.next());
        user.setPassword(password());
        System.out.println("修改成功!你现在的信息为:");
        earchUser(user);
    }

    // 查询电影信息
    private static void searchMovie() {
        System.out.println("请输入你要查找的影片名称:");
        String name = input.next();
        Movie movie = movieTheater.search(name);
        // 判断是否找到电影
        if (movie != null) {
            System.out.println(movie.toString());
        } else {
            System.out.println("\u001B[31m 未找到匹配电影!\u001B[0m");
        }
    }

    // 显示电影信息
    private static void showMovie() {
        movieTheater.show();
    }

    // 管理员登录
    private static void adminlogin() {
        System.out.println("管理员登录");
        System.out.println();
        System.out.println("请输入你的电话号码:");
        String phone = input.next();
        System.out.println("请输入密码:");
        String password = input.next();
        User user = movieTheater.searchUser(phone, password, 1);
        if (user != null) {
            showAdminMenu(user);
        } else {
            System.out.println("\u001B[31m 请检查你的输入!\u001B[0m");
            adminlogin();
        }
    }

    // 管理员列表
    private static void showAdminMenu(User user) {
        System.out.println();
        System.out.println("开发喵影院\t欢迎光临" + user.getUsername());
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>");
        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("请输入:");
        int menu = input.nextInt();
        selectAdminMenu(menu, user);
    }

    private static void selectAdminMenu(int menu, User user) {
        switch (menu) {
            case 1 -> addMovie();
            case 2 -> deleteMovie();
            case 3 -> modifyMovie();
            case 4 -> showUsers();
            default -> showMenu();
        }
        // 再次展示菜单
        showAdminMenu(user);
    }

    // 新增电影
    private static void addMovie() {
        System.out.println("请输入电影名称:");
        String name = input.next();
        System.out.println("请输入票价:");
        double price = input.nextDouble();
        System.out.println("请输入导演:");
        String director = input.next();
        System.out.println("请输入上映日期");
        int date = input.nextInt();
        Movie movie = new Movie(name, price, director, date);
        movieTheater.addMovie(movie);
        System.out.println("《" + name + "》" + "添加成功!");
    }

    // 删除电影
    private static void deleteMovie() {
        System.out.println("请输入要删除的电影名称:");
        String name = input.next();
        movieTheater.deleteMovie(name);
        System.out.println("删除《" + name + "》成功!");
    }

    // 修改电影
    private static void modifyMovie() {
        System.out.println("请输入要修改电影名称:");
        String name = input.next();
        Movie movie = movieTheater.search(name);
        movie.toString();
        System.out.println("请选择要修改的内容:1.价格 2.上映时间");
        int i = input.nextInt();
        if (i == 1) {
            System.out.println("请输入新价格:");
            movie.setPrice(input.nextDouble());
        } else if (i == 2) {
            System.out.println("请输入上映时间");
            movie.setDate(input.nextInt());
        }
        System.out.println("更改过后的信息为" + movie.toString());
    }

    // 查看所有用户信息
    private static void showUsers() {
        movieTheater.showUser();
    }

    // 用户登录
    private static void userlogin() {
        System.out.println("用户登录");
        System.out.println();
        System.out.println("请输入你的电话号码:");
        String phone = input.next();
        System.out.println("请输入密码:");
        String password = input.next();
        User user = movieTheater.searchUser(phone, password, 2);
        if (user != null) {
            showUser(user);
        } else {
            System.out.println("\u001B[31m 请检查你的输入!\u001B[0m");
            showMenu();
        }
    }

    // 用户注册
    private static void userRegistr() {
        System.out.println("用户注册");
        System.out.println();
        System.out.println("请输入你的用户名:");
        String username = input.next();
        System.out.println("请输入你的电话号码:");
        String phone = input.next();
        String password = password();
        User user = new User(username, phone,password, 2);
        movieTheater.addUser(user);
    }

    private static String password() {
        System.out.println("请输入密码:");
        String password = input.next();
        System.out.println("请再次输入密码:");
        String passwordtwo = input.next();
        if (password.equals(passwordtwo)) {
            return password;
        } else {
            System.out.println("\u001B[两次输入的密码不同,请重新输入密码!\u001B[0m");
            password();
        }
        return null;
    }

    private static void exit() {
        System.out.println("欢迎下次光临");
        System.exit(0);
    }
}

5. Test

package kfm.bases.OOPMovie;

public class Test {
    public static void main(String[] args) {
        Main.start();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值