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


阅读完这篇博客,可以基本了解一些基本的javaweb项目的开发过流程。

一、系统分析与设计

1.需求分析

在这里插入图片描述

2.数据库设计

  • s_student
parametertypedescription
nameVARCHAR(20)学生姓名,非空
usernameVARCHAR(20)主键
passwordVARCHAR(20)密码,非空
  • s_teacher
parametertypedescription
nameVARCHAR(20)教师姓名,非空
usernameVARCHAR(20)主键
passwordVARCHAR(20)密码,非空
  • s_homework
parametertypedescription
titleVARCHAR(20)作业标题,主键
contentVARCHAR(20)作业描述
create_timeTIMESTAMP创建时间
  • s_student_homework
parametertypedescription
student_usernameVARCHAR(20)学生用户名,主键
homework_titleVARCHAR(20)作业标题,主键
homework_contentVARCHAR(20)作业内容
create_timeTIMESTAMP作业提交时间

3.业务流程设计

![(https://img-blog.csdnimg.cn/20200312231152939.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDQ2ODc5,size_16,color_FFFFFF,t_70)

在这里插入图片描述

4.JDBC封装处理

JDBC封装处理,对JDBC访问数据库进行封装,简化代码的使用量。
代码如下

package com.code.jdbc;

import java.sql.*;

public class JDBCControll {
    public void setStatment(Statement statment) {
        this.statment = statment;
    }

    public void setResultSet(ResultSet resultSet) {
        this.resultSet = resultSet;
    }

    private Connection connection;
    private Statement statment;
    private ResultSet resultSet;

    public Connection getConnection() {
        return connection;
    }

    public Statement getStatment() {
        return statment;
    }

    public ResultSet getResultSet() {
        return resultSet;
    }



    public  String ConnectMysql(){
        String url = "jdbc:mysql://127.0.0.1:3306/school?serverTimezone=UTC";
        String driveName = "com.mysql.cj.jdbc.Driver";

        try{
            Class.forName(driveName);
            connection = DriverManager.getConnection(url,"root","123456");
            statment = connection.createStatement();
            //resultSet = statment.executeQuery(sqlString);


            /*while(resultSet.next()){
                System.out.println(resultSet.getString(1));
                System.out.println(resultSet.getString(2));
                System.out.println(resultSet.getString(3));
                System.out.println(resultSet.getString(4));
                System.out.println(resultSet.getString(5));
                System.out.println(resultSet.getString(6));
            }*/





        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    public ResultSet excuteSQL(String sqlString){
        ConnectMysql();
        try {
            resultSet = statment.executeQuery(sqlString);
            return resultSet;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;

    }

    public boolean excuteUpdateSQL(String sqlString){
        ConnectMysql();
        try {
            boolean flag =  statment.execute(sqlString);

            return true;

        } catch (SQLException e) {
            e.printStackTrace();
           return false;
        }

    }


    public void closeMysql(){
        try {
            if(resultSet!=null)
                resultSet.close();
            if(statment!=null)
                statment.close();
            if(connection!=null)
                connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}

excuteUpdateSQL()函数封装对update, Insert, delete等sql语句的封装,excuteSQL()封装select查询语句,外部可直接调用这两个函数进行查询,之后通过getResultSet()方法获得数据集。

二、系统模块的实现

(注:详细代码请从git地址下载)

1.登陆模块

  • 登陆界面
    在这里插入图片描述
    简单整洁,手工完成,没有套用模板
  • 后端处理代码
@WebServlet("/dealLogin")
public class DealLogin extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String userName = req.getParameter("myname");
        System.out.println(new String(req.getParameter("myname") .getBytes("utf-8"),"utf-8"));
        String password =req.getParameter("mypwd");
        System.out.println(new String(req.getParameter("mypwd") .getBytes("iso8859-1"),"utf-8"));
        TeacherJDBC teacherJDBC = new TeacherJDBC();
        StudentJDBC studentJDBC = new StudentJDBC();
        if(teacherJDBC.getTeacherIdentity(userName,password)){
            System.out.println("teacher");
            req.getRequestDispatcher("jsp/teacherManage.jsp").forward(req, resp);
            req.getSession().setAttribute("username1",userName);
        }else if(studentJDBC.getStudentIdentity(userName,password)){
            System.out.println("student");

            req.getRequestDispatcher("jsp/studentManage.jsp").forward(req, resp);
            req.getSession().setAttribute("username1",userName);
        }else{

        }


        req.getRequestDispatcher("jsp/login.jsp").forward(req, resp);
    }
}

根据输入的用户名判断身份

2.教师功能选择模块

  • 功能选择界面
    在这里插入图片描述
    可以选择教师所对应添加学生,查询作业,添加作业功能

3.添加学生

  • 系统界面
    在这里插入图片描述
    输入学生信息以添加学生账户
  • 后端处理代码

@WebServlet("/dealAddStudent")
public class DealAddStudent extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        StudentJDBC studentJDBC = new StudentJDBC();
        boolean flag = studentJDBC.addStudent(req.getParameter("usname"),req.getParameter("password"),req.getParameter("name"));
        PrintWriter out = resp.getWriter();
        if(flag){
            out.println("<script>");
            out.println("alert('Add successful!');");
            out.println("</script>");
        }else{
            out.println("<script>");
            out.println("alert('Add fail!');");
            out.println("</script>");
        }

    }
}

添加成功提示“Add Successful!”,否则提示"Add fail"

4.添加作业

  • 系统界面
    在这里插入图片描述
    输入作业题目以及描述发布作业
  • 后端处理代码
@WebServlet("/dealAddHomework")
public class dealAddHomework extends HttpServlet {
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {




        TeacherJDBC teacherJDBC = new TeacherJDBC();
        boolean flag = teacherJDBC.addHomework(req.getParameter("title"),req.getParameter("content"));
        PrintWriter out = resp.getWriter();
        if(flag){
            out.println("<script>");
            out.println("alert('Add successful!');");
            out.println("</script>");
        }else{
            out.println("<script>");
            out.println("alert('Add fail!');");
            out.println("</script>");
        }

    }
}

5.查询作业

  • 系统界面
    -在这里插入图片描述
    这个界面是一个所有发布作业的总览,点击查看可以查看此次作业的提交情况。
    在这里插入图片描述

6.学生查看作业

在这里插入图片描述
同样可以查看所有的作业信息,并且可以提交作业
在这里插入图片描述
设置只可以编辑作业内容,作业题目是不可编辑的是老师设定的题目。

三、常见的bug及问题解决

1.代码地址

https://github.com/dbylx/HomeworkManagement

2查询语句报错问题

注意executeQuery只可以执行查询语句,不可以执行Delete,Insert, 以及Update语句。

3中文乱问题

将jsp网页数据传入后台从idea输出可能会出现乱码,但是utf-8编码的数据显示正常,一般是idea自身编码的问题,可以设置idea的编码,当然也可以忽略,因为它基本不影响我们的程序。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值