编辑代码

CREATE DATABASE medical_qc;
USE medical_qc;

-- 用户表
CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE,
    password VARCHAR(50),
    role INT  -- 0:用户, 1:管理员
);

-- 编码规则表
CREATE TABLE icd_rules (
    id INT PRIMARY KEY AUTO_INCREMENT,
    keyword VARCHAR(100),
    code VARCHAR(20),
    description TEXT
);

-- 病历表
CREATE TABLE medical_record (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    symptoms TEXT,
    code VARCHAR(20),
    status INT  -- 0:未审核, 1:通过
);

-- 初始数据
INSERT INTO user VALUES (1, 'user', '123456', 0), (2, 'admin', 'admin', 1);
INSERT INTO icd_rules(keyword, code, description) VALUES 
    ('腹痛', 'R10.4', '腹部疼痛'),
    ('发热', 'R50.9', '未特指的发热'),
    ('胆囊炎', 'K81.0', '急性胆囊炎');
// src/servlet/LoginServlet.java
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/medical_qc?useSSL=false", "root", "your_password");
            
            PreparedStatement stmt = conn.prepareStatement(
                "SELECT * FROM user WHERE username=? AND password=?");
            stmt.setString(1, username);
            stmt.setString(2, password);
            ResultSet rs = stmt.executeQuery();
            
            if (rs.next()) {
                HttpSession session = request.getSession();
                session.setAttribute("user", username);
                session.setAttribute("role", rs.getInt("role"));
                response.sendRedirect("record.jsp");
            } else {
                response.sendRedirect("login.jsp?error=1");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// src/servlet/RecordServlet.java
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class RecordServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        String symptoms = request.getParameter("symptoms");
        int userId = (int) request.getSession().getAttribute("user_id");
        
        try {
            Connection conn = DBUtil.getConnection();
            String code = RuleEngine.matchCode(symptoms, conn);
            
            PreparedStatement stmt = conn.prepareStatement(
                "INSERT INTO medical_record(user_id, symptoms, code) VALUES(?,?,?)");
            stmt.setInt(1, userId);
            stmt.setString(2, symptoms);
            stmt.setString(3, code);
            stmt.executeUpdate();
            
            response.getWriter().write("编码推荐成功:" + code);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

// src/util/DBUtil.java
package util;

import java.sql.*;

public class DBUtil {
    public static Connection getConnection() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        return DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/medical_qc?useSSL=false", "root", "your_password");
    }
}

// src/util/RuleEngine.java
package util;

import java.sql.*;

public class RuleEngine {
    public static String matchCode(String text, Connection conn) throws SQLException {
        String[] keywords = text.split(" ");
        for (String keyword : keywords) {
            PreparedStatement stmt = conn.prepareStatement(
                "SELECT code FROM icd_rules WHERE keyword LIKE ? LIMIT 1");
            stmt.setString(1, "%" + keyword + "%");
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) return rs.getString("code");
        }
        return "未匹配到编码";
    }
}
<%-- WebContent/login.jsp --%>
<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
    <form action="LoginServlet" method="post">
        <h2>医疗编码质控系统</h2>
        <input type="text" name="username" placeholder="用户名" class="form-control">
        <input type="password" name="password" placeholder="密码" class="form-control mt-2">
        <button class="btn btn-primary mt-2">登录</button>
        <% if(request.getParameter("error") != null) { %>
            <div class="alert alert-danger mt-2">登录失败</div>
        <% } %>
    </form>
</div>
</body>
</html>

<%-- WebContent/record.jsp --%>
<!DOCTYPE html>
<html>
<head>
    <title>病历录入</title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <script src="js/jquery-3.6.0.min.js"></script>
</head>
<body>
<div class="container mt-5">
    <h2>病历录入</h2>
    <textarea id="symptoms" class="form-control" placeholder="输入症状..."></textarea>
    <button onclick="submitRecord()" class="btn btn-success mt-2">提交</button>
    <div id="result" class="mt-2"></div>
</div>
<script>
function submitRecord() {
    $.post("RecordServlet", {symptoms: $("#symptoms").val()}, function(data){
        $("#result").html(data);
    });
}
</script>
</body>
</html>
<web-app>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>RecordServlet</servlet-name>
        <servlet-class>servlet.RecordServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RecordServlet</servlet-name>
        <url-pattern>/RecordServlet</url-pattern>
    </servlet-mapping>
</web-app>