本文目录导读:

这是一个经典的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核心的面向对象、数据库操作、三层架构等知识,非常适合学习,你可以在此基础上继续扩展更复杂的功能!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播