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 功能分析

系统管理员:

  1. 专业管理。 列表显示专业编号、专业名称、开设年份、专业学制、是否结业等专业信息。点击添加新专业按钮,填写入学年份、专业名称、学制录入新专业。
  2. 课程管理。 列表显示专业名称、课程名称 、上课时间、上课地点、课程学分、授课教师、学生是否可选等课程信息。点击增加新课程按钮,填写专业、课程名称、上课时间、上课地点、课程学分、课程介绍、授课教师、教师介绍录入新课程。输入专业、教师名称、课程名称进行条件搜索。
  3. 统计信息。 统计每个专业下学生选课情况,并且可以导出PDF、Excel文档。
  4. 修改登录密码。 对个人的登录密码进行修改操作。
  5. 退出系统。 退出当前登录用户,跳转待登录界面。

普通读者:

  1. 查询基本信息。 对专业、入学年份、学制、学号、出生日期、联系电话、现住址、家庭地址等基本信息进行查询。
  2. 选择新课程。 对自己专业下的课程进行选课。
  3. 查询已选课程。 对已经选择的课程进行查询,按列表显示课程名称、授课教师、学分、上课时间、上课地点等信息。
  4. 修改登录密码。 对个人的登录密码进行修改操作。
  5. 退出系统。 退出当前登录用户,跳转待登录界面。

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:学生
mail 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">&nbsp;</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">&nbsp;</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">&nbsp;</td>
				<td width="9" height="30" align="left" bgcolor="#e4f0d8" class="td0">&nbsp;</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">&nbsp;</td>
				<td height="30" class="td2">&nbsp;</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">&nbsp;</td>
			  <td height="30" class="td2">&nbsp;</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">&nbsp;</td>
				<td height="30" class="td2">&nbsp;</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">&nbsp;</td>
			  <td height="30" class="td2">&nbsp;</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">&nbsp;</td>
				<td height="30" class="td2">&nbsp;</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">&nbsp;</td>
			  <td height="30" class="td2">&nbsp;</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">&nbsp;</td>
				<td height="30" class="td2">&nbsp;</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">&nbsp;</td>
				<td height="30" class="td2">&nbsp;</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">&nbsp;</td>
				<td height="30" class="td2">&nbsp;</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">&nbsp;【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">&nbsp;</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">&nbsp;</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">&nbsp;【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 运行教程

  1. 下载安装Java(JDK1.8)、MySQL(MySQL5.7)、Tomcat(Tomcat9.0)
  2. 下载本系统源代包
  3. 将源码包中db_course_selection.sql导入MySQL
  4. 将下载好的源码导入Eclipse/IDEA开发工具中
  5. 修改courseSelection/WebContent/applicationContext.xml

  1. 配置Tomcat
  2. 启动服务,浏览器输入http://localhost:8080/courseSelection

本期内容就到这里,感谢你的阅读,下载本系统完整源码请微信搜索下方名片,回复“20221022”。关键词一定要输完整、输对哦!!

最后,推荐加入学长的知识星球,里面有十几套Java精选项目,适合用于毕业设计、课程设计、程序小白入门级练手项目。

posted @ 2023-11-05 17:54  IT学长a  阅读(161)  评论(0编辑  收藏  举报