基于struts2的学生选课系统
1.项目的需求说明
学生选课系统就是开发一个Web应用程序,实现学生选课的相关操作,并且是基于B/S模式的应用程序。该系统需要完成的主要功能如下:
1.1用户登录模块
- 用户分为两类:系统管理员(教务处管理人员),一般用户(学生)。
- 用户登录:在登录时进行登录验证,如果用户名和密码正确,则进入系统页面。
- 用户注册:新用户必须先注册,才能成功登录系统。
1.2用户管理模块
管理员可以实现对注册用户的管理(删除),规定并设置选课时间段,在该段时间内,学生必须完成选课,并可以实现对选课情况的查询、修改和删除等有关的操作。例如,当选课结束后,对于选课人数小于40人的课程进行删除(注意,关联的学生,学生所选课自动删除)
1.3选课管理模块
- 学生在规定时间内进行添加选课、修改选课、删除选课,查看自己选课情况。
- 管理员可以插入课程内容,查看选课情况并导出,删除课程内容,提前形成选课数据表(按照专业、班级)。
- 根据学生的培养方案,系统自动形成一个默认的选课情况。学生登录后,在默认选课情况的基础上完成自己的选课。
- 对于管理员,当选课结束后,可以形成以课程为教学单元的一个教学班,并可以查询班级学生,也可以形成班级学生名单。
2.系统分析与设计
该系统的开发工具为ecplise2023.12版本,采用MYSQL数据库,使用struts2开发框架,对数据库的操作与接口采用JDBC+DAO,服务器为Tomcat8.5版本。
系统采用Java EE Web中的MVC技术框架进行实现,视图层采用JSP技术和struts2标签,控制层采用struts2的Action类,业务逻辑层包括JavaBean、DAO以及数据库连接池,其中JavaBean类为用户实体类(学生和管理员)和课程实体类,DAO用来与数据库交互的接口或者实现类。
概要设计如下图所示(根据软件工程中的系统结构图):
软件框架如下图所示:
系统模块结构图如下(用例图实现):
3.子系统设计
3.1用户登录/注册子系统
功能 | 视图层组件 | 控制层组件 | 模型层组件 |
学生管理员注册 | register.jsp | StuAction.java TeaAction.java struts_user.xml | StuDao.java TeaDao.java |
学生管理员登录 | index.html index.css |
3.2选课子系统
功能 | 视图层组件 | 控制层组件 | 模型层组件 |
学生选课界面 | system.jsp | StuAction.java TeaAction.java CourseAction.java IBaseDao.java DBConnection.java UploadAction.java DownloadAction.java struct.xml struct_user.xml struct_add.xml struct_del.xml | Stu.java Tea.java Course.java StuDao.java TeaDao.java CourseDao.java |
学生个人信息 | information.jsp | ||
学生课程搜索 | search.jsp | ||
管理员课程界面 | system.jsp | ||
管理员学生界面 | view_stu.jsp | ||
管理员添加学生 | add_stu.jsp success_add.jsp | ||
管理员添加课程 | add_course.jsp success_add.jsp | ||
管理员删除学生 | del_stu.jsp success_del.jsp | ||
管理员删除课程 | del_course.jsp success_del.jsp | ||
管理员学生搜索 | search_stu.jsp | ||
管理员课程搜索 | search_course.jsp | ||
文件上传 | upload.jsp | ||
文件下载 | - |
4.数据库与数据表的设计与实现
该系统设计的数据表为学生表(stu)、管理员表(tea)和课程表(course)。在MYSQL数据库中,首先创建数据库sel_course,然后再该库下建立学生表(stu)、管理员表(tea)和课程表(course)。
4.1学生表(stu)
表1 学生表(stu)结构
字段名 | 数据类型 | 长度 | 允许为空 | 说明 |
id | int | 11 | 否 | 记录编号,主键 |
stu_id | varchar | 255 | 是 | 学生学号 |
stu_name | varchar | 255 | 是 | 学生姓名 |
stu_password | varchar | 255 | 是 | 学生密码 |
stu_major | varchar | 255 | 是 | 学生专业 |
stu_tel | varchar | 255 | 是 | 学生电话 |
4.2管理员表(tea)
表2 管理员表(tea)结构
字段名 | 数据类型 | 长度 | 允许为空 | 说明 |
id | Int | 11 | 否 | 记录编号,主键 |
tea_id | varchar | 255 | 是 | 管理员工号 |
tea_password | varchar | 255 | 是 | 管理员密码 |
tea_tel | varchar | 255 | 是 | 管理员联系电话 |
4.3课程表(course)
表3 课程表(course)结构
字段名 | 数据类型 | 长度 | 允许为空 | 说明 |
id | int | 11 | 否 | 编号 |
cid | varchar | 20 | 否 | 课程编号,主键 |
cname | varchar | 255 | 是 | 课程名 |
ctea | varchar | 255 | 是 | 课程任课教师 |
ctime | varchar | 255 | 是 | 课程时间 |
cweek | varchar | 255 | 是 | 课程周次 |
cplace | varchar | 255 | 是 | 课程教室 |
cmark | varchar | 255 | 是 | 课程学分 |
cnumber | int | 11 | 是 | 选课人数 |
5.整个应用的组织结构
6.学生选课管理系统的实现
6.1注册页面
6.2学生登录页面
6.3教务管理员登录页面
6.4学生选课页面-在线选课
6.5学生选课页面-我的信息
6.6管理员操作页面-学生列表
6.7管理员操作页面-添加学生
6.8管理员操作页面-删除学生
6.9管理员操作页面-课程列表
6.10管理员操作页面-添加课程
6.11管理员操作页面-删除课程
6.12管理员操作页面-数据导出
7.调试与分析
1.直接运行整个系统时,会直接出现404问题,最后发现是在web.xml中出现了问题。具体代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>test2</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
2.在查询学生信息是出现错误,报空指针异常错误,通过逐步添加打印信息在控制台找到错误代码,在dao包下实现类出现了问题,用list数组查找以后没有把学生类添加到list数组中。具体代码如下:
PreparedStatement pstmt = null;
ResultSet rs = null;
Stu stu2 = new Stu();
String sql = "select * from stu where stu_id=? and stu_password=? ";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, stu.getStu_id());
pstmt.setString(2, stu.getStu_password());
rs=pstmt.executeQuery();
con = (Connection) DBConnection.getConnection();
if (rs.next()) {
stu2.setStu_name(rs.getString("stu_name"));
stu2.setStu_id(rs.getString("stu_id"));}
8.结论与心得体会
这次课程设计是一个学生选课管理系统,包括权限管理、学生信息管理、教师信息管理和课程信息管理等功能模块。然而,在实践过程中,我遇到了一些问题。
最初,我遇到了空指针问题。这些问题主要是由于粗心大意造成的,比如变量名拼写错误、忘记将参数添加到数组中,以及在进行 JSP 页面跳转时出现的问题。通过逐步输出信息进行排查,我最终解决了这些问题。
另外,在实现模糊查询的过程中,我发现查询结果与预期不符。我首先在控制台打印出 SQL 语句,然后将 SQL 语句写入数据库中进行检查,接着检查 Java 语句结构。最终发现问题出在 SQL 语句中的换行部分,由于缺少空格导致查询出错。经过改正后,查询结果变得正确。
通过这次实验,我深入了解了整个程序的开发流程和结构,学会了使用 Struts2 框架来建立 JSP 和 Action 之间的联系。更重要的是,我学会了如何解决程序中出现的问题,了解了问题出现的原因以及如何避免类似问题,积累了宝贵的经验和教训。
然而,这次实验的程序还存在一些不完善之处。例如,学生、管理员和课程的页面没有分页功能,当数据较多时,浏览会变得困难。另外,学生无法申请使用教室,也无法对教师进行评教,因此程序还需要进一步完善。
在这次实验中,我也发现了自己许多不足之处,意识到自己的基础知识掌握并不牢固。因此,我将在以后的学习和工作中注重打好基础知识,只有在牢固的基础上才能不断提高自己,而不应过分追求高难度的内容。
10、项目搭建部分实现细节
Xml配置文件内容如下:
struct.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<include file ="struts_user.xml"/>
<include file ="struts_add.xml"/>
<include file ="struts_del.xml"/>
</struts>
struct_user.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="stuAction" extends = "struts-default">
<action name = "s_login" class = "com.action.user.StuAction" >
<result name = "success">/stu/system.jsp</result>
<result name = "failure">index.html</result>
</action>
<action name = "t_login" class = "com.action.user.TeaAction" >
<result name = "success">/tea/system.jsp</result>
<result name = "failure">index.html</result>
</action>
<action name = "s_register" class = "com.action.user.StuAction" >
<result name = "success">index.html</result>
<result name = "failure">register.jsp</result>
</action>
<action name = "t_register" class = "com.action.user.TeaAction" >
<result name = "success">index.html</result>
<result name = "failure">register.jsp</result>
</action>
</package>
</struts>
struct_add.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="*" extends = "struts-default">
<action name = "add_stu" class = "com.action.user.StuAction" method="Add_stu">
<result name = "success">/tea/success_add.jsp</result>
<result name = "failure">/tea/add_stu.jsp</result>
</action>
<action name = "add_course" class = "com.action.course.CourseAction" method="Add_course">
<result name = "success">/tea/success_add.jsp</result>
<result name = "failure">/tea/add_course.jsp</result>
</action>
</package>
</struts>
struct_del.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="*" extends = "struts-default">
<action name = "del_stu" class = "com.action.user.StuAction" method="Del_stu">
<result name = "success">/tea/succes_del.jsp</result>
<result name = "failure">/tea/add_stu.jsp</result>
</action>
<action name = "del_course" class = "com.action.course.CourseAction" method="Add_course">
<result name = "success">/tea/system.jsp</result>
<result name = "failure">/tea/add_course.jsp</result>
</action>
</package>
</struts>
以上内容为本学期所学内容结合学长(@向前的诚)的内容。