zoukankan      html  css  js  c++  java
  • 2020面向对象寒假作业(二)

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

    1.创建GitHub仓库,并上传文件

    2.学习Windows批处理

    3.使用Windows批处理编译代码

    参考文献

    Windows批处理(cmd/bat)常用命令教程

    Github使用.gitignore文件忽略不必要上传的文件

    Git教程

    Git和GitHub使用教程

     

    1.使用github desktop新建一个github仓库

    • 新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
    • 请使用.gitignore文件忽略不要上传的文件。

    由于之前已经创建过GitHub的账号, 安装了GitHub, 所以跳过这些步骤

    (1)创建仓库

    创建了一个名为"2020-opp"的仓库,将本次作业上传于此

    (2)上传文件

    右键文件夹, 点击Git bash here, 随后输入命令语句

    git clone https://github.com/Es-war/2020-opp.git

    创建成功后打开多出来的文件夹,把所需文件复制黏贴进去

    继续输入命令    cd 2020-opp, 进入此文件夹

    接下来依次输入以下代码即可完成其他剩余操作:

         git add .        (别省略".")

         git commit  -m  "提交信息"  

         git push -u origin master   

    最后打开网页检查是否上传成功

    2.编程题

    ·继续完成作业一的编程题。
    ·优化架构,一般要求每个函数长度不超过15行。
    ·优化规范,尤其是命名规范。
    ·制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
    ·进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
    ·在作业一编程题的基础上添加以下功能
             ·通过命令行读取一个文件

    (1)代码分块

              error函数

    在此函数中提示用户错误输入的类型

    void error(int type)
    {
        switch ( type )
          {
              case 1:printf("请输入正确数据
    ");break;
              case 2:printf("请输入正确符号
    ");break;
              case 3:printf("输入数值须在0~10内
    ");break;
              case 4:printf("数值总和须在0~99范围内
    ");
          }
    }
             getValue函数

    在此函数中对输入的金额进行由中文到阿拉伯数字的转换,包括第一次输入时的初始金额,和后续的钱包增加/减少操作中的转换. 在最开始的版本中,sum(钱包金额)值的增加减少我给它们各自定义了一个函数,后来发现没有这个必要,只要我输入的数据为零到十,可以直接调用getValue函数进行处理,这样也优化了代码的结构,减少代码冗余部分.

    int getValue()  
    {
        if (!strcmp("", money)) return 0;
        else if ( !strcmp("", money) ) return 1;
        else if ( !strcmp("", money) ) return 2;
        else if ( !strcmp("", money) ) return 3;
        else if ( !strcmp("", money) ) return 4;
        else if ( !strcmp("", money) ) return 5;
        else if ( !strcmp("", money) ) return 6;
        else if ( !strcmp("", money) ) return 7;
        else if ( !strcmp("", money) ) return 8;
        else if ( !strcmp("", money) ) return 9;
        else if ( !strcmp("", money) ) return 10;
        else error(3);
    } 
               deal函数

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

    void deal() 
    {
        for (;;)
          {
              scanf("%s", wallet);
              if ( !strcmp("钱包", wallet) )   
                {
                    scanf("%s%s", sign, money);  
                    if ( !strcmp("增加", sign) )   
                      sum += getValue(); 
                    else if ( !strcmp("减少", sign) )
                      sum -= getValue();
                    else
                      error(2);
              }
            else if ( !strcmp("看看", wallet) )
              {
                  scanf("%s", wallet);  break; 
              } 
            else error(1); 
          }
    }
                output函数

    在此函数中定义了字符二维数组来保存"零一二三四五六七八九十"这些中文字符,根据下标便可轻松调用.  主要用于输出<10的数据,以及接下来被outputPlus函数的调用.  原先采用的是switch语句,但后来发现这样过于繁琐,所以这样改进.

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

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

    void outputPlus(int num)
    {
        int tensPlace, onesPlace;
        tensPlace = num / 10;
        onesPlace = num % 10;
        if ( tensPlace != 1 )
          output(tensPlace);
        printf("十");
        if ( onesPlace )
              output(onesPlace);
    }
    
                  完整代码
    #include<stdio.h>
    #include<string.h>
    char movement[10], wallet[10], sign[10], money[10];
    int sum;
    void error(int type)
    {
        switch ( type )
          {
              case 1:printf("请输入正确数据
    ");break;
              case 2:printf("请输入正确符号
    ");break;
              case 3:printf("输入数值须在0~10内
    ");break;
              case 4:printf("数值总和须在0~99范围内
    ");
          }
    }
    int getValue()  
    {
        if (!strcmp("", money)) return 0;
        else if ( !strcmp("", money) ) return 1;
        else if ( !strcmp("", money) ) return 2;
        else if ( !strcmp("", money) ) return 3;
        else if ( !strcmp("", money) ) return 4;
        else if ( !strcmp("", money) ) return 5;
        else if ( !strcmp("", money) ) return 6;
        else if ( !strcmp("", money) ) return 7;
        else if ( !strcmp("", money) ) return 8;
        else if ( !strcmp("", money) ) return 9;
        else if ( !strcmp("", money) ) return 10;
        else error(3);
    } 
    void deal() 
    {
        for (;;)
          {
              scanf("%s", wallet);
              if ( !strcmp("钱包", wallet) )   
                {
                    scanf("%s%s", sign, money);  
                    if ( !strcmp("增加", sign) )   
                      sum += getValue(); 
                    else if ( !strcmp("减少", sign) )
                      sum -= getValue();
                    else
                      error(2);
              }
            else if ( !strcmp("看看", wallet) )
              {
                  scanf("%s", wallet);  break; 
              } 
            else error(1); 
          }
    }
    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() 
    {
        scanf("%s%s%s%s", movement, wallet, sign, money); 
        sum = getValue();  
        deal();   
        if (sum < 10) 
          output(sum);  
        else if ( sum < 100 ) 
          outputPlus(sum);
        else
          error (4);
        return 0;
    }

    #不足:对于输入金额大于十的未能进行有效处理

    (2)制作编译脚本

    使用Windows批处理来制作编译器脚本

    查阅相关资料,了解"脚本""编译器脚本""Windows批处理"等相关名词, 掌握主要的Windows批处理命令语句, 以及询问同学

    (一开始, 我选择学习的脚本语言是shell, 看了一大半以后才发现原来shell是针对Linux系统的, 如果想在Windows下运行, 需下载专门的软件, 也比较麻烦. 后来了解到Git bash可以运行shell, 于是我跟着网上的教程进行操作, 但是不知道为什么老是出错, 我使用Windows自带的记事本进行编写shell指令, 然后另存为时修改后缀, 一开始总是出现闪退现象, 我一双击文件, 立马关闭, 后来我给它增加了sleep属性, 便于观察. 一番折腾后, 我最终选择Windows批处理.)

     最后一句"pause"很重要, 有点类似于shell中的sleep吧(不知道有没有说错), 这可以让我们看到最终运行结果.

    @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

    (3)测试脚本

    测试脚本的编写与上述的编译脚本大同小异

     测试脚本代码如下

    @echo off
    cd C:/Users/Es war/C
    set /p a=请输入所要测试单元
    echo 开始测试
    "%a%"
    echo 测试结束
    pause
                     error函数测试
    #include<stdio.h>
    #include<string.h>
    char movement[10], wallet[10], sign[10], money[10];
    int sum;
    void error(int type)
    {
        switch ( type )
          {
              case 1:printf("请输入正确数据
    ");break;
              case 2:printf("请输入正确符号
    ");break;
              case 3:printf("输入数值须在0~10内
    ");break;
              case 4:printf("数值总和须在0~99范围内
    ");
          }
    }
    int main() 
    {
        int i;
        for (i = 1; i < 5; i++)
          error(i);
        return 0;
    }

                     getValue函数测试
    #include<stdio.h>
    #include<string.h>
    char movement[10], wallet[10], sign[10], money[10];
    int sum;
    void error(int type)
    {
        switch ( type )
          {
              case 1:printf("请输入正确数据
    ");break;
              case 2:printf("请输入正确符号
    ");break;
              case 3:printf("输入数值须在0~10内
    ");break;
              case 4:printf("数值总和须在0~99范围内
    ");
          }
    }
    int getValue()  
    {
        if (!strcmp("", money)) return 0;
        else if ( !strcmp("", money) ) return 1;
        else if ( !strcmp("", money) ) return 2;
        else if ( !strcmp("", money) ) return 3;
        else if ( !strcmp("", money) ) return 4;
        else if ( !strcmp("", money) ) return 5;
        else if ( !strcmp("", money) ) return 6;
        else if ( !strcmp("", money) ) return 7;
        else if ( !strcmp("", money) ) return 8;
        else if ( !strcmp("", money) ) return 9;
        else if ( !strcmp("", money) ) return 10;
        else error(3);
    } 
    int main() 
    {
        for (int i = 0; i<12; i++)
          {
              scanf("%s", money); 
            sum = getValue();  
            printf("%d
    ", sum);
          }
        return 0;
    }

                       deal函数测试
    #include<stdio.h>
    #include<string.h>
    char movement[10], wallet[10], sign[10], money[10];
    int sum;
    void error(int type)
    {
        switch ( type )
          {
              case 1:printf("请输入正确数据
    ");break;
              case 2:printf("请输入正确符号
    ");break;
              case 3:printf("输入数值须在0~10内
    ");break;
              case 4:printf("数值总和须在0~99范围内
    ");
          }
    }
    int getValue()  
    {
        if (!strcmp("", money)) return 0;
        else if ( !strcmp("", money) ) return 1;
        else if ( !strcmp("", money) ) return 2;
        else if ( !strcmp("", money) ) return 3;
        else if ( !strcmp("", money) ) return 4;
        else if ( !strcmp("", money) ) return 5;
        else if ( !strcmp("", money) ) return 6;
        else if ( !strcmp("", money) ) return 7;
        else if ( !strcmp("", money) ) return 8;
        else if ( !strcmp("", money) ) return 9;
        else if ( !strcmp("", money) ) return 10;
        else error(3);
    } 
    void deal() 
    {
        for (;;)
          {
              scanf("%s", wallet);
              if ( !strcmp("钱包", wallet) )   
                {
                    scanf("%s%s", sign, money);  
                    if ( !strcmp("增加", sign) )   
                      sum += getValue(); 
                    else if ( !strcmp("减少", sign) )
                      sum -= getValue();
                    else
                      error(2);
              }
            else if ( !strcmp("看看", wallet) )
              {
                  scanf("%s", wallet);  break; 
              } 
            else error(1); 
          }
    }
    int main() 
    {
        scanf("%s%s%s%s", movement, wallet, sign, money); 
        sum = getValue();  
        deal();   
        printf("%d
    ", sum);
        return 0;
    }

     

                       output函数outputPlus函数测试
    #include<stdio.h>
    #include<string.h>
    char movement[10], wallet[10], sign[10], money[10];
    int sum;
    void error(int type)
    {
        switch ( type )
          {
              case 1:printf("请输入正确数据
    ");break;
              case 2:printf("请输入正确符号
    ");break;
              case 3:printf("输入数值须在0~10内
    ");break;
              case 4:printf("数值总和须在0~99范围内
    ");
          }
    }
    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() 
    {
        scanf("%d", &sum); 
        if (sum < 10) 
          output(sum);  
        else if ( sum < 100 ) 
          outputPlus(sum);
        else
          error (4);
        return 0;
    }

    (4)添加功能

    使C语言的freopen()函数即可

    例如, 我要读入的文件名为"war.txt"

     

     答案正确

  • 相关阅读:
    关于android studio几种常见的错误解决
    Codeforces 528A Glass Carving STL模拟
    Windows 8 快捷键收集整理
    设计模式学习05—原型模式
    Connect the Campus (Uva 10397 Prim || Kruskal + 并查集)
    WordPress改动新用户注冊邮件内容--自己定义插件
    servlet_1
    我使用过的Linux命令之file
    灵活使用getconf命令来获取系统信息
    odd number、 even number
  • 原文地址:https://www.cnblogs.com/Es-war/p/12258183.html
Copyright © 2011-2022 走看看