將課堂練習設計思想,源程式程式碼、執行結果截圖的開發過程,並按照PSP0級的要求記錄開發過程中的專案計劃日誌、時間記錄日誌、缺陷記錄日誌。
1、課堂練習設計思想:
①第一步就是先在.jsp檔案中繪製出介面,採用h2繪製標題“課程匯入”,加上分割線使介面更加美觀,正體部分則使用<form><table>表單來完成佈局,條理分明。
②在資料庫中建立表kecheng,三列資料classname,teacher,place分別是課程名稱、任課教師和上課地點。
③在src中建立工具包存放GBUtil.java用來連線資料庫,採用utf-8字符集,防止中文亂碼。
④建立KechengDao.java來實現介面IKecheng.java,包含一個add函式,用來完成向資料庫中新增資料的操作。
⑤建立kecheng.jsp作為kechengjiemian.jsp的後臺程式,取得輸入的引數並判斷驗證,不符合規矩的都返回原介面,符合的才能成功儲存到資料庫。
⑥成功新增後點選繼續新增超連結,返回匯入介面繼續操作。
2、程式原始碼:
Ikecheng.java:
package kechengjiemian.gb.dao; import kechengjiemian.gb.model.Kecheng; public interface Ikecheng { public void add(Kecheng kecheng); }
KechengDao.java
package kechengjiemian.gb.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import kechengjiemian.gb.Util.GBUtil; import kechengjiemian.gb.model.Kecheng; public class KechengDao implements Ikecheng { @Override public void add(Kecheng kecheng) { Connection connection=GBUtil.getConnection(); PreparedStatement preparedStatement=null; ResultSet resultSet=null; String sql="insert into kecheng (classname,teacher,place) value (?,?,?);"; try { preparedStatement=connection.prepareStatement(sql); preparedStatement.setString(1, kecheng.getClassName()); preparedStatement.setString(2, kecheng.getTeacher()); preparedStatement.setString(3, kecheng.getPlace()); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { GBUtil.close(connection); GBUtil.close(preparedStatement); GBUtil.close(resultSet); } } }
Kecheng.java
package kechengjiemian.gb.model; public class Kecheng { 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; } }
GBUtil.java
package kechengjiemian.gb.Util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class GBUtil { public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException e) { e.printStackTrace(); } String url="jdbc:mysql://localhost:3306/denglu?useUnicode=true&characterEncoding=utf-8"; Connection connection=null; try { connection=DriverManager.getConnection(url, "root", "242772"); } catch (SQLException e) { e.printStackTrace(); System.out.println("資料庫連線失敗!"); } return connection; } public static void close(Connection connection) { try { if(connection!=null) { connection.close(); } } catch(SQLException e) { e.printStackTrace(); } } public static void close(PreparedStatement preparedStatement) { try { if(preparedStatement!=null) { preparedStatement.close(); } } catch(SQLException e) { e.printStackTrace(); } } public static void close(ResultSet resultSet) { try { if(resultSet!=null) { resultSet.close(); } } catch(SQLException e) { e.printStackTrace(); } } }
kecheng.jsp
<%@page import="kechengjiemian.gb.model.Kecheng"%> <%@page import="kechengjiemian.gb.Util.GBUtil"%> <%@page import="kechengjiemian.gb.dao.KechengDao"%> <%@ 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> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>課程資訊</title> </head> <% String classname=request.getParameter("classname"); String teacher=request.getParameter("teacher"); String place=request.getParameter("place"); if(classname==null||"".equals(classname.trim())) { request.setAttribute("error", "課程名稱不能為空!"); %> <jsp:forward page="kechengjiemian.jsp"></jsp:forward> <% } if(teacher==null||"".equals(teacher.trim())) { request.setAttribute("error", "任課教師不能為空!"); %> <jsp:forward page="kechengjiemian.jsp"></jsp:forward> <% } if(place==null||"".equals(place.trim())) { request.setAttribute("error", "上課地點不能為空!"); %> <jsp:forward page="kechengjiemian.jsp"></jsp:forward> <% } if(!teacher.trim().equals("王建民")&&!teacher.trim().equals("劉丹")&&!teacher.trim().equals("劉立嘉")&&!teacher.trim().equals("王輝")&&!teacher.trim().equals("楊子光")) { request.setAttribute("error", "這個老師不存在,請檢查是否名字拼寫錯誤!"); %> <jsp:forward page="kechengjiemian.jsp"></jsp:forward> <% } if(!place.trim().substring(0,2).equals("基教")&&!place.trim().substring(0,2).equals("一教")&&!place.trim().substring(0,2).equals("二教")&&!place.trim().substring(0,2).equals("三教")) { request.setAttribute("error", "您輸入的地點不為教學樓"); %> <jsp:forward page="kechengjiemian.jsp"></jsp:forward> <% } Kecheng ke=new Kecheng(); ke.setClassName(classname); ke.setTeacher(teacher); ke.setPlace(place); KechengDao keDao=new KechengDao(); keDao.add(ke); %> <h2 style="color:blue" align="center"><img src="../picture/正確.png">課程資訊儲存成功</h2> <form> <table align="center" border="2" width="100"> <tr align="center"> <td colspan="2"> <a href="kechengjiemian.jsp"><u>繼續新增</u></a> </td> </tr> </table> </form> <% %> </html>
kechengjiemian.jsp
<%@ 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> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>課程介面</title> </head> <body> <h2 align="center" style="color:blue">課程錄入</h2> <hr size="5" align="center" style="color:blue"> <form action="kecheng.jsp" method="get"> <table align="center" border="2" width="300"> <tr> <td>課程名稱</td> <td> <input type="text" name="classname" /> </td> </tr> <tr> <td>任課教師</td> <td> <input type="text" name="teacher" /> </td> </tr> <tr> <td>上課地點</td> <td> <input type="text" name="place" /> </td> </tr> <tr align="center"> <td colspan="2"> <input type="submit" name="提交" /> </td> </tr> </table> </form> <br> <% if(request.getAttribute("error")!=null) { %> <h2 align="center" style="color:red"><img src="../picture/錯誤.gif"><%=request.getAttribute("error") %></h2> <% } %> </body> </html>
3、執行結果截圖:
jsp除錯的時候我設定的彈出到外接瀏覽器,這是初始介面:
錄入資訊:
在輸入的資訊都符合要求的時候,完成提交,並可以點選繼續新增返回介面:
當老師的名字不符合要求:
當上課地點不符合要求:
當課程名稱為空時:
當任課教師為空時:
當上課地點為空時:
4、專案計劃日誌:
需求描述:完成一個能判斷輸入資訊並將課程資訊匯入資料庫的web程式。
估計開發時間:四五十分鐘。
專案計劃資料:填寫完成。
時間記錄日誌:填寫完成。
缺陷記錄日誌:填寫完成。
姓名:郭斌
日期:2017/11/28
今天共學習了6小時3分鐘,其中完成課堂測試用了63分鐘。
5、時間記錄日誌:
學生:郭斌
日期:2017/11/28
教員:王建民
課程:PSP
6、缺陷記錄日誌:
學生:郭斌
日期:2017/11/28
教員:王建民
程式號:1
7、個人總結:
今天上午課堂上寫程式的時候,最後出現了亂碼問題,之後修改字符集就解決了這個問題。這些錯誤可以不斷的積累下來,從而更好的避開問題所在。發現自己寫程式碼的速度過慢,在限時寫程式碼的時候寫不快,這是很傷的一點,還是要不斷的練習,保證自己的書寫規範以及程式設計速度。