设计思想:创建一个User类,具有三个String类型变量,用来存放需要的属性值。创建一个UserDaoimpl类,用来写向数据库添加数据的函数,添加数据时只需调用此函数即可。创建一个UserException类,用来抛出异常信息。ValidateUtil用来对输入时未输入的数据进行提示。addInput用来显示首界面,add界面用来接收客户端传递过来的参数,并对参数值进行判断,符合条件调用添加函数将数据添加到数据库,不符合条件报出添加错误信息。
源代码:
User
package com.jaovo.msg.model; public class User { private String coursename; private String teacher; private String address; public String getCoursename() { return coursename; } public void setCoursename(String coursename) { this.coursename = coursename; } public String getTeacher() { return teacher; } public void setTeacher(String teacher) { this.teacher = teacher; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
IUserDao
package com.jaovo.msg.dao; import com.jaovo.msg.model.User; public interface IUserDao { public void add(User user); }
UserDaoimpl
package com.jaovo.msg.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.jaovo.msg.Util.DBUtil; import com.jaovo.msg.Util.UserException; import com.jaovo.msg.model.User; public class UserDaoimpl implements IUserDao{ @Override public void add(User user) { //获得链接对象 Connection connection = DBUtil.getConnection(); //准备sql语句 String sql = "select count(*) from t_user2 where coursename = ?"; //创建语句传输对象 PreparedStatement preparedStatement = null; ResultSet resultSet = null; try { preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, user.getCoursename()); //接收结果集 resultSet = preparedStatement.executeQuery(); //遍历结果集 /*while(resultSet.next()) { if (resultSet.getInt(1) > 0) { throw new UserException("用户已存在") ; } }*/ sql = "insert into t_user2(coursename,teacher,address) value (?,?,?)"; preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, user.getCoursename()); preparedStatement.setString(2, user.getTeacher()); preparedStatement.setString(3, user.getAddress()); preparedStatement.executeUpdate(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { //关闭资源 DBUtil.close(resultSet); DBUtil.close(preparedStatement); DBUtil.close(connection); } } }
DBUtil
package com.jaovo.msg.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 { //1 加载驱动 Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } String user = "root"; String password = "root"; String url = "jdbc:mysql://localhost:3306/jaovo_msg"; Connection connection = null; try { //2 创建链接对象connection connection = DriverManager.getConnection(url,user,password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return connection; } //关闭资源的方法 public static void close(Connection connection ) { try { if (connection != null) { connection.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void close(PreparedStatement preparedStatement ) { try { if (preparedStatement != null) { preparedStatement.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void close(ResultSet resultSet ) { try { if (resultSet != null) { resultSet.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
UserException
package com.jaovo.msg.Util; public class UserException extends RuntimeException{ public UserException() { super(); // TODO Auto-generated constructor stub } public UserException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { super(message, cause, enableSuppression, writableStackTrace); // TODO Auto-generated constructor stub } public UserException(String message, Throwable cause) { super(message, cause); // TODO Auto-generated constructor stub } public UserException(String message) { super(message); // TODO Auto-generated constructor stub } public UserException(Throwable cause) { super(cause); // TODO Auto-generated constructor stub } }
ValidateUtil
package com.jaovo.msg.Util; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; public class ValidateUtil { public static boolean validateNull(HttpServletRequest request,String[] fileds) { boolean validate = true; //map对象用来装载不同的错误信息 Map<String,String> errorMsg = new HashMap(); for(String filed :fileds) { String value = request.getParameter(filed); if (value == null || "".equals(value.trim())) { validate = false; errorMsg.put(filed, filed+"不能为空"); } if (!validate) { request.setAttribute("errormsg", errorMsg); } } return validate; } public static String showError(HttpServletRequest request , String filed) { Map<String, String> errorMsg = (Map<String,String>)request.getAttribute("errormsg"); if (errorMsg == null) { return ""; } String msg = errorMsg.get(filed); if (msg == null) { return ""; } return msg; } }
add.jsp
<%@page import="com.jaovo.msg.Util.ValidateUtil"%> <%@page import="com.jaovo.msg.Util.UserException"%> <%@page import="com.jaovo.msg.dao.UserDaoimpl"%> <%@page import="com.jaovo.msg.model.User"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <% //接收客户端传递过来的参数 String coursename= request.getParameter("coursename"); String teacher= request.getParameter("teacher"); String address= request.getParameter("address"); boolean validate = ValidateUtil.validateNull(request, new String[]{"coursename","teacher","address"}); if(!validate){ %> <jsp:forward page="addInput.jsp"></jsp:forward> <% } if(teacher.equals("王建民")||teacher.equals("刘立嘉")||teacher.equals("刘丹")||teacher.equals("王辉")||teacher.equals("杨子光")) { if(address.startsWith("一教")||address.startsWith("二教")||address.startsWith("基教")||address.startsWith("三教")) { User user = new User(); user.setCoursename(coursename); user.setTeacher(teacher); user.setAddress(address); UserDaoimpl userDao = new UserDaoimpl(); try{ userDao.add(user); out.println("添加成功"); }catch(UserException e){ %> <h2 style="color:red ; font-size:50px">发生错误 : <%=e.getMessage() %></h2> <% } } else { out.println("添加失败,没有该教学楼"); } } else { out.println("添加失败,没有该教师"); } %> </html>
addInput.jsp
<%@page import="com.jaovo.msg.Util.ValidateUtil"%> <%@page import="java.util.Map"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>增加课程信息页面</title> </head> <body> <%-- <%Map<String,String> errorMsg = (Map<String,String>)request.getAttribute("errormsg"); --%> <%-- %> --%> <form action="add.jsp" method="get"> <table align="center" > <tr> <td>课程名称 : </td> <td> <input type="text" name="coursename" /> <%=ValidateUtil.showError(request, "coursename")%> </td> </tr> <tr> <td>任课教师:</td> <td> <input type="text" name="teacher" /> <%=ValidateUtil.showError(request, "teacher")%> </td> </tr> <tr> <td>上课地点:</td> <td> <input type="text" name="address" /> <%=ValidateUtil.showError(request, "address")%> </td> </tr> <tr align="center"> <td > <input type="submit" value="保存" /> </td> </tr> </table> </form> </body> </html>
运行成果截图:
缺陷记录日志
学生:孟庆淋
日期:2017.11.28
教员:王建民
程序号:1
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
2017.11.28 | 1 | 20 | 编码 | 编译 | 1min | 书写问题 |
描述:在进行判断时候将teacher变量写成了coursename变量 |
时间记录日志
学生:孟庆淋 教师:王建民
日期:2017.11.28
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
11.28 |
8:00 |
8:50 | 50 | 听课 | 软件工程概论 | |
9:00 | 9:45 | 45 | 编写程序 | 课堂测试一 | ||
17:00 | 17:35 | 5 | 30 | 编写博客园 |
项目计划总结
学生:孟庆淋
日期:2017.11.28
教员:王建民
程序号:1
PSP2.1 | Personal Software Process Stages | Time(%)(/minute) |
Planning | 计划 | 2 |
Estimate | 估计这个任务需呀多少时间 | 50 |
Analysis | 需求分析 | 2 |
Coding Standrd | 代码规范 | 4 |
Design | 具体设计 | 5 |
Coding | 具体编码 | 40 |
Test | 测试 | 1 |
Resporting | 报告 | 50 |