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


    任务说明(二选一):

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

    实现要求:

    一、实现功能模块;

    1、身份证号合法,返回0;
    2、身份证号长度不合法,返回1;
    3、身份证号第1~17位含有非数字的字符,返回2;
    4、身份证号第18位既不是数字也不是英文小写字母x,返回3;
    5、身份证号的年信息非法,返回4;
    6、身份证号的月信息非法,返回5;

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

    #include<stdio.h> 
    #include<stdlib.h> 
    #include<string.h>  
    int verifyIDCard(char* input); 
    int is_leapyear(int year); 
    int getyear(char* input); 
    int getmonth(char* input); 
    int getday(char* input); 
    int check_1to17(char* input); 
    int check18(char* input); 
    int chech_year_month_day(int year, int month, int day);  
    int main() 
    { 
        char input[8][100] = {"511002111222","511002abc123456789", 
        "51100219880808123a","511002188808081234","511002198813081234", 
        "511002198808321234","511002198902291234","511002198808081234"}; 
        int i; 
        for(i=0; i<8; i++) 
        { 
            printf("the IDcard is: %s, the result is: %d
    ",input[i],verifyIDCard(input[i])); 
        } 
        return 0; 
    }   
    int is_leapyear(int year) 
    { 
        if(( (year%4==0) && (year%400!=0) ) || (year%400==0)) 
            return 1; 
        return 0; 
    } 
       
    int getyear(char* input) 
    { 
        int year=0; 
        year = (input[6]-'0') * 1000 + (input[7]-'0') * 100 + 
            (input[8]-'0') * 10 + (input[9]-'0'); 
        return year; 
    }  
    int getmonth(char* input) 
    { 
        int month=0; 
        month = (input[10]-'0') * 10 + (input[11]-'0'); 
        return month; 
    }   
    int getday(char* input) 
    { 
        int day=0; 
        day = (input[12]-'0') * 10 + (input[13]-'0'); 
        return day; 
    }   
    int check_1to17(char* input) 
    { 
        int i; 
        for(i=0; i<17; i++) 
            if( !(input[i]>='0' && input[i]<='9') ) 
                return 0; 
        return 1; 
    }   
    int check18(char* input) 
    { 
        char ch = input[17]; 
        if( (ch=='x') || (ch>='0' && ch<='9') ) 
            return 1; 
        else 
            return 0; 
    }  
    int check_year_month_day(int year, int month, int day) 
    { 
        int leap; 
        leap = is_leapyear(year); 
        if(year<1900 || year>2100) 
            return 4; 
        if(month<1 || month>12) 
            return 5; 
        switch(month) 
        { 
        case 1: 
        case 3: 
        case 5: 
        case 7: 
        case 8: 
        case 10: 
        case 12: 
            { 
                if(day<1 || day>31) 
                    return 6; 
                break; 
            } 
        case 4: 
        case 6: 
        case 9: 
        case 11: 
            { 
                if(day<1 || day>30) 
                    return 6; 
                break; 
            } 
        case 2: 
            { 
                if(leap) 
                { 
                    if(day<1 || day>29) 
                        return 6; 
                    break; 
                } 
                else 
                { 
                    if(day<1 || day>28) 
                        return 6; 
                    break; 
                } 
            } 
        } 
        return 0; 
    }   
    int verifyIDCard(char* input) 
    { 
        int year,month,day; 
        if(strlen(input)!=18) 
            return 1; 
        else 
        { 
            if(!check_1to17(input)) 
                return 2; 
            else 
            { 
                 if(!check18(input)) 
                     return 3; 
                 else 
                 { 
                    year = getyear(input); 
                    month = getmonth(input); 
                    day = getday(input); 
                    return check_year_month_day(year,month,day); 
                 } 
            } 
        } 
    } 
    

      

    三、需要按PSP流程进行工作量估算,填写任务清单工作量估算表。

    任务清单工作量估算表:

    PSP阶段

    时间估算(小时)

    实际实际(小时)

    计划

    估计每个阶段的时间成本

     1

     0.5

    开发

    需求分析

     3

     2

    系统设计

     4

     3

    设计复审

     1

     0.5

    代码实现

     0.5

     0.2

    代码复审

     0.2

    0 .1

    测试

     1

     0.5

    报告

    测试报告

     2

     1

    总结

     2

     1

  • 相关阅读:
    Vmware 添加虚拟磁盘
    2019-2020-2 《网络对抗技术》 Exp3 免杀原理与实践
    Docker 容器更换软件源
    Docker 查看容器 Linux 版本
    OpenMediaVault 5 进阶配置(四) Portainer 管理 Docker
    Portainer 中文文档:部署
    树莓派 部署 Docker 数据库容器
    通过Cookie统计上次网页访问时间
    用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)
    删掉双系统
  • 原文地址:https://www.cnblogs.com/Sir00437/p/8593937.html
Copyright © 2020-2023  润新知