码迷,mamicode.com
首页 > 其他好文 > 详细

软工作业PSP与单元测试训练

时间:2018-03-18 00:16:34      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:can   info   highlight   post   oid   海南   宁夏   cep   阶段   

一、实现模块判断传入的身份证号码的正确性;

技术分享图片

二、针对所实现的模块编写对应的单元测试代码;

  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

技术分享图片

 

软工作业PSP与单元测试训练

标签:can   info   highlight   post   oid   海南   宁夏   cep   阶段   

原文地址:https://www.cnblogs.com/362xu/p/8593635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!