【练习十一】Java实现电影信息管理系统:电影上架、下架、查询、修改、封杀

今天我们基于面向对象集合 知识,实现一个简单的「电影信息管理系统」,涵盖++电影上架、下架、查询、修改、封杀明星关联电影++等核心功能。


目录

一、项目介绍

[1. 功能清单](#1. 功能清单)

[2. 技术要点](#2. 技术要点)

二、开发环境准备

[1. 基础环境](#1. 基础环境)

[2. Lombok 配置](#2. Lombok 配置)

三、核心代码解析

第一步:定义电影实体类(Movie.java)

第二步:编写业务处理类(MovieService.java)

[1. 全局变量与入口方法(start ())](#1. 全局变量与入口方法(start ()))

[2. 核心业务方法拆解](#2. 核心业务方法拆解)

[(1)上架电影(addMovie ())](#(1)上架电影(addMovie ()))

[(2)查询电影(queryMovie () + queryMovieByName ())](#(2)查询电影(queryMovie () + queryMovieByName ()))

[(3)封杀明星(deleteStar ())](#(3)封杀明星(deleteStar ()))

(4)其他核心方法

第三步:编写测试类(Test.java)

四、运行演示

[1. 启动系统](#1. 启动系统)

[2. 核心操作示例](#2. 核心操作示例)

(1)上架电影

(2)展示全部电影

(3)封杀明星

(4)退出系统

五、核心知识点总结


一、项目介绍

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.javamain方法,控制台输出菜单:

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 复制代码
退出成功!

五、核心知识点总结

  1. 面向对象封装 :用Movie类封装电影属性,通过 get/set 方法访问数据;
  2. 集合操作ArrayList的增(add)、删(remove)、查(get / 遍历);
  3. 流程控制while循环实现菜单持久化,switch分支处理命令,for循环遍历集合;
  4. 方法封装 :每个功能独立成方法(比如addMovie()),代码复用且易维护;
  5. Scanner 输入:实现控制台和用户的交互;
  6. Lombok 使用:简化实体类代码,提升开发效率。
相关推荐
寻寻觅觅☆5 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
偷吃的耗子5 小时前
【CNN算法理解】:三、AlexNet 训练模块(附代码)
深度学习·算法·cnn
l1t5 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
青云计划6 小时前
知光项目知文发布模块
java·后端·spring·mybatis
赶路人儿6 小时前
Jsoniter(java版本)使用介绍
java·开发语言
化学在逃硬闯CS6 小时前
Leetcode1382. 将二叉搜索树变平衡
数据结构·算法
ceclar1236 小时前
C++使用format
开发语言·c++·算法
探路者继续奋斗7 小时前
IDD意图驱动开发之意图规格说明书
java·规格说明书·开发规范·意图驱动开发·idd
码说AI7 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS7 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化