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

任务说明(二选一):

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

实现要求:

一、实现功能模块;

身份证号码长度为18位,由17位数字和一位检验码组成。

对输入的身份证号码的正确性进行判断

(1)检验校验位

十七位数字本体码加权求和公式

S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和

其中Ai:表示第i位置上的身份证号码数字值

Wi:表示第i位置上的加权因子,前17位加权因子从左到右分别为Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

再计算模Y = mod(S, 11),通过模Y得到对应的校验码:1 0 X 9 8 7 6 5 4 3 2

(2)检验年月日是否合理

年份大于等于1900年,小于等于当前年份,还需要考虑闰年、大小月的情况。闰年,能被4整除且不能被100整除或能被400整除的年份,闰年的2月份为29天,非闰年的2月份为28天。

如输入的身份证合法,则输出该身份证正确!

如输入的身份证格式不对,则输出该身份证格式错误,请重新输入!

如输入的身份证不正确,则输出该身份证无效,不是合法的身份证号码,请重新输入!

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

#include<stdio.h>
#include<string.h>
#include<time.h>
int strtonum(char *str){
    int num=0;
    for(int i=0;i<strlen(str);i++){
        num=num*10+str[i]-‘0‘;
    }
    return num;
}
char verifydate(char *date){
    struct tm *local;
    time_t t;
    t=time(NULL);
    local = localtime(&t);
    int year,month,day,c=local->tm_year;
    char s[5];
    memset(s,0,sizeof(s));
    memcpy(s,date,4);
    year=strtonum(s);
    memset(s,0,sizeof(s));
    memcpy(s,date+4,2);
    month=strtonum(s);
    memset(s,0,sizeof(s));
    memcpy(s,date+6,2);
    day=strtonum(s);
    if(year<1900 || year>(c+1900))return 0;
    if(month<1 || month>12)return 0;
    if(day>31 || day<1)return 0;
    if(day==31){
        if(month==2 || month==4 || month==6 || month==9 || month==11)return 0;
        else return 1;
    }
    if(day==30){
        if(month==2)return 0;
        else return 1;
    }
    if(day==29){
        if(year%4==0){
            if(year%100!=0)return 1;
            else
                if(year%400==0)return 1;
        }
        else return 0;
    }
    return 1;
}
void verifyID(char IDnum[]){
    int m[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},sum=0;
    char last[11]={‘1‘,‘0‘,‘x‘,‘9‘,‘8‘,‘7‘,‘6‘,‘5‘,‘4‘,‘3‘,‘2‘};
    for(int i=0;i<17;i++){
        sum=sum+((IDnum[i]-‘0‘)*m[i]);
    }
    if(IDnum[17]==last[sum%11])
        printf("该身份证正确!\n");
    else
        printf("该身份证无效,不是合法的身份证号码,请重新输入!\n");
}
int main()
{
    char IDnum[18],birthday[8];
    while(1){
        gets(IDnum);
        if(strlen(IDnum)==18){
            memcpy(birthday,IDnum+6,8);
            if(verifydate(birthday)==0)
                printf("该身份证无效,请重新输入!\n");
            else
                verifyID(IDnum);
        }
        else
            printf("该身份证格式错误,请重新输入!\n");
    }
    return 0;
}

测试结果:

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

任务清单工作量估算表:


PSP阶段


时间估算(小时)


实际实际(小时)


计划


估计每个阶段的时间成本


0.6


0.5


开发


需求分析


0.6


0.3


系统设计


0.8


0.3


设计复审


0.5


0.2


代码实现


1.5


1.5


代码复审


1


0.5


测试


0.5


0.5


报告


测试报告


1


0.5


总结


0.3


0.2

原文地址:https://www.cnblogs.com/jliblog/p/8570881.html

时间: 2024-10-14 06:54:14

软工作业PSP与单元测试训练的相关文章

软工作业PSP与单元测试

实现模块判断传入的身份证号码的正确性 一.实现功能模块: 验证输入的18位数字是否为正确的身份证号码. 二.针对所实现的模块编写对应的单元测试代码: 三.需要按PSP流程进行工作量估算,填写任务清单工作量估算表. 任务清单工作量估算表: PSP阶段 时间估算(小时) 实际实际(小时) 计划 估计每个阶段的时间成本 0.5 0.3 开发 需求分析 0.8 0.5 系统设计 0.5 0.6 设计复审 0.5 0.2 代码实现 2 1.5 代码复审 1 0.5 测试 1 0.8 报告 测试报告 0.3

软工作业: (2)硬币游戏—— 代码分析与改进

软工作业: (2)硬币游戏-- 代码分析与改进 一.作业要求 1.Python 程序阅读理解 2.学习Python 编码风格指南中译版(Google SOC)(http://blog.csdn.net/damotiansheng/article/details/43867175),改进Python程序 3.设计游戏规则,使得慈善事业可持续. 地铁口放置硬币箱(初始值500硬币),顾客可取.可放.请设计一组规则,使得该钱箱永远有钱取(尽量符合实际) 注:参考http://www.cnblogs.c

15软工作业02 验证电子邮箱账号的正确性

任务说明 实现模块判断传入的电子邮箱账号的正确性: 实现要求: 一.实现功能模块: 主模块.判断(@ 和  .)字符模块.判断字符串(判断邮箱账户)模块.邮箱验证模块 二.针对所实现的模块编写对应的单元测试代码: 实现代码: 测试代码: 三.需要按PSP流程进行工作量估算,填写任务清单工作量估算表. 任务清单工作量估算表: PSP阶段 时间估算(小时) 实际实际(小时) 计划 估计每个阶段的时间成本 3.6(220min) 4.0(240min) 开发 需求分析 0.6(40min) 0.4(2

软工作业02

实现要求: 一.实现功能模块: 校验省份.校验省份.校验出生日期.将15位的身份证转成18位身份证.数字验证. 将身份证的每位和对应位的加权因子相乘之后,再得到和值.将和值与11取模得到余数进行校验码判断.将字符数组转为整型数组. 二.针对所实现的模块编写对应的单元测试代码: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util

软工作业

(因本人水平有限,所写内容如有不对,请多多包涵) 一.一个能自动生成小学四则运算题目的"软件".(要求:除了整数以外,还要支持真分数的四则运算.) 由于本人能力有限,此次作业用c++来完成,也没有实现一个友好的用户界面. [代码地址] 二.在一周之内快速看了<构建之法>,列出一些不懂的问题. 1)第二章的单元测试那一小节,书中说"如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块的,而且模块的质量能得到稳定的.量化的保证?单元测试就是一个很有效

第二次软工作业

1.必做: 两人组成一队,进行结对编程,从第一次软件工程作业中选出一人的作业作为这次作业的基础设计一个图形界面(GUI)的四则运算应用程序,可以是PC桌面的图形界面程序.网页程序或者手机程序设计的应用程序可以完成加法.减法.乘法.除法运算应用程序可以完成真分数的四则运算. 基本版面如下: 回答真确时的版面: 回答错误的版面 2.选做: 1.逐步扩展功能和可以支持的表达式类型,最后希望能支持下面类型的题目 (最多10个运算符,括号的数量不限制): 25 - 3 * 4 - 2 / 2 + 89 =

软工作业03

一,题目要求(四则运算3) 1.学生写的程序必须能判定用户的输入答案是否正确,例如程序输出:20 – 5 = ?用户输入15,那么程序就会反馈正确,然后继续出题.直到 30 道题目结束,程序最后告诉用户作对了几道题. 2.程序必须能处理四种运算的混合算式: n20 – 5 * 2 =?           正确答案是10. n20– 5 * 2 + 9 / 3 = ?   正确答案是13 3.注意:连续的减法和除法,应该遵守左结合的规定. 连续除法要打括号,否则会引起歧义 二.设计思想 三.源程

第0次软工作业

第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 我最开始有选择计算机相关专业的念头的时候是高二的时候,我们学校开了一门学习VB语言编程的选修课,当时我觉得写程序很有意思,然后再加上我很喜欢打游戏,以后想从事游戏制作方面的工作,所以就萌生了学习软件工程这个专业的念头.当时我订的目标是北工大的软件工程专业.后来高考的时候成绩考冒了,分数正好够北航高工,听说在里面也可以学习软件工程,我就选择了北航高工,经过大一一年的了解,我发现计算机科学与技术这个专业比

第一次软工作业 个人项目 词频统计

1.预计完成时间: 在一开始的时候,我并不认为这项作业的完成难度有多大.因为觉得这个程序主要的部分就是三块码,读入当前目录下的所有内容,统计单词和排序,但是我对于C++和C#两种语言都不熟悉,所以准备先用两天来熟悉语言(后来发现这个决定是错误的..至少 不应该用这么长的时间).在程序的具体模块中,我划分了四个模块: 主函数:处理整个流程,包括读入目录中的所有内容和对于所执行模式的判断,预计用时1小时. 分割函数:将文件中的单词分割出来.由于有三种模式,预计用时3小时. 计数函数:统计频率,作为统