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

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

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

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所示:

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

图3-1  stu E-R图

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

基于学生信息管理系统的程序设计基础课程设计(java+数据库)(上)_第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所示:

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

图3-5 设计登录界面

2.注册账号界面:

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

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

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

图3-4 设计注册界面

3.主界面:

  3.1 基本信息处理界面

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

  - 指定已存在学号输入框

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

  - 重置数据按钮

3.2 学生数据信息显示

3.3 管理员信息显示

主界面如表3-7所示:

基于学生信息管理系统的程序设计基础课程设计(java+数据库)(上)_第5张图片  图3-7 界面

3.3功能模块设计

3.3.1 信息管理模块

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

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

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

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

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

3.3.2 用户管理模块

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

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

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

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

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

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

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

表3-8 管理界面

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

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

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

                }

            }

        }

}

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

你可能感兴趣的:(课程设计,java,数据库)