学生信息管理系统
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_TIMEDATE记录时间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-- ----------------------------DROPTABLEIFEXISTS`change_code`;CREATETABLE`change_code`(`code`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'学籍变动代码(主键)',`desc`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'描述',PRIMARYKEY(`code`)USINGBTREE,INDEX`desc`(`desc`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of change_code-- ----------------------------INSERTINTO`change_code`VALUES('1','休学');INSERTINTO`change_code`VALUES('2','复学');INSERTINTO`change_code`VALUES('4','毕业');INSERTINTO`change_code`VALUES('0','转系');INSERTINTO`change_code`VALUES('3','退学');-- ------------------------------ Table structure for class-- ----------------------------DROPTABLEIFEXISTS`class`;CREATETABLE`class`(`class_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'编号(主关键字)',`class_name`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'班级名称',`monitor_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'班长学号',PRIMARYKEY(`class_id`)USINGBTREE,INDEX`class_ibfk_1`(`monitor_id`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of class-- ----------------------------INSERTINTO`class`VALUES('11','计科一班','');INSERTINTO`class`VALUES('12','计科二班',NULL);INSERTINTO`class`VALUES('21','计科三班',NULL);INSERTINTO`class`VALUES('22','计科四班','');INSERTINTO`class`VALUES('31','计科五班',NULL);INSERTINTO`class`VALUES('32','计科智能一班','');INSERTINTO`class`VALUES('41','计科智能二班',NULL);INSERTINTO`class`VALUES('42','计科智能三班',NULL);INSERTINTO`class`VALUES('43','大数据一班','');INSERTINTO`class`VALUES('51','大数据二班','');INSERTINTO`class`VALUES('52','大数据三班',NULL);INSERTINTO`class`VALUES('53','软件一班',NULL);-- ------------------------------ Table structure for dept-- ----------------------------DROPTABLEIFEXISTS`dept`;CREATETABLE`dept`(`dept_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'编号(主关键字)',`dept_name`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'专业名称',PRIMARYKEY(`dept_id`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of dept-- ----------------------------INSERTINTO`dept`VALUES('1','计科');INSERTINTO`dept`VALUES('2','软件');INSERTINTO`dept`VALUES('3','信安');INSERTINTO`dept`VALUES('4','物联网');INSERTINTO`dept`VALUES('5','大数据');-- ------------------------------ Table structure for punish-- ----------------------------DROPTABLEIFEXISTS`punish`;CREATETABLE`punish`(`rec_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'记录号(主关键字)',`stu_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'学号(外部关键字)',`levels`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'级别代码(外部关键字)',`rec_time`datetime(6)NULLDEFAULTNULLCOMMENT'记录时间',`enable`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'是否生效(T、F)',`desc`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'描述',PRIMARYKEY(`rec_id`)USINGBTREE,INDEX`punish_ibfk_1`(`stu_id`)USINGBTREE,INDEX`punish_ibfk_2`(`levels`)USINGBTREE,CONSTRAINT`punish_ibfk_1`FOREIGNKEY(`stu_id`)REFERENCES`student`(`stu_id`)ONDELETECASCADEONUPDATECASCADE,CONSTRAINT`punish_ibfk_2`FOREIGNKEY(`levels`)REFERENCES`punish_levels`(`punish_code`)ONDELETECASCADEONUPDATECASCADE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of punish-- ----------------------------INSERTINTO`punish`VALUES('1','44201','0','2022-06-01 00:00:00.000000','T',NULL);INSERTINTO`punish`VALUES('2','55101','1','2022-06-01 00:00:00.000000','T',NULL);-- ------------------------------ Table structure for punish_levels-- ----------------------------DROPTABLEIFEXISTS`punish_levels`;CREATETABLE`punish_levels`(`punish_code`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULL,`desc`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULL,PRIMARYKEY(`punish_code`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of punish_levels-- ----------------------------INSERTINTO`punish_levels`VALUES('0','警告');INSERTINTO`punish_levels`VALUES('1','严重警告');INSERTINTO`punish_levels`VALUES('2','记过');INSERTINTO`punish_levels`VALUES('3','记大过');INSERTINTO`punish_levels`VALUES('4','开除');-- ------------------------------ Table structure for reward-- ----------------------------DROPTABLEIFEXISTS`reward`;CREATETABLE`reward`(`rec_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'记录号(主关键字)',`stu_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'学号(外部关键字)',`levels`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'级别代码(外部关键字)',`rec_time`datetime(6)NULLDEFAULTNULLCOMMENT'记录时间',`enable`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'是否生效(T、F)',`desc`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'描述',PRIMARYKEY(`rec_id`)USINGBTREE,INDEX`reward_ibfk_1`(`stu_id`)USINGBTREE,INDEX`reward_ibfk_2`(`levels`)USINGBTREE,CONSTRAINT`reward_ibfk_1`FOREIGNKEY(`stu_id`)REFERENCES`student`(`stu_id`)ONDELETECASCADEONUPDATECASCADE,CONSTRAINT`reward_ibfk_2`FOREIGNKEY(`levels`)REFERENCES`reward_levels`(`reward_code`)ONDELETECASCADEONUPDATECASCADE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of reward-- ----------------------------INSERTINTO`reward`VALUES('1','11101','0','2022-05-13 00:00:00.000000','T',NULL);INSERTINTO`reward`VALUES('2','33201','6','2022-05-13 00:00:00.000000','T',NULL);-- ------------------------------ Table structure for reward_levels-- ----------------------------DROPTABLEIFEXISTS`reward_levels`;CREATETABLE`reward_levels`(`reward_code`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULL,`desc`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULL,PRIMARYKEY(`reward_code`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of reward_levels-- ----------------------------INSERTINTO`reward_levels`VALUES('0','校特等奖学金');INSERTINTO`reward_levels`VALUES('1','校一等奖学金');INSERTINTO`reward_levels`VALUES('2','校二等奖学金');INSERTINTO`reward_levels`VALUES('3','校三等奖学金');INSERTINTO`reward_levels`VALUES('4','系一等奖学金');INSERTINTO`reward_levels`VALUES('5','系二等奖学金');INSERTINTO`reward_levels`VALUES('6','系三等奖学金');-- ------------------------------ Table structure for stu_change-- ----------------------------DROPTABLEIFEXISTS`stu_change`;CREATETABLE`stu_change`(`rec_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'记录号(主关键字)',`stu_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'学号(外部关键字)',`achange`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'变更代码(外部关键字)',`rec_time`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'记录时间',`desc`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'描述',PRIMARYKEY(`rec_id`)USINGBTREE,INDEX`stu_id`(`stu_id`)USINGBTREE,INDEX`change`(`achange`)USINGBTREE,CONSTRAINT`stu_change_ibfk_1`FOREIGNKEY(`stu_id`)REFERENCES`student`(`stu_id`)ONDELETERESTRICTONUPDATERESTRICT,CONSTRAINT`stu_change_ibfk_2`FOREIGNKEY(`achange`)REFERENCES`change_code`(`code`)ONDELETERESTRICTONUPDATERESTRICT)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of stu_change-- ----------------------------INSERTINTO`stu_change`VALUES('1','33201','1','2002-5-24','');INSERTINTO`stu_change`VALUES('2','55101','3','2002-7-9','');INSERTINTO`stu_change`VALUES('3','11101','2','2022-6-19','');-- ------------------------------ Table structure for student-- ----------------------------DROPTABLEIFEXISTS`student`;CREATETABLE`student`(`stu_id`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOTNULLCOMMENT'学号(主键)',`name`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'姓名',`sex`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'性别',`class`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'班级编号(外键)',`dept`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'系部编号(外键)',`birth`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'生日',`home_place`varchar(25)CHARACTERSET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULLDEFAULTNULLCOMMENT'籍贯',PRIMARYKEY(`stu_id`)USINGBTREE,INDEX`student_ibfk_1`(`class`)USINGBTREE,INDEX`student_ibfk_2`(`dept`)USINGBTREE,CONSTRAINT`student_ibfk_1`FOREIGNKEY(`class`)REFERENCES`class`(`class_id`)ONDELETECASCADEONUPDATECASCADE,CONSTRAINT`student_ibfk_2`FOREIGNKEY(`dept`)REFERENCES`dept`(`dept_id`)ONDELETECASCADEONUPDATECASCADE)ENGINE=InnoDBCHARACTERSET= utf8mb4 COLLATE= utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of student-- ----------------------------INSERTINTO`student`VALUES('11101','鲁班','男','11','1','2001-1-14','湖南衡阳');INSERTINTO`student`VALUES('33201','王昭君','女','32','3','2001-1-3','湖南长沙');INSERTINTO`student`VALUES('44201','马超','男','42','4','2001-1-9','湖南湘西');INSERTINTO`student`VALUES('55101','花木兰','女','51','5','2005-2-2','湖南怀化');INSERTINTO`student`VALUES('55102','镜','女','51','5','2001-1-2','湖北武汉');INSERTINTO`student`VALUES('55103','凯','男','51','5','2001-5-9','湖北武昌');INSERTINTO`student`VALUES('55104','关羽','男','51','5','1000-5-9','湖北襄阳');-- ------------------------------ Table structure for user-- ----------------------------DROPTABLEIFEXISTS`user`;CREATETABLE`user`(`username`varchar(64)CHARACTERSET utf8 COLLATE utf8_general_ci NOTNULL,`password`varchar(64)CHARACTERSET utf8 COLLATE utf8_general_ci NOTNULL,PRIMARYKEY(`username`)USINGBTREE)ENGINE=InnoDBCHARACTERSET= utf8 COLLATE= utf8_general_ci ROW_FORMAT = Dynamic;-- ------------------------------ Records of user-- ----------------------------INSERTINTO`user`VALUES('3da0b84a100c87800f4a19f305df23cd','e10adc3949ba59abbe56e057f20f883e');SET FOREIGN_KEY_CHECKS =1;
4.1数据库连接池和数据操作模块
package com.exception.demo.DB;import java.sql.*;publicclassDbProcess{
Connection connection = null;
ResultSet rs = null;
Statement statement = null;//mysql数据库url
String urlMySql ="jdbc:mysql://localhost:3306/mydb7?useSSL=false&serverTimezone=UTC";publicDbProcess(){try{
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("mysql数据库驱动加载成功");}catch(java.lang.ClassNotFoundException e){
e.printStackTrace();}}publicvoidconnect(){try{//mysql数据库
connection = DriverManager.getConnection(urlMySql,"root","123456");//sqlserver数据库//connection = DriverManager.getConnection(urlSqlServer);if(connection!=null){
System.out.println("数据库连接成功");}}catch(Exception e){
e.printStackTrace();}}publicvoiddisconnect(){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。//执行增、删、改语句的方法publicintexecuteUpdate(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;publicclassMD5Util{/***
* MD5加码 生成32位md5码
*/publicstatic 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进制publicstatic String bytes2Hex(byte[] bytes){
StringBuffer result =newStringBuffer();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();}/**
* 加密解密算法 执行一次加密,两次解密
*/publicstatic String convertMD5(String inStr){char[] a = inStr.toCharArray();for(int i =0; i < a.length; i++){
a[i]=(char)(a[i]^'t');}
String s =newString(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.*;publicclassLoginextendsJFrame{
JLabel nameLabel =newJLabel("学生信息管理系统",JLabel.CENTER);
SpringLayout springLayout =newSpringLayout();
JPanel centerPanel =newJPanel(springLayout);
JLabel userNameLabel =newJLabel("用户名");
JTextField userText =newJTextField();
JLabel powLabel =newJLabel("密码");
JPasswordField powField =newJPasswordField();
JButton loginBtn =newJButton("登录");
JButton reseBtn =newJButton("取消");
verify verify;publicLogin(){super("管理员登录页");
verify =newverify(this);
Container contentPane =getContentPane();
nameLabel.setFont(newFont("黑体",Font.PLAIN,40));
nameLabel.setPreferredSize(newDimension(0,80));
Font centerFont =newFont("楷体",Font.PLAIN,20);
userNameLabel.setFont(centerFont);
userText.setPreferredSize(newDimension(200,30));
powLabel.setFont(centerFont);
powField.setPreferredSize(newDimension(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);}privatevoidlayoutCenter(){//弹簧布局
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;importstatic com.exception.demo.utils.MD5Util.getMD5Code;publicclassverifyimplementsActionListener{private Login login;publicverify(Login login){this.login = login;}@OverridepublicvoidactionPerformed(ActionEvent e){
JButton jButton =(JButton)e.getSource();
String text = jButton.getText();if("重置".equals(text)){
login.getUserText().setText("");
login.getPowField().setText("");}elseif("登录".equals(text)){
String user = login.getUserText().getText();//输入框char[] chars = login.getPowField().getPassword();
String pwd =newString(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,"欢迎管理员进入系统!");newMyDesign();
login.dispose();}elseif(!getMD5Code(user).equals(userName)){
JOptionPane.showMessageDialog(null,"用户不存在!!!");}elseif(!getMD5Code(pwd).equals(passWord)){
JOptionPane.showMessageDialog(null,"密码错误!!!");}}}public ArrayList queryProcess(){
ArrayList<String> list1 =newArrayList<String>();try{// 建立查询条件
String sql ="select * from user;";
System.out.println("queryProcess(). sql = "+ sql);
DbProcess dbProcess =newDbProcess();
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模块实现的代码篇幅过长,需要完整代码请点赞,并评论区留言
版权归原作者 易霭珞 所有, 如有侵权,请联系我们删除。