需求
-
用户类:包含用户名、密码、电话、权限
-
电影类:包含电影名、导演、上映时间、票价
-
电影院类:包含存储电影和用户的对象数组。
功能块:
- 功能
- 管理员菜单:
- 新增电影
- 删除电影
- 修改电影
- 查看所有用户信息
- 退出(返回初级)
- 用户菜单:
- 修改用户信息
- 查询用户信息
- 退出(返回初级)
- 初始菜单:
* 查询电影信息- 显示所有电影信息
- 管理员登录
- 用户登录
- 用户注册
- 退出
- 管理员菜单:
文件结构:
代码实现:
- 功能类(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();
}
}
针对需求酌情调试!