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