1. 程式人生 > >軟工作業PSP與單元測試訓練

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

set 等於 strlen day 位置 代碼 rto str 還需要

任務說明(二選一):

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

實現要求:

一、實現功能模塊;

身份證號碼長度為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

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