軟體工程概論——課程匯入介面以及資料匯入資料庫

我命傾塵發表於2017-11-28

將課堂練習設計思想,源程式程式碼、執行結果截圖的開發過程,並按照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、個人總結: 

  今天上午課堂上寫程式的時候,最後出現了亂碼問題,之後修改字符集就解決了這個問題。這些錯誤可以不斷的積累下來,從而更好的避開問題所在。發現自己寫程式碼的速度過慢,在限時寫程式碼的時候寫不快,這是很傷的一點,還是要不斷的練習,保證自己的書寫規範以及程式設計速度。

相關文章