0 前言
评论区自取,谢谢点赞
0.1效果演示
演示视频
0.2 开发工具
- 开发语言:Java 、Java GUI、MySQL
- 开发工具:IDEA、Navicat
0.3 创新点
- 采用MD5文本摘要算法对用户账号和密码进行加密存储
- 使用exe4j对系统代码进行打包成exe可执行文件
1.系统需求分析
学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生的信息,帮助学校和老师掌握学生的情况,这就是学生信息管理系统需要完成的功能。
1.1 系统功能分析
- 本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统的主要功能有:
- 学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。
- 学生流动情况的输入,包括:转系、休学、复学、退学、毕业。
- 奖惩情况的输入。
- 学生个人情况查询和修改,包括流动情况和奖罚情况。
1.2 系统功能模块设计(划分)
根据系统功能要求可以将系统分解成几个模块来分别设计应用程序界面,如图1 所示。
1.3 与其它系统的关系
学生信息管理系统是校园信息管理系统的一个组成部分。它为其它系统,如班级信息管理系统、
教学管理系统、成绩单系统、宿舍分配系统等,提供学生的基本情况。同时需要其他系统提供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用所需的数据。
1.4 数据流程图
学生信息管理系统的数据流程如图 2 所示。
2.数据库设计
2.1 数据库需求分析
- 根据上一节的数据流程图,可以列出以下记录学生信息所需的数据项和数据结构:
- 学生:学号、姓名、性别、生日、籍贯、所在院系、所在班级。
- 处罚记录:记录号、级别、处罚对象、记录时间、详细描述、是否生效。
- 奖励记录:记录号、级别、奖励对象、记录时间、详细描述。
- 学籍变更记录:记录号、变更情况、记录对象、记录时间、详细描述。
所需的外部数据支持:
- 班级:班级编号、班级名称、所属院系。
- 院系:代码、名称。
2.2 数据库概念结构设计
图 3 是本系统所需数据的E-R 模型图。
2.3数据库逻辑结构设计
根据系统 E-R 图,需要设计 4 个数据表来存放学生的信息。为了系统的完整,系统中包括了应用程序设计中所需的 2 个外部数据表。为了优化数据表结构,部分字段采用代码形
式,因此需要附加 3 个代码表。这 9 个数据表的结构如表 1 到表 9 所示。
表 1 STUDENT 学生个人信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
STUDENTID | 学号(主关键字) | ||
NAME | 姓名 | ||
SEX | 性别(M、F) | ||
CLASS | 班级编号(外部关键字) | ||
DEPARTMENT | 所属院系编号(外部关键字) | ||
BIRTHDAY | 生日 | ||
NATIVE_PLACE | 籍贯 |
表 2 CHANGE 学籍变更信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | 记录号(主关键字) | ||
STUDENTID | 学号(外部关键字) | ||
CHANGE | 变更代码(外部关键字) | ||
REC_TIME | DATE | 记录时间 | |
DESCRIPTION | 描述 |
表 3 REWARD 奖励记录信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | 记录号(主关键字) | ||
STUDENTID | 学号(外部关键字) | ||
LEVELS | 级别代码(外部关键字) | ||
REC_TIME | 记录时间 | ||
DESCRIPTION | 描述 |
表 4 PUNISHMENT 处罚记录信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | 记录号(主关键字) | ||
STUDENTID | 学号(外部关键字) | ||
LEVELS | 级别代码(外部关键字) | ||
REC_TIME | 记录时间 | ||
ENABLE | 是否生效(T、F) | ||
DESCRIPTION | 描述 |
表 5 DEPARTMENT 院系信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | 编号(主关键字) | ||
NAME | 全称 |
表 6 CLASS 班级信息表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
ID | 编号(主关键字) | ||
NAME | 全称 | ||
MONITOR | 班长学号(外部关键字) |
表 7 CHANGE_CODE 学籍变动代码表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
CODE | 代码(主关键字) | ||
DESCRIPTION | 描述 |
表 8 REWARD_LEVELS 奖励等级代码表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
CODE | 代码(主关键字) | ||
DESCRIPTION | 描述 |
表 9 PUNISH_LEVELS 处罚等级代码表
字段名 | 数据类型 | 是否可空 | 说明 |
---|---|---|---|
CODE | 代码(主关键字) | ||
DESCRIPTION | 描述 |
2.4 数据库的建立
2.4.1 数据库的建立(请设计者完成)
2.4.2 初始数据的输入
数据表创建成功后,数据库中还没有实际的数据。为了保证外部键能使用,数据需要提前输入,如院系编号、班级编号、学籍变更代码和奖惩级别等等。
学籍变更代码和奖惩级别的主关键字 CODE 从 0 开始用阿拉伯数字依次编号,便于程序设计时,采用单选按钮来选择。
本系统中所用到的学籍变更和奖惩级别代码如表 10 至表 12 所示(请设计者完成这些数据表的逻辑结构)。
表10 学籍变更代码表
代码 | 说明 |
---|---|
0 | 转系 |
1 | 休学 |
2 | 复学 |
3 | 退学 |
4 | 毕业 |
表11 奖励级别代码
代码 | 说明 |
---|---|
0 | 校特等奖学金 |
1 | 校一等奖学金 |
2 | 校二等奖学金 |
3 | 校三等奖学金 |
4 | 系一等奖学金 |
5 | 系二等奖学金 |
6 | 系三等奖学金 |
表12 处罚级别代码
代码 | 说明 |
---|---|
0 | 警告 |
1 | 严重警告 |
2 | 记过 |
3 | 记大过 |
4 | 开除 |
(以下各部分请设计者完成)。
3.各功能模块的设计与实现
3.1 功能说明
1、学生个人信息输入
2、学籍变更情况的输入
3、奖励情况的输入
4、处罚情况的输入
5、学生个人情况查询和修改
3.2 用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。由于本系统管理内容比较简单,且为校园管理信息系统的一部分,因此使用一个窗体不同的标签页来完成系统要求的 5 项功能。
我们把学生信息管理系统的窗体分成____个主要部分,如图____所示。
1、应用程序主窗体的创建
2、学生个人信息输入界面
3、学籍变更情况输入界面
4、奖励情况输入界面
5、处罚情况输入界面
6、学生个人情况查询和修改界面
3.3 各功能模块的实现
1、学生个人信息输入
2、学籍变更情况输入
3、奖励情况输入
4、处罚情况输入
5、学生个人情况查询和修改
4.系统实现
4.0 数据库表的建立
/*
Navicat Premium Data Transfer
Source Server : conn-local
Source Server Type : MySQL
Source Server Version : 80025
Source Host : localhost:3306
Source Schema : mydb7
Target Server Type : MySQL
Target Server Version : 80025
File Encoding : 65001
Date: 02/12/2022 17:45:57
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for change_code
-- ----------------------------
DROP TABLE IF EXISTS `change_code`;
CREATE TABLE `change_code` (
`code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '学籍变动代码(主键)',
`desc` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`code`) USING BTREE,
INDEX `desc`(`desc`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of change_code
-- ----------------------------
INSERT INTO `change_code` VALUES ('1', '休学');
INSERT INTO `change_code` VALUES ('2', '复学');
INSERT INTO `change_code` VALUES ('4', '毕业');
INSERT INTO `change_code` VALUES ('0', '转系');
INSERT INTO `change_code` VALUES ('3', '退学');
-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`class_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '编号(主关键字)',
`class_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '班级名称',
`monitor_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '班长学号',
PRIMARY KEY (`class_id`) USING BTREE,
INDEX `class_ibfk_1`(`monitor_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES ('11', '计科一班', '');
INSERT INTO `class` VALUES ('12', '计科二班', NULL);
INSERT INTO `class` VALUES ('21', '计科三班', NULL);
INSERT INTO `class` VALUES ('22', '计科四班', '');
INSERT INTO `class` VALUES ('31', '计科五班', NULL);
INSERT INTO `class` VALUES ('32', '计科智能一班', '');
INSERT INTO `class` VALUES ('41', '计科智能二班', NULL);
INSERT INTO `class` VALUES ('42', '计科智能三班', NULL);
INSERT INTO `class` VALUES ('43', '大数据一班', '');
INSERT INTO `class` VALUES ('51', '大数据二班', '');
INSERT INTO `class` VALUES ('52', '大数据三班', NULL);
INSERT INTO `class` VALUES ('53', '软件一班', NULL);
-- ----------------------------
-- Table structure for dept
-- ----------------------------
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`dept_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '编号(主关键字)',
`dept_name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '专业名称',
PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of dept
-- ----------------------------
INSERT INTO `dept` VALUES ('1', '计科');
INSERT INTO `dept` VALUES ('2', '软件');
INSERT INTO `dept` VALUES ('3', '信安');
INSERT INTO `dept` VALUES ('4', '物联网');
INSERT INTO `dept` VALUES ('5', '大数据');
-- ----------------------------
-- Table structure for punish
-- ----------------------------
DROP TABLE IF EXISTS `punish`;
CREATE TABLE `punish` (
`rec_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '记录号(主关键字)',
`stu_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学号(外部关键字)',
`levels` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '级别代码(外部关键字)',
`rec_time` datetime(6) NULL DEFAULT NULL COMMENT '记录时间',
`enable` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '是否生效(T、F)',
`desc` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`rec_id`) USING BTREE,
INDEX `punish_ibfk_1`(`stu_id`) USING BTREE,
INDEX `punish_ibfk_2`(`levels`) USING BTREE,
CONSTRAINT `punish_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`stu_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `punish_ibfk_2` FOREIGN KEY (`levels`) REFERENCES `punish_levels` (`punish_code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of punish
-- ----------------------------
INSERT INTO `punish` VALUES ('1', '44201', '0', '2022-06-01 00:00:00.000000', 'T', NULL);
INSERT INTO `punish` VALUES ('2', '55101', '1', '2022-06-01 00:00:00.000000', 'T', NULL);
-- ----------------------------
-- Table structure for punish_levels
-- ----------------------------
DROP TABLE IF EXISTS `punish_levels`;
CREATE TABLE `punish_levels` (
`punish_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`desc` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`punish_code`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of punish_levels
-- ----------------------------
INSERT INTO `punish_levels` VALUES ('0', '警告');
INSERT INTO `punish_levels` VALUES ('1', '严重警告');
INSERT INTO `punish_levels` VALUES ('2', '记过');
INSERT INTO `punish_levels` VALUES ('3', '记大过');
INSERT INTO `punish_levels` VALUES ('4', '开除');
-- ----------------------------
-- Table structure for reward
-- ----------------------------
DROP TABLE IF EXISTS `reward`;
CREATE TABLE `reward` (
`rec_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '记录号(主关键字)',
`stu_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学号(外部关键字)',
`levels` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '级别代码(外部关键字)',
`rec_time` datetime(6) NULL DEFAULT NULL COMMENT '记录时间',
`enable` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '是否生效(T、F)',
`desc` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`rec_id`) USING BTREE,
INDEX `reward_ibfk_1`(`stu_id`) USING BTREE,
INDEX `reward_ibfk_2`(`levels`) USING BTREE,
CONSTRAINT `reward_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`stu_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `reward_ibfk_2` FOREIGN KEY (`levels`) REFERENCES `reward_levels` (`reward_code`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of reward
-- ----------------------------
INSERT INTO `reward` VALUES ('1', '11101', '0', '2022-05-13 00:00:00.000000', 'T', NULL);
INSERT INTO `reward` VALUES ('2', '33201', '6', '2022-05-13 00:00:00.000000', 'T', NULL);
-- ----------------------------
-- Table structure for reward_levels
-- ----------------------------
DROP TABLE IF EXISTS `reward_levels`;
CREATE TABLE `reward_levels` (
`reward_code` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`desc` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`reward_code`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of reward_levels
-- ----------------------------
INSERT INTO `reward_levels` VALUES ('0', '校特等奖学金');
INSERT INTO `reward_levels` VALUES ('1', '校一等奖学金');
INSERT INTO `reward_levels` VALUES ('2', '校二等奖学金');
INSERT INTO `reward_levels` VALUES ('3', '校三等奖学金');
INSERT INTO `reward_levels` VALUES ('4', '系一等奖学金');
INSERT INTO `reward_levels` VALUES ('5', '系二等奖学金');
INSERT INTO `reward_levels` VALUES ('6', '系三等奖学金');
-- ----------------------------
-- Table structure for stu_change
-- ----------------------------
DROP TABLE IF EXISTS `stu_change`;
CREATE TABLE `stu_change` (
`rec_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '记录号(主关键字)',
`stu_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '学号(外部关键字)',
`achange` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '变更代码(外部关键字)',
`rec_time` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '记录时间',
`desc` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`rec_id`) USING BTREE,
INDEX `stu_id`(`stu_id`) USING BTREE,
INDEX `change`(`achange`) USING BTREE,
CONSTRAINT `stu_change_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`stu_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `stu_change_ibfk_2` FOREIGN KEY (`achange`) REFERENCES `change_code` (`code`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of stu_change
-- ----------------------------
INSERT INTO `stu_change` VALUES ('1', '33201', '1', '2002-5-24', '');
INSERT INTO `stu_change` VALUES ('2', '55101', '3', '2002-7-9', '');
INSERT INTO `stu_change` VALUES ('3', '11101', '2', '2022-6-19', '');
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`stu_id` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '学号(主键)',
`name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '姓名',
`sex` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '性别',
`class` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '班级编号(外键)',
`dept` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '系部编号(外键)',
`birth` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '生日',
`home_place` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '籍贯',
PRIMARY KEY (`stu_id`) USING BTREE,
INDEX `student_ibfk_1`(`class`) USING BTREE,
INDEX `student_ibfk_2`(`dept`) USING BTREE,
CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class`) REFERENCES `class` (`class_id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `student_ibfk_2` FOREIGN KEY (`dept`) REFERENCES `dept` (`dept_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('11101', '鲁班', '男', '11', '1', '2001-1-14', '湖南衡阳');
INSERT INTO `student` VALUES ('33201', '王昭君', '女', '32', '3', '2001-1-3', '湖南长沙');
INSERT INTO `student` VALUES ('44201', '马超', '男', '42', '4', '2001-1-9', '湖南湘西');
INSERT INTO `student` VALUES ('55101', '花木兰', '女', '51', '5', '2005-2-2', '湖南怀化');
INSERT INTO `student` VALUES ('55102', '镜', '女', '51', '5', '2001-1-2', '湖北武汉');
INSERT INTO `student` VALUES ('55103', '凯', '男', '51', '5', '2001-5-9', '湖北武昌');
INSERT INTO `student` VALUES ('55104', '关羽', '男', '51', '5', '1000-5-9', '湖北襄阳');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`username` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`username`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('3da0b84a100c87800f4a19f305df23cd', 'e10adc3949ba59abbe56e057f20f883e');
SET FOREIGN_KEY_CHECKS = 1;
4.1数据库连接池和数据操作模块
package com.exception.demo.DB;
import java.sql.*;
public class DbProcess{
Connection connection = null;
ResultSet rs = null;
Statement statement = null;
//mysql数据库url
String urlMySql ="jdbc:mysql://localhost:3306/mydb7?useSSL=false&serverTimezone=UTC";
public DbProcess() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("mysql数据库驱动加载成功");
}
catch(java.lang.ClassNotFoundException e) {
e.printStackTrace();
}
}
public void connect(){
try{
//mysql数据库
connection = DriverManager.getConnection(urlMySql,"root","123456");
//sqlserver数据库
//connection = DriverManager.getConnection(urlSqlServer);
if(connection!=null){
System.out.println("数据库连接成功");
}
}
catch(Exception e){
e.printStackTrace();
}
}
public void disconnect(){
try{
if(connection != null){
connection.close();
connection = null;
}
}
catch(Exception e){
e.printStackTrace();
}
}
public ResultSet executeQuery(String sql) {
try {
System.out.println("executeQuery(). sql = " + sql);
PreparedStatement pstm = connection.prepareStatement(sql);
// 执行查询
rs = pstm.executeQuery();
}
catch(SQLException ex) {
ex.printStackTrace();
}
return rs;
}
//插入
//executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。
//executeUpdate用于执行 INSERT、UPDATE 或 DELETE 语句
//以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。
//执行增、删、改语句的方法
public int executeUpdate(String sql) {
int count = 0;
connect();
try {
Statement stmt = connection.createStatement();
count = stmt.executeUpdate(sql);
}
catch(SQLException ex) {
System.err.println(ex.getMessage());
}
disconnect();
return count;
}
}
4.2 MD5加密模块
package com.exception.demo.utils;
//import org.springframework.util.DigestUtils;
import java.security.MessageDigest;
public class MD5Util {
/***
* MD5加码 生成32位md5码
*/
public static String getMD5Code(String message) {
String md5Str = "";
try {
//创建MD5算法消息摘要
MessageDigest md = MessageDigest.getInstance("MD5");
//生成的哈希值的字节数组
byte[] md5Bytes = md.digest(message.getBytes());
md5Str = bytes2Hex(md5Bytes);
}catch(Exception e) {
e.printStackTrace();
}
return md5Str;
}
// 2进制转16进制
public static String bytes2Hex(byte[] bytes) {
StringBuffer result = new StringBuffer();
int temp;
try {
for (int i = 0; i < bytes.length; i++) {
temp = bytes[i];
if(temp < 0) {
temp += 256;
}
if (temp < 16) {
result.append("0");
}
result.append(Integer.toHexString(temp));
}
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
/**
* 加密解密算法 执行一次加密,两次解密
*/
public static String convertMD5(String inStr) {
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++) {
a[i] = (char) (a[i] ^ 't');
}
String s = new String(a);
return s;
}
// 测试主函数
// public static void main(String args[]) {
// String username = "易霭珞";
// System.out.println("原始:" + username);
// System.out.println("MD5后:" + getMD5Code(username));
// System.out.println("加密的:" + convertMD5(username));
// System.out.println("解密的:" + convertMD5(convertMD5(username)));
// String passowrd = "123456";
// System.out.println("原始:" + passowrd);
// System.out.println("MD5后:" + getMD5Code(passowrd));
// System.out.println("加密的:" + convertMD5(passowrd));
// System.out.println("解密的:" + convertMD5(convertMD5(passowrd)));
// }
}
4.3 登录模块
package com.exception.demo.view;
import javax.swing.*;
import java.awt.*;
public class Login extends JFrame {
JLabel nameLabel = new JLabel("学生信息管理系统",JLabel.CENTER);
SpringLayout springLayout = new SpringLayout();
JPanel centerPanel = new JPanel(springLayout);
JLabel userNameLabel = new JLabel("用户名");
JTextField userText = new JTextField();
JLabel powLabel = new JLabel("密码");
JPasswordField powField = new JPasswordField();
JButton loginBtn = new JButton("登录");
JButton reseBtn = new JButton("取消");
verify verify;
public Login(){
super("管理员登录页");
verify = new verify(this);
Container contentPane = getContentPane();
nameLabel.setFont(new Font("黑体",Font.PLAIN,40));
nameLabel.setPreferredSize(new Dimension(0,80));
Font centerFont = new Font("楷体",Font.PLAIN,20);
userNameLabel.setFont(centerFont);
userText.setPreferredSize(new Dimension(200,30));
powLabel.setFont(centerFont);
powField.setPreferredSize(new Dimension(200,30));
loginBtn.setFont(centerFont);
reseBtn.setFont(centerFont);
centerPanel.add(userNameLabel);
centerPanel.add(userText);
centerPanel.add(powLabel);
centerPanel.add(powField);
loginBtn.addActionListener(verify);
centerPanel.add(loginBtn);
reseBtn.addActionListener(verify);
centerPanel.add(reseBtn);
layoutCenter();
contentPane.add(nameLabel,BorderLayout.NORTH);
contentPane.add(centerPanel,BorderLayout.CENTER);
setSize(600,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
private void layoutCenter() {
//弹簧布局
Spring childWidth = Spring.sum(Spring.sum(Spring.width(userNameLabel),Spring.width(userText)),Spring.constant(20));
int offsetX = childWidth.getValue()/2;
springLayout.putConstraint(SpringLayout.WEST,userNameLabel,-offsetX,SpringLayout.HORIZONTAL_CENTER,centerPanel);
springLayout.putConstraint(SpringLayout.NORTH,userNameLabel,20,SpringLayout.NORTH,centerPanel);
//userText
springLayout.putConstraint(SpringLayout.WEST,userText,20,SpringLayout.EAST,userNameLabel);
springLayout.putConstraint(SpringLayout.NORTH,userText,0,SpringLayout.NORTH,userNameLabel);
//powLabel
springLayout.putConstraint(SpringLayout.EAST,powLabel,0,SpringLayout.EAST,userNameLabel);
springLayout.putConstraint(SpringLayout.NORTH,powLabel,20,SpringLayout.SOUTH,userNameLabel);
//powFiled
springLayout.putConstraint(SpringLayout.WEST,powField,20,SpringLayout.EAST,powLabel);
springLayout.putConstraint(SpringLayout.NORTH,powField,0,SpringLayout.NORTH,powLabel);
//loginBtn
springLayout.putConstraint(SpringLayout.WEST,loginBtn,50,SpringLayout.WEST,powLabel);
springLayout.putConstraint(SpringLayout.NORTH,loginBtn,20,SpringLayout.SOUTH,powLabel);
//reseBtn
springLayout.putConstraint(SpringLayout.WEST,reseBtn,50,SpringLayout.EAST,loginBtn);
springLayout.putConstraint(SpringLayout.NORTH,reseBtn,0,SpringLayout.NORTH,loginBtn);
}
public JTextField getUserText() {
return userText;
}
public JPasswordField getPowField() {
return powField;
}
}
4.4 验证模块
package com.exception.demo.view;
import com.exception.demo.DB.DbProcess;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import static com.exception.demo.utils.MD5Util.getMD5Code;
public class verify implements ActionListener {
private Login login;
public verify(Login login){
this.login = login;
}
@Override
public void actionPerformed(ActionEvent e) {
JButton jButton = (JButton)e.getSource();
String text = jButton.getText();
if("重置".equals(text))
{
login.getUserText().setText("");
login.getPowField().setText("");
}
else if("登录".equals(text))
{
String user = login.getUserText().getText();//输入框
char[] chars = login.getPowField().getPassword();
String pwd = new String(chars);//输入框
String username = queryProcess().subList(0,1).toString();//数据库
String password = queryProcess().subList(1,2).toString();//数据库
String userName = username.substring(1,username.length()-1);
String passWord = password.substring(1,password.length()-1);
if(getMD5Code(user).equals(userName)&&getMD5Code(pwd).equals(passWord)){
JOptionPane.showMessageDialog(null,"欢迎管理员进入系统!");
new MyDesign();
login.dispose();
}else if(!getMD5Code(user).equals(userName)){
JOptionPane.showMessageDialog(null,"用户不存在!!!");
}
else if(!getMD5Code(pwd).equals(passWord)){
JOptionPane.showMessageDialog(null,"密码错误!!!");
}
}
}
public ArrayList queryProcess() {
ArrayList<String> list1 = new ArrayList<String>();
try {
// 建立查询条件
String sql = "select * from user;";
System.out.println("queryProcess(). sql = " + sql);
DbProcess dbProcess = new DbProcess();
dbProcess.connect();
ResultSet rs = dbProcess.executeQuery(sql);
// 将查询获得的记录数据,转换成适合生成JTable的数据形式
while (rs.next()) {
list1.add(rs.getString("username"));
list1.add(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return list1;
}
}
4.5 学生个人信息输入模块
4.6学籍变更情况输入
4.7 奖励情况输入
4.8 处罚情况输入
4.9 学生个人情况查询和修改
5.0 后序
由于4.5-4.9模块实现的代码篇幅过长,需要完整代码请点赞,并评论区留言