简易影院系统开发——面向对象练习

  • 任务 简易影院系统

需求

  • 用户类:包含用户名、密码、电话、权限

  • 电影类:包含电影名、导演、上映时间、票价

  • 电影院类:包含存储电影和用户的对象数组。

功能块:

  • ​ 功能
    • 管理员菜单:
      • 新增电影
      • 删除电影
      • 修改电影
      • 查看所有用户信息
      • 退出(返回初级)
    • 用户菜单:
      • 修改用户信息
      • 查询用户信息
      • 退出(返回初级)
    • 初始菜单:
      * 查询电影信息
      • 显示所有电影信息
      • 管理员登录
      • 用户登录
      • 用户注册
      • 退出

文件结构:

image-20230821145636873

代码实现:

  • 功能类(function):
package top.movie.function;

import top.movie.movieTheater.MovieTheater;

import java.util.Scanner;

import static top.movie.function.MovieFunction.*;
import static top.movie.function.MovieFunction.searchAllUser;
import static top.movie.function.UserFunction.*;

public class Function {
    static Scanner sc = new Scanner(System.in);
    static MovieTheater mv = new MovieTheater();
    static final String ANSI_RED = "\u001B[31m";
    static final String ANSI_RESET = "\u001B[0m";
    private static final String TAB = "\t\t\t";


    public static void start() {
        showMenu();
    }
    // 加载菜单

    // 初始菜单
    public static void showMenu() {
        print("开发喵影院");
        print("1. 查询电影信息");
        print("2. 显示所有电影信息");
        print("3. 管理员登录");
        print("4. 用户登录");
        print("5. 用户注册");
        print("6. 退出");
        print("请选择功能:");
        int menu = sc.nextInt();
        selectMenu(menu);
    }
    // 初始菜单功能

    private static void selectMenu(int menu) {
        switch (menu) {
            case 1 -> search();
            case 2 -> show();
            case 3, 4 -> userLogin();
            case 5 -> userEnroll();
            default -> exit();
        }
    }

    // 用户菜单
    public static void userMenu() {
        print("欢迎登录用户信息界面");
        print("1.修改用户信息");
        print("2.查询用户信息");
        print("0.退出");
        print("请选择功能:");
        int userMake = sc.nextInt();
        userSelectMenu(userMake);
        userMenu();
    }

    //  用户菜单功能
    private static void userSelectMenu(int userMake) {
        switch (userMake) {
            case 1 -> updateUser();
            case 2 -> showUser();
            default -> showMenu();
        }
    }

    // 管理员菜单
    public static void adminMenu() {
        print("欢迎登录");
        print("1. 新增电影");
        print("2. 删除电影(输入电影名称,删除对应电影)");
        print("3. 修改电影");
        print("4. 查看所有用户信息");
        print("0. 退出");
        print("请选择功能:");
        int adminMake = sc.nextInt();
        adSelectMenu(adminMake);
        adminMenu();
    }

    // 管理员菜单功能
    private static void adSelectMenu(int adminMake) {
        switch (adminMake) {
            case 1 -> addMovie();
            case 2 -> delMovie();
            case 3 -> upMovie();
            case 4 -> searchAllUser();
            default -> showMenu();
        }

    }

    // 普通打印
    public static void print(String msg) {
        System.out.println(msg);
    }

    // 警告打印
    public static void printRed(String message) {
        System.out.println(ANSI_RED + message + ANSI_RESET);
    }

}

  • 用户功能类(UserFunction):
package top.movie.function;

import top.movie.movieTheater.MovieTheater;
import top.movie.user.User;

import static top.movie.function.Function.*;
import static top.movie.movieTheater.MovieTheater.*;

public class UserFunction {


    // 用户注册
    protected static void userEnroll() {
        print("请输入用户名:");
        String username = sc.next();
        print("请输入密码");
        String password = sc.next();
        print("请输入电话号:");
        int phone = sc.nextInt();
        User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        user.setPhone(phone);
        enroll(user);
        printRed(username + "注册成功");
        userLogin();

    }


    // 用户登录
    public static void userLogin() {
        print("=====欢迎登录=====");
        print("请输入用户名:");
        String name = sc.next();
        print("请输入密码");
        String passwd = sc.next();
        isLogin(name, passwd);
    }

    // 显示用户信息
    protected static void showUser() {
        printInfo();
    }

    // 修改用户
    public static void updateUser() {
        showUser();
        printRed("请谨慎修改!!");
        print("请输入新密码:");
        String newPasswd = sc.next();
        print("请输入用户名确认!");
        String name = sc.next();
        MovieTheater.upUser(name, newPasswd);
    }

    public static void exit() {
        print("欢迎下次光临");
        System.exit(0);
    }
}

  • 电影功能类:
package top.movie.function;

import top.movie.movie.Movie;

import static top.movie.function.Function.*;
import static top.movie.movieTheater.MovieTheater.*;

public class MovieFunction {
    /*
    * 管理员登录可以看到如下功能列表:
    *   查找电影
    *   显示全部电影
        1. 新增电影
        2. 删除电影(输入电影名称,删除对应电影)
        3. 修改电影(输入电影名称,展示电影信息,选择要修改的内容(价格/上映时
        间),输入内容,修改已存储的电影信息)
        4. 查看所有用户信息
        5. 退出*/
    // 新增电影
    public static void addMovie() {
        print("请上传电影");
        print("片名:");
        String name = sc.next();
        print("导演:");
        String director = sc.next();
        print("票价:");
        Double price = sc.nextDouble();
        print("上映时间:");
        Integer date = sc.nextInt();
        Movie mvAdd = new Movie();
        mvAdd.setName(name);
        mvAdd.setPrice(price);
        mvAdd.setDate(date);
        mvAdd.setDirector(director);
        addM(mvAdd);
    }

    // 删除电影
    public static void delMovie() {
        print("请输入要删除的电影片名:");
        String name = sc.next();
        delete(name);
    }

    // 修改电影
    public static void upMovie() {
        printMovie();
        print("请输入要修改的电影名:");
        String name = sc.next();
        print("请输入要修改的内容(1.价格/2.上映时间):");
        int choice = sc.nextInt();

        // 默认值,可以根据你的实现进行调整
        double price = -1.0;
        int date = -1;

        switch (choice) {
            case 1:
                print("请输入价格:");
                price = sc.nextDouble();
                break;
            case 2:
                print("请输入上映时间:");
                date = sc.nextInt();
                break;
            default:
                print("无效的选择!");
                return;  // 如果选择无效,直接返回
        }

        upMovies(name, choice, price, date);
    }


    // 查看所有用户信息
    public static void searchAllUser() {
        printInfo();
    }

    // 显示所有电影
    public static void show() {
        printMovie();
        showMenu();
    }

    public static void search() {
        print("请输入电影名查找:");
        String name = sc.next();
        searchMovie(name);
    }

}

  • 电影院功能类
package top.movie.movieTheater;

import top.movie.movie.Movie;
import top.movie.user.User;

import java.util.Arrays;

import static top.movie.function.Function.*;
import static top.movie.function.UserFunction.userLogin;

public class MovieTheater {
    private static Movie[] movies = new Movie[10];
    private static User[] users = new User[10];
    private static User loggedInUser = null;  // 新增:当前登录的用户
    private static Integer count = 1;
    private static Integer index = 0;

    static {
        users[0] = new User("admin", "admin", 12345678, 1);
    }

    // 数据测试
    static {
        for (int i = 1; i < 10; i++) {
            String name = "kfm0" + i;
            String passwd = "123";
            Integer phone = 123;
            users[i] = new User(name, passwd, phone, 2);
            count++;
            //  电影数据
            String mName = "加勒比海盗" + i;
            Double price = 19.8 + i * 0.5;
            int date = 20231 + i;
            String director = "杰瑞.布鲁克海默";
            movies[i] = new Movie(mName, price, date, director);
            index++;
        }
    }


    public MovieTheater() {
    }

    public MovieTheater(User[] users, Movie[] movies) {
        this.users = users;
        this.movies = movies;
    }

    // 扩容
    public static void addSpace() {
        if (index >= movies.length - 1 || count >= users.length - 1) {
            Movie[] newMovie = Arrays.copyOf(movies, movies.length * 2);
            User[] newUser = Arrays.copyOf(users, users.length * 2);
            movies = newMovie;
            users = newUser;
        }
    }

    // 添加电影
    public static void addM(Movie movie) {
        if (index == movies.length) {
            addSpace();
        }
        movies[index++] = movie;
    }

    // 显示所有电影

    public static void printMovie() {
        quickSort(movies, 1, index - 1);
        if (index < 0) {
            printRed("开发喵影院为空!!");
        }
        for (int i = 1; i < index; i++) {
            print(movies[i].toString());
        }
    }

    // 查找电影
    public static void searchMovie(String name) {
        for (int i = 1; i < index; i++) {
            if (name.equals(movies[i].getName())) {
                print(movies[i].toString());
                return;
            }
        }
        printRed(name + "没有找到!!");
        showMenu();
    }
    // 修改电影

    /**
     * @param name    电影名称
     * @param message 用户操作,1表示修改价格,2表示修改时间
     * @param price   价格
     * @param date    时间
     */
    public static void upMovies(String name, int message, double price, int date) {
        boolean flag = false;
        for (int i = 1; i < index; i++) {
            if (name.equals(movies[i].getName())) {
                switch (message) {
                    case 1 -> {
                        if (price != -1.0) {
                            movies[i].setPrice(price);
                            print("Successful");
                            flag = true;
                            return;
                        }
                    }
                    case 2 -> {
                        if (date != -1) {
                            movies[i].setDate(date);
                            print("Successful");
                            flag = true;
                            return;
                        }
                    }
                    default -> {
                        printRed("无效操作");
                        adminMenu();
                    }
                }
            }
        }
        if (!flag) {
            printRed(name + "不存在");
        }
    }

    // 删除电影
    public static void delete(String name) {
        for (int i = 1; i < index; i++) {
            if (name.equals(movies[i].getName())) {
                Movie[] movie = new Movie[movies.length - 1];
                System.arraycopy(movies, 0, movie, 0, i);
                System.arraycopy(movies, i + 1, movie, i, movie.length - i);
                movies = movie;
                printRed(name + "已删除");
                return;
            }
        }
        printRed(name + "不存在");
    }

    // 用户注册
    public static void enroll(User user) {
        if (count >= users.length) {
            addSpace();
        }
        users[count++] = user;
    }

    /**
     * @param username 登录用户名
     * @param passwd   密码
     */
    public static void isLogin(String username, String passwd) {
        if ((username.equals(users[0].getUsername()) && passwd.equals(users[0].getPassword()) && users[0].getRole().equals(1))) {
            loggedInUser = users[0];
            adminMenu();
            return;
        }
        for (int i = 1; i < count; i++) {
            if (username.equals(users[i].getUsername()) && passwd.equals(users[i].getPassword())) {
                loggedInUser = users[i];
                if (users[i].getRole().equals(2)) {
                    userMenu();
                    return;
                }
            }
        }
        printRed("用户名与账号不匹配!!!");
        userLogin();
    }

    // 用户修改
    public static void upUser(String username, String password) {
        for (int i = 1; i < count; i++) {
            if (username.equals(users[i].getUsername())) {
                users[i].setPassword(password);
            }
        }
        print("用户:" + username + "修改密码成功!!" + "请重新登陆");
        userLogin();
    }

    // 打印用户信息
    public static void printInfo() {
        if (loggedInUser.getRole().equals(1)) { // 如果是管理员
            for (int i = 0; i < count; i++) {
                print(users[i].toString());
            }
        } else if (loggedInUser.getRole().equals(2)) { // 如果是普通用户
            for (int i = 0; i < count; i++) {
                if (users[i].getUsername().equals(loggedInUser.getUsername())) {
                    print(loggedInUser.toString());
                    break; // 一旦找到了匹配的用户,就退出循环
                }
            }
        }
    }

    /**
     * 根据对象中的票价字段排序
     *
     * @param movies 存储电影的对象数组
     * @param start  开始下标
     * @param end    结束下标
     */
    public static void quickSort(Movie[] movies, int start, int end) {
        if (start >= end) {
            return;
        }
        int left = start;
        int right = end;
        int flag = movies[start].getDate();
        Movie num = movies[start];
        while (left < right) {
            // 从右边开始
            while (left < right && flag >= movies[right].getDate()) {
                right--;
            }
            // 从左边开始
            while (left < right && flag <= movies[left].getDate()) {
                left++;
            }
            Movie temp = movies[left];
            movies[left] = movies[right];
            movies[right] = temp;
        }
        movies[start] = movies[left];
        movies[left] = num;
        quickSort(movies, start, left - 1);
        quickSort(movies, left + 1, end);
    }
}

  • 用户类
package top.movie.user;

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

    public User() {
        this.role =2;
    }

    public User(String username, String password, Integer phone, Integer role) {
        this.username = username;
        this.password = password;
        this.phone = phone;
        this.role = role;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public Integer getPhone() {
        return phone;
    }

    public Integer getRole() {
        return role;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

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

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

    @Override
    public String toString() {
        return "用户名:" + username +
                "\t密码:" + "******" +
                "\t电话:" + phone +
                "\t权限:" + (getRole().equals(1)?"管理员":"普通用户");
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (!username.equals(user.username)) return false;
        return password.equals(user.password);
    }
}

最后就是一个启动类

package top.movie;

import static top.movie.function.Function.start;

public class Application {
    /**
     * 启动类
     * @Author 被逼上岗
     */
    public static void main(String[] args) {
        start();
    }
}

针对需求酌情调试!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值