基于JAVA的学生信息管理系统

目录


前言

学生信息管理系统比较常见,功能比较简单基础,适合我这样的初学者进行练习。最简单的学生信息管理系统无非就是“增删改查”四个简单的功能。

一、需求分析

在程序设计之初,需要对程序功能进行一个设计,通过理想化功能对程序适用人群进行划分,本程序实现的功能如下:

1.登录系统界面(用户名和密码的识别)

2.班级信息的“增删改查”

3.学生个人基本信息的“增删改查”

二、开发环境、工具

本系统基于Java语言,使用了C/S架构和三层体系结构,开发环境使用了eclipse,数据库使用了MySQL5.0和可视化管理工具Navicat for MySQL。

1.开发语言

本程序主要采用了Java语言中的GUI(图形用户界面)和AWT(窗口抽象工具包编程)

(1) GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口),即人机交互图形用户界面的设计,是指以图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面在视觉上更容易被用户接受。

(2) AWT

抽象窗口工具包(Abstract Windowing Toolkit,缩写为AWT)是Java的平台独立的窗口系统图形和用户界面器件工具包。AWT 是Java基础类 (JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。 AWT提供了JavaApplet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的编程语言,但图形用户界面通常是依赖于平台的,所以Java使用相应的技术使AWT能够为应用程序提供独立于平台的接口,从而确保同一程序的图形用户界面在外观相似的不同机器上运行。

2.开发模式

(1)三层架构模式

三层架构模式包括显示层、业务逻辑层和数据层。其工作模式是:显示层通常面向操作者,主要用于接收数据、传输数据和显示数据;业务逻辑层主要用于处理显示层接收的数据和数据库中的数据。数据层主要用于操作数据库,包括添加、删除、修改和检查等常见操作。采用三层架构模式可以大大减少程序间的耦合,符合现代软件的标准。

(2) C/S结构

C/S结构,称为客户机和服务器结构。它是一种软件系统架构,通过它可以充分利用两端硬件环境的优势,合理地将任务分配给客户端和服务器端,从而降低系统的通信开销。目前,大多数应用软件系统以客户机/服务器的形式具有两层结构。随着当前软件应用系统向分布式网络应用发展,网络和客户机/服务器应用都可以执行相同的业务处理,并使用不同的模块来共享逻辑组件;因此,内部和外部用户都可以访问新的和现有的应用系统,并且新的应用系统可以通过现有应用系统中的逻辑来扩展。这是目前应用系统的发展方向。

三、系统需求分析

3.1系统的背景

随着科学技术的飞速发展,计算机科学技术的不断进步,计算机在各个领域的普及,学校规模的不断扩大,学院、专业、班级和学生数量的急剧增加,以及各种学生信息的指数增长,以往的学校学生身份信息管理仍然处于手工管理的复杂阶段,需要手工重复劳动,工作量大,效率极低。因此,迫切需要开发一个基于互联网的学生信息管理系统,以提高学校管理的效率。其最主要的特点就是节省人力资源,使用方便、快捷。以提高学校管理质量为原则,方便快捷的管理学生信息。所以,开发一套学校学生信息管理系统来代替传统的人工管理方式是必然的。本系统要实现学生信息的网络化的查询与管理。那么,学生如何管理个人信息是这个系统需要解决的问题。

3.2系统的功能需求

该系统的主要任务是管理学生信息。学生可以查询自己的信息或修改相关信息。教师可以添加、删除和修改学生信息。该系统提供了一个非常友好的界面,操作简单,管理方便。一般来说,本次课程设计是为了解决学生信息的管理问题,存储一定的用户信息和学生信息,方便有效地操作和管理相应的用户信息和学生信息,主要包括:用户可以修改自己的信息;添加和修改用户的相关信息;添加、修改、删除学生的相关信息;对学生的相关信息的查询。最终实现学生信息的网络化的查询与管理。

四、系统设计概要

这一阶段设计的基本目标是解决如何实践系统的问题,它主要设计系统架构设计,并将给出系统的总体架构设计。根据系统分析产生的结果,确定系统由哪些系统和模块组成,这些系统和模块是如何有机结合,以及每个模块的功能是如何实现的。系统设计的目标是使系统具有所需的功能,同时努力实现高效率、高可靠性、可修改性以及易于掌握和使用。这一阶段是在仔细研究软件需求之后,划分和设计要开发的软件系统,定义系统层次结构和各层之间应该负责的逻辑功能。模块化的基础是将复杂的问题分解成许多容易解决的小问题。原来的问题变得容易解决。模块化设计是根据某些原则将大型软件分成具有独立和相关功能的较小模块。每个模块完成一个特定的子功能。将这些模块组合成一个整体。完成指定的功能并满足问题的要求。采用模块化原理的优点是软件结构清晰,易于测试和调试。从而提高软件的可靠性和可修改性。它有助于软件开发的组织和管理。大型软件可以分别编写不同的模块。

4.1系统体系结构设计

该系统采用多层架构。视图类用作表示层。除了向客户提供信息之外,它还获得管理员或教师或学生输入的信息。用户输入的简单控制。表单获得用户输入信息后,提交给视图,在这里首先转换获得的数据,然后将相应的数据封装为数据传输对象。视图将封装的数据提交给模型,并使用提交给视图的数据对象来执行复杂的业务逻辑操作。对数据库的访问是在DAO级别。DAO层实现特定的数据库操作方法,服务层调用DAO层方法来实现数据库操作。通过应用这种多层体系结构,提高了系统的可维护性、可扩展性和可移植性。

4.2功能模块结构设计

从功能模块上可以分为如下几大模块:学生信息的导入、导出模块、删除学生信息模块、修改学生信息模块、查询学生信息模块、添加学生信息模块。主要功能模块如图4-2-1所示:

班级信息模块类似有删除班级信息模块、修改班级信息模块、查询班级信息模块、添加班级信息模块。主要模块功能如图所示:

五、数据库设计

本系统采用MySQL5.0进行数据库设计开发,为了方便后期对数据库的管理,使用了navicta for MySQL对数据库进行可视化管理。

在系统设计之初,我首先考虑了如何使用数据模型,通过使用数据库的结构和语义来抽象现实世界。模型的结构部分指定了如何描述数据。目前广泛使用的数据模型可以分为两种类型,一种是独立于计算机系统的概念数据模型,如实体连接模型;另一种是直接面向数据库逻辑结构的结构化数据模型。在这个系统中,我第一次使用实体关系模型(ER model)来描述数据库的结构和语义,抽象现实世界。ER模型直接从现实世界中抽象出实体类型和关系,然后使用ER图来表示数据模型。它有两个明显的优点:贴近人们的思维,易于理解;它与计算机无关,很容易被用户接受。然而,er模型只能解释实体之间的语义关系,不能进一步解释详细的数据结构。这只是数据库设计的第一步。

E-R图是直观表示概念模型的工具,它有三个基本成分:  

矩形框,表示实体类型(考虑问题的对象)。

菱形框,表示联系类型(实体间的联系)。

椭圆形框,表示实体的属性。

根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。本系统包括的实体有管理员实体,教师实体,学生实体。

学生实体的属性有,学号、姓名、性别、年龄、院系、班级、家庭住址和简介。学生实体图如下图5-3-1所示:

 教师实体的属性有,教师编号、姓名、性别、年龄、登录帐号和登录密码。教师实体图如下图5-3-2所示:

 管理员实体属性有,管理员编号、用户名、密码。管理员实体图如下图5-3-3所示:

由以上的实体图可以得到以下几个关系模式:

学生基本信息(学号,姓名,性别,院系,班级,住址,信息简介)

班级基本信息(班级编号,班级名,班级简介)

用户基本信息(用户编号,登录帐号,登录密码)

1.学生信息数据表

学生信息数据表的主要功能在于保存学生的主要信息和相关信息,包括:‘学号’、‘姓名’、‘性别’、‘年龄’、‘院系’、‘班级号’、‘家庭住址’。学生信息数据表如表所示。

字段名称

字段类型

字段大小

索引

必须填写

stuId

文本

50

stuNo

文本

20

stuName

文本

30

Sex

文本

50

Dept

文本

50

classId

文本

50

Address

文本

50

2.班级信息数据表

班级信息数据表的主要功能是保存班级的相关信息。它包括:‘班级编号’、‘班级名’、‘班级介绍’。 班级信息数据表如表所示。

字段名称

字段类型

字段大小

索引

必须填写

Id

文本

20

GradeName

文本

20

gradeDesc

文本

50

3.用户信息数据表

用户信息数据表的主要功能是保存用户的相关信息。它包括:‘用户编号’、‘登录账号’、‘登录密码’。 用户信息数据表如表所示:

字段名称

字段类型

字段大小

索引

必须填写

Id

数字

4

有(无重复)

Username

文本

30

Password

文本

30

六、管理系统详细设计

数据库设计完成后,就开始进入具体的应用程序的分析与设计阶段。应用程序的分析与设计主要包括了应用程序各个功能模块的总体规划和分析、应用程序界面的选择与设计以及应用程序结构的选择等部分,而系统开发工作主要是集中在逻辑、功能和技术设计上,系统实施阶段要继承此前面各个阶段的工作成果,将技术设计转化为物理实现,因此系统实施的成果是系统分析和设计阶段的结晶。

1.系统登陆模块设计

首先新建用户登录所对应的实体user类,一个user对象代表一个用户,此外,用户表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。

用户实体类:

public class User {

        private int id; // 编号

        private String userName; // 用户名

        private String password; // 密码

        public User() {

                 super();

                 // TODO Auto-generated constructor stub

        }

        public User(String userName, String password) {

                 super();

                 this.userName = userName;

                 this.password = password;

        }

(set和get方法以及同toString方法省略)

第二步就是对登录的逻辑处理,首先是登陆名以及密码的非空校验,两者有一个为空就不继续访问数据库,直接返回给用户错误的信息,提醒用户更正登录信息。

当用户名或者密码为空的时候点击登录就会出现提示信息,如图6.1.2

 

代码部分的实现是使用了awt框架中的事件处理函数

private void loginActionPerformed(ActionEvent evt) {

                 String userName=this.userNameTxt.getText();

                 String password=new String(this.passwordTxt.getPassword());

                 if(StringUtil.isEmpty(userName)){

                         JOptionPane.showMessageDialog(null, "用户名不能为空!");

                         return;

                 }

                 if(StringUtil.isEmpty(password)){

                         JOptionPane.showMessageDialog(null, "密码不能为空!");

                         return;

                 }

                 User user=new User(userName,password);

                 Connection con=null;

                 try {

                         con=dbUtil.getCon();

                         User currentUser=userDao.login(con, user);

                         if(currentUser!=null){

                                  dispose();

                                  new MainFrm().setVisible(true);

                         }else{

                                  JOptionPane.showMessageDialog(null, "用户名或者密码错误!");

                         }

                 } catch (Exception e) {

                         e.printStackTrace();

                 }finally{

                         try {

                                  dbUtil.closeCon(con);

                         } catch (Exception e) {

                                  e.printStackTrace();

                         }

                 }

        }

2.班级信息模块设计

首先新建班级所对应的实体studentClass类,一个studentClass对象代表一个班级,此外,班级表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。

班级实体类:

public class SchoolClass {



        private int id; // 编号

        private String className; // 班级名称

        private String calssDesc; // 备注

       

       

       

        public SchoolClass() {

                 super();

        }

        public SchoolClass(String className, String calssDesc) {

                 super();

                 this.className = className;

                 this.calssDesc = calssDesc;

        }

        public SchoolClass(int id, String className, String calssDesc) {

                 super();

                 this.id = id;

                 this.className = className;

                 this.calssDesc = calssDesc;

        }

(set和get方法以及同toString方法省略)

第二步就是对班级信息逻辑部分的实现了,包括增加删除修改查询,其中添加是单独放在了一个界面,而查询、修改以及删除放在了同一个界面,这样便于维护,如图所示

点击添加则会调用添加部分的界面函数,弹出信息添加的界面如图所示,可以输入班级的名称,以及对班级的详细描述进行添加,在输入错误的情况下也可以点击重置,就会清空所有填写的信息,这样便于操作。

点击维护则会调用维护部分的界面函数,弹出信息维护的界面如图所示,可以修改班级的名称,以及对班级的详细描述进行修改。

实现班级信息维护的代码如下,其中也是使用了awt中的事件处理函数,以及swing中的函数实现界面的显示跳转弹框等交互的操作。

private void bookTypeAddActionPerformed(ActionEvent evt) {

                 String className=this.classNameTxt.getText();

                 String classDesc=this.classDescTxt.getText();

                 if(StringUtil.isEmpty(className)){

                         JOptionPane.showMessageDialog(null, "班级信息名称不能为空!");

                         return;

                 }

                 SchoolClass schoolClass=new SchoolClass(className,classDesc);

                 Connection con=null;

                 try{

                         con=dbUtil.getCon();

                         int n=schoolClassDao.add(con, schoolClass);

                         if(n==1){

                                  JOptionPane.showMessageDialog(null, "班级信息添加成功!");

                                  resetValue();

                         }else{

                                  JOptionPane.showMessageDialog(null, "班级信息添加失败!");

                         }

                 }catch(Exception e){

                         e.printStackTrace();

                         JOptionPane.showMessageDialog(null, "班级信息添加失败!");

                 }finally{

                         try {

                                  dbUtil.closeCon(con);

                         } catch (Exception e) {

                                  // TODO Auto-generated catch block

                                  e.printStackTrace();

                         }

                 }

        }

3.学生个人信息模块设计

首先新建学生所对应的实体student类,一个student对象代表一个用户,此外,用户表中有的字段,都需要在这个类中反应出来,并且创建空参和满参构造方法,以及set、get和toString方法。

用户实体类:

public class Student {



        private int id; // 编号

        private String name; // 姓名

        private String sn; // 学号

        private String sex; // 性别

        private String dept; // 所在院系

        private Integer classId; // 班级Id

        private String className; // 班级名称

        private String address; // 家庭住址

        public Student() {

                 super();

        }

        public Student(String name, String sn, String sex, String dept, Integer calssId, String address) {

                 super();

                 this.name = name;

                 this.sn = sn;

                 this.sex = sex;

                 this.dept = dept;

                 this.classId = calssId;

                 this.address = address;

        }

(set和get方法以及同toString方法省略)

第二步就是对学生个人信息逻辑部分的实现了,包括增加删除修改查询,其中添加是单独放在了一个界面,而查询、修改以及删除放在了同一个界面,这样便于维护,如图所示

其中手工填写学生的姓名学号、所在院系和家庭住址,性别通过单选框选择,班级通过下拉菜单进行选择。

在学生信息维护的界面可以对学生信息进行检索,可以通过学生的姓名、学生的编号、学生所在的班级进行筛选,点击选择某位学生的信息,就可以对该学生的信息进行操作了,可以修改其名字、性别、所在的学院、学生的学号、所属的班级以及家庭住址。也可以点击删除、删除该学生的信息。

实现个人信息维护的代码如下,其中也是使用了awt中的事件处理函数,以及swing中的函数实现界面的显示跳转弹框等交互的操作,学生信息的字段信息比较多需要注意要对应字段赋值。

    

  private void studentUpdateActionPerformed(ActionEvent evt) {

                 String id=this.idTxt.getText();

                 if(StringUtil.isEmpty(id)){

                         JOptionPane.showMessageDialog(null, "请选择要修改的记录");

                         return;

                 }

                 String sname=this.nameTxt.getText();

                 String sn=this.snTxt.getText();

                 String dept=this.deptTxt.getText();

                 String address=this.addressTxt.getText();

                 if(StringUtil.isEmpty(sname)){

                         JOptionPane.showMessageDialog(null, "学生信息名称不能为空!");

                         return;

                 }

                 if(StringUtil.isEmpty(sn)){

                         JOptionPane.showMessageDialog(null, "学生信息作者不能为空!");

                         return;

                 }

                 if(StringUtil.isEmpty(dept)){

                         JOptionPane.showMessageDialog(null, "学生信息价格不能为空!");

                         return;

                 }

                 String sex="";

                 if(manJrb.isSelected()){

                         sex="男";

                 }else if(femaleJrb.isSelected()){

                         sex="女";

                 }

                 SchoolClass schoolClassTmp=(SchoolClass) schoolClassJcb.getSelectedItem();

                 int scId=schoolClassTmp.getId();

                

                 Student book=new Student(Integer.parseInt(id),  sname, sn, sex, dept,  scId,  address);

                

                 Connection con=null;

                 try{

                         con=dbUtil.getCon();

                         int addNum=studentDao.update(con, book);

                         if(addNum==1){

                                  JOptionPane.showMessageDialog(null, "学生信息修改成功!");

                                  resetValue();

                                  this.fillTable(new Student());

                         }else{

                                  JOptionPane.showMessageDialog(null, "学生信息修改失败!");

                         }

                 }catch(Exception e){

                         e.printStackTrace();

                         JOptionPane.showMessageDialog(null, "学生信息修改失败!");

                 }finally{

                         try {

                                  dbUtil.closeCon(con);

                         } catch (Exception e) {

                                  // TODO Auto-generated catch block

                                  e.printStackTrace();

                         }

                 }

        }

七、结束语

本系统主要是基本的学生信息管理系统的基础功能,仅仅实现了最基本的增删改查,但是GUI技术和AWT技术对于初学者来说比较有参考意义。这就是一个简单的课程设计,有哪些不对的地方还请批评指正。

代码和数据库文件链接地址:https://download.csdn.net/download/qq_52974528/87336438

版权声明:本文为博主作者:低血糖的长颈鹿原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_52974528/article/details/128415724

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2024年1月11日
下一篇 2024年1月11日

相关推荐