201771030121-王國偉 實驗二 個人項目—《西北師范大學學生疫情上報系統》項目報告


項目 內容
課程班級博客鏈接 https://edu.cnblogs.com/campus/xbsf/nwnu2020SE
本次作業要求鏈接 https://www.cnblogs.com/nwnu-daizh/p/12416880.html
我的課程學習目標 可以熟練運用軟件工程所學知識進行軟件開發
這個作業在哪些方面幫助我實現學習目標 了解軟件開發的一般流程,並運用該方法進行簡單的軟件開發
項目Github的倉庫鏈接地址 https://github.com/18215128518wgw/diseaseManage

1. 實驗目的與要求

(1)掌握軟件項目個人開發流程

(2)掌握Github發布軟件項目的操作方法

2.實驗內容和步驟

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

已經經過比較久的一段時間體驗學生疫情上報系統,我有很多對於這個系統的印象

  1. 系統外觀設計比較簡約,操作很簡便。
  2. 系統在經過后期改進之后,對於高並發情況有較好的反應,可能在硬件軟件等方面都做了優化
  3. 缺點就是沒有一個比較直觀的,顯示某人某天是否打卡的功能,也不存在補卡之類的操作。提交的信息好像也不會存在核對之類的操作。
  4. 有記住選項的功能,極大節省了操作時間,減輕服務器壓力,也方便了一般用戶

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

我選擇了第二類開發要求:

  1. 系統可采集學生疫情有效信息
  2. 系統支持用戶在線使用
  3. 每日只可填報一次,提交后無法修改,每日十點疫情信息填報截止
  4. 各學院指定負責人登錄系統,可查看本學院學生填報的匯總數據,可點擊查看學生聯系方式、班主任聯系方式,學院負責人核實本院所有學生數據后,將數據提交給學校防控辦
  5. 學校防控辦指定負責人登錄《西北師范大學疫情防控信息統計》子系統,可瀏覽所有學生填報匯總數據清單,通過【導出】可獲取疫情數據的EXCEL文件
系統在線訪問地址:(因為服務在我自己機器上跑,所以可能有時候服務沒有開啟)

學生疫情上報:http://kpgs.natapp1.cc

后台疫情管理平台:http://kpgs.natapp1.cc/user/login(用戶名:test;密碼:1)

任務3:完成個人項目報告博文作業

  1. 需求分析
    1. 目的:為了掌握軟件項目個人開發流程,將知識運用到實踐中
    2. 學生疫情上報平台:滿足用戶在線定時定量使用,系統穩定可靠,能將有效信息傳遞到數據庫
    3. 疫情管理平台:滿足數據的顯示(包括關鍵疫情數據統計、已填/未填數據統計、數據的可視化等),導出數據到excel,實時更新顯示數據等操作。
    4. 使用Github進行代碼托管,用到commit、releases/tag、push、pull、branch等Git操作,在我的項目中,我使用idea通過命令行的方式進行Git的操作。
    5. 項目使用springBoot進行開發。
  2. 功能設計
    1. 基本功能
      • 采集學生每天的疫情信息,每人每天只能上傳一次,並且無法修改
      • 系統支持多用戶在線使用,當然看到這篇博文的你也可以試着用用,鏈接我放在上邊了
      • 每日只可填報一次,提交后無法修改,每日十點疫情信息填報截止,這里我改成了二十點,為了方便測試
      • 管理員登陸可查看各學院填報情況,學生匯總數據,關鍵疫情數據統計,並且采用可視化圖表的形式進行,這里由於沒有相應的班級數據,沒有做班級這一塊的信息展示,只做了附加要求
      • 管理員進入后台管理系統,可將學生疫情數據導出到excel。這里我只做了導出全部數據,后續可能還會增加導出當天數據,或者導出滿足特定條件的學生數據
    2. 拓展功能
      • 數據提交頁面增加表單驗證功能,為空或者不合格的數據都將提交失敗
      • 管理員界面的數據可視化運用echarts4這個javascript庫生成美觀大方的可視化圖表
      • 系統支持pc或者移動端的訪問,界面不會因為屏幕變化而出現bug
      • 針對可能顯示的數據太多,管理界面增加分頁功能
  3. 設計實現
    1. 學生類,實現信息采集,保存,檢查,查詢等功能
    2. 用戶類,實現用戶的登錄,檢查狀態,查詢疫情數據,導出到excel,分頁等功能
    3. 類與類之間完全分離,擁有對數據的增改查等功能,有獲取特定日期的函數等。某些具有判斷功能的函數有比較嚴謹的邏輯,函數之間存在比較固定的調用關系。
  4. 測試運行
    1. 代碼運行截圖:

    2. 功能對應的運行截圖

      • 采集學生每天的疫情信息,在線使用

      • 每日只可填報一次,提交后無法修改,每日二十點疫情信息填報截止

      • 管理員查看填報情況

        管理員登錄

        填報情況

      • 數據導出到excel

        導出的excel表

      • 使用GitHub

    3. 擴展需求的運行截圖

      • 表單驗證功能(提交的選項不能有空)

        前端簡單表單驗證

      • 數據可視化

        兩個可視化圖表

      • pc或者移動端的訪問

      • 分頁功能

  5. 代碼展示

    這里粘貼了一個學生類中信息提交的方法,重點是在於注釋的書寫方式,代碼沒什么好講解的,也都比較簡單

    /**
         * 表單提交的目標方法,判斷條件是否允許,為真則向數據庫寫入數據
         * @param model
         * @param student
         * @param httpServletResponse
         * @return   打卡視圖
         * @throws Exception
         */
        @GetMapping("info")
        public String StudentInfo(Model model, Student student, HttpServletResponse httpServletResponse) throws Exception{
    
           System.out.println(student);
    
           //成功表示當日沒有填寫,並且時間未超過20點
           if(studentService.checkStudentByCode(student.getCode(), student.getDate()) && getHour(new Date()) < 20){
             //判斷插入到數據表中是否成果
             if(studentService.InsertStudentInfo(student)) {
                 httpServletResponse.setContentType("text/html;charset=utf-8");
                 httpServletResponse.getWriter().write("<script>alert('今日情況已上報成功!');</script>");
                 httpServletResponse.getWriter().flush();
             }else {
                 httpServletResponse.setContentType("text/html;charset=utf-8");
                 httpServletResponse.getWriter().write( "<script>alert('上報失敗,請重新上報!');</script>");
                 httpServletResponse.getWriter().flush();
             }
           }else {
             if(getHour(new Date()) < 20 && !studentService.checkStudentByCode(student.getCode(), student.getDate())) {
                 httpServletResponse.setContentType("text/html;charset=utf-8");
                 httpServletResponse.getWriter().write( "<script>alert('您今日已打卡!');</script>");
                 httpServletResponse.getWriter().flush();
             } else {
                 httpServletResponse.setContentType("text/html;charset=utf-8");
                 httpServletResponse.getWriter().write( "<script>alert('打卡時間超過規定時間!');</script>");
                 httpServletResponse.getWriter().flush();
             }
         }
    
            model.addAttribute("today", new Date());
            return "student";
        }
    
  6. 總結:程序如何實現軟件設計的“模塊化”原則

    程序運行調用方法時,盡量減少互相干擾。但由於本次時間有限,水平有限,寫出來的只是一般的系統,沒有用到更好的技術實現軟件開發的模塊化方法。如果可以后邊會通過搭建微服務的方式真正實現模塊化

  7. 展示PSP
    PSP 任務內容 計划共完成需要的時間(min) 實際完成需要的時間(min)
    Planning 計划 30 30
    · Estimate 估計這個任務需要多少時間,並規划大致工作步驟 30 30
    Development 開發 930 1090
    · Analysis 需求分析 (包括學習新技術) 300 240
    · Design Spec 生成設計文檔 0 0
    · Design Review 設計復審 (和同事審核設計文檔) 0 0
    · Coding Standard 代碼規范 (為目前的開發制定合適的規范) 10 10
    · Design 具體設計 200 120
    · Coding 具體編碼 300 480
    · Code Review 代碼復審 60 60
    · Test 測試(自我測試,修改代碼,提交修改) 60 120
    Reporting 報告 45 50
    · Test Report 測試報告 15 15
    · Size Measurement 計算工作量 15 20
    · Postmortem & Process Improvement Plan 事后總結 ,並提出過程改進計划 15 15
  • 計划階段包括思考我所需要的技術,工具,數據等等

  • 需求分析包括新技術的學習,環境的准備,必要軟件的安裝

  • 由於個人能力原因,代碼時間很長,主要是因為會在某一個問題上耗很長時間

  • 代碼測試階段沒想到有什么要干的,但當真正以用戶身份體驗的審核的時候,發現編碼邏輯錯誤,花了一段時間更改




小記

  1. 這次代碼時間比較短,功能比較少,類似的功能我也只做了某一個
  2. 登錄那里沒有用太多時間,寫的不是很好
  3. thymeleaf確實讓人。。。靜態文件搞不明白我就差崩潰了
  4. echarts非常好用,很強大的前端數據可視化工具



我在后台看見程序運行會有bug,但我自己查不出來哪里出現了bug,大家如果在試用時找到了bug,請聯系我或者評論在下方,十分感謝!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM