本文目录导读:

这是一个经典的Java学习案例——师徒管理系统的完整实现,我将从需求分析、数据库设计、代码实现到测试运行,一步步带你完成。
需求分析
核心功能
- 师傅可以发布教学任务
- 徒弟可以领取任务
- 师傅可以评价徒弟完成情况
- 查看师徒关系
实体关系
- 师傅(1)→(N)徒弟
- 师傅(1)→(N)任务
- 徒弟(N)→(M)任务(通过任务领取表关联)
数据库设计
-- 创建数据库
CREATE DATABASE master_apprentice;
USE master_apprentice;
-- 师傅表
CREATE TABLE master (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
skill VARCHAR(100),
experience INT DEFAULT 0
);
-- 徒弟表
CREATE TABLE apprentice (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
level VARCHAR(20) DEFAULT '初级',
master_id INT,
FOREIGN KEY (master_id) REFERENCES master(id)
);
-- 任务表
CREATE TABLE task (
id INT PRIMARY KEY AUTO_INCREMENT,VARCHAR(100) NOT NULL,
description TEXT,
difficulty INT DEFAULT 1,
master_id INT,
status VARCHAR(20) DEFAULT '待领取',
FOREIGN KEY (master_id) REFERENCES master(id)
);
-- 任务领取记录表
CREATE TABLE task_claim (
id INT PRIMARY KEY AUTO_INCREMENT,
task_id INT,
apprentice_id INT,
claim_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completion_status VARCHAR(20) DEFAULT '进行中',
score INT DEFAULT 0,
FOREIGN KEY (task_id) REFERENCES task(id),
FOREIGN KEY (apprentice_id) REFERENCES apprentice(id)
);
Java代码实现
实体类
Master.java
package com.example.entity;
public class Master {
private int id;
private String name;
private String skill;
private int experience;
// 无参构造
public Master() {}
// 带参构造
public Master(String name, String skill) {
this.name = name;
this.skill = skill;
}
// Getter和Setter方法
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getSkill() { return skill; }
public void setSkill(String skill) { this.skill = skill; }
public int getExperience() { return experience; }
public void setExperience(int experience) { this.experience = experience; }
@Override
public String toString() {
return "师傅{" +
"ID=" + id +
", 姓名='" + name + '\'' +
", 技能='" + skill + '\'' +
", 经验值=" + experience +
'}';
}
}
Apprentice.java
package com.example.entity;
public class Apprentice {
private int id;
private String name;
private String level;
private Master master;
public Apprentice() {}
public Apprentice(String name) {
this.name = name;
this.level = "初级";
}
// Getter和Setter
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getLevel() { return level; }
public void setLevel(String level) { this.level = level; }
public Master getMaster() { return master; }
public void setMaster(Master master) { this.master = master; }
@Override
public String toString() {
return "徒弟{" +
"ID=" + id +
", 姓名='" + name + '\'' +
", 等级='" + level + '\'' +
", 师傅=" + (master != null ? master.getName() : "无") +
'}';
}
}
数据库操作类
DBConnection.java
package com.example.util;
import java.sql.*;
public class DBConnection {
private static final String URL = "jdbc:mysql://localhost:3306/master_apprentice";
private static final String USER = "root";
private static final String PASSWORD = "your_password";
public static Connection getConnection() throws SQLException {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void close(Connection conn, Statement stmt, ResultSet rs) {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
数据访问对象(DAO)
MasterDAO.java
package com.example.dao;
import com.example.entity.Master;
import com.example.util.DBConnection;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class MasterDAO {
// 添加师傅
public void addMaster(Master master) {
String sql = "INSERT INTO master (name, skill, experience) VALUES (?, ?, ?)";
try (Connection conn = DBConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, master.getName());
pstmt.setString(2, master.getSkill());
pstmt.setInt(3, master.getExperience());
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 删除师傅
public void deleteMaster(int id) {
String sql = "DELETE FROM master WHERE id = ?";
try (Connection conn = DBConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, id);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 查找所有师傅
public List<Master> findAllMasters() {
List<Master> masters = new ArrayList<>();
String sql = "SELECT * FROM master";
try (Connection conn = DBConnection.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
while (rs.next()) {
Master master = new Master();
master.setId(rs.getInt("id"));
master.setName(rs.getString("name"));
master.setSkill(rs.getString("skill"));
master.setExperience(rs.getInt("experience"));
masters.add(master);
}
} catch (SQLException e) {
e.printStackTrace();
}
return masters;
}
// 更新师傅经验值
public void updateExperience(int masterId, int addExperience) {
String sql = "UPDATE master SET experience = experience + ? WHERE id = ?";
try (Connection conn = DBConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, addExperience);
pstmt.setInt(2, masterId);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
业务逻辑类
MasterApprenticeSystem.java
package com.example.service;
import com.example.dao.MasterDAO;
import com.example.dao.ApprenticeDAO;
import com.example.dao.TaskDAO;
import com.example.entity.*;
public class MasterApprenticeSystem {
private MasterDAO masterDAO = new MasterDAO();
private ApprenticeDAO apprenticeDAO = new ApprenticeDAO();
private TaskDAO taskDAO = new TaskDAO();
// 收徒
public void takeApprentice(int masterId, int apprenticeId) {
Master master = masterDAO.findMasterById(masterId);
Apprentice apprentice = apprenticeDAO.findApprenticeById(apprenticeId);
if (master != null && apprentice != null) {
apprentice.setMaster(master);
apprenticeDAO.updateMaster(apprenticeId, masterId);
System.out.println(master.getName() + " 收 " + apprentice.getName() + " 为徒");
}
}
// 发布任务
public Task publishTask(int masterId, String title, String description, int difficulty) {
Task task = new Task(title, description, difficulty, masterId);
taskDAO.addTask(task);
System.out.println("任务发布成功: " + title);
return task;
}
// 领取任务
public void claimTask(int taskId, int apprenticeId) {
Task task = taskDAO.findTaskById(taskId);
Apprentice apprentice = apprenticeDAO.findApprenticeById(apprenticeId);
if (task != null && apprentice != null) {
taskDAO.claimTask(taskId, apprenticeId);
System.out.println(apprentice.getName() + " 领取了任务: " + task.getTitle());
}
}
// 完成任务并评分
public void completeTask(int taskId, int apprenticeId, int score) {
taskDAO.completeTask(taskId, apprenticeId, score);
// 更新师傅经验值
Task task = taskDAO.findTaskById(taskId);
masterDAO.updateExperience(task.getMasterId(), score);
System.out.println("任务完成,评分: " + score);
}
// 展示所有师徒信息
public void showAllInfo() {
System.out.println("\n========== 系统信息 ==========");
// 显示所有师傅
System.out.println("\n所有师傅:");
for (Master m : masterDAO.findAllMasters()) {
System.out.println(m);
}
// 显示所有徒弟
System.out.println("\n所有徒弟:");
for (Apprentice a : apprenticeDAO.findAllApprentices()) {
System.out.println(a);
}
// 显示所有任务
System.out.println("\n所有任务:");
for (Task t : taskDAO.findAllTasks()) {
System.out.println(t);
}
}
}
主程序
Main.java
package com.example;
import com.example.entity.*;
import com.example.service.MasterApprenticeSystem;
public class Main {
public static void main(String[] args) {
MasterApprenticeSystem system = new MasterApprenticeSystem();
// 1. 添加师傅
Master master1 = new Master("张三丰", "太极拳");
system.addMaster(master1);
Master master2 = new Master("周伯通", "左右互搏");
system.addMaster(master2);
// 2. 添加徒弟
Apprentice apprentice1 = new Apprentice("张无忌");
system.addApprentice(apprentice1);
Apprentice apprentice2 = new Apprentice("郭靖");
system.addApprentice(apprentice2);
// 3. 收徒
system.takeApprentice(1, 1); // 张三丰收张无忌
system.takeApprentice(2, 2); // 周伯通收郭靖
// 4. 发布任务
system.publishTask(1, "学习太极拳24式", "每天练习太极拳,掌握基本招式", 2);
system.publishTask(2, "练习左右互搏术", "同时左手画圆右手画方", 3);
// 5. 领取任务
system.claimTask(1, 1); // 张无忌领取任务
system.claimTask(2, 2); // 郭靖领取任务
// 6. 完成任务
system.completeTask(1, 1, 85); // 张无忌完成并获得85分
system.completeTask(2, 2, 78); // 郭靖完成并获得78分
// 7. 显示所有信息
system.showAllInfo();
}
}
运行测试
Maven依赖(pom.xml)
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
运行结果示例
张三丰 收 张无忌 为徒
周伯通 收 郭靖 为徒
任务发布成功: 学习太极拳24式
任务发布成功: 练习左右互搏术
张无忌 领取了任务: 学习太极拳24式
郭靖 领取了任务: 练习左右互搏术
任务完成,评分: 85
任务完成,评分: 78
========== 系统信息 ==========
所有师傅:
师傅{ID=1, 姓名='张三丰', 技能='太极拳', 经验值=85}
师傅{ID=2, 姓名='周伯通', 技能='左右互搏', 经验值=78}
所有徒弟:
徒弟{ID=1, 姓名='张无忌', 等级='初级', 师傅=张三丰}
徒弟{ID=2, 姓名='郭靖', 等级='初级', 师傅=周伯通}
所有任务:
任务{ID=1, 标题='学习太极拳24式', 难度=2, 状态='已完成', 评分=85}
任务{ID=2, 标题='练习左右互搏术', 难度=3, 状态='已完成', 评分=78}
扩展功能建议
- 任务等级系统:根据完成评分提升徒弟等级
- 师徒互动:增加聊天、留言功能
- 排行榜:按经验值、完成度等排序
- 审核机制:任务发布需要师傅审核
- 经验值转计算:特定经验值可兑换技能或道具
这个项目涵盖了Java核心的面向对象、数据库操作、三层架构等知识,非常适合学习,你可以在此基础上继续扩展更复杂的功能!