这是一个大学生社团或组织的新生志愿填报管理系统,后端使用 SpringBoot 开发,前端使用 HTML5 / CSS / JavaScript,数据库使用 MySQL。
它功能齐全,界面美观(至少我这样认为),你可以将它用于课程设计、开发学习等。
具体开发环境:IntelliJ IDEA 2020.2.3 / JDK 1.8.0_181 / MySQL 5.7.32 / SpringBoot 2.3.3 / Tomcat 8.6.5
为了部署方便,我将项目原型合并成了一个 SpringBoot 项目(加入了 Thymeleaf 模板,实质上还是前后端分离的,有必要可以自己拆分出来)。
先在 Navicat 中新建数据库:volunteer
,Character Set 选择 utf8mb4
,Collation 选择 utf8mb4_general_ci
运行项目前,请按顺序创建表。
1.专业表 (major)
CREATE TABLE `major` (
`major_id` int(5) NOT NULL COMMENT '专业编号',
`major_name` varchar(15) NOT NULL COMMENT '专业名称',
`class_num` smallint(2) NOT NULL COMMENT '班级个数',
PRIMARY KEY (`major_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.组织表 (organization)
CREATE TABLE `organization` (
`org_id` int(5) NOT NULL AUTO_INCREMENT COMMENT '组织编号',
`org_name` varchar(20) NOT NULL COMMENT '组织名称',
`org_des` varchar(100) DEFAULT NULL COMMENT '组织描述/介绍',
`manager_name` varchar(20) DEFAULT NULL COMMENT '组织负责人名字',
PRIMARY KEY (`org_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
3.分支表 (branch)
CREATE TABLE `branch` (
`org_id` int(5) NOT NULL COMMENT '组织编号',
`branch_id` int(5) NOT NULL COMMENT '下属组织编号',
`branch_name` varchar(20) DEFAULT NULL COMMENT '下属组织名称',
`branch_des` varchar(20) DEFAULT NULL COMMENT '下属组织描述',
`manager_name` varchar(20) DEFAULT NULL COMMENT '下属组织负责人',
PRIMARY KEY (`branch_id`) USING BTREE,
KEY `branch_ibfk1` (`org_id`) USING BTREE,
CONSTRAINT `branch_ibfk1` FOREIGN KEY (`org_id`) REFERENCES `organization` (`org_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4.学生表 (student)
CREATE TABLE `student` (
`stu_id` int(8) NOT NULL COMMENT '学生学号',
`stu_name` varchar(12) NOT NULL COMMENT '学生姓名',
`major_id` int(5) NOT NULL COMMENT '所属专业id',
`stu_class` smallint(2) NOT NULL COMMENT '学生班级 用整形数字表示',
`stu_phone` varchar(11) NOT NULL COMMENT '手机号',
`stu_qq` varchar(11) DEFAULT NULL COMMENT 'qq号',
`branch_id` int(5) DEFAULT NULL COMMENT '所属组织id',
PRIMARY KEY (`stu_id`) USING BTREE,
KEY `student_ibfk1` (`major_id`) USING BTREE,
KEY `student_ibfk2` (`branch_id`) USING BTREE,
CONSTRAINT `student_ibfk1` FOREIGN KEY (`major_id`) REFERENCES `major` (`major_id`) ON UPDATE CASCADE,
CONSTRAINT `student_ibfk2` FOREIGN KEY (`branch_id`) REFERENCES `branch` (`branch_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
5.志愿表 (report)
CREATE TABLE `report` (
`report_id` int(8) NOT NULL AUTO_INCREMENT COMMENT '志愿编号',
`student_id` int(8) NOT NULL COMMENT '学生学号',
`vol_first` int(5) NOT NULL COMMENT '下属组织编号1',
`vol_second` int(5) DEFAULT NULL COMMENT '下属组织编号2',
`reason_first` varchar(500) NOT NULL,
`reason_second` varchar(500) DEFAULT NULL,
`is_dispensing` smallint(1) NOT NULL COMMENT '是否调剂 0/1',
`status` smallint(1) DEFAULT '0' COMMENT '录取状态 0/1/2',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`remark` varchar(300) DEFAULT NULL COMMENT '面试官的评价',
PRIMARY KEY (`report_id`) USING BTREE,
UNIQUE KEY `student_id` (`student_id`) USING BTREE,
KEY `report_ibfk1` (`vol_first`) USING BTREE,
KEY `report_ibfk2` (`vol_second`) USING BTREE,
CONSTRAINT `report_ibfk1` FOREIGN KEY (`vol_first`) REFERENCES `branch` (`branch_id`) ON UPDATE CASCADE,
CONSTRAINT `report_ibfk2` FOREIGN KEY (`vol_second`) REFERENCES `branch` (`branch_id`) ON UPDATE CASCADE,
CONSTRAINT `report_ibfk3` FOREIGN KEY (`student_id`) REFERENCES `student` (`stu_id`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
6.用户表 (user)
CREATE TABLE `user` (
`user_id` int(5) NOT NULL AUTO_INCREMENT COMMENT '用户编号',
`user_name` varchar(12) NOT NULL COMMENT '用户名',
`real_name` varchar(12) NOT NULL COMMENT '使用者真实姓名',
`user_password` varchar(16) NOT NULL COMMENT '密码',
`branch_id` int(5) NOT NULL,
`user_status` smallint(1) NOT NULL COMMENT '用户权限 1为管理员 2为超级管理员',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`) USING BTREE,
UNIQUE KEY `user_name` (`user_name`) USING BTREE,
KEY `user_ibfk1` (`branch_id`) USING BTREE,
CONSTRAINT `user_ibfk1` FOREIGN KEY (`branch_id`) REFERENCES `branch` (`branch_id`) ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
7.志愿视图 (report_view)
在 Navicat 中选择 volunteer 数据库,在 Views 中用以下 SQL 新建视图:
SELECT `a`.`stu_id` AS `stu_id`, `a`.`stu_name` AS `stu_name`, `b`.`major_name` AS `major_name`, `a`.`stu_class` AS `stu_class`, `a`.`stu_phone` AS `stu_phone`
, `a`.`stu_qq` AS `stu_qq`, `e`.`org_name` AS `org_first`, `d`.`branch_name` AS `bra_first`, `g`.`org_name` AS `org_second`, `f`.`branch_name` AS `bra_second`
, `c`.`reason_first` AS `reason_first`, `c`.`reason_second` AS `reason_second`, `c`.`is_dispensing` AS `is_dispensing`, `c`.`status` AS `status`, `c`.`update_time` AS `update_time`
, `c`.`create_time` AS `create_time`, `c`.`remark` AS `remark`
FROM `student` `a`
LEFT JOIN `major` `b` ON `a`.`major_id` = `b`.`major_id`
LEFT JOIN `report` `c` ON `a`.`stu_id` = `c`.`student_id`
LEFT JOIN `branch` `d` ON `c`.`vol_first` = `d`.`branch_id`
LEFT JOIN `organization` `e` ON `d`.`org_id` = `e`.`org_id`
LEFT JOIN `branch` `f` ON `c`.`vol_second` = `f`.`branch_id`
LEFT JOIN `organization` `g` ON `f`.`org_id` = `g`.`org_id`
详见 api.md 文件。
后端文件 src -> main -> java
前端文件 src -> main -> resources -> web/static
配置文件 src -> main -> resources -> application.yml
1.添加数据到数据库中(执行sql文件夹中的脚本)。
2.在 application.yml 中配置好相应的数据库信息。
3.启动项目。
1.每添加一个 HTML 界面,要在 PageController 中添加相应接口。项目代码可能存在不规范问题(毕竟只是一个信息系统设计),欢迎留言讨论。
2.项目中存在部分在线引用 CSS / JS 等文件,若失效则手动替换链接即可。