今天我们基于面向对象 和集合 知识,实现一个简单的「电影信息管理系统」,涵盖++电影上架、下架、查询、修改、封杀明星关联电影++等核心功能。
目录
[1. 功能清单](#1. 功能清单)
[2. 技术要点](#2. 技术要点)
[1. 基础环境](#1. 基础环境)
[2. Lombok 配置](#2. Lombok 配置)
第二步:编写业务处理类(MovieService.java)
[1. 全局变量与入口方法(start ())](#1. 全局变量与入口方法(start ()))
[2. 核心业务方法拆解](#2. 核心业务方法拆解)
[(1)上架电影(addMovie ())](#(1)上架电影(addMovie ()))
[(2)查询电影(queryMovie () + queryMovieByName ())](#(2)查询电影(queryMovie () + queryMovieByName ()))
[(3)封杀明星(deleteStar ())](#(3)封杀明星(deleteStar ()))
[1. 启动系统](#1. 启动系统)
[2. 核心操作示例](#2. 核心操作示例)
一、项目介绍
1. 功能清单
这个控制台版电影管理系统支持7 大核心操作:
- **上架电影:**录入电影名称、主演、价格、评分,存入系统
- **下架电影:**根据电影名称删除指定电影
- **查询电影:**根据名称精准查询单部电影信息
- **封杀明星:**删除所有包含该明星主演的电影
- **展示全部电影:**列出系统中所有已上架的电影
- **修改电影:**更新指定电影的名称、主演、价格、评分
- **退出系统:**安全退出程序
2. 技术要点
- 核心容器:ArrayList 存储电影数据(模拟数据库)
- 面向对象: 封装Movie实体类,用MovieService封装业务逻辑
- 输入交互:Scanner 实现控制台输入
- 简化开发:Lombok 注解(@Data/@NoArgsConstructor/@AllArgsConstructor)自动生成 **get/set/**构造方法
二、开发环境准备
1. 基础环境
- JDK:21
- IDE:IntelliJ IDEA
2. Lombok 配置
因为Movie类用到了Lombok 注解,所以需要先配置:lombok配置相关文章
三、核心代码解析
第一步:定义电影实体类(Movie.java)
实体类用于封装电影数据 ,每个电影对象对应一部电影的信息,通过 Lombok 注解简化代码:
java
package com.itheima.demo8test;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 电影实体类:封装电影的核心属性
* @Data:自动生成get/set/toString/equals/hashCode方法
* @NoArgsConstructor:自动生成无参构造器
* @AllArgsConstructor:自动生成全参构造器
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Movie {
private String name; // 电影名称
private double score; // 电影评分
private String actor; // 主演
private double price; // 电影价格
}
第二步:编写业务处理类(MovieService.java)
这是系统的核心类,封装所有电影相关的业务逻辑:
1. 全局变量与入口方法(start ())
java
package com.itheima.demo8test;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class MovieService {
// 存储所有上架的电影(模拟数据库),static保证全局唯一
private static List<Movie> movies = new ArrayList<>();
// 控制台输入对象,static避免重复创建
private static Scanner sc = new Scanner(System.in);
/**
* 系统入口方法:循环展示菜单,处理用户输入的命令
*/
public void start() {
while (true) { // 死循环,直到用户输入5退出
// 打印操作菜单
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.println("7、修改某个电影");
System.out.println("请您输入操作命令:");
// 获取用户输入的命令
String command = sc.next();
// 分支处理不同命令
switch (command) {
case "1": addMovie(); break; // 上架电影
case "2": deleteMovie(); break; // 下架电影
case "3": queryMovie(); break; // 查询电影
case "4": deleteStar(); break; // 封杀明星
case "5": System.out.println("退出成功!"); return; // 退出循环
case "6": queryAllMovies(); break; // 展示全部
case "7": updateMovie(); break; // 修改电影
default: System.out.println("命令有毛病!"); // 非法命令提示
}
}
}
}
2. 核心业务方法拆解
(1)上架电影(addMovie ())
java
/**
* 上架电影:录入电影信息,创建Movie对象并添加到集合
*/
private void addMovie() {
System.out.println("===========上架电影============");
// 1. 创建空的Movie对象
Movie movie = new Movie();
// 2. 控制台录入电影信息,赋值给Movie对象
System.out.println("请您输入电影名称:");
movie.setName(sc.next());
System.out.println("请您输入主演:");
movie.setActor(sc.next());
System.out.println("请您输入电影价格:");
movie.setPrice(sc.nextDouble());
System.out.println("请您输入电影评分:");
movie.setScore(sc.nextDouble());
// 3. 将电影对象添加到集合(上架成功)
movies.add(movie);
System.out.println("上架成功!");
}
(2)查询电影(queryMovie () + queryMovieByName ())
java
/**
* 控制台查询电影:调用工具方法,展示结果
*/
private void queryMovie() {
System.out.println("===========查询电影============");
System.out.println("请您输入电影名称:");
String name = sc.next();
// 调用工具方法查询电影对象
Movie movie = queryMovieByName(name);
if (movie != null) {
// 找到电影,打印信息
System.out.println(movie.getName() + " " + movie.getActor() + " " + movie.getPrice() + " " + movie.getScore());
} else {
// 未找到,提示信息
System.out.println("没有找到这个电影!");
}
}
/**
* 工具方法:根据电影名称查询电影对象(封装复用)
*/
public Movie queryMovieByName(String name) {
for (Movie m : movies) {
// 精准匹配电影名称
if (m.getName().equals(name)) {
return m; // 找到后直接返回对象
}
}
return null; // 未找到返回null
}
(3)封杀明星(deleteStar ())
java
/**
* 封杀明星:删除所有该明星主演的电影
*/
private void deleteStar() {
System.out.println("===========封杀明星============");
System.out.println("请您输入要封杀的明星:");
String star = sc.next();
// 遍历集合,删除包含该明星的电影
for (int i = 0; i < movies.size(); i++) {
Movie movie = movies.get(i);
// 模糊匹配主演(比如"吴某"能匹配"吴某、刘某")
if (movie.getActor().contains(star)) {
movies.remove(movie); // 删除该电影
i--; // 关键!删除元素后,集合长度减1,索引退一步避免漏查
}
}
System.out.println("封杀成功!");
// 封杀后展示剩余电影
queryAllMovies();
}
(4)其他核心方法
java
// 展示全部电影:增强for循环遍历集合,打印每部电影信息
private void queryAllMovies() {
System.out.println("===========展示全部电影============");
for (Movie m : movies) {
System.out.println(m.getName() + " " + m.getActor() + " " + m.getPrice() + " " + m.getScore());
}
}
// 下架电影:根据名称删除指定电影
private void deleteMovie() {
System.out.println("===========下架电影============");
System.out.println("请您输入要下架的电影名称:");
String name = sc.next();
for (int i = 0; i < movies.size(); i++) {
Movie movie = movies.get(i);
if (movie.getName().equals(name)) {
movies.remove(movie);
System.out.println("下架成功!");
}
}
}
// 修改电影:找到指定电影,更新其属性
private void updateMovie() {
System.out.println("===========修改电影============");
System.out.println("请您输入要修改的电影名称:");
String name = sc.next();
for (int i = 0; i < movies.size(); i++) {
Movie movie = movies.get(i);
if (movie.getName().equals(name)) {
// 录入新信息,覆盖原有属性
System.out.println("请您输入新的电影名称:");
movie.setName(sc.next());
System.out.println("请您输入新的主演:");
movie.setActor(sc.next());
System.out.println("请您输入新的电影价格:");
movie.setPrice(sc.nextDouble());
System.out.println("请您输入新的电影评分:");
System.out.println("修改成功!");
}
}
}
第三步:编写测试类(Test.java)
系统入口类,创建MovieService对象并启动系统:
java
package com.itheima.demo8test;
public class Test {
public static void main(String[] args) {
// 1. 创建电影业务处理对象
MovieService movieService = new MovieService();
// 2. 启动电影管理系统
movieService.start();
}
}
四、运行演示
1. 启动系统
运行Test.java的main方法,控制台输出菜单:
java
====电影信息操作系统===
1、上架
2、下架某个电影
3、查询某个电影
4、封杀某个明星
5、退出
6、展示全部电影
7、修改某个电影
请您输入操作命令:
2. 核心操作示例
(1)上架电影
输入1,按提示录入信息:
java
===========上架电影============
请您输入电影名称:
流浪地球2
请您输入主演:
吴某、刘某
请您输入电影价格:
45.9
请您输入电影评分:
9.4
上架成功!
(2)展示全部电影
输入6,查看已上架的电影:
java
===========展示全部电影============
流浪地球2 吴某、刘某 45.9 9.4
(3)封杀明星
输入4,封杀 "吴某":
java
===========封杀明星============
请您输入要封杀的明星:
吴某
封杀成功!
===========展示全部电影============
(无输出,因为包含吴某的电影已被删除)
(4)退出系统
输入5,退出程序:
java
退出成功!
五、核心知识点总结
- 面向对象封装 :用Movie类封装电影属性,通过 get/set 方法访问数据;
- 集合操作 :ArrayList的增(add)、删(remove)、查(get / 遍历);
- 流程控制 :while循环实现菜单持久化,switch分支处理命令,for循环遍历集合;
- 方法封装 :每个功能独立成方法(比如addMovie()),代码复用且易维护;
- Scanner 输入:实现控制台和用户的交互;
- Lombok 使用:简化实体类代码,提升开发效率。