Java+Jsp+MySQL高校选课系统设计与实现(附源码下载地址)
@
目录
01 源码下载
温馨提示:关注微信公众号【IT学长
】,回复关键词“20221022
”下载高校选课系统(courseSelection)完整源码
02 系统概述
学生选课系统是一个学校不可缺少的部分,它能为用户提供充足的信息和快捷的查询手段。管理员可以通过超级用户身份登录,对系统进行全面的管理。学生可以登录系统进行个人信息查询、网上选课等等。
本文设计的高校选课系统是在J2EE平台下开发完成的,采用了B/S模式、MySQL数据库和Tomcat服务器。其具有用户界面简洁友好,操作简单易用,运行稳定可靠,易维护,可扩展等特点,基本达到了设计要求,对同类系统的设计与实现具有一定的参考价值。
03 开发工具及技术选型
- 数据表现层:Jsp+JavaScript+CSS
- 业务逻辑层:Java+Struts
- 数据持久层:MySQL+Hibernate
- 开发工具:IDEA / Eclipse
04 运行环境
JDK1.8 + Tomcat9.0+ MySQL5.7
05 用户分析
本系统主要使用人群为系统管理员、普通读者。
- 系统管理员:管理整个系统的各项功能,如:专业管理、课程管理、信息统计。
- 普通读者:查询基本信息、选择新课程、查询已选课程、修改登录密码。
06 功能分析
系统管理员:
- 专业管理。 列表显示专业编号、专业名称、开设年份、专业学制、是否结业等专业信息。点击添加新专业按钮,填写入学年份、专业名称、学制录入新专业。
- 课程管理。 列表显示专业名称、课程名称 、上课时间、上课地点、课程学分、授课教师、学生是否可选等课程信息。点击增加新课程按钮,填写专业、课程名称、上课时间、上课地点、课程学分、课程介绍、授课教师、教师介绍录入新课程。输入专业、教师名称、课程名称进行条件搜索。
- 统计信息。 统计每个专业下学生选课情况,并且可以导出PDF、Excel文档。
- 修改登录密码。 对个人的登录密码进行修改操作。
- 退出系统。 退出当前登录用户,跳转待登录界面。
普通读者:
- 查询基本信息。 对专业、入学年份、学制、学号、出生日期、联系电话、现住址、家庭地址等基本信息进行查询。
- 选择新课程。 对自己专业下的课程进行选课。
- 查询已选课程。 对已经选择的课程进行查询,按列表显示课程名称、授课教师、学分、上课时间、上课地点等信息。
- 修改登录密码。 对个人的登录密码进行修改操作。
- 退出系统。 退出当前登录用户,跳转待登录界面。
07 数据库设计
tb_course: 用于存储课程信息
字段名称 | 类型 | 是否为NULL | 是否主键 | 说明 |
---|---|---|---|---|
id | int | 否 | 是 | 课程编号 |
name | varchar | 否 | 否 | 课程名称 |
schooltime | varchar | 否 | 否 | 上课时间 |
addr | varchar | 否 | 否 | 上课地点 |
credit | decimal | 否 | 否 | 课程学分 |
courseInfo | varchar | 否 | 否 | 课程介绍 |
teacherName | varchar | 否 | 否 | 老师姓名 |
teacherInfo | varchar | 否 | 否 | 老师介绍 |
isFinish | bit | 否 | 否 | 是否可选 |
specialtyId | int | 否 | 否 | 所属专业编号 |
tb_specialty: 用于存储专业信息
字段名称 | 类型 | 是否为NULL | 是否主键 | 说明 |
---|---|---|---|---|
id | int | 否 | 是 | 专业编号 |
enterYear | varchar | 否 | 否 | 开设年份 |
name | varchar | 否 | 否 | 专业名称 |
langthYear | varchar | 否 | 否 | 专业学制 |
isFinish | bit | 否 | 否 | 是否结业 0:未结业 1:结业 |
tb_stucourse: 用于映射学生与课程之间的关系
字段名称 | 类型 | 是否为NULL | 是否主键 | 说明 |
---|---|---|---|---|
id | int | 否 | 是 | 主键编号 |
stuID | int | 否 | 否 | 学生编号 |
courseID | int | 否 | 否 | 课程编号 |
tb_stuuser: 用于存储学生信息
字段名称 | 类型 | 是否为NULL | 是否主键 | 说明 |
---|---|---|---|---|
id | int | 否 | 是 | 学生编号 |
stuName | varchar | 否 | 否 | 学生姓名 |
stuNo | varchar | 否 | 否 | 学生学号 |
specialtyId | int | 否 | 否 | 学生所学专业编号 |
stuSex | varchar | 否 | 否 | 学生性别 |
birthday | varchar | 否 | 否 | 学生出生年月日 |
homeAddr | varchar | 否 | 否 | 学生家庭地址 |
tel | varchar | 否 | 否 | 学生电话 |
addr | varchar | 否 | 否 | 学生当前居住地址 |
tb_userlogin: 用于存储用户信息
字段名称 | 类型 | 是否为NULL | 是否主键 | 说明 |
---|---|---|---|---|
id | int | 否 | 是 | 用户编号 |
loginName | varchar | 否 | 否 | 用户名 |
pwd | varchar | 否 | 否 | 密码 |
type | varchar | 否 | 否 | 用户类型 1:管理员 2:学生 |
varchar | 否 | 否 | 邮箱 |
08 项目工程结构及说明
工程结构:
目录说明:
目录 | 说明 |
---|---|
com.cya.action | 存放action类,接收前端发来的请求,并将响应结果返回给前端 |
com.cya.dao | 存放dao层接口 |
com.cya.dto | 存放实体类 |
com.cya.tools | 存放工具类 |
WebContent/images | 存放项目所需要的图片文件 |
WebContent/manager | 存放管理员端Jsp文件 |
WebContent/stu | 存放普通用户端(学生)Jsp文件 |
09 部分功能展示及源码
9.1 管理员端--首页
9.2 管理员端--专业管理
专业列表:
添加新专业:
部分源码:
package com.cya.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;
import com.cya.dao.ISpecialtyDao;
import com.cya.dto.Specialty;
/**
* @author 公众号【IT学长】
*/
public class SpecialtyAction extends DispatchAction {
private ISpecialtyDao specialtyDao;
public void setSpecialtyDao(ISpecialtyDao specialtyDao) {
this.specialtyDao = specialtyDao;
}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm specialtyForm = (DynaActionForm) form;
Specialty specialty = new Specialty();
specialty.setIsFinish(false); // 设置是否结业,默认为否
specialty.setName(specialtyForm.getString("name"));
specialty.setEnterYear(specialtyForm.getString("enterYear"));
specialty.setLangthYear(specialtyForm.getString("langthYear"));
specialtyDao.insert(specialty);
findAll(mapping, specialtyForm, request, response);
return mapping.findForward("showSpecialty");
}
/**
* 将专业设置为已结业
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward updateIsFinish(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
Integer id = Integer.valueOf(request.getParameter("id"));
specialtyDao.updateIsFinish(id);
return findAll(mapping, form, request, response);
}
public ActionForward findAll(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
List list = specialtyDao.findByAll();
request.setAttribute("list", list);
return mapping.findForward("showSpecialty");
}
}
9.3 管理员--课程管理
课程列表:
添加新课程:
部分源码:
package com.cya.action;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;
import com.cya.dao.ICourseDao;
import com.cya.dao.ISpecialtyDao;
import com.cya.dto.Course;
import com.cya.dto.Specialty;
/**
* @author 公众号【IT学长】
*/
public class CourseAction extends DispatchAction {
private ISpecialtyDao specialtyDao;
private ICourseDao courseDao;
/**
* @param specialtyDao the specialtyDao to set
*/
public void setSpecialtyDao(ISpecialtyDao specialtyDao) {
this.specialtyDao = specialtyDao;
}
/**
* @param courseDao the courseDao to set
*/
public void setCourseDao(ICourseDao courseDao) {
this.courseDao = courseDao;
}
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm courseForm = (DynaActionForm) form;
Course course = new Course();
course.setName(courseForm.getString("name"));
course.setSchooltime(courseForm.getString("schooltime"));
course.setAddr(courseForm.getString("addr"));
course.setCredit((Short)courseForm.get("credit"));
course.setCourseInfo(courseForm.getString("courseInfo"));
course.setTeacherName(courseForm.getString("teacherName"));
course.setTeacherInfo(courseForm.getString("teacherInfo"));
course.setIsFinish(true); //是否可以选课,默认为可以
course.setSpecialtyId((Integer)courseForm.get("specialtyId"));
courseDao.insert(course);
return findBySearch(mapping, courseForm, request, response);
}
public ActionForward updateIsFinish(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
Integer id = Integer.valueOf(request.getParameter("id"));
courseDao.updateIsFinish(id);
return courseInfo(mapping, form, request, response);
}
public ActionForward findBySearch(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
List<Specialty> sList = specialtyDao.findByAll();
Map<String,String> map = new HashMap<String,String>();
if(request.getParameter("specialtyId")!=null&&!request.getParameter("specialtyId").equals("-1")){
map.put("specialtyId", request.getParameter("specialtyId"));
}
if(request.getParameter("name")!=null&&!request.getParameter("name").equals("")){
map.put("name", request.getParameter("name"));
}
if(request.getParameter("teacherName")!=null&&!request.getParameter("teacherName").equals("")){
map.put("teacherName", request.getParameter("teacherName"));
}
List<Object> clist = courseDao.findBySearch(map);
request.setAttribute("sList", sList);
request.setAttribute("cList", clist);
return mapping.findForward("showCourse");
}
/**
* 进入添加新课程页面
* @param mapping
* @param form
* @param request
* @param response
* @return
*/
public ActionForward showInsert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
List<Specialty> list = specialtyDao.findByAll();
request.setAttribute("list", list);
return mapping.findForward("addCourse");
}
public ActionForward courseInfo(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
Integer id = Integer.valueOf(request.getParameter("id"));
Course course = courseDao.findByID(id);
Specialty specialty = specialtyDao.findById(course.getSpecialtyId());
request.setAttribute("course", course);
request.setAttribute("specialty", specialty);
return mapping.findForward("courseInfo");
}
}
9.4 管理员端--统计信息
信息列表:
选课人员列表:
导出PDF文档:
导出Excel文档:
9.5 普通用户端--基本信息
部分源码:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<title>welcome.jsp</title>
<link rel="stylesheet" type="text/css" href="images/style.css">
</head>
<body>
<table width="845" border="0" cellspacing="0" align="center">
<tr>
<td height="124" colspan="2" background="images/topU.gif"> </td>
</tr>
<tr>
<td width="145" height="500" align="left" valign="top" bgcolor="#E4F0D8">
<jsp:include page="left.jsp"/>
</td>
<td width="700" align="left" valign="top">
<table cellspacing="0" width="600px" align="center">
<tr>
<td height="20" colspan="2"></td>
</tr>
<tr>
<td width="14" background="images/jiantou.jpg"> </td>
<td width="585"><span class="STYLE2">当前位置:</span>用户基本信息</td>
</tr>
<tr>
<td height="8" colspan="2"></td>
</tr>
<tr>
<td height="3" colspan="2" bgcolor="#b1de69"></td>
</tr>
<tr>
<td height="20" colspan="2"></td>
</tr>
</table>
<table width="500" align="center" cellspacing="0">
<tr>
<td height="30" align="right" bgcolor="#e4f0d8" class="td0" width="114">专业名称:</td>
<td align="right" bgcolor="#e4f0d8" class="td0" width="10"> </td>
<td width="9" height="30" align="left" bgcolor="#e4f0d8" class="td0"> </td>
<td width="357" align="left" bgcolor="#e4f0d8" class="td0">${specialty.name}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">入学年份:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${specialty.enterYear}年</td>
</tr>
<tr>
<td height="30" align="right" class="td1">学制:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${specialty.langthYear}年</td>
</tr>
<tr>
<td height="30" align="right" class="td1">姓名:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.stuName}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">学号:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.stuNo}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">性别:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.stuSex}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">出生日期:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.birthday}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">联系电话:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.tel}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">现住址:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.addr}</td>
</tr>
<tr>
<td height="30" align="right" class="td1">家庭地址:</td>
<td height="30" align="right" class="td1"> </td>
<td height="30" class="td2"> </td>
<td height="30" class="td1">${stuUser.homeAddr}</td>
</tr>
</table>
<p>
</td>
</tr>
<tr>
<td style="font-weight: bold;color: green;font-size: 18px;" height="85" colspan="2" align="center" background="images/bottomU.gif"> 【IT学长】,几十套毕业设计项目源码、百G Java面试题</td>
</tr>
</table>
</body>
</html:html>
9.6 普通用户端--已选课程
部分源码:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html:html lang="true">
<head>
<title>selected.jsp</title>
<link rel="stylesheet" type="text/css" href="images/style.css">
</head>
<body>
<table width="845" cellspacing="0" align="center">
<tr>
<td height="124" colspan="2" background="images/topU.gif"> </td>
</tr>
<tr>
<td width="150" height="500" align="left" valign="top" bgcolor="#E4F0D8">
<jsp:include page="left.jsp"/>
</td>
<td align="left" valign="top">
<table cellspacing="0" width="600px" align="center">
<tr>
<td height="20" colspan="2"></td>
</tr>
<tr>
<td width="14" background="images/jiantou.jpg"> </td>
<td width="585"><span class="STYLE2">当前位置:</span>查询已选课程</td>
</tr>
<tr>
<td height="8" colspan="2"></td>
</tr>
<tr>
<td height="3" colspan="2" bgcolor="#b1de69"></td>
</tr>
<tr>
<td height="20" colspan="2"></td>
</tr>
</table>
<table width="500" align="center" cellspacing="0">
<tr>
<td height="30" align="center" class="td0"><strong>课程名称</strong></td>
<td align="center" class="td0"><strong>授课教师</strong></td>
<td align="center" class="td0"><strong>学分</strong></td>
<td align="center" class="td0"><strong>上课时间</strong></td>
<td align="center" class="td0"><strong>上课地点</strong></td>
</tr>
<logic:iterate id="list" name="list">
<tr>
<td height="30" align="center" class="td1">
<html:link page="/stuUser.do?method=courseInfo&id=${list[1].id}&path=selected">
${list[1].name}</html:link></td>
<td align="center" class="td1">${list[1].teacherName}</td>
<td align="center" class="td1">${list[1].credit }</td>
<td align="center" class="td1">${list[1].schooltime}</td>
<td align="center" class="td1">${list[1].addr}</td>
</tr>
</logic:iterate>
</table>
</td>
</tr>
<tr>
<td style="font-weight: bold;color: green;font-size: 18px;" height="85" colspan="2" align="center" background="images/bottomU.gif"> 【IT学长】,几十套毕业设计项目源码、百G Java面试题</td>
</tr>
</table>
</body>
</html:html>
9.7 用户登录
部分源码:
package com.cya.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import com.cya.dao.ISpecialtyDao;
import com.cya.dao.IStuUserDao;
import com.cya.dao.IUserLoginDao;
import com.cya.dto.Specialty;
import com.cya.dto.StuUser;
import com.cya.dto.UserLogin;
/**
* @author 公众号【IT学长】
*/
public class UserLoginAction extends Action {
private IUserLoginDao userLoginDao;
private IStuUserDao stuUserDao;
private ISpecialtyDao specialtyDao;
public void setSpecialtyDao(ISpecialtyDao specialtyDao) {
this.specialtyDao = specialtyDao;
}
public void setStuUserDao(IStuUserDao stuUserDao) {
this.stuUserDao = stuUserDao;
}
public void setUserLoginDao(IUserLoginDao userLoginDao) {
this.userLoginDao = userLoginDao;
}
/**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm userLoginForm = (DynaActionForm) form;
UserLogin userLogin = userLoginDao.findbyNameAndPwd(userLoginForm
.getString("loginName"), userLoginForm.getString("pwd"));
if (userLogin == null) {
request.setAttribute("error", "用户登录失败,用户名或密码不正确!");
return mapping.findForward("index");
} else {
request.getSession().setAttribute("loginName",
userLogin.getLoginName());
request.getSession().setAttribute("id", userLogin.getId());
if (userLogin.getType().equals("1")) {
System.out.println("管理员登录");
return mapping.findForward("manager");
} else {
// 判断学生有没有填写过基本信息
StuUser stuUser = stuUserDao.findById(userLogin.getId());
if (stuUser == null) {
List<Specialty> list = specialtyDao.findStuByAll();
request.setAttribute("list", list);
return mapping.findForward("addStuInfo");
} else {
Specialty specialty = specialtyDao.findById(stuUser
.getSpecialtyId());
request.setAttribute("specialty", specialty);
request.setAttribute("stuUser", stuUser);
return mapping.findForward("welcome");
}
}
}
}
}
10 运行教程
- 下载安装Java(JDK1.8)、MySQL(MySQL5.7)、Tomcat(Tomcat9.0)
- 下载本系统源代包
- 将源码包中
db_course_selection.sql
导入MySQL - 将下载好的源码导入Eclipse/IDEA开发工具中
- 修改
courseSelection/WebContent/applicationContext.xml
- 配置Tomcat
- 启动服务,浏览器输入
http://localhost:8080/courseSelection
本期内容就到这里,感谢你的阅读,下载本系统完整源码请微信搜索下方名片
,回复“20221022
”。关键词一定要输完整、输对哦!!
最后,推荐加入学长的知识星球,里面有十几套Java精选项目,适合用于毕业设计、课程设计、程序小白入门级练手项目。