基于学生信息管理系统的程序设计基础课程设计(java+数据库)(上)

2024-01-09 13:21:05

课程名称:程序设计基础课程设计

题目:?大学生信息数据管理系统的设计与实现

1、引言

1.1项目背景与意义

项目背景:

随着信息技术的发展和普及,信息化管理在各领域得到了广泛应用。在高等教育领域,学生信息数据管理系统作为一种现代化管理工具,已经得到了广大高校的重视和采纳。然而,尽管大多数高校都已经建立了自身的学生信息管理系统,但由于系统设计的不完善,数据更新的不及时,以及信息共享的困难等问题,使得大部分高校无法充分发挥学生信息数据管理系统的优势。

项目意义:

1.提高管理效率:学生信息数据管理系统可以实现学生信息的电子化管理,提高了信息处理的速度和准确性,从而提高了学校管理工作的效率。

2.提升信息利用价值:学生信息数据管理系统可以集成各类学生信息,通过数据分析和挖掘,为学校的发展规划、教育教学改革等提供有价值的决策支持。

3.加强信息安全保障:学生信息数据管理系统可以对学生信息进行权限管理和数据加密,有效防止信息泄露,保障学生个人信息的安全。

因此,开发一套功能完善,操作简便,安全可靠的大学生信息数据管理系统具有重要的实际意义。

1.2设计目标与要求

设计目标:

1.高效性:系统应能够快速、准确地处理、查询和更新学生的信息数据,保证大学的信息管理的高效运行。

2.可靠性:系统必须具有较强的稳定性和可靠性,确保数据的安全,不丢失、不出错。

设计要求:

1.数据库设计:需要设计一个能够存储大学生所有信息的数据库,包括基本信息等等。

2.界面设计:需要设计一个简洁、易用的用户界面,让用户可以方便地查询、输入和修改学生信息。

3.模块设计:系统应该按照功能模块化设计,如信息录入模块、信息查询模块、信息统计模块等,以便于系统的更新和维护。

1.3系统功能描述

系统目标描述:

大学生信息数据管理系统的目标是创建一个全面、高效的平台,用于管理和处理大学生的信息。这个系统将提供一种方便、快捷的方式来收集、存储、更新和检索大学生的个人信息等数据。

系统的主要目标是通过提供一种集中管理和处理学生信息的方法,同时也能为学生提供便捷的信息查询服务。

2、需求分析

2.1 用户需求分析

1.用户注册和登录功能:

用户应能够通过填写个人信息(例如姓名、学号、密码等)进行注册,并通过输入学号和密码进行登录。

2.学生信息管理功能:

管理员应能够添加、修改和删除学生信息。学生信息包括姓名、学号、性别、年龄、班级等。

3.系统安全性需求:

??系统应实施合适的安全措施以防止数据泄露。例如,用户密码应进行加密存储,不应明文显示。

2.2 功能需求分析

1.学生信息管理:系统应能够收集、保存和管理学生的基本信息,如姓名、性别、班级、学号等。

2.管理员信息管理:系统需要查看在线人数以及总管理人数和修改管理员的信息,如账号、名称、密码等。

3.用户友好的界面:系统需要有一个用户友好的界面,使得所有管理员,都能够方便地使用系统。

3、系统设计

3.1数据库设计

3.1.1 E-R图

stu E-R图如图3-1所示:

图3-1??stu E-R图

user E-R图如图3-2所示:

3-2?user E-R图

3.1.2 各实体属性及其联系

stu 实体属性表如表3-3所示:

?3-3 stu表实体属性表

实体

属性

stu(学生)

学号,姓名,性别,年龄,班级

user 实体属性表如表3-4所示:

3-4 user表实体属性表

实体

属性

user(管理员)

帐号,姓名,密码,所处状态

其中加粗字体的为主键。

3.2界面设计

1.登录界面:

-?账号输入框??

-?密码输入框

-?登录按钮?

-??注册账号按钮

设计登录界面如图3-5所示:

图3-5?设计登录界面

2.注册账号界面:

-?姓名输入框??-?学号输入框???-?密码输入框???-?注册按钮

设计注册界面如图3-6所示:

图3-4 设计注册界面

3.主界面:

??3.1 基本信息处理界面

??-?姓名添加输入框??-?性别输入框?-?年龄输入框?-?学号输入框

??-?指定已存在学号输入框

-?增加数据按钮??-?删除数据按钮?-?更改数据按钮?-调出数据按钮

??-?重置数据按钮

3.2 学生数据信息显示

3.3 管理员信息显示

主界面如表3-7所示:

??图3-7?界面

3.3功能模块设计

3.3.1 信息管理模块

-?增加学生信息数据:录入学生的信息,如姓名、性别、年龄、学号、班级等。

-?删除学生信息数据:删除已录入的学生信息。

-?更改学生信息数据:修改已录入的学生的信息。

-?调出学生信息数据:导出学生信息数据至学生数据信息显示界面。

-?重置数据:重置学生信息,删除所有数据信息。

3.3.2 用户管理模块

-?查看在线人数:查看当前已登录的在线人数及相关信息。

-?查看所有账号:查看所有管理员人数及相关信息。

-?更改管理员信息:修改已存在的管理员登录用户的信息。

-?用户退出:退出当前管理员用户。

-?重新登录:退出当前主界面,跳转用户登录界面,重新登录账号。

管理界面如表3-8所示:

表3-8?管理界面

用户界面如表3-9所示:

表3-9用户

4、系统实现

4.1系统中的类及关系

本系统设计包含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

注册动作事件监听器

4.2数据库实现

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("连接数据库失败");

? ? ? ? }

? ? ?}

4.3监听事件实现

  1. 处理按钮事件

其实现的主要方法代码如下:

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);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

}

未完待续,欲知后续,请看下期

文章来源:https://blog.csdn.net/m0_74070923/article/details/135450006
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。