zoukankan      html  css  js  c++  java
  • 面向对象程序设计寒假作业3

    作业属于 2020年面向对象程序设计
    作业要求 面向对象程序设计寒假作业3
    作业目标

    继续完善代码

    实现负数的处理

    实现大于十数字的处理

    发表博客

    作业仓库 https://github.com/Es-war/2020-OPP-3

    一、编程题

    (在进行代码分块处理时,编写完成后,使用不同的主函数进行单元测试,测试结果附于代码下方)

                charToNum函数

    int charToNum(char oMoney[])
    {
        char figure[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
        char copy[0];
        int i, j, sum = 0, flag = 1, x = 0;
        int len = strlen(oMoney);
        for(i = 0; i < len; i += 2)
        {
            strncpy(copy,oMoney+i,2);
            if(!strcmp(copy,"负"))
              {
               flag = -1;
               x = 2;
        }
            for(j = 0; j < 11; j++)
            {
                if(!strcmp(copy,figure[j]))
                {
                    if(i==x&&j==10) sum += j;
                    else if(i!=x&&j==10) sum = sum*10;
                    else if(j!=10) sum += j;
                }
            }
        }
        return (flag*sum);
    }

    根据输入的数据进行判断,首先判断是否是负数,用flag记录正负情况,方便后面的数据返回;其次对涉及金额的中文字符数据进行转化,得到int型数据

     

     

             deal函数

     在deal函数中对用户输入的"钱包 增加"/  "钱包 减少"/  "看看 钱包"的行为进行判断处理, 根据具体行为具体操作

    int deal() 
    {
        char wallet[10], sign[10], coin[16];
        int  sum = 0;
        for (;;)
          {
              scanf("%s", wallet);
              if ( !strcmp("钱包", wallet) )   
                {
                    scanf("%s%s", sign, coin);  
                    if ( !strcmp("增加", sign) )   
                      sum += charToNum(coin); 
                    else if ( !strcmp("减少", sign) )
                      sum -= charToNum(coin);
              }
            else if ( !strcmp("看看", wallet) )
              {
                  scanf("%s", wallet);  break; 
              } 
          }
        return sum;
    }

    测试时与上面charToNum函数一起配合使用,并且人为的将初值赋为0(最后的代码中,是有对初值进行判断的,即调用charToNum函数得到初值)

     

               output函数

    在此函数中定义了字符二维数组来保存"零一二三四五六七八九十"这些中文字符,根据下标便可轻松调用.  主要用于输出<10的数据,以及接下来被outputPlus函数的调用. (与outputPlus一起进行单元测试)

    void output(int num)  
    {
        char figure[10][4] = {"", "", "", "", "", "", "", "", "", ""};
        printf("%s", figure[num]);
    }
           outputPlus

    在此函数中,主要是对处于[10, 99]区间数据的输出进行处理,  较为特殊的数据为[10,19], 例如12, 按照日常表达习惯应为"十二", 而不是"一十二"

    在主函数中进行是否为负数的判断,并且判断绝对值所处区间

     

              完整代码

    增加读入文件的功能

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    int charToNum(char oMoney[])
    {
        char figure[11][4]={"","","","","","","","","","",""};
        char copy[0];
        int i, j, sum = 0, flag = 1, x = 0;
        int len = strlen(oMoney);
        for(i = 0; i < len; i += 2)
        {
            strncpy(copy,oMoney+i,2); 
            if(!strcmp(copy,""))
              {
                  flag = -1;
                  x = 2;
              }
            for(j = 0; j < 11; j++)
            {
                if(!strcmp(copy,figure[j]))
                {
                    if(i==x&&j==10) sum += j;
                    else if(i!=x&&j==10) sum = sum*10;
                    else if(j!=10) sum += j; 
                }
            }
        }
        return (flag*sum);
    }
    int deal() 
    {
        char wallet[10], sign[10], coin[16];
        int  sum = 0;
        for (;;)
          {
              scanf("%s", wallet);
              if ( !strcmp("钱包", wallet) )   
                {
                    scanf("%s%s", sign, coin);  
                    if ( !strcmp("增加", sign) )   
                      sum += charToNum(coin); 
                    else if ( !strcmp("减少", sign) )
                      sum -= charToNum(coin);
              }
            else if ( !strcmp("看看", wallet) )
              {
                  scanf("%s", wallet);  break; 
              } 
          }
        return sum;
    }
    void output(int num)  
    {
        char figure[10][4] = {"", "", "", "", "", "", "", "", "", ""};
        printf("%s", figure[num]);
    }
    void outputPlus(int num)
    {
        int tensPlace, onesPlace;
        tensPlace = num / 10;
        onesPlace = num % 10;
        if ( tensPlace != 1 )
          output(tensPlace);
        printf("");
        if ( onesPlace )
              output(onesPlace);
    }
    int main() 
    {
        char document[20];
        char movement[16], wallet[16], sign[16], money[16];
        int total = 0;
        scanf("%s",document);
        freopen(document,"r",stdin);
        scanf("%s%s%s%s", movement, wallet, sign, money); 
        total = charToNum(money);  
        total += deal();   
        if (total < 0)
          printf("");
        total = fabs(total);
        if (total < 10)
          output(total);
        else
          outputPlus(total);
        return 0;
    }

     二、编译脚本

    @echo off
    set /p a=请输入文件所在磁盘
    cd "%a%"
    set /p b=请输入文件所在路径
    cd "%b%"
    set /p c=请输入文件名
    echo 编译开始
    gcc "%c%" -o try.exe
    if exist "try.exe" echo 编译成功
    if not exist "try.exe" echo 编译失败
    pause

     三、测试脚本

    @echo off
    cd C:/Users/Es war/C
    set /p a=请输入所要测试单元
    gcc "%a%" -o try.exe
    echo 开始测试
    try.exe
    echo 测试结束
    pause

    例:现将运行output.cpp

    输入程序名后,即可实现编译运行

  • 相关阅读:
    Delphi 使用字符串时,一个注意地方
    Delphi 字符串 详解
    Delphi SEH研究
    Delphi 新语法之Helper
    Delphi 判断一个二进制数中有多少个1
    Delphi 数据的理解
    Delphi 对象构造浅析后续
    Delphi 关于错误E2154 Type '%s' needs finalization not allowed in variant record
    Delphi 新语法介绍之For In
    Delphi 关于错误E1038 Unit identifier '%s' does not match file name
  • 原文地址:https://www.cnblogs.com/Es-war/p/12318030.html
Copyright © 2011-2022 走看看