简单电影院系统实现

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

  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. 退出
      • 用户登录之后可看到如下功能列表:

        • 修改用户信息

        • 查询用户信息

        • 退出

      • 管理员登录可以看到如下功能列表:

      • 新增电影

      • 删除电影(输入电影名称,删除对应电影)

      • 修改电影(输入电影名称,展示电影信息,选择要修改的内容(价格/上映时 间),输入内容,修改已存储的电影信息)

      • 查看所有用户信息

      • 退出

      界面要求

      • 通过控制台输入
      • 通过控制台输出

      注释要求

      • 合理注释

User类

public class User {

    private String phone;

    private String password;

    private String username;

    private Boolean admin;

    // 电影票
    private Ticket[] tickets;

    private int ticketCount;

    {
        tickets = new Ticket[10];
    }

    public User() {
    }

    public User(String phone, String password, String username) {
        this(phone, password, username, false);
    }

    public User(String phone, String password, String username, Boolean admin) {
        this.phone = phone;
        this.password = password;
        this.username = username;
        this.admin = admin;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    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 Boolean getAdmin() {
        return admin;
    }

    public void setAdmin(Boolean admin) {
        this.admin = admin;
    }

    public Ticket[] getTickets() {
        return tickets;
    }

    public void setTickets(Ticket[] tickets) {
        this.tickets = tickets;
    }


    public void addTicket(Ticket ticket){
        // 考虑扩容
        this.tickets[ticketCount ++] = ticket;
    }

    public void showTickets(){
        System.out.println("序号\t电影名称 \t 上映时间 \t 数量");
        for (int i = 0; i < ticketCount; i++) {
            System.out.println(i + 1 + " \t " + tickets[i].info());
        }
    }


    public String info() {
        String role = admin? "管理员" : " 用户 ";
        return role + " \t " + phone  +
                " \t " + "******" +
                " \t " + username;
    }

    @Override
    public String toString() {
        return "手机号 '" + phone + '\'' +
                ", 密码 ******  " +
                ", 用户名 '" + username + '\'';
    }
}

Movie类

public class Movie {

    private String name;

    private Double price;

    private String director;

    private int date;

    private int ticketCount;

    public Movie() {
    }

    public Movie(String name, Double price, String director, int date) {
        this(name, price, director, date, 0);
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public String getDirector() {
        return director;
    }

    public void setDirector(String director) {
        this.director = director;
    }

    public int getDate() {
        return date;
    }

    public void setDate(int date) {
        this.date = date;
    }

    public int getTicketCount() {
        return ticketCount;
    }

    public void setTicketCount(int ticketCount) {
        this.ticketCount = ticketCount;
    }

    public String info() {
        return name  +
                " \t " + director +
                " \t " + date +
                "\t" + price +
                "\t" + ticketCount;
    }

    @Override
    public String toString() {
        return "电影名:'" + name + '\'' +
                ", 导演:'" + director + '\'' +
                ", 上映时间:" + date +
                ", 价格:" + price +
                ", 数量: " + ticketCount;
    }
}

Ticket类

public class Ticket {

    private Movie movie;

    private int count;

    public Ticket() {
    }

    public Ticket(Movie movie, int count) {
        this.movie = movie;
        this.count = count;
    }

    public Movie getMovie() {
        return movie;
    }

    public void setMovie(Movie movie) {
        this.movie = movie;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public String info() {
        return this.movie.getName() + "\t" + this.movie.getDate() + " \t " + this.count;
    }
}

Cinema类

import java.util.Scanner;

public class Cinema {

    private String name = "【开发喵影院】";

    // 用户列表
    private User[] userList = new User[10];

    private int userCount = 0;
    // 电影列表
    private Movie[] movieList = new Movie[10];
    private int movieCount = 0;


    // 登录用户
    private User loginUser;

    private Scanner input = new Scanner(System.in);

    {
        Movie movie = new Movie("前任4", 39.9, "田羽生", 20230928, 50);
        movieList[movieCount ++] = movie;
        movie = new Movie("哥斯拉", 29.9, "xxx", 20180911, 50);
        movieList[movieCount ++] = movie;
        movie = new Movie("金刚川", 49.9, "xxxx", 20200621, 50);
        movieList[movieCount ++] = movie;
        movie = new Movie("水门桥", 59.9, "xxxx", 20221001, 50);
        movieList[movieCount ++] = movie;

        // 普通用户
        User user = new User("13212312311", "123", "张三");
        userList[userCount ++] = user;

        // 管理员
        User admin = new User("13212312322", "123", "管理员", true);
        userList[userCount ++] = admin;

    }

    public Cinema() {
    }

    public Cinema(String name) {
        this.name = name;
    }

    public void open(){
        print("欢迎光临" + name);
        selectMainMenu();
    }


    public void selectMainMenu(){
        print("请选择要执行的操作:");
        print("1. 上映电影列表");
        print("2. 查询电影");
        print("3. 登录");
        print("4. 注册");
        print("5. 显示所有用户");// TODO(临时)
        print("0. 退出");
        print("请输入序号:");
        int select = input.nextInt();

        switch (select){
            case 1 -> showMoives();
            case 2 -> queryMoive();
            case 3 -> login();
            case 4 -> register();
            case 5 -> showAllUsers();
            case 0 -> exit();
        }

        selectMainMenu();
    }

    /**
     * 退出系统
     */
    private void exit() {
        print("欢迎下次光临!");
        System.exit(0);
    }

    /**
     * 注册
     */
    private void register() {
        print("请输入手机号:");
        String phone = input.next();

        int index = queryUserByPhone(phone);

        if (index != -1){
            // 手机号已注册
            print("手机号已注册");
            // TODO()

            return;
        }
        String password = null;
        String rePass = null;
        do{
            if (password != null){
                print("两次密码不一致");
            }
            print("请输入密码:");
            password = input.next();
            print("请再次输入密码:");
            rePass = input.next();
        }while (!password.equals(rePass));

        print("请输入用户名: ");
        String username = input.next();

        User user = new User(phone, password, username);
        addUser(user);
        print("注册成功");

        // TODO(临时代码)
        showAllUsers();
    }

    private void addUser(User user){
        userList[userCount ++] = user;
    }

    private void showAllUsers(){
        if (userCount == 0){
            print("暂无用户");
        } else {
            print("用户列表");

            print("序号 \t 角色   \t    手机号    \t  密码    \t 用户名   ");
            for (int i = 0; i < userCount; i++) {
                print(" " + (i + 1) + " " + " \t " + userList[i].info());
            }
        }

    }
    private int queryUserByPhone(String phone) {
        for (int i = 0; i < userCount; i++) {
            if (phone.equals(userList[i].getPhone())){
                return i;
            }
        }

        return -1;
    }

    /**
     * 登录
     */
    private void login() {
        print("请输入手机号:");
        String phone = input.next();
        print("请输入密码:");
        String password = input.next();

        int index = queryUserByPhoneAndPass(phone, password);

        if (index == -1){
            print("用户名或密码错误, 请重试");
        } else {
            print("登录成功");
            // 当前登录用户, 保存登录状态
            loginUser = userList[index];
            if (loginUser.getAdmin()){
                // 管理员
                showAdminMenu();
            } else {
                // 普通用户
                showUserMenu();
            }
        }
    }

    private void showUserMenu() {
        print("请输入序号:");
        print("1. 个人信息");
        print("2. 修改个人信息");
        print("3. 买电影票");
        print("4. 已购票查询");
        print("0. 注销");

        int select = input.nextInt();

        switch (select){
            case 1 -> personal();
            case 2 -> updateInfo();
            case 3 -> buyTicket();
            case 4 -> showTickets();
            case 0 -> logout();
        }

        showUserMenu();
    }

    private void showTickets() {
        loginUser.showTickets();
    }

    private void buyTicket() {
        showMoives();

        Movie movie = null;
        do {
            if (movie != null){
                print("请重新选择");
            }
            print("请选择要买的电影票:");
            int n = input.nextInt();

            movie = movieList[n - 1];

        } while(!(movie.getTicketCount() > 0));


        Integer count = null;
        do {
            if (count != null){
                print("输入错误");
            }
            print("请输入购买数量:");
            count = input.nextInt();
        } while(!(count > 0 && count <= movie.getTicketCount()));

        Ticket ticket = new Ticket(movie, count);
        double money = movie.getPrice() * count;
        print(count + "张" + movie.getName() + "票,共计 " + money + "元,请支付。");

        // 添加票
        loginUser.addTicket(ticket);

        // 变电影票数量
        movie.setTicketCount(movie.getTicketCount() - count);

        print("购票成功");
    }

    private void updateInfo() {
        print("请输入新的用户名");
        String username = input.next();
        loginUser.setUsername(username);

        print("修改成功");
    }

    private void personal() {
        print(loginUser);
    }

    private void logout() {
        loginUser = null;
        print("注销成功");
        selectMainMenu();
    }

    private void showAdminMenu() {
        print("请输入序号:");
        print("1. 添加电影");
        print("2. 删除电影");
        print("3. 修改电影信息");
        print("4. 显示用户信息");
        print("0. 注销");

        int select = input.nextInt();
        switch (select){
            case 1 -> addMovie();
            case 2 -> removeMovie();
            case 3 -> modifyMovie();
            case 4 -> showAllUsers();
            case 0 -> logout();
        }

        showAdminMenu();
    }

    private void removeMovie() {
        showMoives();
        print("请输入要删除的电影序号: ");
        int num = input.nextInt();

        removeMovie(num - 1);

        print("删除成功");
    }

    private void removeMovie(int index) {
        System.arraycopy(movieList, index + 1, movieList, index, movieList.length - index - 1);
        movieList[-- movieCount] = null;
    }


    private void modifyMovie() {
        print("修改电影信息");
    }

    private void addMovie() {
        print("输入电影名称:");
        String name = input.next();
        print("输入导演姓名:");
        String director = input.next();
        print("请输入上映时间(格式: 20230101):");
        int date = input.nextInt();
        print("请输入票价:");
        double price = input.nextDouble();

        print("请输入数量: ");
        int count = input.nextInt();

        Movie movie = new Movie(name, price, director, date, count);

        addMovie(movie);

        print("添加成功");
    }

    public void addMovie(Movie movie){
        movieList[movieCount ++] = movie;
    }

    private int queryUserByPhoneAndPass(String phone, String password){

        for (int i = 0; i < userCount; i++) {
            User user = userList[i];
            if (user.getPhone().equals(phone) && user.getPassword().equals(password)) {
                return i;
            }
        }
        return  -1;
    }

    /**
     * 查询电影
     */
    private void queryMoive() {
        print("输入电影名称: ");
        String name = input.next();

        int index = searchMoive(name);

        if (index == -1){
            print("暂无此电影");
        } else {
            print(movieList[index]);
        }
    }

    private int searchMoive(String name){
        for (int i = 0; i < movieCount; i++) {
            Movie movie = movieList[i];
            if (name.equals(movie.getName())){
                return i;
            }
        }
        return -1;
    }

    /**
     * 上映电影列表
     */
    private void showMoives() {
        if (movieCount == 0){
            print("暂无电影");
        } else {
            print("上映电影列表");
            // 排序
            sortMovieByDate();

            print("序号 \t 电影名 \t 导演 \t 上映时间 \t 价格  \t 数量");
            for (int i = 0; i < movieCount; i++) {
                print(" " + (i + 1) + " " + " \t " + movieList[i].info());
            }
        }
    }

    private void sortMovieByDate() {
        // 排序
        for (int i = 0; i < movieCount - 1; i++) {
            for (int j = 0; j < movieCount - i - 1; j++) {
                if (movieList[j].getDate() < movieList[j + 1].getDate()){
                    Movie temp = movieList[j];
                    movieList[j] = movieList[j + 1];
                    movieList[j + 1] = temp;
                }
            }
        }
    }


    public void print(Object msg){
        System.out.println(msg);
    }


    public String toString(){
        return name + "现有电影 " + movieCount + " 部, 用户 " + userCount + " 人";
    }
}

Test类

public class Test {
    public static void main(String[] args) {

        Cinema cinema = new Cinema("万达影院");

        cinema.open();

   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值