項目 | 內容 |
---|---|
課程班級博客連接 | https://edu.cnblogs.com/campus/xbsf/nwnu2020SE |
這個做業要求連接 | http://www.javashuo.com/article/p-meyvhbuv-mp.html |
個人課程學習目標 | 學會簡單的我的軟件項目開發 |
這個做業在哪些方面幫助我實現學習目標 | 運用了PSP完成了一個簡單的系統開發 |
項目Github的倉庫連接地址 | https://github.com/Gu19901212/NewSystem |
因爲疫情須要學校要求咱們於天天十點之前填報本身當天的疫情信息,可是第一天的時候遇到了和大多數人都同樣的問題就是人數太多致使系統崩潰,可是後來的時候有意識的錯峯填報就沒有出現過此類問題了。還有一個就是剛剛開始填報的時候須要天天都填寫各種信息很是麻煩,這個問題後來也解決了。總的來講使用體驗很好。html
我選擇的是第二類開發要求:java
1. 系統可採集學生疫情有效信息;git
2. 系統支持用戶在線使用;github
3. 每日只可填報一次,提交後沒法修改,每日十點疫情信息填報截止;數據庫
4. 各學院指定負責人登陸系統,可查看本學院學生填報的彙總數據,可點擊查看學生聯繫方式、班主任聯繫方式,學院負責人覈實本院全部學生數據後,將數據提交給學校防控辦;編程
5. 學校防控辦指定負責人登陸《西北師範大學疫情防控信息統計》子系統,可瀏覽全部學生填報彙總數據清單,經過【導出】可獲取疫情數據的EXCEL文件。eclipse
本項目Github項目倉庫https://github.com/Gu19901212/NewSystem模塊化
一、背景函數
2019年12月末,中國武漢發生新型冠狀病毒(2019-nCoV) 感染的肺炎疫情,爲遏制疫情蔓延,有效切斷病毒傳播途徑,在中央政府指導下,各級政府部分採起了一系列防控措施: 2020年1 月23 日10時起對武漢「封城」,全國 31個省市也相繼實施了嚴格的防控措施;全國各省市向武漢和湖北派遣醫療隊參與救治工做;在全國範圍內調配口罩、防禦服、藥品等急需的醫療資源支援武漢;指導和督促全國範圍內擁有醫療物資生產資質的企業儘快恢復生產能力;定向撥付專項財政資金用於疾病防控;從其餘省份調集物資保障武漢市民平常生活。工具
值得一提的是,中國互聯網企業在這次疫情防控中發揮了社會治理方面的重要做用。以騰訊爲例,圍繞應對疫情管控需求開發了十一款產品。其中疫情在線問診功能,對於減小發熱病人之間的相互交叉感染具備重要的做用,患者在家經過互聯網向在線醫生問診,減小了病毒傳播或感染的風險;謠言粉碎對於公衆採起理性態度看待疫情的發展具備重要意義。滴滴出行還在武漢專門組建車隊,服務於醫護人員的通勤,這在實施交通管制的武漢具備重要做用。此外,還有新型肺炎確診患者同行程查詢工具,用戶只須要輸入本身所乘坐交通工具的時間和班次,就能夠確認是否與被確診感染者同行,提早作好自我隔離和就診工做。在疫情防控中,中國互聯網企業不只發展壯大,在承擔社會責任方面也愈來愈成熟。
突如其來的疫情咱們沒法返回學校,這在必定程度上減小了疫情的傳播,可是也給學校的防疫工做帶來了難度。學校沒法及時瞭解學生的健康情況,因此開發了學生疫情上報系統,便於學校及時掌握學生的疫情信息。
二、需求分析
(1)學校須要及時掌握學生的疫情信息,在線填報比較方便;
(2)每個人須要完成的工做不一樣,系統能夠將每一個人要完成的分開。
主要的類包括:
(1)BaseDao.java:數據庫操做基礎類,利用泛型和反射機制來抽象數據庫基本的增刪該查操做;
(2)CollegeadminServlet.java:各學院負責人查看本學院學生信息;
(3)LoginServlet.java:控制不一樣身份的人登陸;
(4)SchoolOfficeServlet.java:學校防疫辦獲取各學院已經提交的學生信息;
(5)StudentServlet.java:學院負責人查看本學院的疫情信息並提交給學校防疫辦;
(6)yiqingServlet.java:學生填報疫情信息以及控制條件。
isEffectiveDate(Date nowTime, Date startTime, Date endTime)函數:控制學生在天天十點之前填報疫情狀況,若是在十點之前返回true,不然返回false。
系統在eclipse中的運行圖:
若是登陸身份錯誤的話會拒絕該用戶登陸系統並給出相應提示,一樣的密碼等錯誤也會給出相應提示。
一、學生登陸系統
學生填報疫情狀況界面:
點擊提交按鈕後頁面提示「提交成功」
當重複提交提交時會提示「你今天已經提交過了,不可重複提交!」
當超過十點提交時會提示「請於天天十點填寫!」
二、學院負責人登陸系統
查看本院的學填報狀況:
點擊提交按鈕後會將本院學生填報狀況提交給學校防控辦,頁面提示「success」
查看本院學生的基本信息:
其餘學院負責人於此相同
三、學校防控辦登陸系統
查看全校已經提交的學院的學生疫情信息,因爲只有計算機學院和設計學院的學院負責人向上提交了,因此只能看到計算機學院和設計學院的信息:
/*判斷時間是否在天天十點之前*/ //從系統獲取當前時間 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); String now =df.format(new Date()); //從系統獲取是哪一天 SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd "); String start =df2.format(new Date()); //從系統獲取是哪一天 SimpleDateFormat df3 = new SimpleDateFormat("yyyy-MM-dd "); String end =df3.format(new Date()); String format = "yyyy-MM-dd HH:mm"; Date nowTime = new SimpleDateFormat(format).parse(now); Date startTime = new SimpleDateFormat(format).parse(start+"00:00"); Date endTime = new SimpleDateFormat(format).parse(end+"10:00"); System.out.println(isEffectiveDate(nowTime, startTime, endTime)); if(isEffectiveDate(nowTime, startTime, endTime)){ if(studentDao.add(student)){ msg = "提交成功"; } } else { msg="請於天天十點填寫!"; } studentDao.closeConnection(); resp.getWriter().write(msg); } /** * 判斷當前時間是否在[startTime, endTime]區間,注意時間格式要一致 * @param nowTime 當前時間 * @param startTime 開始時間 * @param endTime 結束時間 * @return */ public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) { if (nowTime.getTime() == startTime.getTime() || nowTime.getTime() == endTime.getTime()) { return true; } Calendar date = Calendar.getInstance(); date.setTime(nowTime); Calendar begin = Calendar.getInstance(); begin.setTime(startTime); Calendar end = Calendar.getInstance(); end.setTime(endTime); if (date.after(begin) && date.before(end)) { return true; } else { return false; } } }
系統的大部分功能都已實現,可是【導出】EXCEL文件沒有實現,另外我遇到了一個問題,在學生填報疫情信息的時候須要填報姓名等信息,但其餘信息均可以存到數據庫中,只有姓名字段沒法存入,我試了好多方法都沒有解決。
如圖所示當學生進行疫情填報的時候沒法將姓名屬性存入數據庫
在yiqingServlet.java中
String name = new String(req.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
能夠獲取到JSP頁面傳過來的name值可是沒法存入數據庫,其餘字段均可以存入。
這個問題如今已經解決:在存儲疫情信息的表中老是存不進去第一個屬性,因此我設置了一個容許爲null的屬性,當填報疫情的時候不用填這個屬性,默認爲null。這樣的話姓名屬性就能夠存入數據庫中了,可是具體緣由如今還不太清楚
本系統經過如下方法來實現軟件設計的「模塊化」原則:
(1)制定PSP,嚴格按照PSP進行每一步的工做;
(2)將數據庫的基本操做去不封裝在BaseDao.java類中,利用泛型和反射機制來抽象數據庫基本的增刪該查操做;
(3)每一個身份的人須要完成的工做不同,因此從登錄開始就將身份不一樣的人分開進行下一步的編程。
(4)將各個功能分開編程,好比驗證碼生成、學生功能、學院負責人功能等。
PSP2.1 | 任務內容 | 計劃共完成須要的時間(min) | 實際完成須要的時間 |
---|---|---|---|
Planning | 計劃 | 30 | 25 |
Estimate | 估計這個任務須要多少時間,並規劃大體工做步驟 | 30 | 30 |
Development | 開發 | 1735 | 2340 |
Analysis | 需求分析(包括學習新技術) | 90 | 120 |
Design Spec | 生成設計文檔 | 30 | 20 |
Design Review | 設計複審(和同事審覈設計文檔) | 0 | 0 |
Coding Standard | 代碼規範(爲目前的開發制定合適的規範) | 20 | 15 |
Design | 具體設計 | 30 | 25 |
Coding | 具體編碼 | 1200 | 1800 |
Code Review | 代碼複審 | 30 | 20 |
Test | 測試(自我測試,修改代碼,提交修改) | 60 | 90 |
Reporting | 報告 | 180 | 165 |
Test Report | 測試報告 | 30 | 30 |
Size Measurement | 計算工做量 | 5 | 5 |
Postmortem&Process Improvement Plan | 過後總結並提出過程改進計劃 | 60 | 50 |
在估計時間和實際用的時間中,我在具體編程用的時間最多也差異最大,由於個人編程能力比較弱,這是因爲平時練習很少,下去我會努力提高本身的編程能力。
在以往的學習中雖然接觸過比較簡單的系統開發但大多都是和同窗一塊兒完成的,剛剛開始看見這個做業的時候感受很難,可是仍是硬着頭皮作下去了。作着作着就會發現,當你解決一個問題的時候頗有成就感,因此要對本身有信心。在以往的學習中都是一上來就開始編程,就會出現不少問題好比需求不明確需求,對功能理解有誤差等,此次採用了PSP,在編程之間作了不少準備工做,就會很大程度上避免這些問題的出現。雖然此次的系統存在一些問題,但我會繼續進行改進,爭取完成指望的功能。