【练习十一】Java实现电影信息管理系统:电影上架、下架、查询、修改、封杀
·
今天我们基于面向对象和集合知识,实现一个简单的「电影信息管理系统」,涵盖电影上架、下架、查询、修改、封杀明星关联电影等核心功能。
目录
第二步:编写业务处理类(MovieService.java)
(2)查询电影(queryMovie () + queryMovieByName ())
一、项目介绍
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 注解简化代码:
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 ())
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 ())
/**
* 上架电影:录入电影信息,创建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 ())
/**
* 控制台查询电影:调用工具方法,展示结果
*/
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 ())
/**
* 封杀明星:删除所有该明星主演的电影
*/
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)其他核心方法
// 展示全部电影:增强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对象并启动系统:
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方法,控制台输出菜单:
====电影信息操作系统===
1、上架
2、下架某个电影
3、查询某个电影
4、封杀某个明星
5、退出
6、展示全部电影
7、修改某个电影
请您输入操作命令:
2. 核心操作示例
(1)上架电影
输入1,按提示录入信息:
===========上架电影============
请您输入电影名称:
流浪地球2
请您输入主演:
吴某、刘某
请您输入电影价格:
45.9
请您输入电影评分:
9.4
上架成功!
(2)展示全部电影
输入6,查看已上架的电影:
===========展示全部电影============
流浪地球2 吴某、刘某 45.9 9.4
(3)封杀明星
输入4,封杀 “吴某”:
===========封杀明星============
请您输入要封杀的明星:
吴某
封杀成功!
===========展示全部电影============
(无输出,因为包含吴某的电影已被删除)
(4)退出系统
输入5,退出程序:
退出成功!
五、核心知识点总结
- 面向对象封装:用
Movie类封装电影属性,通过 get/set 方法访问数据; - 集合操作:
ArrayList的增(add)、删(remove)、查(get / 遍历); - 流程控制:
while循环实现菜单持久化,switch分支处理命令,for循环遍历集合; - 方法封装:每个功能独立成方法(比如
addMovie()),代码复用且易维护; - Scanner 输入:实现控制台和用户的交互;
- Lombok 使用:简化实体类代码,提升开发效率。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)