軟工作業PSP與單元測試訓練
阿新 • • 發佈:2018-03-15
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; } charverifydate(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與單元測試訓練