javaWeb学生信息管理系统2

一、学生信息管理系统SIMS

一款基于纯Servlet技术开发的学生信息管理系统(SIMS),在设计中没有采用SpringMVC和Spring Boot等框架。系统完全依赖于Servlet来处理HTTP请求和管理学生信息,实现了信息的有效存储、检索和更新,为教育管理提供了一种轻量级的解决方案。

二、项目简介

为了更好地满足教学信息管理的需求以及对学生和老师信息的有效管理,学生信息管理系统应运而生。该系统通过在线平台提供信息管理服务,以实现对数据的高效处理。这不仅方便了对学生和教师各类信息的管理,还支持大数据分析,从而更好地了解和优化教育过程。

三、技术栈

Jsp+Servlet+Layui+Druid+JDBC-Template+JQuery+Js+Ajax+Json+EL/JSTL+BeanUtils

服务器: Tomcat_8.5.53

数据库: MySQL_5.6.46

开发工具:IDEA_2019.1.3

界面制作:Layui

三 、项目使用说明

  1. 导入结构和数据:sims.sql

  2. 解压下载zip重命名sims-master文件夹为sims,IDEA打开该sims项目

  3. 修改配置数据库连接文件:druid.properties

    管理员 帐号:admin 密码:admin

    学生 帐号:1812123206 密码:123

    老师 帐号:9912123206 密码:123

四、 功能描述

五、数据库设计


admin表:

存储管理员信息,包括管理员ID(a_id)和密码(a_password)。
示例数据:一条管理员记录,ID为’admin’,密码为’admin’。
college_department_class表:

存储学院、专业和班级信息。
示例数据:包括应用数学学院、软件工程学院等不同学院的专业和班级信息。
complaint表:

记录学生的投诉信息,包括投诉ID(id)、投诉日期(cdate)和投诉内容(content)。
示例数据:包括不同日期和内容的投诉记录。
course表:

存储课程信息,包括课程ID(c_id)、课程名称(c_name)、教师ID(t_id)和课程信息(c_info)。
示例数据:包括不同课程和教师的记录。
notify表:

记录系统通知信息,包括通知ID(id)、通知日期(notifyDate)和通知内容(notifyInfo)。
示例数据:包括不同日期和内容的通知记录。
photo表:

存储学生照片信息,包括照片ID(photo_id)和照片名称(photo_name)。
示例数据:包括不同学生的照片记录。
select_course表:

记录学生选课信息,包括学生ID(s_id)、课程ID(c_id)和分数(score)。
示例数据:包括不同学生选择的课程和分数记录。
student表:

存储学生信息,包括学生ID(s_id)、学院、专业、班级、姓名、性别、年龄、地址、电话、邮箱和密码。
示例数据:包括不同学生的个人信息。
teacher表:

存储教师信息,包括教师ID(t_id)、姓名、性别、学历、职称和密码。

六、代码结构

七、功能实现部分截图

八、代码

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>登录页</title><link rel="stylesheet" href="./css/layui.css"><link rel="stylesheet" href="./css/modules/layer/default/layer.css"><link rel="stylesheet" href="./css/login.css"><link rel="stylesheet" href="./css/style.css"><link rel="shortcut icon" href="./images/favicon.ico" type="image/x-icon" /><script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><style type="text/css"></style>
</head>
<body>
<div class="frame-main"><div class="login-main"><header class="layui-elip">学生信息管理系统</header><form class="layui-form" action="" name="formf" method="post"><div class="layui-input-inline"><label class="layadmin-user-login-icon layui-icon layui-icon-username"></label><input type="text" name="id" id="id" value="${loginid}" required lay-verify="required" placeholder="用户名(学号或工号)" autocomplete="off"class="layui-input"></div><div class="layui-input-inline"><label class="layadmin-user-login-icon layui-icon layui-icon-password"></label><input type="password" value="${loginpassword}" id="password" name="password" required lay-verify="required" placeholder="密码" autocomplete="off"class="layui-input"></div><div class="layui-input-inline" style="width: 56%; margin-bottom: 0px;"><label class="layadmin-user-login-icon layui-icon layui-icon-vercode"></label><input type="password" name="verifycode" id="code" required lay-verify="required" placeholder="验证码" autocomplete="off"class="layui-input"></div><a href="javascript:refreshCode()"><img style="padding-left: 14px;" src="${pageContext.request.contextPath}/checkCodeServlet" title="刷新验证码" id="vcode" draggable="false"></a><div style="padding-left: 54px;padding-bottom: 6px;"><input type="radio" name="roles" value="student" title="学生" checked><input type="radio" name="roles" value="teacher" title="老师"><input type="radio" name="roles" value="admin" title="管理员"></div><div class="layui-input-inline login-btn"><button type="button" onclick="a()" lay-submit lay-filter="login" class="layui-btn" id="login" name="submit-login">登录</button></div><hr/><!--<div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-primary">QQ登录</button></div><div class="layui-input-inline"><button type="button" class="layui-btn layui-btn-normal">微信登录</button></div>--><p><a href="register.jsp" class="fl">立即注册</a><div class="tooltip"><span class="tooltiptext">${login_msg}</span></div><a href="forget.jsp" class="fr">忘记密码?</a></p></form></div>
</div>
<footer style="position:absolute;bottom:0;width:100%;height:30px; text-align: center;">© 2018-2019.YOYLING.COM</footer>
<script src="layui.js"></script>
<script src="./lay/modules/layer.js"></script><script type="text/javascript">function refreshCode() {var vcode = document.getElementById("vcode");vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime();}
</script>
<script type="text/javascript">layui.use('form',function(){var form = layui.form;//刷新界面 所有元素form.render();});
</script><script type="text/javascript">// $("#login").on("click", function(){function a() {var num = document.getElementsByName("roles");var checked_value = "student";for (var i = 0; i < num.length; i++) {var radio = num[i];if (radio.checked) {checked_value = radio.value;}}var id = document.getElementById("id").value;var password = document.getElementById("password").value;var verifycode = document.getElementById("code").value;if (id=='' || password=='' || verifycode=='') {return;}else {if (checked_value=="student") {document.formf.action="${pageContext.request.contextPath}/loginServlet?roles=student";document.formf.submit();}else if (checked_value=="teacher") {document.formf.action="${pageContext.request.contextPath}/loginServlet?roles=teacher";document.formf.submit();}else {document.formf.action="${pageContext.request.contextPath}/loginServlet?roles=admin";document.formf.submit();}}}
</script>
</body>
</html>

register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head><meta charset="UTF-8"><meta name="renderer" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>注册页</title><link rel="stylesheet" href="./css/layui.css"><link rel="stylesheet" href="./css/style.css"><link rel="stylesheet" href="./css/login.css"><link rel="shortcut icon" href="./images/favicon.ico" type="image/x-icon" />
</head>
<body>
<div class="frame-main"><div class="login-main"><header class="layui-elip">学生信息管理系统</header><!-- 表单选项 --><form class="layui-form" id="registerForm" action="${pageContext.request.contextPath}/registerServlet" method="post"><div class="layui-input-inline"><!-- 用户名 --><div class="layui-inline" style="width: 100%"><label class="layadmin-user-login-icon layui-icon layui-icon-username"></label><input type="text" id="user" value="${studentid}" name="studentid" required  lay-verify="required" placeholder="请输入学号" autocomplete="off" class="layui-input"></div></div><!-- 密码 --><div class="layui-input-inline"><div class="layui-inline" style="width: 100%"><label class="layadmin-user-login-icon layui-icon layui-icon-password"></label><input type="password" id="pwd" value="${password}" name="password" required  lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"></div></div><!-- 确认密码 --><div class="layui-input-inline"><div class="layui-inline" style="width: 100%"><label class="layadmin-user-login-icon layui-icon layui-icon-password"></label><input type="password" id="rpwd" value="${repassword}" name="repassword" required  lay-verify="required" placeholder="请确认密码" autocomplete="off" class="layui-input"></div></div><div class="layui-input-inline" style="width: 56%;"><label class="layadmin-user-login-icon layui-icon layui-icon-vercode"></label><input type="password" id="verifycode" name="verifycode" required lay-verify="required" placeholder="验证码" autocomplete="off"class="layui-input"></div><a href="javascript:refreshCode()"><img style="padding-left: 14px; margin-top: -15px;" src="${pageContext.request.contextPath}/checkCodeServlet" title="刷新验证码" id="vcode" draggable="false"></a><div class="layui-input-inline login-btn" style="width: 100%"><button type="submit" lay-submit lay-filter="sub" class="layui-btn">注册</button></div><hr style="width: 100%" /><p style="width: 100%"><a href="login.jsp" class="fl">立即登录</a><div class="tooltip"><span class="tooltiptext">${msg}</span></div><a href="forget.jsp" class="fr">忘记密码?</a></p><i class="layui-icon" id="ri" style="color: green;font-weight: bolder; position: relative; left: 200px; top: -265px;" hidden></i><i class="layui-icon" id="wr" style="color: red; font-weight: bolder; position: relative; left: 200px; top: -265px;" hidden></i><i class="layui-icon" id="pri" style="color: green;font-weight: bolder; position: relative; left: 180px; top: -213px;" hidden></i><i class="layui-icon" id="pwr" style="color: red; font-weight: bolder; position: relative; left: 180px; top: -213px;" hidden></i><i class="layui-icon" id="rpri" style="color: green;font-weight: bolder; position: relative; left: 160px; top: -160px;" hidden></i><i class="layui-icon" id="rpwr" style="color: red; font-weight: bolder; position: relative; left: 160px; top: -160px;" hidden></i></form></div><span id="s_id"></span>
</div>
<footer style="position:absolute;bottom:0;width:100%;height:30px; text-align: center;">© 2018-2019.YOYLING.COM</footer><script src="layui.js"></script>
<script type="text/javascript">function refreshCode() {var vcode = document.getElementById("vcode");vcode.src = "${pageContext.request.contextPath}/checkCodeServlet?time="+new Date().getTime();}
</script>
<script type="text/javascript">layui.use(['form','jquery','layer'], function () {var form   = layui.form;var $      = layui.jquery;var layer  = layui.layer;//添加表单失焦事件//验证表单$('#user').blur(function() {var studentid = $(this).val();$.get("findStudentServlet",{studentid:studentid},function (data) {if (data.studentExsit) {$('#wr').removeAttr('hidden');$('#ri').attr('hidden','hidden');layer.open({title: '错误',content: data.msg,icon: 2});$('#user').val("");} else {}});});// 为密码添加正则验证$('#pwd').blur(function() {var reg = /^[\w]{3,12}$/;if(!($('#pwd').val().match(reg))){//layer.msg('请输入合法密码');$('#pwr').removeAttr('hidden');$('#pri').attr('hidden','hidden');layer.msg('请输入3-6位合法密码');$('#pwd').val("");}else {$('#pri').removeAttr('hidden');$('#pwr').attr('hidden','hidden');}});$('#user').blur(function() {var reg = /^[0-9]{10}$/;if(!($('#user').val().match(reg))){//layer.msg('请输入合法密码');$('#wr').removeAttr('hidden');$('#ri').attr('hidden','hidden');layer.msg('请输入10位数字学号');$('#user').val("");}else {$('#ri').removeAttr('hidden');$('#wr').attr('hidden','hidden');}});//验证两次密码是否一致$('#rpwd').blur(function() {if($('#pwd').val() != $('#rpwd').val() || $('#rpwd').val()=='' || $('#pwd').val()==''){$('#rpwr').removeAttr('hidden');$('#rpri').attr('hidden','hidden');// layer.msg('两次输入密码不一致!');$('#rpwd').val("");}else{$('#rpri').removeAttr('hidden');$('#rpwr').attr('hidden','hidden');};});});
</script>
</body>
</html>

message.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.io.*,java.util.*,javax.servlet.*,javax.servlet.http.*" %>
<%@ page import="java.rmi.ServerException" %>
<%@ page import="java.nio.charset.Charset" %>
<%@ page import="java.nio.charset.StandardCharsets" %>
<html>
<head><title></title>
</head>
<body>
<%//定义上传文件的最大字节int MAX_SIZE = 102400 * 102400;//创建根路径的保存变量String rootPath;//声明文件读入类DataInputStream in = null;FileOutputStream fileOut = null;//取得互联网程序的绝对地址String realPath = request.getSession().getServletContext().getRealPath("/");realPath = realPath.substring(0, realPath.indexOf("\\out"));
//    out.print(realPath);//创建文件的保存目录rootPath = realPath + "\\web\\upload\\";//取得客户端上传的数据类型String contentType = request.getContentType();try {if (contentType.indexOf("multipart/form-data") >= 0) {//读入上传数据in = new DataInputStream(request.getInputStream());int formDataLength = request.getContentLength();if (formDataLength > MAX_SIZE) {out.print("上传的字节不可以超过" + MAX_SIZE + "字节");return;}//保存上传文件的数据byte dataBytes[] = new byte[formDataLength];int byteRead = 0;int totalBytesRead = 0;//上传的数据保存在byte数组里面while (totalBytesRead < formDataLength) {byteRead = in.read(dataBytes, totalBytesRead, formDataLength);totalBytesRead += byteRead;}//根据byte数组创建字符串String file = new String(dataBytes, StandardCharsets.UTF_8);//取得上传数据的文件名String saveFile = file.substring(file.indexOf("filename=\"") + 10);saveFile = saveFile.substring(0, saveFile.indexOf("\n"));saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1, saveFile.indexOf("\""));int lastIndex = contentType.lastIndexOf("=");//取得数据的分隔字符串String boundary = contentType.substring(lastIndex + 1, contentType.length());//创建保存路径的文件名String fileName = rootPath + saveFile;int pos;pos = file.indexOf("filename = \"");pos = file.indexOf("\n", pos) + 1;pos = file.indexOf("\n", pos) + 1;pos = file.indexOf("\n", pos) + 1;int boundaryLocation = file.indexOf(boundary, pos) - 4;//取得文件数据的开始的位置int startPos = ((file.substring(0, pos)).getBytes()).length;int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length;File checkFile = new File(fileName);if (checkFile.exists()) {out.println("<p>" + saveFile + "文件已经存在.</p>");return;}//检查上传文件的目录是否存在File fileDir = new File(rootPath);if (!fileDir.exists()) {fileDir.mkdirs();}//创建文件的输出类fileOut = new FileOutputStream(fileName);//保存文件的数据fileOut.write(dataBytes, startPos, (endPos - startPos));fileOut.close();out.print("<b>文件上传成功</b>");} else {String content = request.getContentType();out.print("上传的文件类型是" + content + "类型的,请上传目录mutipart/form-data类型的文件");}} catch (Exception ex) {throw new ServerException(ex.getMessage());}
%>
</body>
</html>

九、联系与交流

扣:969060742 完整代码 sql 程序资源

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

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

相关文章

JVM之jinfo虚拟机配置信息工具

jinfo虚拟机配置信息工具 1、jinfo jinfo&#xff08;Configuration Info for Java&#xff09;的作用是实时地查看和调整虚拟机的各项参数。 使用jps -v 可以查看虚拟机启动时显示指定的参数列表&#xff0c;但是如果想知道未被显示指定的参数的系统默认值&#xff0c;除 …

GCP 创建1个windows vm 并连接

有时需要临时使用1台windows 的机器 创建windows vm 既然是临时 直接用gcloud command gcloud compute instances create instance-windows \--zoneeurope-west2-c \--machine-typen2d-standard-4 \--boot-disk-size100GB \--image-projectwindows-cloud \--imagewindows-se…

Rust学习笔记001:HELLOW WORLD + Cargo

Rust介绍 Rust&#xff08;中文称为“锈”&#xff09;是一种由Mozilla开发的系统编程语言&#xff0c;它着力于提供安全性、并发性和实用性。Rust的设计目标是消除程序出现的内存安全性问题&#xff0c;如空指针引用、数据竞争等。它通过在编译时进行严格的所有权和借用检查来…

Vue(三):Vue 生命周期与工程化开发

2023 的最后一篇博客&#xff0c;祝大家元旦快乐&#xff0c;新的一年一起共勉&#xff01; 06. Vue 生命周期 6.1 基本介绍 生命周期就是一个 Vue 示例从 创建 到 销毁 的整个过程&#xff0c;创建、挂载、更新、销毁 有一些请求是必须在某个阶段完成之后或者某个阶段之前执行…

10TB海量JSON数据从OSS迁移至MaxCompute

前提条件 开通MaxCompute。 在DataWorks上完成创建业务流程&#xff0c;本例使用DataWorks简单模式。详情请参见创建业务流程。 将JSON文件重命名为后缀为.txt的文件&#xff0c;并上传至OSS。本文中OSS Bucket地域为华东2&#xff08;上海&#xff09;。示例文件如下。 {&qu…

zabbix通过自动发现-配置监控项、触发器(小白教程)

自动发现配置参考链接&#xff08;不小白&#xff0c;不友好&#xff09; zabbix-get介绍 1配置 zabbix server&#xff1a;版本7&#xff08;不影响&#xff09;,IP地址&#xff1a;192.168.0.60zabbix agent&#xff1a;版本agent1&#xff08;不影响&#xff09;&#xff…

Megatron-LM源码系列(六):Distributed-Optimizer分布式优化器实现Part1

1. 使用说明 在megatron中指定--use-distributed-optimizer就能开启分布式优化器, 参数定义在megatron/arguments.py中。分布式优化器的思路是将训练中的优化器状态均匀地分布到不同数据并行的rank结点上&#xff0c;相当于开启ZERO-1的训练。 group.add_argument(--use-distr…

SpringIOC之ClassPathXmlApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

PostgreSQL16.1(Windows版本)

1、卸载原有的PostgreSQL &#xfeff; &#xfeff; 点击Next即可。 &#xfeff;&#xfeff; 点击OK即可。 卸载完成。 2、安装 &#xff08;1&#xff09; 前两部直接Next&#xff0c;第二部可以换成自己想要安装的路径。 &#xff08;2&#xff09; 直接点击Next。…

雪花算法(Snowflake)介绍和Java实现

1、雪花算法介绍 (1) 雪花算法(SnowFlake)是分布式微服务下生成全局唯一ID&#xff0c;并且可以做到去中心化的常用算法&#xff0c;最早是Twitter公司在其内部的分布式环境下生成ID的方式。 雪花算法的名字可以这么理解&#xff0c;世界上没有两片完全相同的雪花&#xff0c;…

Select缺点及代码示例

一、Select缺点 二、服务器端 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/select.h>int main() {// 创建socketint lfd socket(PF_INET, SOCK_STREAM, 0)…

006、函数

1. 一个小技巧 在前面文章中&#xff0c;我们提到&#xff0c;在黑窗口中输入 code . 命令可以快速在 Visual Studio Code 中打开新建的项目&#xff0c;这个是你刚刚新建了项目&#xff0c;并且黑窗口正好是打开的情况下。 如果是之前创建的项目&#xff0c;用上面的方法就会有…

git(安装,常用命令,分支操作,gitee,IDEA集成git,IDEA集成gitee,IDEA集成github,远程仓库操作)

文章目录 1. Git概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git简史1.5 Git工作机制1.6 Git和代码托管中心 2. Git安装3. Git常用命令3.1 设置用户签名3.1.1 说明3.1.2 语法3.1.3 案例实操 3.2 初始化本地库3.2.1 基本语法3.2.2 案例实操3.2.3 结果查看 3…

【Java】log4j和slf4j区别

log4j&#xff1a;Apache Software Foundation 开源 slf4j&#xff1a;不支持日志滚动等高级功能 在开源库或内部库中使用 SLF4J&#xff0c;将使其独立于任何特定的日志记录实现&#xff0c;这意味着无需为多个库管理多个日志记录配置&#xff0c;您的客户端将会很需要这一点…

【k8s】deamonset文件和说明

目录 deamonset的相关命令 deamonset的定义 deamonset的使用场景 deamonset的例子 deamonset字段说明 serviceAccountName DaemonSet的结构及其各个部分的作用 deamonset的相关命令 #查看<name-space>空间内有哪些deamonset kubectl get DaemonSet -n <na…

Django 学习教程- Django 入门案例

Django学习教程系列 Django学习教程-介绍与安装 前言 本教程是为 Django 5.0 编写的&#xff0c;它支持 Python 3.10 至以上。如果 Django 版本不匹配&#xff0c;可以参考教程 使用右下角的版本切换器来获取你的 Django 版本 &#xff0c;或将 Django 更新到最新版本。如果…

Winclone Pro 10 for Mac:轻松备份和还原你的Windows系统

Winclone Pro 10 for Mac是一款专为Mac用户设计的备份和还原软件&#xff0c;旨在帮助用户轻松管理和保护他们的Windows系统。无论是为了数据安全还是系统的稳定性&#xff0c;Winclone Pro 10都能提供全面的解决方案。 这款软件具备强大的备份功能&#xff0c;能够快速而准确…

Java流程控制语句(if语句,switch语句,for循环,while循环,do...while循环,三种循环的区别)

文章目录 第一章 流程控制语句1.1 流程控制语句分类1.2 顺序结构 第二章 判断语句&#xff1a;if语句2.1 if语句格式1练习1&#xff1a;老丈人选女婿练习2&#xff1a;考试奖励第一种格式的细节&#xff1a; 2.2 if语句格式2练习1&#xff1a;吃饭练习2&#xff1a;影院选座 2.…

AI产品经理 - 如何做一款软硬协同AI产品

【背景】从0做一款软硬协同的AI产品&#xff0c;以智能医药保温箱 1.以智能医药保温箱 2.调研定义市场方向 地点&#xff1a;医药、实验室 场景&#xff1a;长宽高/装箱/运输/实验室 3.需求挖掘 4.如何进行软硬件AI产品工作 软硬件产品设计&#xff1a;功能/硬件外观设计、…

SetWindowsHookEx: 全局钩子实现键盘记录器

简介 SetWindowsHookEx 钩子(Hook)&#xff0c;是Windows消息处理机制的一个平台&#xff0c;应用程序可以在上面设置子程以监视指定窗口的某种消息&#xff0c;而且所监视的窗口可以是其他进程所创建的。当消息到达后&#xff0c;在目标窗口处理函数之前处理它。钩子机制允许应…