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', '急性胆囊炎');
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();
}
}
}
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();
}
}
}
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");
}
}
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>