学生管理系统代码提交

This commit is contained in:
李可欣
2026-09-21 23:17:51 +08:00
commit d3c60b2fbf
121 changed files with 4155 additions and 0 deletions
+177
View File
@@ -0,0 +1,177 @@
-- ============================================================
-- 沃林学生管理系统 数据库初始化脚本(修正版)
-- 基于原始建表语句修正,主要变更:
-- 1. c_lass 补充 class_name 字段(原表缺少班级名称)
-- 2. student 补充 status 字段(在读/进入就业/已就业,就业联动依赖)
-- 3. score 补充 is_deleted 字段(统一逻辑删除风格)
-- 4. employment_base 补充冗余字段 stu_name / class_name(需求 2.3 设计提示)
-- 5. user 新增用户表(JWT 登录 + RBAC 角色,原建表语句缺失)
-- 6. 修复原语句语法错误(c_lass 末尾多余逗号)
-- 7. 追加种子数据:初始管理员 admin/admin123 + 演示数据
-- 使用:mysql -uroot -p < init.sql (或 docker-compose 自动执行)
-- ============================================================
CREATE DATABASE IF NOT EXISTS walin_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE walin_db;
-- ---------- 班级表 ----------
CREATE TABLE IF NOT EXISTS c_lass(
class_id INT PRIMARY KEY AUTO_INCREMENT,
class_name VARCHAR(50) NOT NULL COMMENT '班级名称',
start_time DATE NOT NULL COMMENT '开课时间',
is_deleted INT NOT NULL DEFAULT 0 COMMENT '逻辑删除'
);
-- ---------- 老师表 ----------
CREATE TABLE IF NOT EXISTS teacher(
teacher_id INT PRIMARY KEY AUTO_INCREMENT,
teacher_name VARCHAR(50) NOT NULL,
job_name VARCHAR(50) NOT NULL COMMENT '主讲/班主任/助教',
class_id INT NOT NULL,
is_deleted INT NOT NULL DEFAULT 0,
FOREIGN KEY (class_id) REFERENCES c_lass(class_id)
);
-- ---------- 顾问表 ----------
CREATE TABLE IF NOT EXISTS advisor(
advisor_id INT PRIMARY KEY AUTO_INCREMENT,
advisor_name VARCHAR(50) NOT NULL,
is_deleted INT NOT NULL DEFAULT 0
);
-- ---------- 学生表 ----------
CREATE TABLE IF NOT EXISTS student(
stu_id INT PRIMARY KEY COMMENT '学号(支持规则生成:入学年份+班级号+序号)',
stu_name VARCHAR(10) NOT NULL,
native_place VARCHAR(30) NOT NULL,
graduate_school VARCHAR(50) NOT NULL,
major VARCHAR(20) NOT NULL,
enroll_time DATE NOT NULL,
graduate_time DATE NOT NULL,
education VARCHAR(10) NOT NULL,
age INT NOT NULL,
gender VARCHAR(10) NOT NULL,
class_id INT NOT NULL,
advisor_id INT NOT NULL,
status VARCHAR(10) NOT NULL DEFAULT '在读' COMMENT '在读/进入就业/已就业',
is_deleted INT NOT NULL DEFAULT 0,
FOREIGN KEY (class_id) REFERENCES c_lass(class_id),
FOREIGN KEY (advisor_id) REFERENCES advisor(advisor_id)
);
-- ---------- 成绩表 ----------
CREATE TABLE IF NOT EXISTS score(
stu_id INT,
exam_id INT COMMENT '考核序次',
score FLOAT DEFAULT NULL,
is_deleted INT NOT NULL DEFAULT 0,
PRIMARY KEY (stu_id, exam_id),
FOREIGN KEY (stu_id) REFERENCES student(stu_id)
);
-- ---------- 就业表-基础信息表 ----------
CREATE TABLE IF NOT EXISTS employment_base(
stu_id INT PRIMARY KEY,
employment_open_time DATE NOT NULL COMMENT '就业开放时间',
job_time DATE DEFAULT NULL COMMENT 'offer下发时间',
company_name VARCHAR(100) DEFAULT '未就业',
salary FLOAT DEFAULT 0,
stu_name VARCHAR(10) NOT NULL COMMENT '冗余:学生姓名',
class_name VARCHAR(50) NOT NULL COMMENT '冗余:班级名称',
is_deleted INT NOT NULL DEFAULT 0,
FOREIGN KEY (stu_id) REFERENCES student(stu_id)
);
-- ---------- 就业表-offer表 ----------
CREATE TABLE IF NOT EXISTS employment_offer(
stu_id INT,
offer_id INT COMMENT '同一学生内自增',
offer_time DATE NOT NULL,
company_name VARCHAR(100) DEFAULT '',
salary FLOAT DEFAULT 0,
is_deleted INT NOT NULL DEFAULT 0,
PRIMARY KEY (stu_id, offer_id),
FOREIGN KEY (stu_id) REFERENCES employment_base(stu_id)
);
-- ---------- 用户表(新增:JWT 登录 + RBAC) ----------
CREATE TABLE IF NOT EXISTS user(
user_id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(200) NOT NULL COMMENT 'PBKDF2-SHA256',
role VARCHAR(20) NOT NULL COMMENT 'admin/teacher/student',
stu_id INT NULL COMMENT 'student 角色绑定的学号',
teacher_id INT NULL COMMENT 'teacher 角色绑定的工号',
is_deleted INT NOT NULL DEFAULT 0,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (stu_id) REFERENCES student(stu_id),
FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id)
);
-- ============================================================
-- 种子数据(演示用,可按需删减)
-- 使用 INSERT IGNORE:重复执行本脚本不会报主键冲突(幂等)
-- ============================================================
-- 班级
INSERT IGNORE INTO c_lass(class_id, class_name, start_time) VALUES
(1, 'Java2301', '2026-03-01'),
(2, 'Java2302', '2026-04-10'),
(3, 'Python2301', '2026-05-06');
-- 顾问
INSERT IGNORE INTO advisor(advisor_id, advisor_name) VALUES
(1, '王顾问'), (2, '李顾问');
-- 老师
INSERT IGNORE INTO teacher(teacher_id, teacher_name, job_name, class_id) VALUES
(1, '张主讲', '主讲', 1),
(2, '刘班主任', '班主任', 1),
(3, '陈主讲', '主讲', 2),
(4, '赵班主任', '班主任', 2),
(5, '孙助教', '助教', 3);
-- 学生(学号规则:入学年份4位 + 班级号2位 + 序号4位)
INSERT IGNORE INTO student(stu_id, stu_name, native_place, graduate_school, major, enroll_time, graduate_time, education, age, gender, class_id, advisor_id, status) VALUES
(2026010001, '张伟', '湖北武汉', '武汉大学', '软件工程', '2026-03-01', '2026-09-01', '本科', 24, '男', 1, 1, '进入就业'),
(2026010002, '王芳', '湖南长沙', '中南大学', '计算机科学', '2026-03-01', '2026-09-01', '本科', 23, '女', 1, 1, '进入就业'),
(2026010003, '李娜', '河南郑州', '郑州大学', '软件工程', '2026-03-01', '2026-09-01', '大专', 22, '女', 1, 1, '在读'),
(2026010004, '刘强', '四川成都', '四川大学', '信息安全', '2026-03-01', '2026-09-01', '本科', 25, '男', 1, 1, '在读'),
(2026020001, '陈静', '江苏南京', '南京大学', '软件工程', '2026-04-10', '2026-10-10', '本科', 24, '女', 2, 2, '在读'),
(2026020002, '杨帆', '安徽合肥', '合肥工业大学', '计算机科学', '2026-04-10', '2026-10-10', '硕士', 27, '男', 2, 2, '在读'),
(2026020003, '黄磊', '广东广州', '华南理工', '软件工程', '2026-04-10', '2026-10-10', '本科', 23, '男', 2, 2, '在读'),
(2026030001, '周婷', '浙江杭州', '浙江大学', '人工智能', '2026-05-06', '2026-11-06', '硕士', 26, '女', 3, 2, '在读'),
(2026030002, '吴涛', '陕西西安', '西安电子科大', '大数据', '2026-05-06', '2026-11-06', '本科', 24, '男', 3, 2, '在读');
-- 成绩(部分低于 60 分用于演示红线预警)
INSERT IGNORE INTO score(stu_id, exam_id, score) VALUES
(2026010001, 1, 88), (2026010001, 2, 92), (2026010001, 3, 85),
(2026010002, 1, 76), (2026010002, 2, 58), (2026010002, 3, 81),
(2026010003, 1, 55), (2026010003, 2, 49),
(2026010004, 1, 67), (2026010004, 2, 72),
(2026020001, 1, 95), (2026020001, 2, 90),
(2026020002, 1, 82), (2026020002, 2, 60),
(2026020003, 1, 45), (2026020003, 2, 52), (2026020003, 3, 61),
(2026030001, 1, 89), (2026030001, 2, 94),
(2026030002, 1, 70), (2026030002, 2, 65);
-- 就业基础表(张伟已拿 offer;王芳开放简历未拿 offer)
INSERT IGNORE INTO employment_base(stu_id, employment_open_time, job_time, company_name, salary, stu_name, class_name) VALUES
(2026010001, '2026-08-01', '2026-08-20', '腾讯科技', 18000, '张伟', 'Java2301'),
(2026010002, '2026-08-15', NULL, '未就业', 0, '王芳', 'Java2301');
-- offer 记录
INSERT IGNORE INTO employment_offer(stu_id, offer_id, offer_time, company_name, salary) VALUES
(2026010001, 1, '2026-08-20', '腾讯科技', 18000);
-- ============================================================
-- 初始账号(密码均为 PBKDF2-SHA256 哈希,120000 次迭代):
-- admin / admin123 管理员
-- teacher1 / teacher123 教师(工号1 张主讲,班级1)
-- s2026010003 / student123 学生(学号 2026010003 李娜)
-- 生产环境请立即修改密码!
-- ============================================================
INSERT IGNORE INTO user(username, password_hash, role, teacher_id, stu_id) VALUES
('admin', 'pbkdf2_sha256$120000$897b4de0db4f0edf881627fc49df801e$02fc3387a341190448589f5569ef750f48ff3d9938fcea327ee2d5ee0f7258b9', 'admin', NULL, NULL),
('teacher1', 'pbkdf2_sha256$120000$03dd3da6882e0dd77bc71e5d7ca1bcb5$f02eb626afdc528eca67644f23a39d70d898ddea4adc9b7dccb30a8e1fb788b2', 'teacher', 1, NULL),
('s2026010003', 'pbkdf2_sha256$120000$5f9bd2dee6ff5fe7e145d3e2f9f8e11e$56b07cd8d35882547f378d62d3075e9f2eac38c47b6b917782c5199cb6864d6b', 'student', NULL, 2026010003);