JAVA实战项目《直播平台主播管理系统》附源码

目录

一、语言和环境

A、实现语言

B、环境要求

二、功能要求

1.主菜单:显示系统主菜单,每执行完一项功能后菜单循环显示,如下图所示,菜单功能包括

2.添加主播:输入主播姓名、昵称、性别、出生日期、直播内容分类。正确录入以上信息后,显示“添加成功!”,效果如下图所示。 

3.按内容分类查询主播信息:提示选择要查询的内容分类编号,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如下图所示。

​编辑

4.按直播昵称模糊查询主播信息:提示输入要查询的主播昵称,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如图4所示。

5.注销主播:提示输入要注销的主播id,从主播信息表中删除该主播记录。如图5所示,成功后提示“注销成功!”

6.退出系统:提示“系统退出!”后退出系统,如下图所示。

三、类的设计

1.主播信息实体类(Streamer)

2.分类信息实体类(Category)

3.主播全部信息VO(StreamerInfo)

四、具体要求及推荐实现步骤

1.创建数据库表streamer,添加测试数据不少于3条,表结构如表1所示。

表1 主播信息表

2.创建数据库表category,添加测试数据不少于3条,表结构如表2所示。

表2 内容分类信息表

五、注意事项


一、语言和环境

A、实现语言

Java

B、环境要求

JDK 1.8、IDEA、MySQL 5.7/MySQL 8.0/MySQLyong等

二、功能要求

某直播平台为了方便直播主播的管理,现在需要开发直播平台主播管理系统。具体要求如下:

1.主菜单:显示系统主菜单,每执行完一项功能后菜单循环显示,如下图所示,菜单功能包括

1)添加主播

2)按照内容分类查询主播信息

3)按照主播昵称查询主播信息

4)注销主播

5)退出系统

2.添加主播:输入主播姓名、昵称、性别、出生日期、直播内容分类。正确录入以上信息后,显示“添加成功!”,效果如下图所示。 

图1

3.按内容分类查询主播信息:提示选择要查询的内容分类编号,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如下图所示。

4.按直播昵称模糊查询主播信息:提示输入要查询的主播昵称,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如图4所示。

5.注销主播:提示输入要注销的主播id,从主播信息表中删除该主播记录。如图5所示,成功后提示“注销成功!”

6.退出系统:提示“系统退出!”后退出系统,如下图所示。

三、类的设计

采用三层架构模式开发此系统,需要定义如下类:

1.主播信息实体类(Streamer)

编号(id)

姓名(realName)

昵称(nickName)

性别(gender)

内容分类编号(categoryId)

出生日期(birthdate)

2.分类信息实体类(Category)

  1. 编号(id)
  2. 分类名称(category)

3.主播全部信息VO(StreamerInfo)

  1. 编号(id)
  2. 姓名(realName)
  3. 昵称(nickName)
  4. 性别(gender)
  5. 内容分类 (category)
  6. 出生日期(birthdate)

4.数据库连接和关闭类(BaseDao)

5.主播信息DAO接口(StreamerDao)、分类信息DAO接口(CategoryDao)

6.主播信息DAO实现类(StreamerDaoMySQLImpl)、分类信息DAO实现类(CategoryDaoMySQLImpl)

7. 主播业务Service接口(StreamerService)、分类业务Service接口(CategoryService)

7. 主播业务Service实现类(StreamerServiceImp)、分类业务Service实现类(CategoryServiceImpl)

5.测试类(LiveStreamerManage)用于实现整体流程

四、具体要求及推荐实现步骤

1.创建数据库表streamer,添加测试数据不少于3条,表结构如表1所示。

表1 主播信息表

表名

streamer_info

中文表名称

主播信息表

主键

id

序号

字段名称

字段说明

类型

长度

属性

备注

1

id

主播编号

int

主键

自增列

2

real_name

姓名

varchar

10

非空

3

nick_name

昵称

varchar

10

非空

4

category_id

内容分类编号

int

非空

外键

5

gender

性别

varchar

2

非空

6

birthdate

出生日期

date

非空

2.创建数据库表category,添加测试数据不少于3条,表结构如表2所示。

表2 内容分类信息表

表名

category

中文表名称

内容分类表

主键

id

序号

字段名称

字段说明

类型

长度

属性

备注

1

id

分类编号

int

主键

自增列

2

category

分类名称

varchar

10

非空

3.创建实体类Streamer、实体类Category、VO StreamerInfo,根据业务提供需要的构造方法和setter/getter方法。

3.创建BaseDao类,实现数据库连接和关闭功能。

4.创建DAO接口StreamerDao,定义添加主播、按直播内容分类查询主播信息、按主播昵称搜索主播信息和注销主播信息的方法;创建DAO接口CategoryDao,定义查询直播内容分类信息的方法。

5.创建DAO实现类StreamerDaoMySQLImpl和CategoryDaoMySQLImpl,继承BaseDao类,实现StreamerDao接口和CategoryDao接口,使用JDBC完成相应数据库操作。

6. 创建Service接口StreamerService,定义添加主播、按直播内容分类查询主播信息、按主播昵称搜索主播信息和注销主播信息的方法;创建Service接口CategoryService,定义查询直播内容分类信息的方法。

7. 创建Service实现类StreamerServiceImp和CategoryServiceImpl,实现StreamerService接口和CategoryService接口,调用相应的DAO接口实现数据库操作。

6.创建LiveStreamerManage类,完成在控制台的管理操作,启动和运行系统。

五、注意事项

1.请注意代码的书写、命名符合规范,在代码中添加必要的注释。

2.请注意操作数据库时进行必要的异常处理

 SQL语句:

#创建数据库
CREATE DATABASE streamer
#使用数据库
USE streamer
#创建内容分类信息表
CREATE TABLE category (
    id INT AUTO_INCREMENT PRIMARY KEY,
    category VARCHAR(10) NOT NULL
);

INSERT INTO category (category) VALUES ('唱'), ('跳'), ('rap'),('篮球');
#创建主播信息表
CREATE TABLE streamer_info (
    id INT AUTO_INCREMENT PRIMARY KEY,
    real_name VARCHAR(10) NOT NULL,
    nick_name VARCHAR(10) NOT NULL,
    category_id INT NOT NULL,
    gender VARCHAR(2) NOT NULL,
    birthdate DATE NOT NULL,
    FOREIGN KEY (category_id) REFERENCES category(id)
);

INSERT INTO streamer_info (real_name, nick_name, category_id, gender, birthdate) 
VALUES 
('蔡徐坤', '坤球王子', 1, '男', '1990-01-01'),
('张娜莹', '翘臀公主', 2, '女', '1992-02-02'),
('王富贵', '王权富贵', 3, '男', '1994-03-03');

java导包什么的就不用我再另外写了吧?这些应该大家都会 

java实体类,Streamer实体类,表示主播信息

package streamer.Class;

import java.util.Date;


/*
* Streamer 实体类,表示主播信息
* */
public class Streamer {
    private int id;
    private String realName;
    private String nickName;
    private String gender;
    private int categoryId;
    private Date birthdate;

    // 构造方法、getter和setter方法
    public Streamer() {}

    public Streamer(int id, String realName, String nickName, String gender, int categoryId, Date birthdate) {
        this.id = id;
        this.realName = realName;
        this.nickName = nickName;
        this.gender = gender;
        this.categoryId = categoryId;
        this.birthdate = birthdate;
    }

    // Getter 和 Setter 方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(int categoryId) {
        this.categoryId = categoryId;
    }

    public Date getBirthdate() {
        return birthdate;
    }

    public void setBirthdate(Date birthdate) {
        this.birthdate = birthdate;
    }
}
Category 实体类,表示内容分类
package streamer.Class;

/*
 Category 实体类,表示内容分类
 */
public class Category {
    private int id;
    private String category;

    // 构造方法、getter和setter方法
    public Category() {}

    public Category(int id, String category) {
        this.id = id;
        this.category = category;
    }

    // Getter 和 Setter 方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}
StreamerInfo 实体类,表示主播的完整信息,包括分类名称
package streamer.Class;

import java.util.Date;


/*
 StreamerInfo 实体类,表示主播的完整信息,包括分类名称
*/

public class StreamerInfo {
    private int id;
    private String realName;
    private String nickName;
    private String gender;
    private String category;
    private Date birthdate;

    // 构造方法、getter和setter方法
    public StreamerInfo() {}

    public StreamerInfo(int id, String realName, String nickName, String gender, String category, Date birthdate) {
        this.id = id;
        this.realName = realName;
        this.nickName = nickName;
        this.gender = gender;
        this.category = category;
        this.birthdate = birthdate;
    }

    // Getter 和 Setter 方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public Date getBirthdate() {
        return birthdate;
    }

    public void setBirthdate(Date birthdate) {
        this.birthdate = birthdate;
    }

    @Override
    public String toString() {
        return "StreamerInfo [编号=" + id + ", 姓名=" + realName + ", 昵称=" + nickName + ", 性别=" + gender + ", 分类=" + category + ", 生日=" + birthdate + "]";
    }
}

// BaseDao 类,用于管理数据库连接和关闭
package streamer.DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;


// BaseDao 类,用于管理数据库连接和关闭

public class BaseDao {
    private static final String URL = "jdbc:mysql://localhost:3306/streamer";
    private static final String USER = "root";
    private static final String PASSWORD = "123456";


  /*    获取数据库连接
      @return Connection 数据库连接对象
   */
    public Connection getConnection() {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            return DriverManager.getConnection(URL, USER, PASSWORD);
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
        return null;
    }


   /*   关闭数据库连接
      @param conn Connection 数据库连接对象

   */

    public void closeConnection(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

//CategoryDao 接口,定义分类信息的数据访问操作
package streamer.DAO;

import streamer.Class.Category;

import java.util.List;


 //CategoryDao 接口,定义分类信息的数据访问操作

public interface CategoryDao {
    List<Category> getAllCategories();
}
//CategoryDaoMySQLImpl 类,实现 CategoryDao 接口,使用 JDBC 操作数据库
package streamer.DAO;

import streamer.Class.Category;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


  //CategoryDaoMySQLImpl 类,实现 CategoryDao 接口,使用 JDBC 操作数据库

public class CategoryDaoMySQLImpl extends BaseDao implements CategoryDao {
    @Override
    public List<Category> getAllCategories() {
        List<Category> list = new ArrayList<>();
        String sql = "SELECT * FROM category";
        try (Connection conn = getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                Category category = new Category();
                category.setId(rs.getInt("id"));
                category.setCategory(rs.getString("category"));
                list.add(category);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
}
//StreamerDao 接口,定义主播信息的数据访问操作
package streamer.DAO;

import streamer.Class.Streamer;
import streamer.Class.StreamerInfo;

import java.util.List;


  //StreamerDao 接口,定义主播信息的数据访问操作

public interface StreamerDao {
    void addStreamer(Streamer streamer);
    List<StreamerInfo> getStreamersByCategory(int categoryId);
    List<StreamerInfo> getStreamersByNickName(String nickName);
    void deleteStreamer(int id);
}

//StreamerDaoMySQLImpl 类,实现StreamerDao接口,使用JDBC操作数据库
package streamer.DAO;
import streamer.Class.Streamer;
import streamer.Class.StreamerInfo;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//StreamerDaoMySQLImpl 类,实现StreamerDao接口,使用JDBC操作数据库

public class StreamerDaoMySQLImpl extends BaseDao implements StreamerDao {

//添加主播
    @Override
    public void addStreamer(Streamer streamer) {
        String sql = "INSERT INTO streamer_info (real_name, nick_name, category_id, gender, birthdate) VALUES (?, ?, ?, ?, ?)";
        try (Connection conn = getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setString(1, streamer.getRealName());
            pst.setString(2, streamer.getNickName());
            pst.setInt(3, streamer.getCategoryId());
            pst.setString(4, streamer.getGender());
            pst.setDate(5, new java.sql.Date(streamer.getBirthdate().getTime()));
            pst.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
   // 连表查询
    @Override
    public List<StreamerInfo> getStreamersByCategory(int categoryId) {
        List<StreamerInfo> list = new ArrayList<>();
        String sql = "SELECT s.id, s.real_name, s.nick_name, s.gender, c.category, s.birthdate " +
                "FROM streamer_info s JOIN category c ON s.category_id = c.id WHERE s.category_id = ?";
        try (Connection conn = getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setInt(1, categoryId);
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                StreamerInfo info = new StreamerInfo();
                info.setId(rs.getInt("id"));
                info.setRealName(rs.getString("real_name"));
                info.setNickName(rs.getString("nick_name"));
                info.setGender(rs.getString("gender"));
                info.setCategory(rs.getString("category"));
                info.setBirthdate(rs.getDate("birthdate"));
                list.add(info);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    //模糊查询
    @Override
    public List<StreamerInfo> getStreamersByNickName(String nickName) {
        List<StreamerInfo> list = new ArrayList<>();
        String sql = "SELECT s.id, s.real_name, s.nick_name, s.gender, c.category, s.birthdate " +
                "FROM streamer_info s JOIN category c ON s.category_id = c.id WHERE s.nick_name LIKE ?";
        try (Connection conn = getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setString(1, "%" + nickName + "%");
            ResultSet rs = pst.executeQuery();
            while (rs.next()) {
                StreamerInfo info = new StreamerInfo();
                info.setId(rs.getInt("id"));
                info.setRealName(rs.getString("real_name"));
                info.setNickName(rs.getString("nick_name"));
                info.setGender(rs.getString("gender"));
                info.setCategory(rs.getString("category"));
                info.setBirthdate(rs.getDate("birthdate"));
                list.add(info);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }
    //删除操作
    @Override
    public void deleteStreamer(int id) {
        String sql = "DELETE FROM streamer_info WHERE id = ?";
        try (Connection conn = getConnection();
             PreparedStatement pst = conn.prepareStatement(sql)) {
            pst.setInt(1, id);
            pst.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

//CategoryService 接口,定义分类信息的业务操作
package streamer.eielt;

import streamer.Class.Category;

import java.util.List;


  //CategoryService 接口,定义分类信息的业务操作

public interface CategoryService {
    List<Category> getAllCategories();
}

//CategoryServiceImpl 类,实现 CategoryService 接口,调用 DAO 接口进行数据库操作
package streamer.eielt;

import streamer.Class.Category;
import streamer.DAO.CategoryDao;
import streamer.DAO.CategoryDaoMySQLImpl;

import java.util.List;


  //CategoryServiceImpl 类,实现 CategoryService 接口,调用 DAO 接口进行数据库操作

public class CategoryServiceImpl implements CategoryService {
    private CategoryDao categoryDao = new CategoryDaoMySQLImpl();

    @Override
    public List<Category> getAllCategories() {
        return categoryDao.getAllCategories();
    }
}

//StreamerService 接口,定义主播信息的业务操作
package streamer.eielt;

import streamer.Class.Streamer;
import streamer.Class.StreamerInfo;

import java.util.List;


  //StreamerService 接口,定义主播信息的业务操作
public interface StreamerService {
    void addStreamer(Streamer streamer);
    List<StreamerInfo> getStreamersByCategory(int categoryId);
    List<StreamerInfo> getStreamersByNickName(String nickName);
    void deleteStreamer(int id);
}
//StreamerServiceImpl 类,实现 StreamerService 接口,调用 DAO 接口进行数据库操作
package streamer.eielt;
import streamer.Class.Streamer;
import streamer.Class.StreamerInfo;
import streamer.DAO.StreamerDao;
import streamer.DAO.StreamerDaoMySQLImpl;

import java.util.List;


  //StreamerServiceImpl 类,实现 StreamerService 接口,调用 DAO 接口进行数据库操作
public class StreamerServiceImpl implements StreamerService {
    private StreamerDao streamerDao = new StreamerDaoMySQLImpl();


      @Override
      public void addStreamer(Streamer streamer) {
          streamerDao.addStreamer(streamer);
      }

      @Override
    public List<StreamerInfo> getStreamersByCategory(int categoryId) {
        return streamerDao.getStreamersByCategory(categoryId);
    }

    @Override
    public List<StreamerInfo> getStreamersByNickName(String nickName) {
        return streamerDao.getStreamersByNickName(nickName);
    }

    @Override
    public void deleteStreamer(int id) {
        streamerDao.deleteStreamer(id);
    }
}
//LiveStreamerManage 类,主程序入口,负责控制台交互和功能调度
package streamer;

import streamer.Class.Category;
import streamer.Class.Streamer;
import streamer.Class.StreamerInfo;
import streamer.eielt.CategoryService;
import streamer.eielt.CategoryServiceImpl;
import streamer.eielt.StreamerService;
import streamer.eielt.StreamerServiceImpl;

import java.util.List;
import java.util.Scanner;


  //LiveStreamerManage 类,主程序入口,负责控制台交互和功能调度

public class LiveStreamerManage {
    private static StreamerService streamerService = new StreamerServiceImpl();
    private static CategoryService categoryService = new CategoryServiceImpl();
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        while (true) {
            showMenu();
            int choice = scanner.nextInt();
            scanner.nextLine(); // 消费换行符
            switch (choice) {
                case 1:
                    addStreamer();
                    break;
                case 2:
                    queryStreamerByCategory();
                    break;
                case 3:
                    queryStreamerByNickName();
                    break;
                case 4:
                    deleteStreamer();
                    break;
                case 5:
                    System.out.println("系统退出!");
                    System.exit(0);
                    break;
                default:
                    System.out.println("无效的选项,请重新选择!");
            }
        }
    }
     //显示主菜单
    private static void showMenu() {
        System.out.println("1. 添加主播");
        System.out.println("2. 按内容分类查询主播信息");
        System.out.println("3. 按主播昵称查询主播信息");
        System.out.println("4. 注销主播");
        System.out.println("5. 退出系统");
        System.out.print("请选择功能: ");
    }

    //添加主播信息
    private static void addStreamer() {
        System.out.print("请输入主播姓名: ");
        String realName = scanner.nextLine();
        System.out.print("请输入主播昵称: ");
        String nickName = scanner.nextLine();
        System.out.print("请输入性别: ");
        String gender = scanner.nextLine();
        System.out.print("请输入出生日期 (YYYY-MM-DD): ");
        String birthdate = scanner.nextLine();
        System.out.println("请选择直播内容分类编号:");
        List<Category> categories = categoryService.getAllCategories();
        for (Category category : categories) {
            System.out.println(category.getId() + ": " + category.getCategory());
        }
        int categoryId = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        Streamer streamer = new Streamer();
        streamer.setRealName(realName);
        streamer.setNickName(nickName);
        streamer.setGender(gender);
        streamer.setBirthdate(java.sql.Date.valueOf(birthdate));
        streamer.setCategoryId(categoryId);

        streamerService.addStreamer(streamer);
        System.out.println("添加成功!");
    }

    //按内容分类查询主播信息
    private static void queryStreamerByCategory() {
        System.out.println("请选择查询的内容分类编号:");
        List<Category> categories = categoryService.getAllCategories();
        for (Category category : categories) {
            System.out.println(category.getId() + ": " + category.getCategory());
        }
        int categoryId = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        List<StreamerInfo> streamers = streamerService.getStreamersByCategory(categoryId);
        if (streamers.isEmpty()) {
            System.out.println("没有找到相关主播信息。");
        } else {
            for (StreamerInfo streamer : streamers) {
                System.out.println(streamer);
            }
        }
    }


     //按主播昵称模糊查询主播信息

    private static void queryStreamerByNickName() {
        System.out.print("请输入要查询的主播昵称: ");
        String nickName = scanner.nextLine();
        List<StreamerInfo> streamers = streamerService.getStreamersByNickName(nickName);
        if (streamers.isEmpty()) {
            System.out.println("没有找到相关主播信息。");
        } else {
            for (StreamerInfo streamer : streamers) {
                System.out.println(streamer);
            }
        }
    }


    //  注销主播

    private static void deleteStreamer() {
        System.out.print("请输入要注销的主播id: ");
        int id = scanner.nextInt();
        scanner.nextLine(); // 消费换行符

        streamerService.deleteStreamer(id);
        System.out.println("注销成功!");
    }
}

以上便是全部内容,实际使用根据表名,列名或者使用效果去完成新的内容等

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值