资源描述
基于SSH的选课系统
目 录
分工表 I
1 引言 1
2 核心技术简介 2
2.1 MVC模式简介 2
2.2 Struts2框架简介 3
2.2.1 Struts2架构 3
2.2.2 Struts2基本处理流程 4
2.2.3 Struts2的优点 4
2.3 Hibernate框架简介 4
2.3.1 Hibernate架构 5
2.3.2 Hibernate核心接口 5
2.3.3 Hibernate基本处理流程 5
2.3.4 Hibernate的优点 5
2.4 Spring框架简介 6
2.4.1 Spring架构 6
2.4.2 Spring特点 6
3 选课系统需求分析 8
3.1 任务概述 8
3.2 用户特点 8
3.3 功能需求 8
3.4 界面需求 9
3.5 操作需求 9
3.6 输入输出需求 9
4 选课系统概要设计 10
4.1 设计思想 10
4.2 总体设计 10
4.3 系统层次结构图 10
4.4 接口设计 11
4.5 数据库设计 11
4.6 出错处理设计 11
5 选课系统详细设计 13
5.1 数据库详细设计 13
5.1.1 数据库关系模型设计 13
5.1.2 数据库物理结构设计 13
6 选课系统具体实现 16
6.1 开发与运行环境 16
6.2 开发环境的搭建 16
6.3 数据库系统实现 17
6.4 DAO层实现 18
6.5 Manager层实现 19
6.6 Action层实现 20
6.7 用户登录模块实现 20
6.8 管理员模块实现 21
6.9 学生模块实现 21
6.10 教授模块实现 22
7 系统测试 23
7.1 功能测试 23
26
分工表
姓名
工作
贡献度
xx
业务逻辑30%,前端设计,完善界面,用户手册撰写
30%
xx
业务逻辑70%,基本界面,报告撰写
30%
xx
UML建模,DAO层接口设计
20%
xx
数据库设计,DAO层接口设计
20%
1 引言
随着计算机网络的发展,各大高校相继组建我自己的局域网络。为了告别传统的手工式课程信息管理方式,一个选课系统是十分重要的。
一个好的管理软件能提高课程的管理效率,减轻管理人员的工作量。
同时随着近年来企业Java的发展,使得开发一个针对学校需求的选课系统变得简单。因此使用企业Java来开发一个选课系统,是行之有效的。
2 核心技术简介
Struts2,Spring,Hibernate是三个相互独立的框架。但三个框架一起整合起来使用,能使软件系统开发更轻松、更灵活、更容易扩展。三者都是“半成品”框架,使得我们在开发时不需要从头做起。三者之间的关系如图2-1:
图2-1 Struts2,Spring,Hibernate关系图
1
2
2.1 MVC模式简介
MVC全称Model View Controller,它使得应用程序的输入、处理和输出分开,使程序的耦合度降低。其每个层次说明如下:
Ø Model(模型):模型表示业务相关的数据与业务的处理方法。能直接访问数据。
Ø View(视图):视图用于对数据的显示。在这一层上,通常没有逻辑。为了更新视图,视图需要访问它监视的模型,因此视图通常事先在被监视的数据那进行注册。
Ø Controller(控制器):顾名思义,控制器起到控制作用,用于控制应用程序的流程。它处理事件并作出响应,调用相关的模型去处理事件请求,确定哪个视图返回请求。
图2-2 MVC各层关系图
图2-2显示的MVC各层之间的关系。由于它具有这些结构使得多个视图可以共有一个模型,同时对一层上的修改不会影响到其他层。
2.2 Struts2框架简介
Struts2是一个在WebWork的基础上转化而来的基于MVC的框架。采用拦截器的机制来处理用户请求,使得业务逻辑控制器与Servlet API实现分离。
2.2.1 Struts2架构
图2-3 Struts2架构
图2-3 展示了Struts2的整体架构,其各模块说明如下:
Ø FilterDispatcher:它是Strut2的核心控制器。它根据ActionMapper的结果来决定对请求的处理和响应。
Ø ActionMapper:它是一个接口,并提供了HTTP请求与Action之间的映射关系。如果用户的请求与ActionMapper中提供的方法相匹配,就继续调用ActionProxy。
Ø ActionProxy:它会依据ActionMapper生成的URI以及配置管理器来找到响应用户请求的Action对象。然后创建ActionInvocation对象来执行相应的Action方法。
Ø ActionInvocation:它会在调用Action处理方法的前后,还要调用各种拦截器。
Ø Result:它会根据相关视图将用户请求的处理结果反馈给用户。
Ø struts.xml:是Struts2的配置文件,负责配置每个Action的返回结果所对应的跳转页面。
Ø Interceptor:拦截器是Struts2的重要组件,其设计思想来源于AOP(面向切面编程)。通常用于处理某些通用的处理,它会在每个Action的外部执行。
Ø Action:用于处理用户请求并封装业务数据。其执行后通常会返回一个String类型的量,struts.xml根据这个量来决定跳转页面。
Ø Templates:页面模板。
Ø Tag Subsystem:Struts2的标签库,用于页面的设置。
2.2.2 Struts2基本处理流程
图2-4 Struts2基本处理流程
图2-4展示了Struts2基本处理流程,用户请求在经过一系列拦截器(拦截器会对用户请求进行相应的处理,如增加某些功能)后,就会交由Action处理,然后Action返回响应的结果(默认为“input”),最后通过匹配结果来选择跳转视图页面。
2.2.3 Struts2的优点
Ø “半成品”框架:使得开发不需要从头做起,而且在框架中很多地方都有默认值设置,减少了冗余的设置,提高了开发效率。
Ø 轻量级:资源消耗少,运行速度快。
Ø 搭建简单:只需在Myeclipse中将需要的包拷贝入项目中,再进行配置。
Ø 标签强大:Struts2提供了一系列的自己编写的标签用于页面布置,减少了页面代码。
Ø Action测试简单:不需要模拟HTTP对象,就可以直接测试。
Ø 错误报告明了:便于迅速找出错误并修改。
2.3 Hibernate框架简介
Hibernate是一个开放源码的对象关系映射框架,采用ORM机制,通常用于持久层的开发。它对JDBC进行了轻量级的封装,使得我们在开发过程中可以使用面向对象的方式来操纵数据库。
2.3.1 Hibernate架构
图2-5 Hibernate架构
2.3.2 Hibernate核心接口
Hibernate核心接口一共有6个:
Ø Session接口:该接口用于持久化对象的增、查、删、该,属于非线程安全。
Ø SessionFactory接口:该接口用于初始化Hibernate,充当数据存储源的代理,并创建Session对象。
Ø Configuration接口:该接口在Hibernate的启动时,首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
Ø Transaction接口:用于事务操作。
Ø Query和Criteria接口:使用HQL或SQL语句查询数据库。其中Criteria接口更靠近面向对象;Query接口则提供了使用原生SQL语句的方法。
2.3.3 Hibernate基本处理流程
1. 创建Configuration实例,读取项目路径根目录下的配置文件信息。
2. 创建SessionFactory实例,将Configuration中的配置信息复制到SessionFactory中。
3. 调用SessionFactory来创建Session
4. 打开Session,并创建事务Transaction
5. 进行持久化操作
6. 提交事务
7. 关闭Session
8. 关闭SessionFactory
2.3.4 Hibernate的优点
Ø 它使得数据库中的每一张表都映射为一个Java类,让我们在开发过程中可以使用面向对象的方式来操作数据库。
Ø 自动配置,我们只需在数据库中建立表,然后通过Myeclipse自带的工具就能完成映射。
Ø 它封装了对各种数据库的操作
Ø 轻量级框架,映射灵活,数据库表、配置文件、映射类我们只需要完成其中任何一部分就能依靠工具完成三者的关系映射。
2.4 Spring框架简介
Spring框架致力于J2EE应用各层的解决方案,贯穿表现层、业务层、持久层。同时它是一个轻量级的框架,没有侵入性,不会改变原有框架的类容。使用它的目的不是去修改原有框架,而是使用它来管理,使得原有的框架工作得更好。
2.4.1 Spring架构
图2-6 Spring架构
图2-6为Spring的架构,每个模块功能如下:
Ø 核心容器:提供Spring框架的基本功能。其主要组件是BeanFactory,采用IOC(控制反转)将应用程序的配置与依赖性代码分开。
Ø Spring上下文:是一个配置文件,用于提供上下文信息。
Ø Spring AOP:该 模块直接将面向方面的编程功能集成到了Spring 框架中。支持声明式的事务管理。
Ø Spring DAO:该模块用于管理异常处理和不同数据库供应商抛出的错误消息。
Ø Spring ORM:提供了如Hibernate这类ORM 的对象关系工具。
Ø Spring Web:为基于 Web 的应用程序提供了上下文,简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Ø Spring MVC框架:该框架中融入了大量视图技术。
2.4.2 Spring特点
Ø 轻量级框架:占用资源少,非侵入性。
Ø 控制反转(IOC):使得本来需要我们(应用程序)在执行前要进行的new操作,交由Spring的IOC容器来管理,在容器中进行配置,再由容器来将new好的对象注入应用程序,从而松散了耦合度。
Ø 面向切面(AOP):通常我们的编程思路是至上而下的,Spring的AOP使得我们能横向考虑问题,例如事务与日志记录。
3 选课系统需求分析
3.1 任务概述
选课系统用于管理学校的课程、学生、教授相关信息,除了基本的查询、添加功能外,还应有统计功能。同时操作方面应尽量简单。
3.2 用户特点
1) 系统管理员:该用户可以对课程信息、学生信息、教授信息进行维护,同时用户自己也能修改自己的密码与基本信息。
2) 学生:该用户可以自行选课、退课、查看可表、查看成绩、查看应缴费用,同时用户自己也能修改自己的密码与基本信息。
3) 教授:该用户可以选择要上的课程,取消课程,查看、等级学生成绩,同时用户自己也能修改自己的密码与基本信息。
3.3 功能需求
功能需求图如下图3-1所示:
图3-1 系统功能需求
用例图:
图3-2
各模块具体说明如下:
1) 登陆页面:用户输入合法的用户名和密码完成登陆,如果用户名或密码错误,应输出提示。
2) 学生页面:显示当前用户的名字,以及相关功能连接、按钮。
3) 教授页面:显示当前用户的名字,以及相关功能连接、按钮。
4) 管理员页面:显示当前用户的名字,以及相关功能连接、按钮。
3.4 界面需求
界面简洁美观。
3.5 操作需求
操作简洁,符合人们通常使用习惯。
3.6 输入输出需求
要求输入数据合法,如果非法会跳出出错提示。
4 选课系统概要设计
4.1 设计思想
该选课系统用于对课程信息、教授信息、学生信息的维护与查看统计。能够方便管理员对各种信息的维护,教授、学生对自己相关需求功能的使用,它将具有以下特点:
Ø 运行速度快
Ø 占用资源少
Ø 界面简洁
Ø 操作简单
4.2 总体设计
1) 以用户登陆后的界面为平台,将各模块功能放于该页面
2) 采用SSH框架
3) 灵活性要求:视图与业务逻辑分开,低耦合。采取接口方式编程便于系统的维护以及移植。
4) 输入输出要求:要求输入数据合法,如果非法会跳出出错提示。
4.3 系统层次结构图
图4-1 系统层次结构图
4.4 接口设计
用户接口:通过鼠标与键盘操作。
内部接口:使用数据流提供的接口操作各个模块。
4.5 数据库设计
概念结构设计是指将需求分析得到的用户需求抽象为信息结构。描述概念模型的有力工具是E-R模型。本系统E-R图如下图所示:
图4-2 用户E-R图 图4-3 教授E-R图
图4-4 学生E-R图 图4-5 课程E-R图
图4-6 学生选课E-R图 图4-7 教授选课E-R图
图4-8 管理员E-R图 图4-9 系统E-R图
4.6 出错处理设计
以下列出了可能的错误情况及其对应的错误信息:
1) 用户名或密码有误,提示:您输入的用户名或密码有误,请重新输入。
2) 管理员模块:
a) 课程信息维护:
Ø 如果增加一门已存在的课程,输出提示:该课程已存在。
Ø 如果删除一门不存在的课程,输出提示:该课程不存在。
b) 教授信息维护:
Ø 如果增加一名已存在的教授,输出提示:该教授已存在。
Ø 如果删除一名不存在的教授,输出提示:该教授不存在。
c) 学生信息维护:
Ø 如果增加一名已存在的学生,输出提示:该学生已存在。
Ø 如果删除一名不存在的学生,输出提示:该学生不存在。
a) 修改密码:输入的原密码不正确,应提示错误
3) 学生模块:
如果选择的课程冲突,输出提示:课程已选择。
4) 教授模块:
如果选择的课程冲突,输出提示:课程已选择。
5 选课系统详细设计
本报告将对选课系统的数据库与各模块进行详细设计。
5.1 数据库详细设计
5.1.1 数据库关系模型设计
E-R图向关系模型转换:一个实体型转换为一个关系模式,实体的属性即为关系模式的属性,实体的标识符即为关系模式的键。
根据E-R图,本系统的关系模型为:
1) 用户(用户ID,登陆ID,密码,权限);
2) 教授(教授ID,姓名,性别,电话,传真,系别,地址,email)
3) 学生(学生ID,姓名,性别,电话,系别,地址,email)
4) 管理员(管理员ID,姓名,性别,电话,email)
5) 课程(课程ID,课程名,课程性质,上课日期,节次,学分,系别)
6) 教授选课(教授选课ID,教授ID,课程ID)
7) 学生选课(学生选课ID,教授ID,课程ID,学生ID,成绩)
5.1.2 数据库物理结构设计
数据库的物理设计是将一个给定逻辑结构实施到具体的环境中,逻辑数据模型要选取一个具体的工作环境,这个工作环境提供了数据存储结构与存取方法。经过分析设计给出了各主要表的物理结构:
users表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
uid
int
8
NO
外键
password
varchar
20
NO
level
int
8
NO
表5-1
admins表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
name
varchar
20
NO
sex
varchar
8
NO
tel
varchar
20
YES
email
varchar
20
YES
表5-2
professors表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
name
varchar
20
NO
sex
varchar
8
NO
tel
varchar
20
NO
email
varchar
20
YES
dept
varchar
20
YES
fax
varchar
20
YES
address
varchar
20
YES
表5-3
students表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
name
varchar
20
NO
sex
varchar
8
NO
dept
varchar
20
YES
address
varchar
20
YES
tel
varchar
20
NO
email
varchar
20
YES
表5-4
courses表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
name
varchar
20
NO
type
int
20
NO
credit
varchar
20
NO
day_num
int
8
NO
lesson_num
int
8
NO
dept
varchar
20
NO
表5-5
pc表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
pid
int
8
NO
外键
cid
int
8
NO
外键
表5-6
sc表:
列名
类型
长度
是否允许空值
主键/外键
id
int
8
NO
主键
pid
int
8
NO
外键
cid
int
8
NO
外键
sid
int
8
NO
外键
score
int
8
YES
date
date
-
NO
表5-7
6 选课系统具体实现
6.1 开发与运行环境
Ø 操作系统:Win7
Ø 内存:2G
Ø 硬盘空间:500G
Ø 开发软件:Myeclipse 10,Microsoft Sql Server 2008,Java 6.0 ,Tomcat6.0
Ø 框架版本:Struts 2.1,Hibernate 3.0,Spring 3.0
6.2 开发环境的搭建
1) 新建一个Web项目名为sc,选择使用Java6.0,
2) 添加Struts2相关支持包,除了默认的包以外,还应选上Spring的支持包
3) 在Meclipse的数据库视图中增加scdb配置,
4) 添加Spring相关包,除了默认的包以外,还应选上Spring Web Liberaies 3.0,
5) 添加Hibernate支持包,除了原有包外,将最后4个包也加入,
6) Hibernate Configuration选择Spring Configuration file,因为三大框架整合之后由Spring来管理所有的Bean,所以Hibernate的配置文件也由Spring的applicationContext.xml文件来管理,点击下一步;
7) 选择Existing Spring Configuration file,点击下一步;
8) 选择数据库为scdb,注意方言为SQL Server;
9) 不建立SessionFactory,完成;
10) 在web.xml中添加如下代码;
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
6.3 数据库系统实现
users表:
表 6-1
admins表:
表 6-2
professors表:
表 6-3
students表:
表 6-4
courses表:
表 6-5
pc表:
表 6-6
sc表:
表 6-7
数据库映射到项目中,注意ID的生成方式选择native
6.4 DAO层实现
DAO(Data Access Object)是用于访问数据的对象,在使用时,我们在DAO中定义访问其对应数据对象的接口方法,业务层通过DAO操作数据,这样避免了直接在业务层使用持久层的技术。
DAO以及DAO实现放于如下图所示包中:
图6-1
在使用前,需要在Spring的配置文件中添加如下配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>com/cims/domain/Users.hbm.xml</value>
<value>com/cims/domain/Sell.hbm.xml</value>
<value>com/cims/domain/Car.hbm.xml</value></list>
</property>
</bean>
在本系统中绝大多数DAO实现使用getHibernateTemplate()模板来操作数据库,因为该模板是线程安全的。例子:
@Override
public List<Students> findStudentAll() {
return getHibernateTemplate().find("from Students");
}
从中可以看出Hibernate处理数据库的优势,它使用了对象的方式来对数据库的表操作。而且我们不需要编写最底层的SQL语句,而是直接使用它提供的方法。
6.5 Manager层实现
在Action中通过Manager对DAO接口进行调用,首先将需要对用到的DAO实例化,采用Spring的依赖注入方式将实例化的DAO注入到Action中。其接口与实现放于下图包中:
图6-2
例子:
@Override
public void addStudent(String name, String sex, String dept, String tel) {
Students s=new Students();
s.setDept(dept);
s.setTel(tel);
s.setSex(sex);
s.setName(name);
studentDAO.addStudent(s);
}
该方法用于保存一名学生。还需要在Spring的配置文件applicationContext.xml中添加如下信息:
<beanid="studentManager"class="com.sc.service.impl.StudentManagerImpl">
<property name="studentDAO" ref="studentDAO"/>
</bean>
该配置将studentDAO实例化后注入studentManager中
6.6 Action层实现
Action用于返回一个Stirng类型字符串,来选择跳转页面。其主要的配置在struts.xml这个文件中。其实现放于下图包中:
图6-3
例子:
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
courseManager.addCourse(name, type, dept, day_num, lesson_num, credit);
setMsg("课程:"+name+"储存成功!");
return SUCCESS;
}
前后省略了get,set方法,返回的SUCCESS会根据Struts2的配置文件中的
<action name="addCourse" class="addCou">
<result name="success">/pages/courseService/addCourse.jsp</result>
</action>
来选择返回页面
6.7 用户登录模块实现
该模块实现界面如下:
图6-3
接收用户输入账号及密码,并经服务器验证后登录到首页。
登陆类图:
图6-4
6.8 管理员模块实现
该模块实现界面如下:
图6-5
进入管理员主页后,用户可以修改密码、修改个人信息、管理学生资料、管理老师资料以及管理课程资料。
流程框图:
图6-6
添加用户类图:
图6-7
6.9 学生模块实现
该模块的具体实现页面如下:
图6-8 学生主页
进入学生主页后,用户可以修改密码和修改个人信息,选课、退课、查询成绩、课表查看、缴费查询功能。
流程框图:
图6-9
6.10 教授模块实现
该模块的具体实现页面如下:
图6-10
进入教授主页后,用户可以修改密码、修改个人信息、选择要教授的课程、登记学生的成绩,以及查看学生的成绩。
流程框图:
图6-11
7 系统测试
7.1 功能测试
用户模块:
测试模块名称
模块说明
用户登录
用户输入用户ID、密码登陆
管理员模块测试:
测试模块名称
模块说明
维护课程信息
对课程进行增、查、删、改
维护学生信息
对学生进行增、查、删、改
维护教授信息
对教授进行增、查、删、改
修改密码
修改自己密码
修改自己信息
修改自己信息
学生模块测试:
测试模块名称
模块说明
选课
选择课程
退课
退课
查看课表
查看自己的课表
查看缴费
查看自己应该缴费的金额
修改密码
修改自己密码
修改自己信息
修改自己信息
教授模块测试:
测试模块名称
模块说明
选课
选择要教的课程
录入学生成绩
录入学生成绩
查看学生成绩
查看学生成绩
修改密码
修改自己密码
修改自己信息
修改自己信息
展开阅读全文