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"

     

     答案正确

  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/Es-war/p/12258183.html
Copyright © 2011-2022 走看看