Java师徒案例

wen java案例 1

本文目录导读:

Java师徒案例

  1. 需求分析
  2. 数据库设计
  3. Java代码实现
  4. 运行测试
  5. 扩展功能建议

这是一个经典的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}

扩展功能建议

  1. 任务等级系统:根据完成评分提升徒弟等级
  2. 师徒互动:增加聊天、留言功能
  3. 排行榜:按经验值、完成度等排序
  4. 审核机制:任务发布需要师傅审核
  5. 经验值转计算:特定经验值可兑换技能或道具

这个项目涵盖了Java核心的面向对象、数据库操作、三层架构等知识,非常适合学习,你可以在此基础上继续扩展更复杂的功能!

抱歉,评论功能暂时关闭!