MES管理系统(期中)

写在最前
自学的话是跟着b站上黑马程序员的视频和文档资料,看的是这个视频

建议在黑马公众号,获取课程资料,跟着课程资料里的ppt或md文档自学,实在看不懂的在去看视频,如果一集一集刷,耗时

MES管理系统

1.新建一个java的maven项目

2.maven中导入相关依赖

(需要学习maven相关知识)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.stdu</groupId>
    <artifactId>MES</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <!--            导入Servlet API-->
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/jstl/jstl -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/taglibs/standard -->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>



    </dependencies>



    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>

        <maven.compiler.target>1.8</maven.compiler.target>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <!--            tomcat 插件-->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <!--                <configuration>-->
                <!--                    <port>80</port>-->
                <!--                    &lt;!&ndash;                    <path>/</path>&ndash;&gt;-->
                <!--                </configuration>-->
            </plugin>
        </plugins>
    </build>

</project>

3.在resources下创建mybatis-config.xml

(需要学习mybatis相关知识)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--    起别名-->
    <typeAliases>
        <package name="com.stdu.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///test?useSSL=false&amp;allowPublicKeyRetrieval=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <package name="com.stdu"/>
    </mappers>
</configuration>

4.Project Structure->Facets 添加webapp包和web.xml,然后将WEB-INF包拖到webapp包下

(webapp包下放一些前端代码文件)

5.创建java实体类Plan , 创建数据库表

5.1 Plan实体类

package com.stdu.pojo;

public class Plan {
    private Integer  id;//编号,用于数据库自增
    private String name;//生产批次
    private String planId;//工号
    private String worker;//工人姓名
    private int outNumber;//转出总数
    private int outGoodNumber;//转出合格数
    private int defect;//次品数
    private int lost; //丢失数
    private String time;//上报日期


    public Plan() {
    }

    public Plan(Integer id, String name, String planId, String worker, int outNumber, int outGoodNumber, int defect, int lost, String time) {
        this.id = id;
        this.name = name;
        this.planId = planId;
        this.worker = worker;
        this.outNumber = outNumber;
        this.outGoodNumber = outGoodNumber;
        this.defect = defect;
        this.lost = lost;
        this.time = time;
    }

    /**
     * 获取
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return planId
     */
    public String getPlanId() {
        return planId;
    }

    /**
     * 设置
     * @param planId
     */
    public void setPlanId(String planId) {
        this.planId = planId;
    }

    /**
     * 获取
     * @return worker
     */
    public String getWorker() {
        return worker;
    }

    /**
     * 设置
     * @param worker
     */
    public void setWorker(String worker) {
        this.worker = worker;
    }

    /**
     * 获取
     * @return outNumber
     */
    public int getOutNumber() {
        return outNumber;
    }

    /**
     * 设置
     * @param outNumber
     */
    public void setOutNumber(int outNumber) {
        this.outNumber = outNumber;
    }

    /**
     * 获取
     * @return outGoodNumber
     */
    public int getOutGoodNumber() {
        return outGoodNumber;
    }

    /**
     * 设置
     * @param outGoodNumber
     */
    public void setOutGoodNumber(int outGoodNumber) {
        this.outGoodNumber = outGoodNumber;
    }

    /**
     * 获取
     * @return defect
     */
    public int getDefect() {
        return defect;
    }

    /**
     * 设置
     * @param defect
     */
    public void setDefect(int defect) {
        this.defect = defect;
    }

    /**
     * 获取
     * @return lost
     */
    public int getLost() {
        return lost;
    }

    /**
     * 设置
     * @param lost
     */
    public void setLost(int lost) {
        this.lost = lost;
    }

    /**
     * 获取
     * @return time
     */
    public String getTime() {
        return time;
    }

    /**
     * 设置
     * @param time
     */
    public void setTime(String time) {
        this.time = time;
    }

    public String toString() {
        return "Plan{id = " + id + ", name = " + name + ", planId = " + planId + ", worker = " + worker + ", outNumber = " + outNumber + ", outGoodNumber = " + outGoodNumber + ", defect = " + defect + ", lost = " + lost + ", time = " + time + "}";
    }
}

5.2 在数据库中创建plan表

(需要学习sql语句基本增删改查操作)

CREATE TABLE plan (
    pid int primary key auto_increment,
    id varchar(30),
    name VARCHAR(50) NOT NULL,
    overview varchar(50), -- 计划概述
    pmethod VARCHAR(10), -- 排产方式
    startTime varchar(15),
    endTime varchar(15),
    process varchar(50)
);

6. 在web-app下创建一个主页面index.html

(需要学习html相关语法知识)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页面</title>
    <link href="css/mainPage.css" rel="stylesheet"></link>
</head>
<body>
<h1 align="center">MES管理系统</h1>
<br>
<br>
<br>
<div align="center">
    <table border="0" width="150" height="300">
        <thead>
        <tr><td>功能列表</td></tr>
        </thead>
        <tbody>
        <tr><td><a href = "add.html">提交日报</a></td></tr>
        <tr><td><a href = "update.html">修改日报</a></td></tr>
        <tr><td><a href = "delete.html">删除日报</a></td></tr>
        <tr><td><a href = "query.html">查询日报</a></td></tr>
        </tbody>
    </table>
</div>

</body>
</html>

界面展示

可以为界面添加css样式,让页面变得更好看(需要学习css相关知识)

接下来只展示添加和查询的操作,删除和修改与之类似,不再赘述

7.添加操作

7.1先写dao层操控数据库的代码

在com.stdu.mapper下定义PlanMapper接口以及在resouces.com.stdu.mapper下写PlanMapper.xml配置文件
其中PlanMapper接口:

package com.stdu.mapper;
import com.stdu.pojo.Plan;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;

public interface PlanMapper {
  //注解实现sql添加语句,
    @Insert("insert into plan(name,planId,worker,outNumber,outGoodNumber,defect,lost,time) values(#{name},#{planId},#{worker},#{outNumber},#{outGoodNumber},#{defect},#{lost},#{time})")
    void add(Plan p);

@Select("select * from plan")
    List<Plan> selectAll();
}

PlanMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.stdu.mapper.PlanMapper">

</mapper>

7.2 service层

(层次的话可以看一下MVC架构)

PlanService接口

package com.stdu.service;

import com.stdu.mapper.PlanMapper;
import com.stdu.pojo.Plan;
import com.stdu.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

public class PlanService {
    SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();
    /**
     * 查询所有
     * @return
     */
    public List<Plan> selectAll(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        PlanMapper mapper = sqlSession.getMapper(PlanMapper.class);
        List<Plan> plans = mapper.selectAll();
        sqlSession.commit();
        sqlSession.close();
        return plans;
    }

    public void add(Plan p){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        PlanMapper mapper = sqlSession.getMapper(PlanMapper.class);
        mapper.add(p);
        sqlSession.commit();
        sqlSession.close();
    }
}

其中用到的工具类SqlSessionFactoryUtils是需要自己写的,SqlSessionFactoryUtils工具类的作用就是封装一些代码,避免写一些重复的代码
SqlSessionFactoryUtils

package com.stdu.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class SqlSessionFactoryUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        //静态代码块会随着类的加载而自动执行,且只执行一次
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}

7.3 接下来书写Servlet代码

这里用来处理前端表单传来的数据,封装为一个Plan类,添加进数据库
AddServlet

package com.stdu.web;

import com.stdu.mapper.PlanMapper;
import com.stdu.pojo.Plan;
import com.stdu.service.PlanService;
import com.stdu.util.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/addServlet")
public class AddServlet extends HttpServlet {
    private PlanService service = new PlanService();
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决乱码问题
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        String name = req.getParameter("name");
        String planId = req.getParameter("planId");
        String worker = req.getParameter("worker");
        String outNumber = req.getParameter("outNumber");
        String outGoodNumber = req.getParameter("outGoodNumber");
        String defect = req.getParameter("defect");
        String lost = req.getParameter("lost");
        String time = req.getParameter("time");
        Plan p = new Plan(null, name, planId, worker, Integer.parseInt(outNumber),Integer.parseInt(outGoodNumber),Integer.parseInt(defect),Integer.parseInt(lost),time);
        service.add(p);
        req.getRequestDispatcher("/selectAllServlet").forward(req,resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
}

这里在添加完之后,请求转发到了selectAllServlet,目的是为了添加完后自动执行查询操作,使看到添加结果,查询讲解往下

7.4 最后一步前端界面add.html

生产批次和工号要添加javascript代码取值,判断是否格式正确
日报押平判断规则也要写js代码判断,如果押平,表单可以提交,否则,表单不能提交,并弹出警告
add.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>add</title>
    <link rel="stylesheet" href="css/mainPage.css"></link>
</head>


<body>
    <center>
        <h1>新增生产计划</h1>
        <form action="/TestOne/addServlet" method="post" id="form">
            生产批次: <input type="text" name="name" id = "i1"> <span id="id_err" style="display: none">生产批次必须为10位</span><br><br>
            工号: <input type="text" name="planId" id = "i2"> <span id = "planId_err" style="display: none">工号必须为6位</span><br><br>
            工人姓名: <input type="text" name="worker"><br><br>
            转出总数: <input type="text" name="outNumber"><br><br>
            转出合格数: <input type="text" name="outGoodNumber"><br><br>
            次品数: <input type="text" name="defect"><br><br>
            丢失数: <input type="text" name="lost"><br><br>
            上报日期: <input type="text" name="time"><br><br>
            <input type="submit" value="提交"></input>
             </br></br></input>
        </form>
    </center>


<script>

    let id1 = document.getElementById("i1");
    //失去焦点
    id1.onblur = function () {
        let j = id1.value.trim();
        if(j.length != 10){
            document.getElementById("id_err").style.display = "block";
            document.getElementById("id_err").style.color = "red";
        }
        else document.getElementById("id_err").style.display = "none";

    }

    //判断工号是否为6位
    let planId = document.getElementById("i2");
    planId.onblur = function () {
        let j2 = planId.value.trim();
        if(j2.length != 6){
            document.getElementById("planId_err").style.display = "block";
            document.getElementById("planId_err").style.color = "red";
        }
        else document.getElementById("planId_err").style.display = "none";
    }

    //判断转出总数 = 转出合格数+次品数+丢失数,如果相等可以提交,否则警告
    let outNumber = document.getElementsByName("outNumber")[0];
    let outGoodNumber = document.getElementsByName("outGoodNumber")[0];
    let defect = document.getElementsByName("defect")[0];
    let lost = document.getElementsByName("lost")[0];
    //提交判断
    document.getElementById("form").onsubmit = function () {
        let sum = parseInt(outNumber.value) - parseInt(outGoodNumber.value) - parseInt(defect.value) - parseInt(lost.value);
        if(sum != 0){
            alert("上报数据有误");
            return false;
        }
        else return true;
    }

</script>

</body>
</html>

界面展示

8. 查询操作

查询操作dao层和service层与添加类似,不再写
主要是Servlet的代码和jsp的代码
SelectAllServlet

package com.stdu.web;

import com.stdu.pojo.Plan;
import com.stdu.service.PlanService;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/selectAllServlet")
public class SelectAllServlet extends HttpServlet {
    private PlanService service = new PlanService();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 从service层获取所有计划信息
        List<Plan> plans = service.selectAll();
        // 将获取到的计划信息设置到请求范围中,以便在JSP页面中使用
        req.setAttribute("plans",plans);
        // 打印计划信息,用于调试(已注释掉)
        //System.out.println(plans);
        // 转发请求到/plan.jsp页面,以便显示计划信息
        req.getRequestDispatcher("/plan.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

从selectAllServlet中转发来的plan对象,可通过${}的形式在jsp文件中展示出来
plan.jsp
(需要学习jsp和jstl相关知识)

<%--
  Created by IntelliJ IDEA.
  User: lenovo
  Date: 2024/10/24
  Time: 16:49
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<input type="button" id = 'add' value="返回">
<hr>
<table border="1" cellspacing="0" width="80%">
    <tr>
        <th>生产批次</th>
        <th>工号</th>
        <th>工人姓名</th>
        <th>转出总数</th>
        <th>转出合格数</th>
        <th>次品数</th>
        <th>丢失数</th>
        <th>上报日期</th>
        <th>功能列表</th>
    </tr>

    <c:forEach items="${plans}" var="plan">
        <tr align="center">
           <td>${plan.name}</td>
            <td>${plan.planId}</td>
            <td>${plan.worker}</td>
            <td>${plan.outNumber}</td>
            <td>${plan.outGoodNumber}</td>
            <td>${plan.defect}</td>
            <td>${plan.lost}</td>
            <td>${plan.time}</td>
            <td><a href="/TestOne/updateServlet?time=${plan.time}">修改 </a> <a href = "/TestOne/deleteByIdServlet?id=${plan.id}" onclick='return confirm("是否要删除?");'>删除</a></td>
        </tr>
    </c:forEach>
</table>
</body>
<script>
    document.getElementById("add").onclick = function () {
        location.href = "/TestOne/index.html";
    }
</script>
</html>

界面展示

这是查询全部的代码,具体按什么查询,只需书写各自的dao层,service层和Servlet和html代码,最终都转发到plan.jsp中进行展示

写在最后
代码有些小bug,如果出现相同日期的日报,则会出现修改和删除错误,所以没写..

posted @ 2024-11-04 20:54  XYu1230  阅读(180)  评论(3编辑  收藏  举报