目录
1.主菜单:显示系统主菜单,每执行完一项功能后菜单循环显示,如下图所示,菜单功能包括
2.添加主播:输入主播姓名、昵称、性别、出生日期、直播内容分类。正确录入以上信息后,显示“添加成功!”,效果如下图所示。
3.按内容分类查询主播信息:提示选择要查询的内容分类编号,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如下图所示。
4.按直播昵称模糊查询主播信息:提示输入要查询的主播昵称,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如图4所示。
5.注销主播:提示输入要注销的主播id,从主播信息表中删除该主播记录。如图5所示,成功后提示“注销成功!”
1.创建数据库表streamer,添加测试数据不少于3条,表结构如表1所示。
2.创建数据库表category,添加测试数据不少于3条,表结构如表2所示。
一、语言和环境
A、实现语言
Java
B、环境要求
JDK 1.8、IDEA、MySQL 5.7/MySQL 8.0/MySQLyong等
二、功能要求
某直播平台为了方便直播主播的管理,现在需要开发直播平台主播管理系统。具体要求如下:
1.主菜单:显示系统主菜单,每执行完一项功能后菜单循环显示,如下图所示,菜单功能包括
:
1)添加主播
2)按照内容分类查询主播信息
3)按照主播昵称查询主播信息
4)注销主播
5)退出系统
2.添加主播:输入主播姓名、昵称、性别、出生日期、直播内容分类。正确录入以上信息后,显示“添加成功!”,效果如下图所示。
3.按内容分类查询主播信息:提示选择要查询的内容分类编号,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如下图所示。
4.按直播昵称模糊查询主播信息:提示输入要查询的主播昵称,查询出相关主播的信息,包括主播id、姓名、昵称、性别、直播分类、生日。如图4所示。
5.注销主播:提示输入要注销的主播id,从主播信息表中删除该主播记录。如图5所示,成功后提示“注销成功!”
6.退出系统:提示“系统退出!”后退出系统,如下图所示。
三、类的设计
采用三层架构模式开发此系统,需要定义如下类:
1.主播信息实体类(Streamer)
编号(id)
姓名(realName)
昵称(nickName)
性别(gender)
内容分类编号(categoryId)
出生日期(birthdate)
2.分类信息实体类(Category)
- 编号(id)
- 分类名称(category)
3.主播全部信息VO(StreamerInfo)
- 编号(id)
- 姓名(realName)
- 昵称(nickName)
- 性别(gender)
- 内容分类 (category)
- 出生日期(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("注销成功!");
}
}
以上便是全部内容,实际使用根据表名,列名或者使用效果去完成新的内容等