博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
关于IE和火狐,谷歌,Safari对Html标签Object和Embed的支持问题
查看>>
MyEclipse DB Browser使用图文全攻略
查看>>
poj3320 Jessica's Reading Problem(尺取思路+STL)
查看>>
A - Vasya and Socks
查看>>
项目管理、设计开发、代码管理、bug管理工具介绍
查看>>
分布式计算开源框架Hadoop介绍
查看>>
安卓平台接口剖析
查看>>
linux文件编码查看与修改
查看>>
[Java] 系统环境变量配置
查看>>
坏的事情不都会带来坏的结果
查看>>
RPC的基础:调研EOS插件http_plugin
查看>>
HIT1946 希尔伯特分形曲线(dfs)
查看>>
第二次团队冲刺第二天
查看>>
青瓷引擎之纯JavaScript打造HTML5游戏第二弹——《跳跃的方块》Part 2
查看>>
bzoj 2257 (JSOI 2009) 瓶子与燃料
查看>>
11)Java abstract class 和 interface
查看>>
使用xrdp或Xmanager 远程连接 CentOS6
查看>>
SEH简单研究
查看>>
Linux误删恢复
查看>>
Unity调用Windows窗口句柄,选择文件和目录
查看>>