面向对象程序设计寒假作业2

这个作业属于哪个课程 2020年面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1.继续完成编程题2.新建一个github仓库,并把作业推送到该仓库3.发布博客
作业正文 如下
其他参考文献 C语言命名规范 Windows批处理(cmd/bat)常用命令教程 Git学习 Git 忽略提交 .gitignore

一:实践题
新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件。用法自行百度。
二:编程题(请使用C语言或者C++完成以下题目):
继续完成作业一的编程题。
优化架构,一般要求每个函数长度不超过15行。
优化规范,尤其是命名规范。
制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
在作业一编程题的基础上添加以下功能:
进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
通过命令行读取一个文件,然后运行这个文件。
编程题要求:
1.读题,提取出题目的要求。
2.分解需求,把需求分解为几个你觉得不太相关的模块。
3.思考每个模块怎么写,可以从简单的模块开始写。
4.对于不会的问题进行查阅资料。
5.对于每一个模块设计测试用例。
6.详细记录下以上每一步,并写在博客中。

一:实践题

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

首先在主页中创建一个新的仓库,如图

面向对象程序设计寒假作业2_第1张图片

创建完成后安装Git Bash

面向对象程序设计寒假作业2_第2张图片

通过查找资料和参考其他同学博客了解相关操作。
首先通过如下代码登录

git config --global user.name "(你自己的登录名)"
git config --global user.emial "(你自己用的登陆邮箱)"

成功登录后创建本地代码仓库,在github中找到地址输入

面向对象程序设计寒假作业2_第3张图片

不知道为什么一直出现警告,但好像对最后提交代码没有什么影响
将要提交的代码文件放在刚刚在github上所创建的仓库名所表示的文件夹下,出现下面界面则代码成功同步到git上

面向对象程序设计寒假作业2_第4张图片

最后把代码全部递交到github上

面向对象程序设计寒假作业2_第5张图片

打开相应仓库则可以看到代码已成功提交

面向对象程序设计寒假作业2_第6张图片

查找资料了解到gitignore规则作用
/mtk 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!/mtk/one.txt 追踪(不过滤)某个具体文件
但是对具体用法还是有些不太明白,接下来会再多做了解

二:编程题(请使用C语言或者C++完成以下题目):

继续完成作业一的编程题。
优化架构,一般要求每个函数长度不超过15行。
优化规范,尤其是命名规范。

  • 输入函数
int input(char a[])
{
    if(!strcmp(a,"零")) return 0;
    else if(!strcmp(a,"一")) return 1;
    else if(!strcmp(a,"二")) return 2;
    else if(!strcmp(a,"三")) return 3;
    else if(!strcmp(a,"四")) return 4;
    else if(!strcmp(a,"五")) return 5;
    else if(!strcmp(a,"六")) return 6;  
    else if(!strcmp(a,"七")) return 7; 
    else if(!strcmp(a,"八")) return 8; 
    else if(!strcmp(a,"九")) return 9; 
    else if(!strcmp(a,"十")) return 10;
}

不足之处:虽然做了优化,但仍有未处理俩位数输入的缺点

  • 输出函数
void output_1(int sum)
{
    if(sum>0)
    {
        if(sum==0) printf("零");
        else if(sum==1) printf("一");
        else if(sum==2) printf("二");
        else if(sum==3) printf("三");
        else if(sum==4) printf("四");
        else if(sum==5) printf("五");
        else if(sum==6) printf("六");
        else if(sum==7) printf("七");
        else if(sum==8) printf("八");
        else if(sum==9) printf("九");
        else if(sum==10) printf("十");        
    }
    else if(sum<0)
        printf("over-expenditure!"); 
}
void output_2(int sum)
{
    if(sum<=99)
    {
        int a,b;
        a=sum%10;
        b=sum/10;
        if(b!=1)//简化了重复代码
          output_1(b);
        printf("十");
        if(a!=0)
          output_1(a);    
    }
    else
    printf("You are a rich man!");
}

完整代码

#include 
#include 
int input(char a[])
{
    if(!strcmp(a,"零")) return 0;
    else if(!strcmp(a,"一")) return 1;
    else if(!strcmp(a,"二")) return 2;
    else if(!strcmp(a,"三")) return 3;
    else if(!strcmp(a,"四")) return 4;
    else if(!strcmp(a,"五")) return 5;
    else if(!strcmp(a,"六")) return 6;  
    else if(!strcmp(a,"七")) return 7; 
    else if(!strcmp(a,"八")) return 8; 
    else if(!strcmp(a,"九")) return 9; 
    else if(!strcmp(a,"十")) return 10;
}
void output_1(int sum)
{
    if(sum>0)
    {
        if(sum==0) printf("零");
        else if(sum==1) printf("一");
        else if(sum==2) printf("二");
        else if(sum==3) printf("三");
        else if(sum==4) printf("四");
        else if(sum==5) printf("五");
        else if(sum==6) printf("六");
        else if(sum==7) printf("七");
        else if(sum==8) printf("八");
        else if(sum==9) printf("九");
        else if(sum==10) printf("十");        
    }
    else if(sum<0)
        printf("over-expenditure!"); 
}
void output_2(int sum)
{
    if(sum<=99)
    {
        int a,b;
        a=sum%10;
        b=sum/10;
        if(b!=1)
          output_1(b);
        printf("十");
        if(a!=0)
          output_1(a);    
    }
    else
    printf("You are a rich man!");
}
int main()
{
    char zs[5],qb[100],dy[100],num[5],q[5];
    int sum;
    scanf("%s %s %s %s",zs,qb,dy,num);
    if(strcmp(zs,"整数")==0&&strcmp(qb,"钱包")==0&&strcmp(dy,"等于")==0)
    {
        sum=input(num);
        while(1)
        {
            scanf("%s",qb);
            if(strcmp(qb,"钱包"))
             break;
            scanf("%s %s",dy,num);
            if(!strcmp(dy,"增加"))
                sum+=input(num);
            else if(!strcmp(dy,"减少"))
                sum-=input(num);
            else
                printf("error!");
        } 
        scanf("%s",q);
        if(strcmp(qb,"看看")==0&&strcmp(q,"钱包")==0)
        {
            if(sum<=10)
             output_1(sum);
            else
             output_2(sum);
        } 
        else
         printf("error!");
    } 
    else
    printf("error!");
    return 0;
} 

制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
在作业一编程题的基础上添加以下功能:

  • 进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
  • 通过命令行读取一个文件,然后运行这个文件。

我选择了windows批处理,首先新建一个文本文档,输入如下代码,保存时将文件后缀名改为.bat,如果出现乱码,可将编码改为ANSI。

@echo off
echo 编译开始
gcc 钱包.cpp -o test.exe
if exist "test.exe" echo 编译成功
if not exist "test.exe" echo 编译失败
pause

第一次双击运行时出现gcc不是内部或外部命令,也不是可运行的程序或批处理文件的警告,百度后发现是路径问题,在高级系统设置path中添加gcc文件所在位置就可以成功编译

面向对象程序设计寒假作业2_第7张图片

用脚本测试时要先编写相应测试代码,如下

#include 
#include  
int input(char a[])
{
    if(!strcmp(a,"零")) return 0;
    else if(!strcmp(a,"一")) return 1;
    else if(!strcmp(a,"二")) return 2;
    else if(!strcmp(a,"三")) return 3;
    else if(!strcmp(a,"四")) return 4;
    else if(!strcmp(a,"五")) return 5;
    else if(!strcmp(a,"六")) return 6;  
    else if(!strcmp(a,"七")) return 7; 
    else if(!strcmp(a,"八")) return 8; 
    else if(!strcmp(a,"九")) return 9; 
    else if(!strcmp(a,"十")) return 10;
}
void test(char a[],int num)
{
    if(input(a)==num)
      printf("pass\n");
    else
      printf("error\n");  
}
int main()
{
    test("零",0);
    test("一",1);
    test("二",2);
    test("三",4);
    test("四",5);
    return 0;
}

编写测试脚本后,结果如下

面向对象程序设计寒假作业2_第8张图片

出现不推荐将字符串常量转换为“char*”的警告,于是将主函数代码改为

int main()
{
    char a[5]="零";
    test(a,0);
    char b[5]="一"; 
    test(b,1);
    char c[5]="二";
    test(c,2);
    char d[5]="三";
    test(d,4);
    char e[5]="四";
    test(e,5);
    return 0;
}

正常运行

面向对象程序设计寒假作业2_第9张图片

输出测试函数如下

#include 
#include  
void output_1(int sum)
{
    if(sum>=0)
    {
        if(sum==0) printf("零");
        else if(sum==1) printf("一");
        else if(sum==2) printf("二");
        else if(sum==3) printf("三");
        else if(sum==4) printf("四");
        else if(sum==5) printf("五");
        else if(sum==6) printf("六");
        else if(sum==7) printf("七");
        else if(sum==8) printf("八");
        else if(sum==9) printf("九");
        else if(sum==10) printf("十");        
    }
    else if(sum<0)
        printf("over-expenditure!"); 
}
void output_2(int sum)
{
    if(sum<=99)
    {
        int a,b;
        a=sum%10;
        b=sum/10;
        if(b!=1)
          output_1(b);
        printf("十");
        if(a!=0)
          output_1(a);    
    }
    else
    printf("You are a rich man!");
}
int main()
{
    printf("请输入测试数据\n");
    int sum;
   while(scanf("%d",&sum)!=EOF) 
    {
        if(sum<=10)
         output_1(sum);
        else
         output_2(sum); 
     }
     
}

再编写一个脚本同时测试两个函数,如下

@echo off
gcc test1.cpp -o test1.exe
gcc test2.cpp -o test2.exe
echo 开始测试
echo 测试一
test1.exe
echo 测试二
test2.exe
echo 测试完毕
pause

测试结果

面向对象程序设计寒假作业2_第10张图片

用命令行运行文件,通过百度及参考其他同学做法,了解到需要用到freopen函数,其有6种使用文件方式,分别是
r(read):只读;
w(write):只写;
a(append):追加;
t(text):文本文件,可省略;
b(binary):二进制文件。
+:读和写
首先要新建一个文本文档

面向对象程序设计寒假作业2_第11张图片

在主函数中添加如下代码

 printf("请输入文件名\n"); 
 char s[10];
 scanf("%s",s);
 freopen(s,"r",stdin);

运行得

面向对象程序设计寒假作业2_第12张图片

要注意不能少了后缀名.txt

你可能感兴趣的:(面向对象程序设计寒假作业2)