軟工作業PSP與單元測試訓練

一、實現模塊判斷傳入的身份證號碼的正確性;

二、針對所實現的模塊編寫對應的單元測試代碼;

  import java.text.ParseException;  import java.text.SimpleDateFormat;  import java.util.Calendar;  import java.util.GregorianCalendar;  import java.util.Hashtable;  import java.util.Scanner;  import java.util.regex.Matcher;  import java.util.regex.Pattern;  public class ExcelCreateUserAction {  public static String IDCardValidate(String IDStr) throws ParseException {          String tipInfo = "該身份證有效!";String Ai = "";  if (IDStr.length() != 15 && IDStr.length() != 18) {  tipInfo = "身份證號碼長度應該為15位或18位。";  return tipInfo;  }  if (IDStr.length() == 18) {  Ai = IDStr.substring(0, 17);  } else if (IDStr.length() == 15) {  Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);  }  if (isNumeric(Ai) == false) {  tipInfo = "身份證15位號碼都應為數字 ; 18位號碼除最后一位外,都應為數字。";  return tipInfo;  }  String strYear = Ai.substring(6, 10);// 年份  String strMonth = Ai.substring(10, 12);// 月份  String strDay = Ai.substring(12, 14);// 日期  if (isDate(strYear + "-" + strMonth + "-" + strDay) == false) {  tipInfo = "身份證出生日期無效。";  return tipInfo;  }  GregorianCalendar gc = new GregorianCalendar();  SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");  try {  if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150  || (gc.getTime().getTime() - s.parse(  strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {  tipInfo = "身份證生日不在有效范圍。";  return tipInfo;  }  } catch (NumberFormatException e) {  e.printStackTrace();  } catch (java.text.ParseException e) {  e.printStackTrace();  }  if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {  tipInfo = "身份證月份無效";  return tipInfo;  }  if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {  tipInfo = "身份證日期無效";  return tipInfo;  }  Hashtable areacode = GetAreaCode();  if (areacode.get(Ai.substring(0, 2)) == null) {  tipInfo = "身份證地區編碼錯誤。";  return tipInfo;  }  if(isVarifyCode(Ai,IDStr)==false){  tipInfo = "身份證校驗碼無效,不是合法的身份證號碼";  return tipInfo;  }  return tipInfo;  }  private static boolean isVarifyCode(String Ai,String IDStr) {  String[] VarifyCode = { "1", "0", "X", "9", "8", "7", "6", "5", "4","3", "2" };  String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7","9", "10", "5", "8", "4", "2" };  int sum = 0;  for (int i = 0; i < 17; i++) {  sum = sum + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);  }  int modValue = sum % 11;  String strVerifyCode = VarifyCode[modValue];  Ai = Ai + strVerifyCode;  if (IDStr.length() == 18) {  if (Ai.equals(IDStr) == false) {  return false;  }  }   return true;  }  private static Hashtable GetAreaCode() {  Hashtable hashtable = new Hashtable();  hashtable.put("11", "北京");  hashtable.put("12", "天津");  hashtable.put("13", "河北");  hashtable.put("14", "山西");  hashtable.put("15", "內蒙古");  hashtable.put("21", "遼寧");  hashtable.put("22", "吉林");  hashtable.put("23", "黑龍江");  hashtable.put("31", "上海");  hashtable.put("32", "江蘇");  hashtable.put("33", "浙江");  hashtable.put("34", "安徽");  hashtable.put("35", "福建");  hashtable.put("36", "江西");  hashtable.put("37", "山東");  hashtable.put("41", "河南");  hashtable.put("42", "湖北");  hashtable.put("43", "湖南");  hashtable.put("44", "廣東");  hashtable.put("45", "廣西");  hashtable.put("46", "海南");  hashtable.put("50", "重慶");  hashtable.put("51", "四川");  hashtable.put("52", "貴州");  hashtable.put("53", "云南");  hashtable.put("54", "西藏");  hashtable.put("61", "陜西");  hashtable.put("62", "甘肅");  hashtable.put("63", "青海");  hashtable.put("64", "寧夏");  hashtable.put("65", "新疆");  hashtable.put("71", "臺灣");  hashtable.put("81", "香港");  hashtable.put("82", "澳門");  hashtable.put("91", "國外");  return hashtable;  }  private static boolean isNumeric(String strnum) {  Pattern pattern = Pattern.compile("[0-9]*");  Matcher isNum = pattern.matcher(strnum);  if (isNum.matches()) {  return true;  } else {  return false;  }  }  public static boolean isDate(String strDate) {  Pattern pattern = Pattern  .compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");  Matcher m = pattern.matcher(strDate);  if (m.matches()) {  return true;  } else {  return false;  }  }  public static void main(String[] args) throws ParseException {  Scanner s=new Scanner(System.in);  System.out.println("請輸入你的身份證號碼:");  String IdCard=new String(s.next());  IdCard = IdCard.toUpperCase();  System.out.println(IDCardValidate(IdCard));  }  }

  

三、需要按PSP流程進行工作量估算,填寫任務清單工作量估算表。

任務清單工作量估算表:

?

PSP階段

時間估算(小時)

實際實際(小時)

計劃

估計每個階段的時間成本

?0.2

0.4

開發

需求分析

?0.3

?0.7

系統設計

?0.3

?0.5

設計復審

?0.1

?0.2

代碼實現

?0.2

?0.2

代碼復審

?0.5

?0.2

測試

?0.1

?0.5

報告

測試報告

?0.3

?0.3

總結

?0.3

?0.3

?

轉載于:https://www.cnblogs.com/362xu/p/8593635.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

koa --- nunjucks

安裝: npm install koa-nunjucks-2 --save目錄結構 |--- controller/ | |--- home.js |--- service/ | |--- home.js |--- views/ |--- app.js |--- router.jsapp.js // (部分) const nunjucks require(koa-nunjucks-2); app.use(nunjucks({ext: html,path: path.joi…

DNN模型訓練詞向量原理

轉自&#xff1a;https://blog.csdn.net/fendouaini/article/details/79821852 1 詞向量 在NLP里&#xff0c;最細的粒度是詞語&#xff0c;由詞語再組成句子&#xff0c;段落&#xff0c;文章。所以處理NLP問題時&#xff0c;怎么合理的表示詞語就成了NLP領域中最先需要解決的…

天平稱重【遞歸解法】

用天平稱重時&#xff0c;我們希望用盡可能少的砝碼組合稱出盡可能多的重量。如果只有5個砝碼&#xff0c;重量分別是1&#xff0c;3&#xff0c;9&#xff0c;27&#xff0c;81則它們可以組合稱出1到121之間任意整數重量&#xff08;砝碼允許放在左右兩個盤中&#xff09;。 本…

算法 --- reduce的使用.

描述: 難點: 將[[‘a’,‘b’,‘c’],[‘d’,‘e’,‘f’]]輸出為[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”]. 關鍵代碼描述: 1.假設我們已經根據輸入的數字得到了 rawArr [[‘a’,‘b’,‘c’],[‘d’,‘e’,‘f’]] 2. 下一步將rawArr[0…

SpringBoot、mysql配置PageHelper插件

一&#xff1a;https://blog.csdn.net/h985161183/article/details/79800737 主要異常&#xff1a;org.springframework.beans.factory.BeanCreationException: Error creating bean with name com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration: pageHelper.…

字符串的拆分以及分隔符所在不同位置的刪除

try { //根據imComuserGroupMng獲取這個數據庫的所有ImComuserGroup數據 List<ImComuserGroup> list imComuserGroupMng.findAllComuserGroup(); //便利實體數據list為數據的集合 …

算法 --- 遞歸生成括號

問題描述 思路: 1.首先生成n個括號 2.左括號數量(記為l)不超過n 3.右括號數量(記為r)不超過n,且優先生成左括號(即 l < r) 4.需要設計一個遞歸式h(str,l,r) // 一開始,str , l 0, r 0 // 第一步進去,添加左括號, str(, l 1, r 0 // 然后因為 l < n . r < l 所以…

使用 TypeScript 改造構建工具及測試用例

最近的一段時間一直在搞TypeScript&#xff0c;一個巨硬出品、賦予JavaScript語言靜態類型和編譯的語言。 第一個完全使用TypeScript重構的純Node.js項目已經上線并穩定運行了。 第二個前后端的項目目前也在重構中&#xff0c;關于前端基于webpack的TypeScript套路之前也有提到…

JavaScript 驗證表單不為空和獲取select下拉列表的值和文本

1.驗證表單不為空 var hasform { "Name": "名字", "Id_card": "身份證", "PaySalary": "月工資", "CardCode": "賬號", "Fk_Subjectf_Code": &quo…

javascript --- 變量污染全局作用域問題解決方案

日常寫法 // 假設你寫了幾個關于某個某塊的函數 function foo1 () {...} function foo2 () {...} function foo3 () {...}出現問題:假設你的團隊中也有一個人定義了foo1函數,那么你寫的將會覆蓋以前的函數,或者會被覆蓋掉.若前面使用let聲明了foo1變量.將會報錯. 解決污染 你…

solr7.4 安裝與使用

1.solr7環境要求 solr7需要java8環境&#xff0c;且需要在環境變量中添加 JAVA_HOME變量。 2.solr 安裝 下載地址 https://lucene.apache.org/solr/mirrors-solr-latest-redir.html 我下載為7.4版本 在solr5以前solr的啟動都有tomcat作為容器&#xff0c;但是從solr5以后solr內…

初入HTML5

在最開始接觸HTML5的時候&#xff0c;你會遇到的大多是一些常見常用的屬性以及屬性值。它們分類廣、品種雜且使用率高。到css各種樣式的時候&#xff0c;你會接觸到更多的東西&#xff0c;各種屬性、選擇器、盒子模型都是重點。那么&#xff0c;現在我們就看一下它們到底是什么…

javascript --- 讓函數的實例可以鏈式調用

關鍵: 在每個函數的末尾加上 return thisthis:在javascript中表示當前的對象 栗如: 有以下函數 var fooObj {foo1: function() {console.log(1);},foo2: function() {console.log(2);},foo3: function() {console.log(3);} }// 你想通過 fooObj.foo1().foo2().foo3() // …

ReactiveCocoa基礎

本文轉載自最快讓你上手ReactiveCocoa之基礎篇&#xff0c;在此基礎上稍作修改&#xff0c;歡迎交流。 有關對 ReactiveCocoa 的看法可以看一下唐巧的這篇ReactiveCocoa 討論會 ReactiveCocoa思維導圖ReactiveCocoa簡介 ReactiveCocoa&#xff08;簡稱為RAC&#xff09;,是由Gi…

javascript --- 創建一個二維數組

想創建一個 n*n 的矩陣,并全部賦予初始值false 你可能會想到下面 let arr []; for(let i 0 ;i< n;i) {arr[i] [];for( let j 0; j< n; j){arr[i][j] false;} }稍微封裝一下: function Cmatrix(n, c) {let arr [];for (let i 0; i < n; i) {arr[i] [];for (le…

配置OpenCV產生flann\logger.h(66): error C4996: ‘fopen': This function or variable may be unsafe問題

轉載自&#xff1a;http://guoming.me/%E9%85%8D%E7%BD%AEopencv%E4%BA%A7%E7%94%9Fflannlogger-h66-error-c4996-fopen-this-function-or-variable-may-be-unsafe%E9%97%AE%E9%A2%98 今天使用vs2012配置OpenCV編譯出現問題: 1>—— 已啟動生成: 項目: Win32ForOpenCV245, 配…

android listview和simpleadapter 給itme 中的控件添加事件

simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() { Override public boolean setViewValue(View view, Object data, String textRepresentation) {   Log.d("進入setview","進入setview");if(view instanceof Button &&am…

0 uC/OS 系統精講索引

uC/OS-II與uC/OS-III放在一起講&#xff0c;每個例程同時提供兩個版本的源代碼。 本系列教程主要涉及如下內容&#xff1a; 【原理部分】 1-操作系統簡介&#xff1a;基本概念 2-目錄結構與測試環境搭建&#xff1a;uC/OS-III emWin VS2015 2.1 官方文件目錄結構 【*】uC/Lib …

OPENCV-1 學習筆記

灰度圖&#xff1a;2維矩陣 彩色圖&#xff1a;3維矩陣 ps&#xff1a;目前大部分設備都是用無符號 8 位整數&#xff08;類型為 CV_8U&#xff09;表示像素亮度 Mat類定義&#xff1a; class CV_EXPORTS Mat { public://一系列函數.../* flag 參數中包含許多關于矩陣的信息…

javascript --- repeat的用處

描述 思路: 最多重復s.length次使用String.prototype.repeat(n)方法可以將字符串重復n次 核心: while( i < len/2){if( s s.slice(0,i).repeat(len /i) ) {return ture;} }總體代碼: var repeatedSubstringPattern function(s) {let i 1;let len s.length;while (i …