课程名称:程序设计基础课程设计
题目: 大学生信息数据管理系统的设计与实现
项目背景:
随着信息技术的发展和普及,信息化管理在各领域得到了广泛应用。在高等教育领域,学生信息数据管理系统作为一种现代化管理工具,已经得到了广大高校的重视和采纳。然而,尽管大多数高校都已经建立了自身的学生信息管理系统,但由于系统设计的不完善,数据更新的不及时,以及信息共享的困难等问题,使得大部分高校无法充分发挥学生信息数据管理系统的优势。
项目意义:
1.提高管理效率:学生信息数据管理系统可以实现学生信息的电子化管理,提高了信息处理的速度和准确性,从而提高了学校管理工作的效率。
2.提升信息利用价值:学生信息数据管理系统可以集成各类学生信息,通过数据分析和挖掘,为学校的发展规划、教育教学改革等提供有价值的决策支持。
3.加强信息安全保障:学生信息数据管理系统可以对学生信息进行权限管理和数据加密,有效防止信息泄露,保障学生个人信息的安全。
因此,开发一套功能完善,操作简便,安全可靠的大学生信息数据管理系统具有重要的实际意义。
设计目标:
1.高效性:系统应能够快速、准确地处理、查询和更新学生的信息数据,保证大学的信息管理的高效运行。
2.可靠性:系统必须具有较强的稳定性和可靠性,确保数据的安全,不丢失、不出错。
设计要求:
1.数据库设计:需要设计一个能够存储大学生所有信息的数据库,包括基本信息等等。
2.界面设计:需要设计一个简洁、易用的用户界面,让用户可以方便地查询、输入和修改学生信息。
3.模块设计:系统应该按照功能模块化设计,如信息录入模块、信息查询模块、信息统计模块等,以便于系统的更新和维护。
系统目标描述:
大学生信息数据管理系统的目标是创建一个全面、高效的平台,用于管理和处理大学生的信息。这个系统将提供一种方便、快捷的方式来收集、存储、更新和检索大学生的个人信息等数据。
系统的主要目标是通过提供一种集中管理和处理学生信息的方法,同时也能为学生提供便捷的信息查询服务。
1.用户注册和登录功能:
用户应能够通过填写个人信息(例如姓名、学号、密码等)进行注册,并通过输入学号和密码进行登录。
2.学生信息管理功能:
管理员应能够添加、修改和删除学生信息。学生信息包括姓名、学号、性别、年龄、班级等。
3.系统安全性需求:
系统应实施合适的安全措施以防止数据泄露。例如,用户密码应进行加密存储,不应明文显示。
1.学生信息管理:系统应能够收集、保存和管理学生的基本信息,如姓名、性别、班级、学号等。
2.管理员信息管理:系统需要查看在线人数以及总管理人数和修改管理员的信息,如账号、名称、密码等。
3.用户友好的界面:系统需要有一个用户友好的界面,使得所有管理员,都能够方便地使用系统。
stu E-R图如图3-1所示:
图3-1 stu E-R图
user E-R图如图3-2所示:
3-2 user E-R图
表3-3 stu表实体属性表
实体 |
属性 |
stu(学生) |
学号,姓名,性别,年龄,班级 |
user 实体属性表如表3-4所示:
表3-4 user表实体属性表
实体 |
属性 |
user(管理员) |
帐号,姓名,密码,所处状态 |
其中加粗字体的为主键。
- 账号输入框
- 密码输入框
- 登录按钮
- 注册账号按钮
设计登录界面如图3-5所示:
图3-5 设计登录界面
- 姓名输入框 - 学号输入框 - 密码输入框 - 注册按钮
设计注册界面如图3-6所示:
图3-4 设计注册界面
3.1 基本信息处理界面
- 姓名添加输入框 - 性别输入框 - 年龄输入框 - 学号输入框
- 指定已存在学号输入框
- 增加数据按钮 - 删除数据按钮 - 更改数据按钮 -调出数据按钮
- 重置数据按钮
3.2 学生数据信息显示
3.3 管理员信息显示
主界面如表3-7所示:
- 增加学生信息数据:录入学生的信息,如姓名、性别、年龄、学号、班级等。
- 删除学生信息数据:删除已录入的学生信息。
- 更改学生信息数据:修改已录入的学生的信息。
- 调出学生信息数据:导出学生信息数据至学生数据信息显示界面。
- 重置数据:重置学生信息,删除所有数据信息。
- 查看在线人数:查看当前已登录的在线人数及相关信息。
- 查看所有账号:查看所有管理员人数及相关信息。
- 更改管理员信息:修改已存在的管理员登录用户的信息。
- 用户退出:退出当前管理员用户。
- 重新登录:退出当前主界面,跳转用户登录界面,重新登录账号。
管理界面如表3-8所示:
表3-8 管理界面
用户界面如表3-9所示:
表3-9用户界面
本系统设计包含3个模块,设计了4个包,com.mysqld是数据库连接的包,负责数据的连接和执行sql语句的方法等;com.window是界面的包,含有管理员登录及注册界面,以及管理员对学生信息管理界面,并通过可视化的界面完成对学生信息的增加,删除,更改,调出和重置;ButtonEvents是动作事件监听器包,对按键做出相应反应;com.style是定制字体形式(包括颜色和字体)的包。
包中的类及其作用如表所示。
表4-1为com.mysqld模块功能表:
表4-1 com.mysqld模块功能表
类名 |
功能描述 |
Mysqld.java |
数据库连接操作 |
表4-2为com.window模块功能表:
表4-2 com.window模块功能表
类名 |
功能描述 |
StudentSystem.java |
含main主函数 |
LoginStart.java |
登录进入主界面 |
Manage.java |
主界面 |
Register.java |
注册界面 |
ChangeAccountMessage.java |
更改管理员信息界面 |
ChangeOwnPassword.java |
更改密码界面 |
表4-3为com.style模块功能表:
表4-3 myStudent模块功能表
类名 |
功能描述 |
Fronts.java |
动作事件监听器 |
表4-4为com.event模块功能表:
表4-4 com.event模块功能表
类名 |
功能描述 |
ButtonEvents.java |
按键动作事件监听器 |
LoginEvent.java |
登录动作事件监听器 |
RegEvent.java |
注册动作事件监听器 |
1.stu 数据库关系表如表4-5所示:
表4-5 stu(学生)信息表
字段名 |
类型 |
长度 |
是否主键 |
备注 |
name |
varchar |
20 |
否 |
姓名 |
sex |
varchar |
20 |
否 |
性别 |
age |
varchar |
20 |
否 |
年龄 |
grade |
varchar |
20 |
否 |
班级 |
id |
varchar |
20 |
是 |
学号 |
上表是stu(学生)信息表,其中id是主键,是学号,长度为20,varchar类型。
user 数据库关系表如表4-6所示:
表4-6 user(管理员)信息表
字段名 |
类型 |
长度 |
是否主键 |
备注 |
name |
varchar |
20 |
否 |
姓名 |
account |
varchar |
20 |
是 |
账号 |
password |
varchar |
20 |
否 |
密码 |
start |
varchar |
255 |
否 |
所处状态 |
上表是user(管理员)信息表,其中account是主键,是账号,长度为20,varchar类型。
实际样式:
user(管理员)信息表如图4-8所示:
图4-8 user(管理员)信息图
2.数据库连接
其实现的主要方法代码如下:
public class Mysqld {
public static Connection con=null;
static ResultSet rs;
public Mysqld(String account,String password){ //类的构造函数,用于加载驱动并连接到数据库
try {
Class.forName("com.mysql.cj.jdbc.Driver");
System.out.println("加载驱动成功");
}catch(Exception e) {
System.out.println("加载驱动失败");
}
String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
try {
con=DriverManager.getConnection(url,account,password);
System.out.println("连接数据库成功");
}catch(SQLException e) {
System.out.println("连接数据库失败");
}
}
其实现的主要方法代码如下:
public class ButtonEvents implements ActionListener{
JTextField alluse;
JButton allJbutton;
Statement sql;
ResultSet rs;
public void actionPerformed(ActionEvent e) {
try {
alluse=(JTextField) e.getSource();
if(alluse!=null) { //将事件源转换为JTextField,如果成功则调用allUee方法
allUee();
}
}catch(Exception e1) {
allJbutton=(JButton)e.getSource(); //如果失败(抛出异常),则尝试将事件源转换为JButton,如果按钮的名字是"reg",则调用Jbtton方法
if(allJbutton.getName()=="reg") {
Jbtton();
}
}
}
void allUee() { //JTextField的焦点转移。如果当前的JTextField的名字是"nametext","accounttext"或"passwordtext",则将焦点转移到相应的组件上
if(alluse.getName()=="nametext") {
Register.accounttext.requestFocus();
}
if(alluse.getName()=="accounttext") {
Register.passwordtext.requestFocus();
}
if(alluse.getName()=="passwordtext") {
Register.reg.requestFocus();
}
}
void Jbtton() { //用于处理注册逻辑。首先检查各个输入框是否为空,如果为空则弹出警告消息;如果所有检查都通过,则尝试将用户信息插入到数据库中,如果插入成功则弹出注册成功的消息,如果插入失败弹出用户已存在的消息
boolean nameT=Register.nametext.getText().equals("");
boolean accountT=Register.accounttext.getText().equals("");
char[] str=Register.passwordtext.getPassword();//获取密码
String passwordtext=new String(str);
boolean passwordT=passwordtext.equals("");
str=Register.passwordtext.getPassword();
if(nameT==true) {
JOptionPane.showMessageDialog(null, "姓名不能为空哦","注册消息",JOptionPane.WARNING_MESSAGE);
}else if(accountT==true){
JOptionPane.showMessageDialog(null, "学号不能为空哦","注册消息",JOptionPane.WARNING_MESSAGE);
}else if(passwordT==true) {
JOptionPane.showMessageDialog(null, "密码不能为空哦","注册消息",JOptionPane.WARNING_MESSAGE);
}else {
String name=Register.nametext.getText();
String account=Register.accounttext.getText();
String password=passwordtext;
java.sql.Connection con=Mysqld.con;
PreparedStatement preSql; //使用了预编译的SQL语句来防止SQL注入攻击
String Url = "insert into user values(?,?,?,?)"; //Url是一个预编译的SQL语句,其中的问号?是参数占位符
try {
preSql=con.prepareStatement(Url);
preSql.setString(1, name);
preSql.setString(2, account);
preSql.setString(3, password);
preSql.setString(4, "0");
int ok=preSql.executeUpdate(); //使用数据库连接con来准备SQL语句,然后设置参数占位符的值。executeUpdate()方法用于执行SQL语句
JOptionPane.showMessageDialog(null, "注册成功!","注册消息",JOptionPane.WARNING_MESSAGE);
}catch(SQLException e) {
System.out.println(e);
JOptionPane.showMessageDialog(null, "当前用户已存在","注册消息",JOptionPane.WARNING_MESSAGE);
}
}
}
}
未完待续,欲知后续,请看下期