1.设计背景
学生信息管理系统是一个为学校提供学生信息管理服务的软件系统。该系统主要包括学生端、管理员端和教师端三个不同角色的用户界面,以满足各个用户群体的需求。
-
学生信息管理需求:学校需要一个可靠且高效的方式来管理学生的信息,包括学生的个人资料、课程成绩等。传统的纸质档案管理方式已经无法满足大规模学生信息的管理需求,因此需要开发一个电子化的系统来实现学生信息的管理。
-
教务管理需求:学校的教务部门需要对学生的选课情况、成绩评定等进行管理和统计分析。而传统的手工统计和录入方式效率低下且容易出错,因此需要一个系统来自动化处理教务管理工作,提高工作效率和准确性。
-
学生服务需求:学生需要一个方便、快捷的渠道来查询和管理自己的个人信息,例如查看个人成绩、课表安排、选课情况等。通过学生端的用户界面,学生可以随时随地访问自己的信息,提高了学生服务的便捷性和满意度。
-
教师教学需求:教师需要一个能够方便地管理学生信息、发布课程资料、录入和查询成绩等功能的系统。通过教师端的用户界面,教师可以更好地组织和管理教学工作,提高教学效果和效率。
基于以上需求,学生信息管理系统的设计旨在提供一个全面、高效、便捷的学生信息管理平台,以满足学校各个角色的需求,优化学校的管理流程,提高工作效率和服务质量。
因为我设计这个系统主要是为了完成数据库课程的大作业,所以这里使用java gui实现了基础的权限管理和增删改查功能,大家有兴趣的可以自行设计其他模块的功能,这里分享根据课程提供的资料,我们完成的部分(这一部分已经可以作为一个完整的系统来使用了)
2.系统设计基础
首先想跟大家分享一下java三层架构,面向对象,面向过程,E-R图,大家了解了这些之后,会对系统整体的设计有更加深刻的了解,这恰恰是我们最需要而又最容易忽略的能力和知识。
1.Java三层架构
Java三层架构是一种企业级应用程序设计和开发模式,将应用程序分为三个层次:表示层、业务逻辑层和数据持久层。这种架构模式可以优化应用程序的开发、维护和扩展,同时提高其可靠性和安全性。以下是Java三层架构的应用场景:
1. 购物网站:Java三层架构可用于开发购物网站,其表示层(视图层)通常采用JSP、Servlet等技术实现,业务逻辑层负责处理用户请求并调用数据持久层的数据访问对象(DAO)进行数据操作。
2. 人力资源管理系统:Java三层架构可用于开发人力资源管理系统,表示层可以采用Web前端技术,如HTML、CSS、JavaScript等;业务逻辑层负责处理员工信息、薪资、考勤等业务逻辑,并调用数据持久层的DAO进行数据操作。
3. 医院管理系统:Java三层架构可用于开发医院管理系统,表示层通常采用桌面应用程序或Web应用程序实现,业务逻辑层负责处理医疗业务逻辑,如挂号、诊断、治疗等,并调用数据持久层的DAO进行数据操作。
4. 酒店预订系统:Java三层架构可用于开发酒店预订系统,表示层可以采用Web前端技术或移动应用程序实现,业务逻辑层负责处理酒店预订业务逻辑,并调用数据持久层的DAO进行数据操作。
5. 学校教务管理系统:Java三层架构可用于开发学校教务管理系统,表示层可以采用Web前端技术,如HTML、CSS、JavaScript等;业务逻辑层负责处理学生信息、课程安排、成绩评定等业务逻辑,并调用数据持久层的DAO进行数据操作。
总之,Java三层架构适用于各种类型的企业级应用程序开发,可以提高开发效率、可维护性和可扩展性,同时也提供了更好的安全性和可靠性。
2.面向对象和面向过程
‘面向对象编程(Object-Oriented Programming,OOP)和面向过程编程(Procedural Programming)是两种不同的编程范式。
面向对象编程是一种以对象为基础,将数据和操作封装在一起的编程方法。在面向对象编程中,程序被组织成一个个相互协作的对象,每个对象都有自己的状态和行为,并通过消息传递来进行交互。面向对象编程强调的是对问题进行抽象,将问题分解为对象,并定义对象之间的关系和行为。
面向过程编程则是以过程(或函数)为基本单位进行编程。在面向过程编程中,程序由一系列的函数或过程组成,每个函数实现特定的功能。面向过程编程将问题分解为一系列的步骤和可重用的函数,并通过函数之间的调用来完成任务。
面向对象编程和面向过程编程各有其特点:
-
封装和抽象:面向对象编程通过封装将数据和操作封装在对象中,使得对象内部的实现对外部不可见,提供了更好的信息隐藏和保护。而面向过程编程注重于流程和步骤的描述。
-
继承和多态:面向对象编程支持继承和多态的概念,可以通过继承创建新的类,并在子类中重写父类的方法,实现代码的复用和扩展。而面向过程编程没有继承和多态的概念,代码的组织和复用需要额外的考虑。
-
可重用性和扩展性:面向对象编程具有较好的可重用性和扩展性,可以通过定义和组合对象来构建复杂的系统,并且可以通过添加新的对象来扩展功能。而面向过程编程则需要通过函数的组合和修改来实现功能的扩展。
选择使用面向对象编程还是面向过程编程,取决于具体的需求和问题。面向对象编程适用于复杂的系统和大型项目,能够更好地组织和管理代码;而面向过程编程适用于简单的任务和小型项目,更加直观和简洁。在实际开发中,也可以将两种编程范式结合使用,根据实际情况选择合适的编程方式。
3.E-R图
E-R图,也称实体-关系图(Entity-Relationship Diagram,ERD),是一种用于描述数据库中实体、属性和关系之间关系的图形化工具。
在E-R图中,实体用矩形框表示,属性用椭圆形表示,而实体之间的关系则用菱形表示。每个实体都有一个主键,用来唯一标识该实体,属性则描述了实体的特征和属性。实体与实体之间的关系可以是一对一、一对多或多对多的关系。
E-R图通常由三个要素组成:
-
实体:实体是指现实世界中的具体或抽象对象,如学生、教师、课程等。在E-R图中,实体用矩形框表示,并在框内写上实体名称。
-
属性:属性是指实体的特征和属性,如学生的姓名、学号、年龄等。在E-R图中,属性用椭圆形表示,并与实体相连。
-
关系:关系是指实体之间的联系,如学生和课程之间的选课关系。在E-R图中,关系用菱形表示,并连接相关的实体。
E-R图可以用来设计数据库结构,并且能够清晰地表示实体、属性和关系之间的联系。通过E-R图,我们可以更好地理解数据库中的数据模型和数据之间的关系,从而更好地设计数据库结构。
需要注意的是,在设计E-R图时,需要遵循一些规则,如每个实体必须有一个主键,关系必须具有明确的基数(即一对一、一对多或多对多),属性不应重复等。同时,也需要根据具体需求进行灵活调整和优化。
我们大多数情况下其实忽略掉E-R图的设计,仅仅只是对功能进行一定讨论后,就会开始设计数据库,那么这就会存在数据库设计不合理,不完整等等弊端。自己独立设计过系统的小伙伴可能会同意这一点,也能感受到如果前期的E-R图没有设计或者没有进行其他的系统设计,而是仅凭借着自己对于系统的理解就开始写的话,那么最后一定会需要大改。所以希望大家能够养成在开始写代码之前先进行相关设计的习惯。
下面是我们为学生信息管理系统设计的E-R图,大家可以进行参考:
接下来我们就可以根据E-R图将实体抽象出来完成数据库的设计,通常一个实体对应一张数据表。
3.系统逻辑设计
那么和大家分享完系统相关设计的基础之后,我将和大家分享一下该系统的逻辑设计以及相关亮点,毕竟现在有了chatgpt之后,代码编写的难度已经大大下降了。
1.相关实体所需要的功能
大家还记得上文中提到的E-R图吗?在E-R图中我们已经确定了该系统有哪些实体,接下来我们将结合面向对象的思想来讲实体所具有的功能进行抽象,如下图所示:
这里仅给出部分功能设计,大家有兴趣可以自行进行设计,或者关注文末公众号获取全部源码及相关资料。
2.将重复功能进行抽取设计
大家现在已经通过E-R图完成了数据库的设计和相关功能的梳理,接下来我们将结合三层架构完成系统逻辑的设计。
1.表示层
- 创建一个图形用户界面(GUI),用于与用户进行交互。可以使用Java Swing或JavaFX等库来实现GUI。
- 在GUI中,创建适当的界面元素(如文本框、按钮等)用于输入和显示学生信息。
- 在GUI中,通过事件监听器(Event Listener)来响应用户的操作,并将操作转发给业务逻辑层的学生服务类进行处理。
- 在GUI中,根据业务逻辑层的返回结果,更新界面上的学生信息显示。
2.业务逻辑层
- 创建一个相关类,用于处理业务逻辑。包括添加、删除、更新信息、查询等方法。
- 在类中调用数据访问层的方法来实现对数据库的操作。
3.数据访问层
- 创建一个用于连接数据库的数据库工具类,包括数据库的连接、关闭等方法。
- 创建一个数据访问对象(Data Access Object,DAO),用于封装对数据库的访问操作。包括插入、更新、删除、查询等操作方法。
那么根据这个设计思路,接下我们就可以根据思路进行代码的开发了,关于这个系统的设计,我的分享就到这里。