程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 黑盒測試 白盒測試-進一步實現其他任何非整型輸入的情況,比如輸入字符,用單獨的函數實現判斷,在主函數中調用此函數判斷

黑盒測試 白盒測試-進一步實現其他任何非整型輸入的情況,比如輸入字符,用單獨的函數實現判斷,在主函數中調用此函數判斷

編輯:編程解疑
進一步實現其他任何非整型輸入的情況,比如輸入字符,用單獨的函數實現判斷,在主函數中調用此函數判斷
 #include <stdio.h>

int main(int argc,char* argv[])
{   
    int nBase = 1500,nPerformance = 0,nTemp = 0,nRes = 0;
    int nDuty = 0,nInvigilate = 0,nClass = 0;
    double fReserve = 0.0;
    printf("輸入老師值班天數(不少於5天,不能超過22天):");
    nRes = scanf("%d",&nDuty);

    while(nRes == 1)
    {
        if (nDuty >= 5 && nDuty <= 22)
        {
            break;
        }
        else if (nDuty < 0)
        {
            printf("輸入數據有誤,請輸入整數!\n");
        }
        else
        {           
            printf("輸入范圍有誤,請輸入整數!\n");
        }
        printf("輸入老師值班天數(不少於5天,不能超過22天):");
        nRes = scanf("%d",&nDuty);
    }

    printf("輸入老師監考次數(不能超過10次):");
    nRes = scanf("%d",&nInvigilate);
    while(nRes == 1)
    {
        if (nInvigilate >= 0 && nInvigilate <= 10)
        {
            break;
        }
        else if (nInvigilate < 0)
        {
            printf("輸入數據有誤,請輸入整數!\n");
        }
        else
        {           
            printf("輸入范圍有誤,請輸入整數!\n");
        }
        printf("輸入老師監考次數(不能超過10次):");
        nRes = scanf("%d",&nInvigilate);
    }

    printf("輸入老師上課次數(不能超過30次):");
    nRes = scanf("%d",&nClass);
    while(nRes == 1)
    {
        if (nClass >= 0 && nClass <= 30)
        {
            break;
        }
        else if (nClass < 0)
        {
            printf("輸入數據有誤,請輸入整數!\n");
        }
        else
        {           
            printf("輸入范圍有誤,請輸入整數!\n");
        }
        printf("輸入老師上課次數(不能超過30次):");
        nRes = scanf("%d",&nClass);
    }

    nPerformance = (nDuty * 60) + (nInvigilate * 30) + (nClass * 64);
    nTemp = nPerformance + nBase;

    if (nTemp > 5000)
    {
        fReserve = (nTemp - 5000) * 0.25 + 1000 * 0.2 + 2000 * 0.15 + 2000 * 0.1;
    }
    else if (nTemp > 4000 && nTemp < 5000)
    {
        fReserve = (nTemp - 4000) * 0.2 + 2000 * 0.15 + 2000 * 0.1;
    }
    else if (nTemp > 2000 && nTemp < 4000)
    {
        fReserve = (nTemp - 2000) * 0.15 + 2000 * 0.1;
    }
    else if (nTemp < 2000)
    {
        fReserve = (float)(nTemp * 0.1);
    }
    printf("績效工資總額是%d\n",nPerformance);
    printf("工資總額是%d\n",nTemp);
    printf("需要繳納的公積金是%0.2f\n",fReserve);
    return 0;
}

最佳回答:


可以參考參考

 #include <stdio.h>
#include <windows.h>

void Input(int &nDuty, int &nInvigilate,int &nClass);//獲取值班天數、監考次數、上課次數
void Calclate(int nDuty, int nInvigilate,int nClass);//計算工資、公積金等


int main(int argc,char* argv[])
{   
    int nDuty = 0,nInvigilate = 0,nClass = 0;

    Input(nDuty, nInvigilate, nClass);
    Calclate(nDuty, nInvigilate, nClass);
    return 0;
}

//輸入是否為合法數據 str為獲取的字符串,minValue為合法的最小值,maxValue為合法的最大值
//返回值 合法,返回輸入的整數,不合法返回0
int IsLegalInput(const char * str, int minValue, int maxValue)
{
    int i = 0;
    int strValue = 0;
    int strLength = strlen(str);//數據長度
    for (i = 0; i < strLength; i++)
    {
        if(('0' == str[i]) || ('1' == str[i]) || ('2' == str[i]) || ('3' == str[i]) || ('4' == str[i]) || ('5' == str[i])
            || ('6' == str[i]) || ('7' == str[i]) || ('8' == str[i]) || ('9' == str[i]))
        {
            break;
        }
        else // 輸入的不是整數
        {
            printf("輸入數據有誤,請輸入整數!\n");
            return 0;
        }
    }
    //確認是整數了
    strValue = atoi(str);
    if (strValue < minValue || maxValue < strValue )
    {
        printf("輸入范圍有誤,請輸入%d到%d的整數!\n", minValue, maxValue);
        return 0;
    }
    return strValue;
}

void Input(int &nDuty, int &nInvigilate,int &nClass)
{
    int rt;
    char input[10];

    //輸入老師值班天數
    do 
    {
        printf("輸入老師值班天數(不少於5天,不能超過22天):");
        scanf("%s",input);
        rt = nDuty = IsLegalInput(input, 5, 22);//是否為合法輸入
    } while (!rt);


    //輸入老師監考次數
    do 
    {
        printf("輸入老師監考次數(不能超過10次):");
        scanf("%s",input);
        rt = nInvigilate = IsLegalInput(input, 1, 10);//是否為合法輸入
    } while (!rt);


    //輸入老師上課次數
    do 
    {
        printf("輸入老師上課次數(不能超過30次):");
        scanf("%s",input);
        rt = nClass = IsLegalInput(input, 1, 30);//是否為合法輸入
    } while (!rt);
}

//計算工資、公積金等
void Calclate(int nDuty, int nInvigilate,int nClass)
{
    int nPerformance = 0;
    int nTemp = 0;
    int nBase = 1500;
    nPerformance = (nDuty * 60) + (nInvigilate * 30) + (nClass * 64);
    nTemp = nPerformance + nBase;
    double fReserve = 0.0;
    if (nTemp > 5000)
    {
        fReserve = (nTemp - 5000) * 0.25 + 1000 * 0.2 + 2000 * 0.15 + 2000 * 0.1;
    }
    else if (nTemp > 4000 && nTemp < 5000)
    {
        fReserve = (nTemp - 4000) * 0.2 + 2000 * 0.15 + 2000 * 0.1;
    }
    else if (nTemp > 2000 && nTemp < 4000)
    {
        fReserve = (nTemp - 2000) * 0.15 + 2000 * 0.1;
    }
    else if (nTemp < 2000)
    {
        fReserve = (float)(nTemp * 0.1);
    }
    printf("績效工資總額是%d\n",nPerformance);
    printf("工資總額是%d\n",nTemp);
    printf("需要繳納的公積金是%0.2f\n",fReserve);
}
klyxyl
qq_27587417
klyxyl
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved