欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

开发基于Mysql+Servlet+JSP的作业管理系统

程序员文章站 2024-01-27 11:56:34
...

开发基于Mysql+Servlet+JSP的作业管理系统

一、使用方法及界面展示

1.源码的git地址: 作业管理系统

2.运行后显示登录界面,点击“注册”进入注册界面:
开发基于Mysql+Servlet+JSP的作业管理系统
3.在注册界面分别注册“老师甲”、“学生甲”两个账号,点击“注册”自动返回登录界面(注册需要输入身份:老师/学生):
开发基于Mysql+Servlet+JSP的作业管理系统
开发基于Mysql+Servlet+JSP的作业管理系统
3.登录“老师甲”的账号(需要输入“老师”的身份),直接进入作业列表界面,显示老师所布置的作业,在右上角输入作业名称,点击“新增”,即可添加作业,并在列表中显示:
开发基于Mysql+Servlet+JSP的作业管理系统
开发基于Mysql+Servlet+JSP的作业管理系统
4.在作业列表中点击所要查看作业对应的“查看已提交名单”按钮,查看已提交该作业的学生名单,在该界面点击“返回”即可返回作业列表界面:
开发基于Mysql+Servlet+JSP的作业管理系统
5.点击左侧导航栏中的“学生列表”,展示老师所教学生的名单。在右上角输入框中输入学生姓名,点击“新增”,即可添加未在列表中的所教学生,并在列表显示:
开发基于Mysql+Servlet+JSP的作业管理系统
开发基于Mysql+Servlet+JSP的作业管理系统
6.在登录界面使用“学生甲”(身份为学生)的账号登录,直接显示其作业列表,点击“上传作业”即可进入相应作业的编辑界面:
开发基于Mysql+Servlet+JSP的作业管理系统
7.进入编辑作业界面,自动显示作业名称及布置该作业的老师的姓名(只可读)。在作业内容文本框输入作业的内容,点击确定即可提交,并自动返回作业列表;点击返回,返回作业列表界面:
开发基于Mysql+Servlet+JSP的作业管理系统
8.点击确定后返回作业列表,可见,已提交的作业对应的“上传作业”按钮不可再次点击,即作业不可二次提交:
开发基于Mysql+Servlet+JSP的作业管理系统
9.再次登录“老师甲”账号,点击查看老师甲的第一次作业已提交学生名单,可见学生甲已提交,点击“查看作业”即可查看作业内容:
开发基于Mysql+Servlet+JSP的作业管理系统
开发基于Mysql+Servlet+JSP的作业管理系统

二、数据库、数据层、界面及其跳转设计

1.数据库设计 (源码文件夹中的sql文件包含建表语句)
考虑到防止数据库大量的数据冗余,满足三范式要求,设计五张数据表
①Student(student_name)
②Teacher(teacher_name)
③Teach(teacher_name, student_name)
④Homework(homework_title, teacher_name)
⑤Submit(homework_title, teacher_name, student_name, content)

Teach表为Student和Teacher的关系表
Homework依赖Teacher表
Submit依赖Student、Teacher和Homework表
开发基于Mysql+Servlet+JSP的作业管理系统
2.数据层设计
Model类
①Teacher(String teacher_name)
②Student(String student_name)
③Teach(String student_name, String teacher_name)
④Homework(String homework_title, String teacher_name)
⑤Submit(String homework_title, String teacher_name, String student_name, String content)

连接数据库JDBC
①StudentJdbc:
(1)学生注册后在Student表中插入函数:

public void InsertStudent(String student)

(2)在Homework和Teach表中搜索,展示学生的作业列表函数:

public List<Homework> QueryHomework(Student student)

(3)在Submit表中搜索,判断该作业是否已经提交过:

public boolean QuerySubmit(Student student, String homework_title, String teacher_name)

(4)提交作业在Submit插入函数:

public void InsertSubmit(String homework_title, String teacher_name, Student student, String content)

②TeacherJdbc:
(1)老师注册后在Teacher表中插入函数:

public void AddTeacher(Teacher teacher)

(2)在Homework表中搜索,展示老师布置的作业列表函数:

public List<Homework> QueryHomework(Teacher teacher)

(3)新增作业在Homework表中插入函数:

public void AddHomework(Teacher teacher, String homework_title)

(4)新增学生在Student表中插入函数:

public void AddStudent(Teacher teacher, String student_name)

(5)在Teach表中搜索,显示老师所教的学生列表函数:

public List<Student> QueryStudent(Teacher teacher)

(6)在Submit表中搜索相应作业已提交的学生列表及其作业内容:

public List<Submit> QuerySubmit(String homework_title, Teacher teacher)

3.界面JSP设计
老师界面
①登录:index.jsp
②注册:register.jsp
③老师布置的作业列表(包含新增功能):teacher_homework.jsp
④老师所教的学生列表(包含新增功能):teacher_student.jsp
⑤相应作业已提交的学生列表(包含展示作业内容功能):homework_student.jsp

学生界面
①登录:index.jsp
②注册:register.jsp
③学生需要提交的作业列表:student_submit.jsp
④学生编辑相应作业:edit_homework.jsp

4.界面跳转设计(JSP+Servlet)
老师界面
index.jsp点击“注册” → register.jsp
register.jsp点击“注册” → RegisterServletindex.jsp
index.jsp点击“登录” → IndexServletteacher_homework.jsp
teacher_homework.jsp点击“作业列表” → HomeworkListServletteacher_homework.jsp
teacher_homework.jsp点击“新增” → AddHomeworkServletHomeworkListServletteacher_homework.jsp
teacher_homework.jsp点击“查看已提交的名单” → TeacherHomeworkSubmitServlethomework_student.jsp
homework_student.jsp点击“返回” → HomeworkListServletteacher_homework.jsp
teacher_homework.jsp点击“学生列表” → StudentListServletteacher_student.jsp
teacher_student.jsp点击“新增” → AddStudentServletStudentListServletteacher_student.jsp

学生界面
index.jsp点击“登录” → IndexServletstudent_submit.jsp
student_submit.jsp点击“作业列表” → StudentHomeworkListServletstudent_submit.jsp
student_submit.jsp点击“上传作业” → edit_homework.jsp
edit_homework.jsp点击“确定” → StudentHomeworkListServletstudent_submit.jsp

三、源码简单介绍

1.将JSP中数据传入Servlet
表单form
以注册为例:

JSP:开发基于Mysql+Servlet+JSP的作业管理系统
Servlet中的doPost函数对应的接收语句:

String register_name = (String) req.getParameter("register_name");
String register_identity = (String) req.getParameter("register_identity");

2.将JSP中数据传入另一个JSP
URL
以student_submit.jsp为例:

student_submit.jsp中“上传作业"设置为:

href="edit_homework.jsp?homework_title=<%=homework.getHomework_title()%>&teacher_name=<%=homework.getTeacher_name()%>"

①edit_homework.jsp为链接到的另一个jsp;
②homework_title和teacher_name为传入edit_homework.jsp的数据名称;
与request.getParameter(“homework_title”)及request.getParameter(“teacher_name”)对应;
③<%=homework.getHomework_title()%>及<%=homework.getTeacher_name()%>传递的homework_title和teacher_name的值。

edit_homework.jsp中的接收语句:

value="<%=request.getParameter("homework_title")%>"
value="<%=request.getParameter("teacher_name")%>"

3.登录的用户名保存在Session中,界面任意活动都可获取
在登录界面链接的Servlet中保存用户名到Session:

//老师
req.getSession().setAttribute("teacher_name",login_name);
//学生
req.getSession().setAttribute("student_name",login_name);

在任意jsp获取语句:

//老师
session.getAttribute("teacher_name")
//学生
session.getAttribute("student_name")

在任意Servlet获取语句:

//老师
req.getSession().getAttribute("teacher_name");
//学生
req.getSession().getAttribute("student_name");

4.JDBC中sql语句
以StudentJdbc中的public boolean QuerySubmit(Student student, String homework_title, String teacher_name)函数为例:

String sql;
sql = "SELECT COUNT(*) FROM SUBMIT WHERE HOMEWORK_TITLE=? AND TEACHER_NAME=? AND STUDENT_NAME=?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, homework_title);
stmt.setString(2, teacher_name);
stmt.setString(3, student.getStudent_name());

try (ResultSet rs = stmt.executeQuery()) {
    if(rs.next()) {
        number = rs.getInt(1);
    }
}

①语句为在Submit表中搜索homework_title、teacher_name及student_name是否有对应的记录,stmt.setString(1, homework_title)即为第一个问号位置对应homework_title的值。
②ResultSet rs = stmt.executeQuery(),rs.getInt(1)得到执行后的结果。

5.部分html语言用法
①style="pointer-events: none"将链接设置为不可链接;
②disabled将按钮设置为不可点;
③<%if(!no_submit) {%>此处为该条件下的属性设置<%}%>;

<a type="submit" class="btn btn-primary btn-xs" href="edit_homework.jsp?homework_title=<%=homework.getHomework_title()%>&teacher_name=<%=homework.getTeacher_name()%>" <%if(!no_submit) {%> disabled style="pointer-events: none" <%}%>>上传作业</a>

④input属性设置为readonly可使文本框只可读不可改,不要设置为disabled,否则若传值到servlet中,servlet无法获取

<input type="text" class="form-control" id="homework_title" name="homework_title" value="<%=request.getParameter("homework_title")%>" readonly />
相关标签: JavaEE架构与应用