基于jsp+servlet+mybatis的简易在线选课系统

目录

一.数据库

1.数据库和表的创建

2.数据插入 

二.代码实现

1.pojo类

(1)Course

(2)User

(3)Elective

 2.mapper接口

 (1)UserMapper

(2)ElectiveMapper

(3)CourseMapper

3.sevlet 

(1)LoginServlet:登录处理

(2)IndexServlet:用户主页面处理

(3)ChooseServlet:对选课请求的处理

 (4)ViewCourseServlet:选课结果相关数据处理

(5)addCourseServlet:处理添加课程的请求

4.utils工具类

(1)SqlSessionUtil

5.resource

 (1)mybatis-config.xml

(2)CourseMapper.xml

(3) jdbc.propetise

(4)log4j.propertise

6.jsp页面

(1)login.jsp:登录页面

(2)chooseList.jsp:学生选课页面、教师浏览学生选课情况

(3)viewCourse.jsp :选课结果一览

 (4)addCourse.jsp

(5)error.jsp

三.实施结果

1.学生:

​2.老师:

四.系统测试


一.数据库

根据实训题目中给出的表间关系图、数据表结构设计、数据说明等等信息,可创建数据库如下:

1.数据库和表的创建

CREATE DATABASE xuanke;
-- 创建用户表
CREATE TABLE USER (username VARCHAR(20) PRIMARY KEY NOT NULL,PASSWORD VARCHAR(20) NOT NULL,realname VARCHAR(20) NOT NULL,ROLE CHAR(1) NOT NULL CHECK (ROLE IN ('0', '1'))
);-- 创建课程表
CREATE TABLE course (course_id CHAR(6) PRIMARY KEY NOT NULL,course_name VARCHAR(40) NOT NULL,teacher VARCHAR(40) NOT NULL,`point` INT NOT NULL,time_1 CHAR(2) NOT NULL CHECK (time_1 BETWEEN '11' AND '55'),time_2 CHAR(2) NOT NULL CHECK (time_2 BETWEEN '11' AND '55'),location VARCHAR(40) NOT NULL,limited INT NOT NULL CHECK (limited >= 0)
);-- 创建选课表
CREATE TABLE elective (username VARCHAR(20) NOT NULL,course_id CHAR(6) NOT NULL,PRIMARY KEY (username, course_id),FOREIGN KEY (username) REFERENCES USER(username),FOREIGN KEY (course_id) REFERENCES course(course_id)
);

2.数据插入 

-- 插入数据到用户表(USER):
INSERT INTO USER (username, PASSWORD, realname, ROLE)
VALUES ('user1', 'password1', '张三', '1');INSERT INTO USER (username, PASSWORD, realname, ROLE)
VALUES ('user2', 'password2', '李四', '0');INSERT INTO USER (username, PASSWORD, realname, ROLE)
VALUES ('user3', 'password3', '王五', '0');-- 插入数据到课程表(course)
INSERT INTO course (course_id, course_name, teacher, POINT, time_1, time_2, location, limited)
VALUES ('C001', '数学', '张老师', 3, '12', '14', '教室A', 50);INSERT INTO course (course_id, course_name, teacher, POINT, time_1, time_2, location, limited)
VALUES ('C002', '英语', '李老师', 2, '11', '13', '教室B', 40);INSERT INTO course (course_id, course_name, teacher, POINT, time_1, time_2, location, limited)
VALUES ('C003', '物理', '王老师', 3, '15', '17', '教室C', 60);-- 插入数据到选课表(elective):
INSERT INTO elective (username, course_id)
VALUES ('user1', 'C001');INSERT INTO elective (username, course_id)
VALUES ('user1', 'C002');INSERT INTO elective (username, course_id)
VALUES ('user2', 'C001');

二.代码实现

1.pojo类

(1)Course

此处使用parseTime方法实现题目要求中的数据说明与用户页面的time的转换

package com.hjj.pojo;import lombok.Data;/*** @author:嘉佳 Date:2023/11/27 23:30**/
@Data
public class Course {private String courseId;private String courseName;private String teacher;private int point;private String time1;private String time2;private String location;private int limited;private int choose;public void setTime1(String time1) {this.time1 = parseTime(time1);}public void setTime2(String time2) {this.time2 = parseTime(time2);}public String parseTime(String unTime) {int x = Integer.parseInt(unTime);String time = "星期";switch (x / 10) {case 1:time += "一";break;case 2:time += "二";break;case 3:time += "三";break;case 4:time += "四";break;case 5:time += "五";break;}switch (x % 10) {case 1:time += "8:05~9:50";break;case 2:time += "10:15~12:00";break;case 3:time += "13:35~15:20";break;case 4:time += "15:45~17:30";break;case 5:time += "18:30~20:45";break;}return time;}
}

(2)User

package com.hjj.pojo;import lombok.Data;/*** @author:嘉佳 Date:2023/11/27 23:29**/
@Data
public class User {private String username;private String password;private String realName;private char role;
}

(3)Elective

package com.hjj.pojo;import lombok.Data;/*** @author:嘉佳 Date:2023/11/27 23:30**/
@Data
public class Elective {private String username;private String courseId;
}

 2.mapper接口

mapper接口中方法名要与映射文件中的sql的id保持一致

使用 MyBatis 框架的注解方式执行 SQL

 (1)UserMapper

package com.hjj.mapper;
import com.hjj.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;/*** @author:嘉佳 Date:2023/12/1 17:40**/
@Mapper
public interface UserMapper {@Select("select * from user where username = #{username} and password = #{password} and role = #{role}")User selectAdminByNameAndPassword(@Param("username") String username, @Param("password") String password, @Param("role") Integer role);@Insert("insert into user(username,password,realname,role) values(#{username},#{password},#{realname},#{role})")void insertUser(@Param("username") String username,@Param("password") String password,@Param("realname") String realName,@Param("role") Integer role);
}

(2)ElectiveMapper

package com.hjj.mapper;import com.hjj.pojo.Course;
import com.hjj.pojo.Elective;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.util.List;/*** @author:嘉佳 Date:2023/12/3 23:54**/
public interface ElectiveMapper {@Select("SELECT COUNT(*) FROM elective \n" +"WHERE username=#{username} AND course_id=#{course_id}")Integer selectCourse(@Param("username") String username, @Param("course_id") String courseId);@Select("SELECT * FROM elective e LEFT JOIN course c ON c.course_id  = e.course_id \n" +"WHERE e.username = #{username}")List<Course> selectElective(@Param("username") String username);@Insert("insert into elective(username,course_id) values(#{username},#{course_id})")void insertElect(@Param("username") String username, @Param("course_id") String courseId);}

(3)CourseMapper

package com.hjj.mapper;import com.hjj.pojo.Course;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;import java.time.LocalDateTime;
import java.util.List;/*** @author:嘉佳 Date:2023/12/1 23:54**/
public interface CourseMapper {@Select("select * from course")List<Course> selectAll();@Select("SELECT * FROM course c LEFT JOIN `user` u ON c.teacher = u.realname WHERE username = #{teacher}")List<Course> selectByTeacher(@Param("teacher")String teacher);@Select("SELECT COUNT(e.username) AS selected_count FROM course c\n" +"LEFT JOIN elective e ON c.course_id = e.course_id\n" +"WHERE c.course_id = #{courseId} GROUP BY c.course_id, c.course_name;\n")int countChoose(@Param(("courseId"))String courseId);@Select("select * from course where teacher = #{teacher}")List<Course> selectCourseByName(@Param("teacher") String teacher);@Insert("insert into course(course_id,course_name,teacher,POINT,time_1,time_2,location,limited) " +"values (#{courseId},#{name},#{teacher},#{point},#{time_1},#{time_2},#{location},#{limited})")void insertCourse(@Param("courseId") String courseId, @Param("name") String name, @Param("teacher") String teacher, @Param("point") Integer point, @Param("time_1") String time_1, @Param("time_2")String time_2, @Param("location")String location, @Param("limited")Integer limited);}

3.sevlet 

(1)LoginServlet:登录处理

功能:验证用户的输入是否正确,验证输入信息的完整性,然后使用 Mybatis 进行数据库查询操作,如果查询结果不为空则表示登录成功并跳转到主页面,在验证角色时角色编码设置为 0、1。

package com.hjj.servlet;/*** @author:嘉佳 Date:2023/11/27 12:40**///import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.hjj.mapper.UserMapper;
import com.hjj.pojo.User;
import com.hjj.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/login01")
public class LoginServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");response.setCharacterEncoding("UTF-8");// 从表单获取输入的用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");String role = request.getParameter("role");request.getSession().setAttribute("username", username);request.getSession().setAttribute("roleType", role);int roleCode = 0;if (role.equals("teacher")) {roleCode = 1;}// 验证用户名和密码是否为空if (username == null || username.isEmpty() || password == null || password.isEmpty()) {request.getRequestDispatcher("xuanke/error.jsp").forward(request, response);}SqlSession sqlSession = SqlSessionUtil.getSqlSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);User user = mapper.selectAdminByNameAndPassword(username, password, roleCode);if (user == null) {request.getRequestDispatcher("xuanke/error.jsp").forward(request, response);} else {request.getRequestDispatcher("indexServlet").forward(request, response);}}
}

(2)IndexServlet:用户主页面处理

针对不同用户设置相关信息,这样不用单独写多个servlet处理多个不同类型用户

功能:获取当前用户的角色类型,并根据用户的角色类型使用 Mybatis 进行不同的数据库查询操作,从而获取课程列表信息。

package com.hjj.servlet;import com.hjj.mapper.CourseMapper;
import com.hjj.pojo.Course;
import com.hjj.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;/*** @author:嘉佳 Date:2023/12/4 0:02**/
@WebServlet("/indexServlet")
public class IndexServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");resp.setCharacterEncoding("UTF-8");SqlSession sqlSession = SqlSessionUtil.getSqlSession();CourseMapper mapper = sqlSession.getMapper(CourseMapper.class);HttpSession session = req.getSession();List<Course> courseList=null;String roleType = session.getAttribute("roleType").toString();if(roleType.equals("student")){courseList = mapper.selectAll();}else{courseList=mapper.selectByTeacher((String) session.getAttribute("username"));}for (int i = 0; i < courseList.size(); i++) {int countChoose = mapper.countChoose(courseList.get(i).getCourseId());courseList.get(i).setChoose(countChoose);}req.setAttribute("lists", courseList);System.out.println("o");req.getRequestDispatcher("xuanke/chooseList.jsp").forward(req, resp);}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}
}

(3)ChooseServlet:对选课请求的处理

 功能:检验课程是否已选并将数据添加至数据库

package com.hjj.servlet;import com.hjj.mapper.CourseMapper;
import com.hjj.mapper.ElectiveMapper;
import com.hjj.pojo.Course;
import com.hjj.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** @author:嘉佳 Date:2023/12/4 15:49**/
@WebServlet("/chooseServlet")
public class ChooseServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");resp.setCharacterEncoding("UTF-8");String courseId = req.getParameter("courseId");String username = req.getParameter("username");SqlSession sqlSession = SqlSessionUtil.getSqlSession();ElectiveMapper mapper = sqlSession.getMapper(ElectiveMapper.class);Integer course = mapper.selectCourse(username, courseId);if (course > 0) {req.setAttribute("errorMessage", "请勿选择已选课程");} else {System.out.println(course);mapper.insertElect(username, courseId);sqlSession.commit();sqlSession.close();req.setAttribute("errorMessage", "选课成功");}req.getRequestDispatcher("/indexServlet").forward(req, resp);}
}

 (4)ViewCourseServlet:选课结果相关数据处理

功能:查询本人已选课程,计算已选学分

package com.hjj.servlet;import com.hjj.mapper.ElectiveMapper;
import com.hjj.pojo.Course;
import com.hjj.pojo.Elective;
import com.hjj.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** @author:嘉佳 Date:2023/12/5 22:02**/
@WebServlet("/viewCourseServlet")
public class ViewCourseServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");resp.setCharacterEncoding("UTF-8");String username = (String) req.getSession().getAttribute("username");System.out.println(username);SqlSession sqlSession = SqlSessionUtil.getSqlSession();ElectiveMapper mapper = sqlSession.getMapper(ElectiveMapper.class);List<Course> electives = mapper.selectElective(username);//        计算已选学分int points=0;for (Course elective:electives){points+=elective.getPoint();}req.setAttribute("totalPoint",points);req.setAttribute("lists",electives);req.getRequestDispatcher("xuanke/viewCourse.jsp").forward(req,resp);}
}

(5)addCourseServlet:处理添加课程的请求

功能:获取前端传递过来的课程信息,将用户输入的信息录入数据库

package com.hjj.servlet;import com.hjj.mapper.CourseMapper;
import com.hjj.pojo.Course;
import com.hjj.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;/*** @author:嘉佳 Date:2023/11/28 12:24**/
@WebServlet("/addCourseServlet")
public class addCourseServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");resp.setCharacterEncoding("UTF-8");String courseId = req.getParameter("courseId");System.out.println(courseId);String courseName = req.getParameter("courseName");String teacherName = req.getParameter("teacherName");String credits = req.getParameter("credits");String classLocation = req.getParameter("classLocation");String maxStudents = req.getParameter("maxStudents");String weekday1 = req.getParameter("weekday1");String time1 = req.getParameter("time1");String weekday2 = req.getParameter("weekday2");String time2 = req.getParameter("time2");System.out.println(weekday1+time1);String classTime1=weekday1+time1;String classTime2=weekday2+time2;SqlSession sqlSession = SqlSessionUtil.getSqlSession();CourseMapper mapper = sqlSession.getMapper(CourseMapper.class);mapper.insertCourse(courseId,courseName,teacherName,Integer.parseInt(credits),classTime1,classTime2,classLocation,Integer.parseInt(maxStudents));sqlSession.commit();sqlSession.close();req.setAttribute("errorMessage","添加成功");req.getRequestDispatcher("indexServlet").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

4.utils工具类

(1)SqlSessionUtil

功能:获取一个SqlSession对象,以便后续进行数据库操作。

package com.hjj.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;/*** @author:嘉佳 Date:2023/3/22 15:52**/
public class SqlSessionUtil {public static SqlSession getSqlSession(){SqlSession sqlSession=null;try {
//        获取核心配置文件(读取配置信息)的输入流InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//        获取SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
//        获取SqlSessionFactory对象(从文件或输入流中读取配置)SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//        获取sql的会话对象SqlSession-》Mybatis提供的操作数据库的对象sqlSession=sqlSessionFactory.openSession(true);} catch (IOException e) {e.printStackTrace();}return sqlSession;}
}

5.resource

 (1)mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="jdbc.properties"/><settings><setting name="logImpl" value="LOG4J"/><!--  开启自动驼峰命名规则映射  --><setting name="mapUnderscoreToCamelCase" value="true"/></settings><!--type:设置需要起别名的类型alias:设置某个类型的别名
--><typeAliases><package name="com.hjj.pojo"/></typeAliases><!--配置连接数据库的环境 --><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!--  引入映射文件--><mappers><package name="com.hjj.mapper"/></mappers>
</configuration>

(2)CourseMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--命名空间的作用:在 MyBatis 的配置中引用 Mapper 接口或 XML 文件,以实现数据库操作的映射-->
<mapper namespace="com.hjj.mapper.CourseMapper"></mapper>

其他两个只是改了

<mapper namespace="com.hjj.mapper.XXMapper">

(3) jdbc.propetise

数据库连接的相关配置信息

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=按自己
jdbc.username=按自己
jdbc.password=按自己

(4)log4j.propertise

log4j.rootLogger=DEBUG,console,filelog4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%nlog4j.appender.file = org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=./log/mybatis.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%nlog4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

6.jsp页面

(1)login.jsp:登录页面

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Login</title><link rel="stylesheet" type="text/css" href="css/styles.css">
</head>
<body>
<h1>用户登录</h1><form action="${pageContext.request.contextPath}/login01" method="post"><label for="username">用户名:</label><input type="text" name="username" id="username"><br><br><label for="password">密码:</label><input type="password" name="password" id="password"><br><br><label for="role">角色:</label><select name="role" id="role" required><option value="teacher">Teacher</option><option value="student">Student</option></select><br><br><input type="submit" value="登录"><input type="reset" value="清除">
</form>
</body>
</html>

(2)chooseList.jsp:学生选课页面、教师浏览学生选课情况

<%--Created by IntelliJ IDEA.User: ALASIJIADate: 2023/12/4Time: 0:12To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page isELIgnored="false" %>
<html>
<head><title>选择课程</title>
<%--    --%>
<%--    <%--%>
<%--        String path = request.getContextPath();--%>
<%--        String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/css/choose.css";--%>
<%--    %>--%><link rel="stylesheet" href="xuanke/css/choose.css" />
<%--    <link rel="stylesheet" type="text/css" href="css/choose.css">--%>
</head>
<body>
<div><c:if test="${roleType=='student'}"><p>选课界面</p><p>你可以选择的课程列表如下(灰色按钮代表选课人数已满)</p><a href="${pageContext.request.contextPath}/viewCourseServlet">课程情况一览</a></c:if><c:if test="${roleType=='teacher'}"><p>选课情况</p><a href="${pageContext.request.contextPath}/xuanke/addCourse.jsp">添加新课程</a></c:if><a href="xuanke/login.jsp">退出登录</a>
</div>
<p style="color: red">${errorMessage }</p>
<div id="box"><table><thead><tr><th>课程编号</th><th>课程名称</th><th>授课老师</th><th>学分</th><th>上课时间</th><th>上课地点</th><th>限选人数</th><th>已选人数</th><c:if test="${roleType=='student'}"><th>操作</th></c:if></tr></thead><tbody><c:forEach items="${lists}" var="list"><tr><td>${list.courseId}</td><td>${list.courseName}</td><td>${list.teacher}</td><td>${list.point}</td><td>${list.time1}<br>${list.time2}</td><td>${list.location}</td><td>${list.limited}</td><td>${list.choose}</td><c:if test="${roleType=='student'}"><td><form action="${pageContext.request.contextPath}/chooseServlet" method="post"><input type="hidden" name="courseId" value="${list.courseId}"><input type="hidden" name="username" value="${sessionScope.username}"><input type="submit" value="选课" id="submit"></form></td></c:if></tr></c:forEach></tbody></table>
</div>
</body>
</html>

(3)viewCourse.jsp :选课结果一览

<%--Created by IntelliJ IDEA.User: ALASIJIADate: 2023/12/5Time: 21:17To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page isELIgnored="false" %>
<html>
<head><title>选课结果</title><link rel="stylesheet" href="xuanke/css/choose.css" />
</head>
<body>
<div><p>选课结果一览</p><a href="${pageContext.request.contextPath}/indexServlet">继续选课</a><a href="${pageContext.request.contextPath}/xuanke/login.jsp">退出登录</a>
</div>
<p>您已选择的课程列表如下:</p>
<div id="box"><table><thead><tr><th>课程编号</th><th>课程名称</th><th>授课老师</th><th>学分</th><th>上课时间</th><th>上课地点</th><th>操作</th></tr></thead><tbody><c:forEach items="${lists}" var="list"><tr><td>${list.courseId}</td><td>${list.courseName}</td><td>${list.teacher}</td><td>${list.point}</td><td>${list.time1}<br>${list.time2}</td><td>${list.location}</td><td><form action="${pageContext.request.contextPath}/chooseServlet" method="post"><input type="hidden" name="courseId" value="${list.courseId}"><input type="hidden" name="username" value="${sessionScope.username}"><input type="submit" value="退课" id="submit"></form></td></tr></c:forEach></tbody></table><c:if test="${empty lists}"><p>无选课记录</p></c:if><c:if test="${not empty lists}"><p>您当前选课总学分为:${totalPoint}</p></c:if>
</div>
</body>
</html>

 (4)addCourse.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page isELIgnored="false" %>
<html>
<head><title>添加课程</title>
<%--    <link rel="stylesheet" href="xuanke/css/choose.css" />--%><link rel="stylesheet" href="css/addCourse.css" />
</head>
<body>
<div><p>添加课程</p><p>请输入新课程详细信息,并点击添加课程:</p><a href="${pageContext.request.contextPath}/indexServlet">课程情况一览</a><a href="${pageContext.request.contextPath}/xuanke/login.jsp">退出登录</a>
</div>
<form action="${pageContext.request.contextPath}/addCourseServlet" method="post"><label for="courseId">课程ID:</label><input type="text" id="courseId" name="courseId" required><br><!-- 课程名称 --><label for="courseName">课程名称:</label><input type="text" id="courseName" name="courseName" required><br><!-- 教师姓名 --><label for="teacherName">教师姓名:</label><input type="text" id="teacherName" name="teacherName" required><br><!-- 学分 --><label for="credits">学分:</label><input type="text" id="credits" name="credits" required><br><!-- 上课地点 --><label for="classLocation">上课地点:</label><input type="text" id="classLocation" name="classLocation" required><br><!-- 限制人数 --><label for="maxStudents">限制人数:</label><input type="number" id="maxStudents" name="maxStudents" required><br><!-- 上课时间第一次 -->
<%--    <label for="classTime1">上课时间(第一次):</label>--%>
<%--    <input type="datetime-local" id="classTime1" name="classTime1" required><br>--%><span>上课时间(第一次):</span><label for="weekday1">选择星期:</label><select name="weekday1" id="weekday1"><option value="1">星期一</option><option value="2">星期二</option><option value="3">星期三</option><option value="4">星期四</option><option value="5">星期五</option></select><label for="time1">选择上课时间段:</label><select name="time1" id="time1"><option value="1">8:05~9:50</option><option value="2">10:15~12:00</option><option value="3">13:35~15:20</option><option value="4">15:45~17:30</option><option value="5">18:30~20:45</option></select><br><br><!-- 上课时间第二次 --><span>上课时间(第二次):</span><label for="weekday2">选择星期:</label><select name="weekday2" id="weekday2"><option value="1">星期一</option><option value="2">星期二</option><option value="3">星期三</option><option value="4">星期四</option><option value="5">星期五</option></select><label for="time2">选择上课时间段:</label><select name="time2" id="time2"><option value="1">8:05~9:50</option><option value="2">10:15~12:00</option><option value="3">13:35~15:20</option><option value="4">15:45~17:30</option><option value="5">18:30~20:45</option></select><br><br><!-- 提交按钮 --><input type="submit" value="添加课程">
</form>
</body>
</html>

(5)error.jsp

<%--Created by IntelliJ IDEA.User: ALASIJIADate: 2023/11/27Time: 13:20To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title><script type="text/javascript">window.onload = function() {var confirmed = confirm("用户名或密码有误");if (confirmed) {window.location.href = "xuanke/login.jsp";}};</script>
</head>
<body></body>
</html>

三.实施结果

1.学生:

2. 老师:

登录页面与学生相同

四.系统测试

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vs 安装 qt qt扩展 改迅雷下载qt

Qt5.14.2安装教程和VS2019中的qt环境配置-CSDN博客 1 安装qt 社区版 免费 Download Qt OSS: Get Qt Online Installer 2 vs安装 qt vs tools 3 vs添加 qt添加 bin/cmake.exe 路径 3.1 扩展 -> qt versions 3.2 4 新版要源码安装 需要自己安装 安装独立安装的旧版 官网…

D. Jumping Through Segments

显然是一个二分答案&#xff0c;关键是怎么搞判断函数&#xff1f; 我们维护合法的降落区间就好了~ // Problem: D. Jumping Through Segments // Contest: Codeforces - Codeforces Round 913 (Div. 3) // URL: https://codeforces.com/contest/1907/problem/D // Memory Li…

car relative position

如何判断你驾驶的车在路上是否居中 车辆相对位置判断&#xff0c;参考 右侧和路边线交点 看右后视镜&#xff0c;看下大概和边线相差多少

SQL手工注入漏洞测试(Sql Server数据库)-墨者

———靶场专栏——— 声明&#xff1a;文章由作者weoptions学习或练习过程中的步骤及思路&#xff0c;非正式答案&#xff0c;仅供学习和参考。 靶场背景&#xff1a; 来源&#xff1a; 墨者学院 简介&#xff1a; 安全工程师"墨者"最近在练习SQL手工注入漏洞&#…

详解nginx优势以及应用场景,实操编译安装和nginx版本平滑升级

目录 一、nginx的特点 那么nginx有哪些特点&#xff1f; 先讲nginx的优点&#xff1a; 缺点&#xff1a; 二、nginx与Apache的区别 三、nginx的应用场景 四、nginx为什么能支持高并发 五、为什么nginx不使用多线程 六、nginx的两种进程分别有什么作用 七、编译安装ngi…

二叉搜索树——模拟

对于一个无穷的满二叉排序树&#xff08;如图&#xff09;&#xff0c;节点的编号是1,2,3&#xff0c;…。对于一棵树根为X的子树&#xff0c;沿着左节点一直往下到最后一层&#xff0c;可以获得该子树编号最小的节点&#xff1b;沿着右节点一直往下到最后一层&#xff0c;可以…

【办公软件】Win10/Win11复制粘贴必须刷新才能显示

更换了新的一台电脑&#xff0c;但是发现新建文件夹或是复制粘贴文件时&#xff0c;不管是在桌面还是在其他磁盘中都需要右击刷新一下才显示。让人很郁闷&#xff0c;比如新建一个文件夹不显示以为没有新建成功&#xff0c;导致重复建了好几个。 如何解决&#xff1f; 使用Wi…

一步解决 java.io.FileNotFoundException: 找不到文件异常

1.问题描述 java.io.FileNotFoundException: C:\Users\Administrator\AppData\Local\Temp\localhost\uploads\image\20231206\2843cb16-9654-4e52-a757-76e3ca1f80ff.png (系统找不到指定的路径。) 2.原因分析 文件路径中的文件目录不存在 3.解决方案 方案一&#xff1a;如果…

行业研究:2023年中国游戏陪玩行业市场现状分析

近年来随着我国游戏行业的不断发展&#xff0c;我国游戏用户规模也是随着稳步上升&#xff0c;给游戏陪玩行业带来了稳定的用户基础。在用户规模增长的同时&#xff0c;随着经济、文化的快速发展&#xff0c;我国娱乐技能社交也随之逐渐兴起。而作为我国娱乐技能社交比重较大的…

Vue学习计划-Vue2--Vue核心(七)生命周期

抛出问题&#xff1a;一进入页面就开启一个定时器&#xff0c;每隔1秒count就加1&#xff0c;如何实现 示例&#xff1a; <body> <div id"app">{{ n }}<button click"add">执行</button> </div><script>let vm new …

一文搞懂Git版本控制系统

1. Git简介 当涉及到软件开发或协作时&#xff0c;版本管理是一个不可或缺的概念。无论你是一个独立开发者还是一个团队成员&#xff0c;都会遇到需要跟踪和管理代码变更的情况。这时候&#xff0c;Git作为一个强大而流行的版本控制系统就发挥着重要的作用。 Git&#xff08;读…

玩转大数据9:机器学习在大数据分析中的应用

1. 引言 在大数据时代&#xff0c;机器学习在大数据分析中扮演着至关重要的角色。本文介绍机器学习在大数据分析中的重要性和应用场景&#xff0c;并探讨Java中可用的机器学习库和框架。 2. 机器学习的基本概念和算法 机器学习是当今人工智能领域的一个关键分支&#xff0c;…

智慧园区可视化综合管理平台建设方案,智能化、数字化才是关键

园区作为城市的基本单元&#xff0c;是经济发展的重要载体。随着我国经济的快速发展&#xff0c;各类工业园区、办公园区等园区的规划建设也越来越多。伴随着互联网新兴技术的发展和应用&#xff0c;智慧园区已成为当今城市规划和社会发展的关注焦点&#xff0c;今天我们来介绍…

实战oj题——设计循环队列

前言&#xff1a;今天我们来实现循环队列。 各个接口的实现 创建队列&#xff1a; typedef struct {int* a;int front;int back;int k;} MyCircularQueue;我们的队列是由数组储存的&#xff0c;所以我们队列中得定义一个数组&#xff0c;front代表我们的首元素&#xff0c;ba…

腾讯云轻量应用服务器怎么安装BT宝塔面板?

腾讯云轻量应用服务器宝塔面板怎么用&#xff1f;轻量应用服务器如何安装宝塔面板&#xff1f;在镜像中选择宝塔Linux面板腾讯云专享版&#xff0c;在轻量服务器防火墙中开启8888端口号&#xff0c;然后远程连接到轻量服务器执行宝塔面板账号密码查询命令&#xff0c;最后登录和…

Gti GUI添加标签

通过Git Gui打开项目&#xff0c;通过菜单打开分支历史&#xff0c;我这里是名为"develop"的分支 选中需要打标签的commit&#xff0c;右键-Create tag即可 但貌似无法删除标签&#xff0c;只能通过git bash

卡码网语言基础课 | 20. 排队取奶茶

目录 一、 队列的基本认识 二、 队列的操作 2.1 引入头文件 2.2 创建队列 2.3 队列的常见操作 三、 解题 通过本次练习&#xff0c;将会学习到以下C知识点&#xff1a; 队列的基本概念&#xff08;队头、队尾&#xff09;和特点&#xff08;先入先出&#xff09;入队、出队…

Android : Xui- RecyclerView+BannerLayout 轮播图简单应用

实例图&#xff1a; 1.引用XUI http://t.csdnimg.cn/Wb4KR 2.创建显示图片布局 banner_item.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"…

【CentOS8】使用 Tomcat 部署 Java Web 项目(使用 sdkman)

文章目录 配置 Tomcat将 Tomcat 启动命令设置为 Linux 自定义服务给 Tomcat 设置管理员账号密码IDEA 打包 Java web 项目 我是使用 sdkman 下载的 jdk 和 tomcat&#xff0c;所以接下来的部署配置都是在 sdkman 构建的环境的。想要知道如何下载 sdkman 可以看看这篇文章 —…