课程名称:程序设计基础课程设计
题目:?大学生信息数据管理系统的设计与实现
项目背景:
随着信息技术的发展和普及,信息化管理在各领域得到了广泛应用。在高等教育领域,学生信息数据管理系统作为一种现代化管理工具,已经得到了广大高校的重视和采纳。然而,尽管大多数高校都已经建立了自身的学生信息管理系统,但由于系统设计的不完善,数据更新的不及时,以及信息共享的困难等问题,使得大部分高校无法充分发挥学生信息数据管理系统的优势。
项目意义:
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-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);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
}
未完待续,欲知后续,请看下期