面向对象程序设计寒假作业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

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

 

 

posted @ 2020-02-16 18:41  Es-war  阅读(167)  评论(0编辑  收藏  举报