javaweb项目,使用MVC三层架构的javaweb学生在线考试报名以及成绩查看系统。

项目名称:javaweb学生在线考试报名以及成绩查询系统


前言

项目介绍:本项目是一个在线考试系统,主要涉及学生、管理员也就是教师两种用户角色,针对不同用户提供了相应的功能模块,以满足在线考试相关的各项业务需求。

一、角色分类

角色分类:管理员,学生

二、系统结构

1.前段部分:

  1. 前端界面:采用JSP技术开发,通过HTML、CSS和JavaScript实现页面布局与交互效果,为用户提供直观的操作界面。

2.后端部分:

1.后端处理:使用Java语言编写业务逻辑,处理前端请求,与数据库进行数据交互,确保系统功能的实现。

3.数据库设计:

数据库:使用MySQL数据库包括一下几个核心的表,如学生信息、管理员信息、考试信息、报名信息等,为系统运行提供数据支持。

4.界面效果图,学生端部分

1.注册功能

2.学生登录:

3.考试报名功能

4.成绩查询功能

5.管理员功能效果图:

1.登录:

2.登录成功后进入管理页面

3.更新学生信息


4.学生列表查看:在studentList.jsp页面,可搜索和分页显示学生信息,数据由StudentService获取并传递给页面展示。

5.删除学生:在studentList.jsp页面点击删除链接,StudentDeleteServlet处理删除操作。

6.管理员自身管理功能:与学生管理类似,包括管理员添加(adminAdd.jsp和AdminAddServlet)、列表查看(adminList.jsp)、更新(adminUpdate.jsp和AdminUpdateServlet)和删除(AdminDeleteServlet),操作流程和数据处理方式一致。

6.考试信息管理功能:

1.添加考试信息:在examInfoAdd.jsp页面添加考试信息,ExamInfoAddServlet处理存储,页面实时反馈操作结果。

2.考试信息列表查看与搜索:在examInfoList.jsp页面实现,支持分页和按条件搜索,数据交互由ExamInfoService和页面配合完成。

3.更新考试信息:在examInfoUpdate.jsp页面修改考试信息,ExamInfoUpdateServlet更新数据库。

4.删除考试信息:在examInfoList.jsp页面执行删除操作,由ExamInfoDeleteServlet处理。

报名信息管理功能:

1.查看报名信息:在enrollInfoList.jsp页面,可按条件搜索和分页显示报名信息,数据由EnrollInfoService提供。

2.成绩录入:在enrollInfoUpdate.jsp页面,管理员录入学生成绩,EnrollInfoUpdateServlet更新数据库中的成绩数据。

3.删除报名信息:在enrollInfoList.jsp页面点击删除链接,由EnrollInfoDeleteServlet处理。

7.部分代码展示

1.adminLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录</title>
	<link rel="stylesheet" href="<%=request.getContextPath()%>/css/login.css">
</head>
<body>
	<div class="login-div">
		<h2>登录管理端</h2>
		<div class="msg">${errorMsg}</div>
		<form action="<%=request.getContextPath() %>/AdminLoginServlet" method="post">
<%--			<label for="username">用户名:</label>--%>
			<input id="username" type="text" name="username" required placeholder="用户名" class="input"><br><br>
<%--			<label for="password">密码:</label>--%>
			<input id="password" type="password" name="password" required placeholder="密码" class="input"><br><br>

			<button class="button_login">登录</button>
			<a href="<%=request.getContextPath() %>/stuLogin.jsp" class="button_go_register">学生登陆</a>
		</form>
	</div>
</body>
</html>

2.StudentLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录</title>
	<link rel="stylesheet" href="<%=request.getContextPath()%>/css/login.css">
</head>

<body>
<%
	// 获取cookie里保存的用户信息
	Cookie[] cookies = request.getCookies();
	String username = null;
	String password = null;
	String remember = null;

	if (cookies != null && cookies.length > 0) {
		for (int i=0; i<cookies.length; i++) {
			if (cookies[i].getName().equals("username")) {
				// 取出用户名
				username = cookies[i].getValue();
			}
			if (cookies[i].getName().equals("password")) {
				// 取出密码
				password = cookies[i].getValue();
			}
			if (cookies[i].getName().equals("remember")) {
				// 取出是否记住我
				remember = cookies[i].getValue();
			}
		}
	}
	request.setAttribute("username", username);
	request.setAttribute("password", password);
	request.setAttribute("remember", remember);

%>
	<div class="login-div">
		<h2>学生登录</h2>
		<div class="msg">${errorMsg}</div>
		<form action="<%=request.getContextPath() %>/StudentLoginServlet" method="post" id="login_form">
			<input id="username" type="text" name="username" required placeholder="用户名" class="input" value="${ username }"><br><br>
			<input id="password" type="password" name="password" required placeholder="密码" class="input" value="${ password }"><br><br>
			<label for="remember">记住密码:</label>
			<input type="checkbox" id="remember" name="remember"
				   <c:if test="${remember == 'on'}">checked</c:if>
			><br><br>
			<button class="button_login">登录</button>
			<a href="<%=request.getContextPath() %>/stuRegister.jsp" class="button_go_register">注册</a>
			<a href="<%=request.getContextPath() %>/adminLogin.jsp" class="button_go_register">管理员登陆</a>
		</form>
	</div>
</body>
<script>
	var remember = document.getElementById("remember").checked;
	if (remember) {
		submitForm();
	}
	function submitForm() {
		document.getElementById('login_form').submit();
	}
</script>
</html>

3.StudentRegister.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>注册</title>
    <link rel="stylesheet" href="<%=request.getContextPath()%>/css/register.css">
</head>
<body>
	<div class="register-div">
		<h2>注册</h2>
		<div class="success_msg">${successMsg}</div>
		<div class="error_msg">${errorMsg}</div>
		<form action="<%=request.getContextPath() %>/StudentRegisterServlet" method="post">
			<input id="username" type="text" name="username" required="required" class="input" placeholder="请输入用户名">
			<input id="password" type="text" name="password" required="required" class="input" placeholder="请输入密码">
			<input id="realName" type="text" name="realName" required="required" class="input" placeholder="请输入真实姓名">
			<select id="sex" name="sex" required="required" class="input">
				<option value="男">男</option>
				<option value="女">女</option>
			</select>
			<input id="email" type="text" name="email" required="required" class="input" placeholder="请输入邮箱">
			<input id="phone" type="text" name="phone" required="required" class="input" placeholder="请输入手机号">
			<input id="department" type="text" name="department" required="required" class="input" placeholder="请输入院系">
			<input id="major" type="text" name="major" required="required" class="input" placeholder="请输入专业">
			<input id="classes" type="text" name="classes" required="required" class="input" placeholder="请输入班级">
			<button class="button_register">注册</button>
			<a href="<%=request.getContextPath()%>/login.jsp" class="button_go_login">去登录</a>
		</form>
	</div>
</body>
</html>

4.JDBCUtils

package edu.xx.exam.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * 数据库连接工具类
 */
public class JDBCUtils {
	
	private static String url = "jdbc:mysql://localhost:3306/exam?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true";
	private static String username = "root";
	private static String password = "aA123456";
	
	static {
		try {
			// 加载驱动类
			Class.forName("com.mysql.cj.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取数据库连接方法
	 * @return
	 */
	public static Connection getConnection() {
		try {
			return DriverManager.getConnection(url, username, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return null;
		}
	}
	
	/**
	 * 关闭资源方法
	 * @param connection
	 * @param preparedStatement
	 * @param resultSet
	 */
	public static void closeAll(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
		try {
			//如果resultSet不空,关闭resultSet
			if (resultSet != null) {
				resultSet.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				//如果preparedStatement不为空,关闭preparedStatement
				if (preparedStatement != null) {
					preparedStatement.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {
				try {
					connection.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

}

8.实体类

1.Admin.Java

package edu.xx.exam.entity;

import java.util.Date;

/**
 * 管理员实体类
 */
public class Admin {

    /** 用户名 */
    private String username;

    /** 密码 */
    private String password;

    /** 昵称 */
    private String nickname;

    /** 创建时间 */
    private Date createDatetime;

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getNickname() {
        return nickname;
    }

    public void setCreateDatetime(Date createDatetime) {
        this.createDatetime = createDatetime;
    }

    public Date getCreateDatetime() {
        return createDatetime;
    }


    @Override
    public String toString() {
        return "Admin{" +
                "username=" + username +
                ", password=" + password +
                ", nickname=" + nickname +
                ", createDatetime=" + createDatetime +
        '}';
    }
}

2.EnrollInfo .java

package edu.xx.exam.entity;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 报名信息实体类
 */
public class EnrollInfo {

    /** id */
    private Integer id;

    /** 报考人id */
    private String userId;

    /** 报考信息id */
    private Integer examId;

    /** 成绩 */
    private BigDecimal score;

    /** 创建时间 */
    private Date createDatetime;

    /** 报考人姓名 */
    private String userRealName;

    /** 考试名称 */
    private String examName;

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getUserId() {
        return userId;
    }

    public void setExamId(Integer examId) {
        this.examId = examId;
    }

    public Integer getExamId() {
        return examId;
    }

    public void setScore(BigDecimal score) {
        this.score = score;
    }

    public BigDecimal getScore() {
        return score;
    }

    public void setCreateDatetime(Date createDatetime) {
        this.createDatetime = createDatetime;
    }

    public Date getCreateDatetime() {
        return createDatetime;
    }

    public String getUserRealName() {
        return userRealName;
    }

    public void setUserRealName(String userRealName) {
        this.userRealName = userRealName;
    }

    public String getExamName() {
        return examName;
    }

    public void setExamName(String examName) {
        this.examName = examName;
    }

    @Override
    public String toString() {
        return "EnrollInfo{" +
                "id=" + id +
                ", userId=" + userId +
                ", examId=" + examId +
                ", score=" + score +
                ", createDatetime=" + createDatetime +
        '}';
    }
}

3.ExamInfo .java

package edu.xx.exam.entity;

import java.util.Date;

/**
 * 考试信息实体类
 */
public class ExamInfo {

    /** id */
    private Integer id;

    /** 考试名称 */
    private String examName;

    /** 考试地点 */
    private String examAddr;

    /** 开始时间 */
    private Date startTime;

    /** 结束时间 */
    private Date endTime;

    /** 课程名称 */
    private String curriculumName;

    /** 考试状态(0未开始1进行中2结束) */
    private Integer examStatus;

    /** 创建时间 */
    private Date createDatetime;

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    public void setExamName(String examName) {
        this.examName = examName;
    }

    public String getExamName() {
        return examName;
    }

    public void setExamAddr(String examAddr) {
        this.examAddr = examAddr;
    }

    public String getExamAddr() {
        return examAddr;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setCurriculumName(String curriculumName) {
        this.curriculumName = curriculumName;
    }

    public String getCurriculumName() {
        return curriculumName;
    }

    public void setExamStatus(Integer examStatus) {
        this.examStatus = examStatus;
    }

    public Integer getExamStatus() {
        return examStatus;
    }

    public void setCreateDatetime(Date createDatetime) {
        this.createDatetime = createDatetime;
    }

    public Date getCreateDatetime() {
        return createDatetime;
    }


    @Override
    public String toString() {
        return "ExamInfo{" +
                "id=" + id +
                ", examName=" + examName +
                ", examAddr=" + examAddr +
                ", startTime=" + startTime +
                ", endTime=" + endTime +
                ", curriculumName=" + curriculumName +
                ", examStatus=" + examStatus +
                ", createDatetime=" + createDatetime +
        '}';
    }
}

4.Student .java

package edu.xx.exam.entity;

import java.util.Date;

/**
 * 学生实体类
 */
public class Student {

    /** 用户名称 */
    private String username;

    /** 密码 */
    private String password;

    /** 真实姓名 */
    private String realName;

    /** 邮箱 */
    private String email;

    /** 手机号 */
    private String phone;

    /** 性别 */
    private String sex;

    /** 所属院系 */
    private String department;

    /** 所属专业 */
    private String major;

    /** 所属班级 */
    private String classes;

    /** 创建时间 */
    private Date createDatetime;

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }

    public String getRealName() {
        return realName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getPhone() {
        return phone;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getSex() {
        return sex;
    }

    public void setDepartment(String department) {
        this.department = department;
    }

    public String getDepartment() {
        return department;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getMajor() {
        return major;
    }

    public void setClasses(String classes) {
        this.classes = classes;
    }

    public String getClasses() {
        return classes;
    }

    public void setCreateDatetime(Date createDatetime) {
        this.createDatetime = createDatetime;
    }

    public Date getCreateDatetime() {
        return createDatetime;
    }


    @Override
    public String toString() {
        return "Student{" +
                "username=" + username +
                ", password=" + password +
                ", realName=" + realName +
                ", email=" + email +
                ", phone=" + phone +
                ", sex=" + sex +
                ", department=" + department +
                ", major=" + major +
                ", classes=" + classes +
                ", createDatetime=" + createDatetime +
        '}';
    }
}

总结

本在线考试系统通过详细的需求分析、合理的软件设计和全面的编码测试,实现了学生、管理员等用户角色的各项功能需求。系统功能涵盖了用户管理、考试管理、报名信息管理等核心业务,通过分层架构和数据库设计确保了系统的稳定性和数据的完整性。在测试过程中,对各个功能模块进行了充分验证,保证了系统的可靠性和易用性,能够满足在线考试管理的基本需求,为学校或教育机构提供了一个便捷、高效的考试管理平台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@程序员ALMJ

打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值