博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
课程存储校对:程序设计思想、源程序代码、运行结果截图,以及开发过程中的项目计划日志、时间记录日志、缺陷记录日志(PSP0级记录)。...
阅读量:5267 次
发布时间:2019-06-14

本文共 10400 字,大约阅读时间需要 34 分钟。

1.程序设计思想

  ⑴将JDBC驱动jar包导入到WEB-INF的lib文件夹下

  ⑵建立数据库,在数据库中建表,分别将课程名称、任课教师及上课地点录入到列中

  ⑶首先写出加载驱动、关闭资源的工具类和异常处理类,然后再写出课程信息模型类、对课程信息进行操作的接口及实现接口的方法类

  ⑷.java文件建立好之后,用jsp写做信息录入界面和信息核对的反馈界面,另外接收任课教师信息的字符串要用.equals方法判别是否属于5个限定的教师之中,接收上课地点的字符串要用substring()或者startwith()方法判别该字符串是否以限定的四个教学楼名称开头,然后设置提示信息并跳转回信息录入界面重新输入。

  ⑸对于录入的数据由于是汉字,还涉及到一个编码不匹配的问题,需要设计一个过滤器类,并对web.xml进行相应的修改,将用户发送的所有请求先通过此过滤器过滤,本程序中也就是将编码集改为UTF-8,从而使录入的汉字能在数据库中正确显示。

2.源程序代码

  1.工具类

package Util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class DBUtil {    public static Connection getConnection()     {        try         {            //加载驱动            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();            System.out.println("驱动加载成功!");        }        catch(ClassNotFoundException | InstantiationException | IllegalAccessException e)         {                        System.out.println("驱动加载失败!");            e.printStackTrace();        }        String user="sa";        String password="woshizcy0919";        String url="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=Class_DB";        Connection connection=null;        try         {            //创建链接对象connection            connection=DriverManager.getConnection(url, user, password);            System.out.println("数据库连接成功!");        }        catch(SQLException e)         {            System.out.println("数据库连接失败!");            e.printStackTrace();        }        return connection;    }        //关闭资源的方法    public static void close(Connection connection)     {        if(connection!=null)         {            try             {                connection.close();            }             catch (SQLException e)             {                e.printStackTrace();            }        }    }        public static void close(PreparedStatement preparedStatement)     {                if(preparedStatement !=null)         {            try             {                preparedStatement.close();            }             catch (SQLException e)             {                e.printStackTrace();            }        }    }        public static void close(ResultSet resultSet)     {            if(resultSet!=null)             {                try                 {                    resultSet.close();                }                 catch (SQLException e)                 {                    e.printStackTrace();                }            }    }    }

 

  2.异常处理类

    

package Util;public class ClassModelException extends RuntimeException{    public ClassModelException() {        super();        // TODO Auto-generated constructor stub    }    public ClassModelException(String arg0, Throwable arg1, boolean arg2, boolean arg3) {        super(arg0, arg1, arg2, arg3);        // TODO Auto-generated constructor stub    }    public ClassModelException(String arg0, Throwable arg1) {        super(arg0, arg1);        // TODO Auto-generated constructor stub    }    public ClassModelException(String arg0) {        super(arg0);        // TODO Auto-generated constructor stub    }    public ClassModelException(Throwable arg0) {        super(arg0);        // TODO Auto-generated constructor stub    }    }

 

  3.模型类

    

package model;public class ClassModel {    private String classname;    private String teacher;    private String place;    public String getClassname()     {        return classname;    }    public void setClassname(String classname)     {        this.classname = classname;    }    public String getTeacher()     {        return teacher;    }    public void setTeacher(String teacher)     {        this.teacher = teacher;    }    public String getPlace()     {        return place;    }    public void setPlace(String place)     {        this.place = place;    }    }

 

  4.对课程信息操作的接口

    

package dao;import model.ClassModel;public interface IClassModelDao {    public void add(ClassModel classmodel);}

 

  5.实现接口的方法

    

package dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import Util.ClassModelException;import Util.DBUtil;import model.ClassModel;public class ClassModelDaoImpl implements IClassModelDao{    public void add(ClassModel classmodel)     {        //获得连接的对象        Connection connection=DBUtil.getConnection();        //准备sql语句        String sql="select count(*) from t_classmodel where classname=?";        //创建语句传输对象        PreparedStatement preparedStatement=null;        ResultSet resultSet=null;        try         {        preparedStatement=connection.prepareStatement(sql);        preparedStatement.setString(1, classmodel.getClassname());        //接收结果集        resultSet=preparedStatement.executeQuery();            //遍历结果集        while(resultSet.next())         {            if(resultSet.getInt(1)>0)             {                throw new ClassModelException("该课程已存在!");            }        }        sql="insert into t_classmodel(classname,teacher,place) values(?,?,?)";        preparedStatement=connection.prepareStatement(sql);        preparedStatement.setString(1, classmodel.getClassname());        preparedStatement.setString(2, classmodel.getTeacher());        preparedStatement.setString(3, classmodel.getPlace());        preparedStatement.executeUpdate();        }         catch (SQLException e)         {            e.printStackTrace();        }        finally         {            //关闭JDBC对象            DBUtil.close(resultSet);            DBUtil.close(preparedStatement);            DBUtil.close(connection);            }    }}

  6.过滤器类

package filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class CharFilter implements Filter{    String encoding = null;    @Override    public void init(FilterConfig filterConfig) throws ServletException     {        encoding = filterConfig.getInitParameter("encoding");    }        @Override    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain )            throws IOException, ServletException     {        //request.setCharacterEncoding("utf-8");        request.setCharacterEncoding(encoding);        System.out.println(encoding);        chain.doFilter(request, response);    }        @Override    public void destroy() {        // TODO Auto-generated method stub            }        }

 

  7.web.xml

Class_Message
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
CharFilter
filter.CharFilter
encoding
UTF-8
CharFilter
/*

 

  8.课程信息录入界面

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>课程信息录入
<%=request.getAttribute("error") %>
课程名称:
任课教师:
上课地点:

 

  9.课程信息核对的方法及返回界面

<%@page import="Util.ClassModelException"%><%@page import="dao.ClassModelDaoImpl"%><%@page import="model.ClassModel"%><%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>课程信息验证<%    //接收客户端传递过来的参数    String classname = request.getParameter("classname");    String teacher = request.getParameter("teacher");    String place = request.getParameter("place");    if(classname == null || "".equals(classname.trim())||teacher == null || "".equals(teacher.trim())||place == null || "".equals(place.trim()))    {        request.setAttribute("error", "所有信息均不能为空!");%>    
<% }%><% if(!(teacher.equals("王建民")||teacher.equals("刘立嘉")||teacher.equals("刘丹")||teacher.equals("王辉")||teacher.equals("杨子光"))) { request.setAttribute("error", "任课教师输入错误,请重新输入!");%>
<% }%><% System.out.println(place.substring(0,2)); if(!place.substring(0,2).equals("基教")&&!place.substring(0,2).equals("一教")&&!place.substring(0,2).equals("二教")&&!place.substring(0,2).equals("三教")) {
//用.equals判断字符串内容是否相等,而==是比较两个字符串是否引用同一个字符串变量 request.setAttribute("error", "上课地点输入错误,请重新输入!");%>
<% }%><% ClassModel classmodel = new ClassModel(); classmodel.setClassname(classname); classmodel.setTeacher(teacher); classmodel.setPlace(place); ClassModelDaoImpl classModelDaoImpl = new ClassModelDaoImpl(); try{ classModelDaoImpl.add(classmodel);%> 课程保存成功!
返回
<% }catch(ClassModelException e){%>

发生错误 : <%=e.getMessage() %>

<% } %>

 

 

3.运行结果截图

(1)正确输入界面及结果

        

      

 

(2)任课教师输入错误及结果

 

(3)上课地点输入错误及结果

 

 

4.项目计划日志

 (1)整体计划时间:120分钟

     阶段计划时间:.java程序——45分钟,.jsp程序——50分钟,建表和导包——5分钟

(2)整体完成时间:155分钟

    阶段完成时间:.java程序——65分钟,.jsp程序——65分钟,建表和导包——5分钟

(3)注入缺陷数量:3个

    排除缺陷数量:3个

 

5.时间记录日志

  开始时间:11月28日 9:05

  结束时间:11月28日 17:40

  中断时间:11月28日 9:50~15:50

  净时间:155分钟

  备注(中断原因):上午3.4数据结构上机课、中午吃饭、午休、下午3点导员开会

6.缺陷记录日志

  1.form表单的提交方法开始用的是get,这个会把用户输入的信息显示到地址栏上,不安全,应改为post

  2.输入数据库开始的时候中文信息直接存到数据库会乱码,应设计一个过滤器类,并对web.xml进行相应修改,达到用户发送的请求都能被UTF-8编码集提前过滤,保证输入数据库的数据不乱码

  3.开始用==方法对输入的字符串与限定字符串判定,结果总是不相等,这是由于用.equals判断字符串内容是否相等,而==是比较两个字符串是否引用同一个字符串对象,这是.equals与==方法判定字符串的重要区别,所以应改为.equals方法判等

 7.总结

  这次软件工程概论课堂测试相对比较基础,只是做一个简单的保存课程信息的界面并存到数据库中,存放之前对各类输入的字符串进行条件判别,如果符合条件才录入数据库,如果不符合条件需要有提示语句,并跳转到信息录入的界面让用户重新输入,这就涉及到两个问题,一个是编码集之间的转化出现乱码,让我学会了用过滤器类来提前对用户发送的每一条请求都过滤为UTF-8编码集,以此解决了中文乱码问题;另外一个就是对接收的用户字符串进行条件判别,让我巩固了.equals与==判等的重要区别,知道了如果不符合条件怎么通过界面提示用户和怎么不再继续运行而跳转到键入信息的初始页面。还有我觉得我不足的地方,空字符串的判别只是一律的提醒不能为空,而不能做到哪个不输入提示哪个不能为空;还有提示的位置没有调换到对应输入框的后边,这样更加符合用户需求;还有就是如果出现输入的字符串与限定的字符串要求不匹配的话,我设计的只是跳转到原界面重新输入,我在想能不能把这个写到异常处理类中,出现错误则抛出异常,并通过跳转到新的界面用字符串的形式提示用户异常为什么。

转载于:https://www.cnblogs.com/iCheny/p/7911415.html

你可能感兴趣的文章
MySQL数据库 基本操作
查看>>
请大家规范电子邮件用法养成好的邮件习惯
查看>>
微信游戏和微信公众号小说如何有效做好域名防封,给大家分享我的有效经验...
查看>>
前端跨域知识总结
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
[Linux内存]linux内存学习(二)——分段和分页
查看>>
XHTML学习要点
查看>>
JavaScript的学习要点
查看>>
我用到的 Linq 扩展方法
查看>>
18.1 线程简介
查看>>
C# 命令行解析
查看>>
Day13
查看>>
[leedcode 08]String to Integer (atoi)
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
程序员常用软件,你用了哪些
查看>>
1043: [HAOI2008]下落的圆盘 - BZOJ
查看>>
线程同步之读写锁
查看>>