201771030118-司紹斌 實驗二 我的項目—《西北師範大學學生疫情上報系統》項目報告

項目 內容
課程班級博客連接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
本次做業要求連接 http://www.javashuo.com/article/p-meyvhbuv-mp.html
個人課程學習目標 根據目前所學知識進行軟件開發
這個做業在哪些方面幫助我實現學習目標 學會軟件開發的流程
項目Github的倉庫連接地址 https://github.com/Eason1011/SSM

1. 實驗目的與要求

(1)掌握軟件項目我的開發流程。html

(2)掌握Github發佈軟件項目的操做方法。前端

2.實驗內容和步驟

任務一:陳述學生疫情每日上報子系統使用體驗;

(1)第一天使用由於人數過多,系統出現了一些問題,在修改以後能夠很好地使用。java

(2)界面比較簡潔,剛開始沒有記憶功能,天天都要從新輸入信息,後面進行了修改。git

(3)功能比較單一,沒有提醒功能,很容易遺忘。github

**任務2:**總結詳細閱讀《構建之法》第1-2章、結合第2章2.3節所述PSP流程,開發一款你本身心目中的西北師範大學學生疫情每日填報系統。

我選擇第二類開發要求數據庫

  1. 系統外觀設計比較簡約,操做很簡便。後端

  2. 系統支持用戶在線使用app

  3. 每日只可填報一次,提交後沒法修改,每日十點疫情信息填報截止框架

  4. 各學院指定負責人登陸系統,可查看本學院學生填報的彙總數據,可點擊查看學生聯繫方式、班主任聯繫方式,學院負責人覈實本院全部學生數據後,將數據提交給學校防控辦前後端分離

  5. 學校防控辦指定負責人登陸《西北師範大學疫情防控信息統計》子系統,可瀏覽全部學生填報彙總數據清單,經過【導出】可獲取疫情數據的EXCEL文件

任務3:完成我的項目報告博文做業

  1. 需求分析:
    1. 背景:2019年12月末,中國武漢發生新型冠狀病毒(2019-nCoV) 感染的肺炎疫情,爲遏制疫情蔓延,有效切斷病毒傳播途徑,在中央政府指導下,各級政府部分採起了一系列防控措施。值得一提的是,中國互聯網企業在這次疫情防控中發揮了社會治理方面的重要做用。各大公司開發研製一系列疫情防控的軟件。
    2. 目的:爲了完成本校學生的每日疫情基本狀況的彙總以及查看。
    3. 疫情上報系統:採用先後端分離的方式,學生疫情上報和老師查看互補影響。學生只須要天天按時上報信息。老師在後臺能夠進行查看,搜索,導出,刪除以及修改功能。
    4. 本系統採用SSM框架開發,前端採用Bootstrap開發。
  2. 功能設計:
    1. 基本功能:

      • 前端採集學生疫情信息,在規定時間內提交
      • 支持多用戶同時使用
      • 管理員登陸後臺後能夠查看各個學院的學生上報的疫情信息,查看對應學院的負責人老師名字以及電話號碼
      • 管理員能夠將學生的疫情信息導出到excel
    2. 擴展功能:

      • 學生若是填報的信息有誤,能夠聯繫學院負責人老師進行修改
      • 管理員進去後臺後能夠根據不一樣信息進行查詢,查看想要的學生疫情信息。而且能夠只導出這些數據到excel
      • 增長分頁顯示
  3. 設計實現:
    1. 數據庫設計了四張表,分別爲管理員表,學院表,學生疫情表和字典表。

    2. 學生類實現了疫情信息採集,上報到後臺,保存當前上報時間等功能

    3. 管理員類實現了登陸,學生疫情查看,根據不一樣信息進行查詢,修改和刪除以及信息導出到Excel等功能。

  4. 測試運行:
    1. 代碼運行截圖:

    2. 基本功能截圖:

      • 前端登陸及學生上報界面

      • 學生上報界面截圖

      • 提交成功截圖

      • 後臺界面截圖

      • 導出功能截圖

      • 數據導出到Excel

    • GitHub使用截圖

    1. 擴展功能截圖

      • 後臺查詢功能

      • 後臺修改和刪除功能

      • 分頁功能

  5. 代碼展現:

    粘貼了關於分頁的一部分代碼:

    @Override
        public int doStartTag() throws JspException {
            JspWriter writer = pageContext.getOut();
            HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
            Page page = (Page) request.getAttribute(bean);
            if (page == null)
                return SKIP_BODY;
            url = resolveUrl(url, pageContext);
            try {
                // 計算總頁數
                int pageCount = page.getTotal() / page.getSize();
                if (page.getTotal() % page.getSize() > 0) {
                    pageCount++;
                }
                writer.print("<nav><ul class=\"pagination\">");
                // 顯示「上一頁」按鈕
                if (page.getPage() > 1) {
                    String preUrl = append(url, "page", page.getPage() - 1);
                    preUrl = append(preUrl, "rows", page.getSize());
                    writer.print("<li><a href=\"" + preUrl + "\">上一頁</a></li>");
                } else {
                    writer.print("<li class=\"disabled\"><a href=\"#\">上一頁</a></li>");
                }
                // 顯示當前頁碼的前2頁碼和後兩頁碼
                // 若1 則 1 2 3 4 5, 若2 則 1 2 3 4 5, 若3 則1 2 3 4 5,
                // 若4 則 2 3 4 5 6 ,若10 則 8 9 10 11 12
                int indexPage = (page.getPage() - 2 > 0) ? page.getPage() - 2 : 1;
                for (int i = 1; i <= number && indexPage <= pageCount; indexPage++, i++) {
                    if (indexPage == page.getPage()) {
                        writer.print("<li class=\"active\"><a href=\"#\">" + indexPage
                                + "<span class=\"sr-only\">(current)</span></a></li>");
                        continue;
                    }
                    String pageUrl = append(url, "page", indexPage);
                    pageUrl = append(pageUrl, "rows", page.getSize());
                    writer.print("<li><a href=\"" + pageUrl + "\">" + indexPage + "</a></li>");
                }
                // 顯示「下一頁」按鈕
                if (page.getPage() < pageCount) {
                    String nextUrl = append(url, "page", page.getPage() + 1);
                    nextUrl = append(nextUrl, "rows", page.getSize());
                    writer.print("<li><a href=\"" + nextUrl + "\">下一頁</a></li>");
                } else {
                    writer.print("<li class=\"disabled\"><a href=\"#\">下一頁</a></li>");
                }
                writer.print("</nav>");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return SKIP_BODY;
        }
  6. 總結:

    因爲水平有限,只能按照SSM框架的模式進行「模塊化」原則,儘可能作到各個層級之間互不干擾。因爲是我的完成項目,模塊化沒有很好地體現,後續在小組項目中會更加註意。

  7. 展現PSP
    PSP 任務內容 計劃共完成須要的時間(min) 實際完成須要的時間(min)
    Planning 計劃 40 30
    ·Estimate 估計這個任務須要多少時間,並規劃大體工做步驟 40 30
    Development 開發 1000 1100
    ·Analysis 需求分析 (包括學習新技術) 300 250
    ·Design Spec 生成設計文檔 20 20
    ·Design Review 設計複審 (和同事審覈設計文檔) 0 0
    ·Coding Standard 代碼規範 (爲目前的開發制定合適的規範) 15 15
    ·Design 具體設計 150 120
    ·Coding 具體編碼 335 445
    ·Code Review 代碼複審 120 100
    ·Test 測試(自我測試,修改代碼,提交修改) 60 150
    Reporting 報告 60 90
    ·Test Report 測試報告 30 50
    ·Size Measurement 計算工做量 20 10
    · Postmortem & Process Improvement Plan 過後總結,並提出過程改進計劃 10 30
  • 計劃階段對所需的軟件及環境進行了整合,以及前端界面的設計。

  • 開發階段因爲我的水平有限,在編碼過程花費了很長時間,修改小bug比較費時。

  • 代碼測試階段因爲一些邏輯上的問題,查找後臺邏輯花費了一些時間。

    小記

    • 經過此次系統開發,我對軟件開發的流程有了必定的瞭解,再也不是之前那種直接開始寫代碼的過程。瞭解以後對軟件的開發效率有很好的提升做用。

    • SSM框架做爲最基本的java後臺開發,有必定的優勢和缺點,相比於SpringBoot框架有些過程倒是比較複雜。之後要抓緊學習SpringBoot這個框架,運用到之後的開發中。

    • JavaScript對處理前端界面的一些問題確實很是強大。

相關文章
相關標籤/搜索