该项目是模拟学生选课信息的管理系统,用户类型有三种,分别是管理员、教师、学生。学生入校注册后需统一记录学生个人基本信息,对于面向学生开设的相关课程需要记录每门课程的基本信息,每个任课教师规定其可主讲三门课程,学生选课时系统将相应的选课信息记录入库,考试结束后教师需在相应的选课记录中补上考试成绩,管理员可查看所有用户信息,同时查看一系列的数据报表。
由于项目分为三个类型的用户,即管理员、教师、学生,因此在进入系统前须先选择相应的用户类型。
/**
* 登录
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
String type = userService.queryTypeByUsername(username);
String typeChoose = String.valueOf(req.getSession().getAttribute("UserType"));
User user = userService.login(new User(username, password, null, type));
//判断用户类型及账号密码是否成功匹配
if (type.equalsIgnoreCase(typeChoose) == false){
System.out.println("登录失败");
req.setAttribute("username",username);
req.setAttribute("tip","不存在此"+typeChoose+"用户");
req.getRequestDispatcher("/page/user/login.jsp").forward(req,resp);
}else if (user==null){
System.out.println("登录失败");
req.setAttribute("username",username);
req.setAttribute("tip","用户名或密码错误");
req.getRequestDispatcher("/page/user/login.jsp").forward(req,resp);
}
else {
System.out.println("登录成功");
req.setAttribute("username",username);
if (typeChoose.equalsIgnoreCase("student")){
req.getSession().setAttribute("stuNum",username);
req.getRequestDispatcher("/page/student/index.jsp").forward(req,resp);
}else if (typeChoose.equalsIgnoreCase("system")){
req.getSession().setAttribute("systemNum",username);
req.getRequestDispatcher("/page/system/index.jsp").forward(req,resp);
}else if (typeChoose.equalsIgnoreCase("teacher")){
req.getSession().setAttribute("teacherNum",username);
req.getRequestDispatcher("/page/teacher/index.jsp").forward(req,resp);
}
}
}
个人信息查询功能的实现,只需将数据库中对应的信息读取即可。通过Servlet调用Service层,Service层再去调用DAO层,DAO层与数据库交互获取该用户信息,并逐层返回,最后由Servlet发送数据并跳转到相应的Jsp页面。
<%--
自我介绍
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<%@include file="/common/head.jsp" %>
<title>indextitle>
<link rel="stylesheet" type="text/css" href="css/common.css">
<link rel="stylesheet" type="text/css" href="css/introduction.css">
head>
<body>
<%@include file="/common/header_student.jsp" %>
<section>
<%@include file="/common/menu_student.jsp" %>
<div class="info">
<div class="address">
<img src="static/picture/home.png"> > 信息查询 > 个人信息
div>
<div class="introduction">
<%-- 头像--%>
<div class="intr-first">
<div class="head-image">
<img class="face_image" src="static/picture/6.jpg">
div>
div>
<%-- 学生信息遍历--%>
<div class="intr-second">
<c:forEach var="info" items="${requestScope.info}">
<div class="subassemble">
<label class="sub-1">${info.key} label>
<label class="sub-2">${info.value}label>
div>
c:forEach>
div>
div>
div>
section>
body>
html>
学生选课会有两种情况,一是处于选课时间,二是未在选课时间段。并且此处的限制是只选择一门课,不可多选。
/**
* 设置是否是选课时间
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
protected void isChooseTime(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String isChecked = req.getParameter("isChecked");
if (isChecked!=null && isChecked.equals("true")){
req.getServletContext().setAttribute("isTime",isChecked);
}
req.getRequestDispatcher("/page/system/systemSetting.jsp").forward(req,resp);
}
<script type="text/javascript">
$(function () {
//选课
$(".choose").click(function () {
var b = ${
requestScope.isChoose.cno};
if (b != null) {
alert("已选一门功课!请先退选!");
return false;
}
});
//退课
$(".delete").click(function () {
return confirm("确定删除已选课程吗?");
})
})
script>
管理员可以查看所有信息,同时对信息进行增删查改的操作
添加信息的方式?
答:在项目中,通过css编写“添加信息”组件,实现下拉动画效果,当点击添加信息时,会在当前页面下方弹出一个添加框,填入一系列信息并点击确定,将信息更新到数据库中,并再由Servlet跳转回当前信息查询页面。
项目中的数据报表使用Echarts图表,关于Echarts图表的使用方式在博主首页噢!先给大家看看效果o( ̄▽ ̄)o
打印功能可以使用第三方插件,或者直接调用window.print()方法打印,window.print()的好处是使用方便,只需要直接调用即可,但缺点是直接调用的话不能打印像Echarts的图表,还有一些css样式也需要重新设置。总结下来,若只是为了简单的打印网页,没有其他样式要求,则可直接使用window.print(),若对打印样式有需求,则需使用第三方插件。
function doPrint() {
bdhtml=window.document.body.innerHTML;
sprnstr=""; //开始打印标识字符串有17个字符
eprnstr=""; //结束打印标识字符串
prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17); //从开始打印标识之后的内容
prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr)); //截取开始标识和结束标识之间的内容
window.document.body.innerHTML=prnhtml; //把需要打印的指定内容赋给body.innerHTML
window.print(); //调用浏览器的打印功能打印指定区域
window.document.body.innerHTML=bdhtml;//重新给页面内容赋值
return false;
}
function check() {
var options=$("#searchType option:selected").val();
var val = $("#searchInfo").val();
var number = /^\+?[1-9][0-9]*$/;//数字
if (options == "cno" || options == "priorId" || options == "credit"){
if (number.test(val))//判断输入的是否为数字
return true;
else{
alert("内容输入错误!")
return false;
}
}
return true;
}
//全选/全不选
$("#checkAll").click(function () {
let checked = document.getElementById("checkAll").checked;
if (checked==true){
<c:forEach items="${requestScope.CourseMap}" var="entry">
document.getElementById("${entry.value.id}").checked=true;
</c:forEach>
}else if (checked==false){
<c:forEach items="${requestScope.CourseMap}" var="entry">
document.getElementById("${entry.value.id}").checked=false;
</c:forEach>
}
})
//批量删除
$(".deleteAll").click(function () {
let array = new Array();
<c:forEach items="${requestScope.CourseMap}" var="entry">
if (document.getElementById("${entry.value.id}").checked==true){
array.push("${entry.value.id}");
}
</c:forEach>
let allcno=array[0];
for (let i = 1; i < array.length; i++) {
allcno += "s"+array[i];
}
if (array[0]!=null){
let b = confirm("确定删除课程号"+allcno+"吗?");
if (b==true){
location.href="http://localhost:8080/StudentsInfoSystem/systemCourseServlet?action=deleteMoreCourse&allcno="+allcno;
}
}
})
/**
* 通过学号查询所有学生信息
* @return
*/
public List<Student> queryAllBySno(String sno){
String sql="select * from student where sno like ?";
return queryForList(Student.class,sql,sno);
}
谢谢看完的你!有帮助记得点个赞噢!有问题可随时评论或者私信博主交流!!o( ̄▽ ̄)o