zoukankan      html  css  js  c++  java
  • 软工作业PSP与单元测试训练 15100231

    任务说明(二选一):

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

    实现要求:

    一、实现功能模块;

    (1)用于检查身份证是否有效

     第18位检验位:

    将身份证号码17位数分别乘以不同系数,为7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
    将这17位数字相加除以11,得到余数。
    余数只可能为0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的数为1-0-X-9-8-7-6-5-4-3-2。而这个数就是最后一位身份证号码。

    生日格式的检验:

    生日不能的月份不能大于1,且日期不能大约3。

     (2)检查出生日期是否大于2018年3月

    输入的第7位到第11位将它们数值化然后于201803相比大于的为超出时间.

    (3)判断身份证地址

    输入的第1位和第2位将它们于对应的省份代号进行对比.

    (4)显示出生日期

    将分别代表出生年月日的第七位到第十四位显示。

    (5)显示性别

    第17位单数为男双数为女由此来显示。

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

    # include <stdio.h>
    # include <stdlib.h>
    # include <windows.h>
    
    int main(void) {
    
    
        int i, a[20], sum=0, b, m=0 ,day;
        char c;
        long area;
        printf("
    ");
        printf("查询的身份证号:");
        for(i=1; i<=17; i++) {
            scanf("%1d", &a[i]);
            day=a[7]*100000+ a[8]*10000+a[9]*1000+a[10]*100+a[11]*10+a[12];
        }
        scanf("%c", &c);    
        sum = a[1]*7 + a[2]*9 + a[3]*10 + a[4]*5 + a[5]*8 + a[6]*4 + a[7]*2
            + a[8]*1 + a[9]*6 + a[10]*3 +a[11]*7 + a[12]*9 + a[13]*10 + a[14]*5
            + a[15]*8 + a[16]*4 + a[17]*2;
        b = sum%11;
        switch(b) {//1 0 X 9 8 7 6 5 4 3 2 
            case 0: if(c=='1') m = 1;break;
            case 1: if(c=='0') m = 1;break;
            case 2: if(c=='X'||c=='x') m = 1;break;
            case 3: if(c=='9') m = 1;break;
            case 4: if(c=='8') m = 1;break;
            case 5: if(c=='7') m = 1;break;
            case 6: if(c=='6') m = 1;break;
            case 7: if(c=='5') m = 1;break;
            case 8: if(c=='4') m = 1;break;
            case 9: if(c=='3') m = 1;break;
            case 10: if(c=='2') m = 1;break;
        }
        
        
        
    //    用于检查身份证是否有效 
        if(m!=1||a[11]>1||a[13]>3) {
            printf("
    
    
    ");
            printf("a输入的不是有效的身份证!!!
    
    ");
            getchar();
            getchar();
        }
        
    
            
    //    用于判断出人是否出生于2018年03月之后 
           if(day>20183) {
            printf("
    
    
    ");
            printf("a此人未出生!!!
    
    ");
            getchar();
            getchar();
        }
         
    
         
    //     用于判断身份证地址 
        area = a[1]*10+ a[2];
        printf("
    
    
    ");
        printf("身份证地址:");
        switch(area) {
            case 11: printf("北京");break;
                    case 12: printf("天津");break;
                    case 13: printf("河北");break;
                    case 14: printf("山西");break;
                    case 15: printf("内蒙");break;
                    case 21: printf("辽宁");break;
                    case 22: printf("吉林");break;
                    case 23: printf("黑龙江");break;
                    case  31: printf("上海");break;
                    case 32: printf("江苏");break;
                    case 33: printf("浙江");break;
                    case 34: printf("安徽");break;
                    case 35: printf("福建");break;
                    case 36: printf("江西");break;
                     case 37: printf("山东");break;
                     case 41: printf("河南");break;
                    case 42: printf("湖北");break;
                    case 43: printf("湖南");break;
                    case 44: printf("广东");break;
                    case 45: printf("广西");break;
                    case 46: printf("海南");break;
                    case 51: printf("四川");break;
                    case 52: printf("贵州");break;
                    case 53: printf("云南");break;
                    case 54: printf("西藏");break;
                    case 61: printf("陕西");break;
                    case 62: printf("甘肃");break;
                    case 63: printf("青海");break;
                    case 64: printf("宁夏");break;
                    case 65: printf("新疆");break;              
                  }
        printf("
    ");
    
    
    
        
    //    用于显示出生日期 
        printf("出生日期:%d%d%d%d年%d%d月%d%d日
    ", a[7],a[8],a[9],a[10], a[11],a[12], a[13],a[14]);
        
        
        
        
    //    用于判断性别 
        if(a[17]%2==0)
            printf("性别:女
    ");
        else
            printf("性别:男
    ");
        printf("
    
    
    ");
        system("pause");
        return 0;
    }

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

    任务清单工作量估算表:

    PSP阶段

    时间估算(小时)

    实际实际(小时)

    计划

    估计每个阶段的时间成本

     0.8

    0.7 

    开发

    需求分析

    0.7 

    0.9 

    系统设计

     0.4

    0.4 

    设计复审

    0.5

    0.5 

    代码实现

    1

     1.2

    代码复审

    0.8 

     0.4

    测试

    0.4 

    0.4 

    报告

    测试报告

     0.3

     0.5

    总结

     0.5

    0.3 

     

  • 相关阅读:
    指针加减法运算的“定义域”
    将main()进行到底
    带命令行参数的main函数的误解[到处转载的垃圾]
    亡羊补牢还是越错越远——“C99允许在函数中的复合语句中定义变量”
    会错意表错情,搭错车上错床——“度日如年”的故事及“feof()”的故事
    狗屁不通的《C语言详解:什么是表达式、语句、表达式语句?》
    已知两边长求三角形面积
    用驴子拖宝马——怎样滥用结构体
    糟蹋好题——魔方阵问题
    怎样建立链表并同时造成内存泄露
  • 原文地址:https://www.cnblogs.com/linhui0822/p/8576110.html
Copyright © 2011-2022 走看看