面向对象程序设计2020第二次作业

这个作业属于哪个课程 2020面向对象程序设计张栋班
这个作业要求在哪里 【寒假作业2】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10231)
这个作业的目标 完善代码、新建GitHub仓库并上传代码、制作编译脚本、进行单元测试并制作测试脚本、添加文件读取功能
作业正文 【面向对象程序设计2020第二次作业】( https://www.cnblogs.com/dudu340/p/12255700.html)
参考文献 1、【如何在github创建新的仓库项目】(https://blog.csdn.net/qq_35869389/article/details/79472564)2、【C语言中函数返回字符串的四种方法】(https://www.cnblogs.com/qingergege/p/6496683.html)3、【GitHub Desktop的简易使用方法】(https://blog.csdn.net/xiaolongqinghua/article/details/87785139) 4、【Windows批处理(cmd/bat)常用命令教程】(https://www.cnblogs.com/xpwi/p/9626959.html)

一、编程题
在这次作业中,作业要求我们对上次编程题的程序进行优化,要求每个函数的长度一般不超过15行。因此,在这次优化中,我主要针对输出进行优化。在上次的代码中,由于我在输出时使用枚举法进行输出,更由于在输入时的加减运算可能不止一次,那么最后输出的范围则可能很大,因此我用于输出的函数会很长。因此,我在这次函数中,即

char shuchu(int sum);
if(strcmp(b,str2)==0)
    if(sum<10)
        {
            printf("%c",shuchu(sum));   
    }   
    else
    {
        m=sum/10;n=sum%10;
        if(n==0)
            {
            printf("%c十",shuchu(m));    
        } 
        else
        {
            printf("%c十%c",shuchu(m),shuchu(n));
            }
    }
char shuchu(int x)
    {
        if(x==1)
            return '一';
        else 
            if(x==2)
                return '二';
        else
            if(x==3)
                return '三';
        else
            if(x==4)
                return '四';
        else
            if(x==5)
                return '五';
        else
            if(x==6)
                return '六';
        else
            if(x==7)
                return '七';
        else
            if(x==8)
                return '八';
        else
            return '九';          
    }

但如果我这样优化,又会出现问题,即
面向对象程序设计2020第二次作业_第1张图片
在编译时,这样的程序并不能编译成功,我试过对(一~九)加过双引号或者不加引号,但编译都不能成功,但如果不把函数值返回,我就无法在函数中将大于十的数输出。我在网上查到一些可以用函数输出字符串的方法(C语言中函数返回字符串的四种方法(https://www.cnblogs.com/qingergege/p/6496683.html)),但是还没有试验过能否也适用于中文的返回,会在之后去试试。
至于命名规范这一问题,我认为,要想让每一个阅读程序的人更容易地理解每个函数的意思,那么首先应该见名知义。如果我们随意的命名每个函数的名字,诸如用x,y来命名,那么过一段时间之后可能连作者都不能理解程序了。因此,一个好的名字有助于我们更好的理解函数。我在之前程序中命名函数时都是采用拼音形式命名,碰上例如“钱包 增加 八”则会对应到“zengjia”这个函数。

在作业中,要求制作一个编译脚本,并用该脚本编译代码,我选择的脚本语言是Windows批处理。
Windows批处理:
首先打开记事本,在记事本输入
面向对象程序设计2020第二次作业_第2张图片
然后“另存”为文件名“xx.bat”,并且在“保存类型”中下拉“所有类型”,则可得到一个bat文件。但我在第一次弄完后得到一个乱码文件,即
面向对象程序设计2020第二次作业_第3张图片
后来在群里大佬的建议下,改为用写字板,
面向对象程序设计2020第二次作业_第4张图片
就可以得到一个正常的文件啦。
面向对象程序设计2020第二次作业_第5张图片
然后开始编译脚本:方法一、(这个我参考了其他人的方法)

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

但是我在编译时,并未能编译成功,
面向对象程序设计2020第二次作业_第6张图片
我本来以为这与我代码本身存在问题有关;但后来我又写了一个“Hello World”的简单代码,仍然提示编译失败,那么应该不是代码本身的问题,在尝试后我在文件名后加上.cpp后,发现就可以编译成功了。
面向对象程序设计2020第二次作业_第7张图片
面向对象程序设计2020第二次作业_第8张图片
方法二:(按照作业中的示例脚本)
在写字板写上以下内容:

gcc CCC.cpp -o lang.exe
pause

则可以在运行后得到一个lang的.exe文件
面向对象程序设计2020第二次作业_第9张图片
接下来开始测试脚本:

# include
# include
int main()
    {
        int zhi(char s[]);
        char a[11][10]={"零","一","二","三","四","五","六","七","八","九","十"}; 
        char b[6][10]={"傲","慢","与","偏","见"};
        int i,j,k,t;
        for(i=0;i<=9;i++)
            {
                printf("%s",a[i]);
                t=zhi(a[i]);
                if(t!=-2)
                    printf("pass");
                else
                    printf("error");
            }
        for(i=0;i<=4;i++)
            {
                printf("%c\n",b[i]);
                t=zhi(b[i]);
                if(t!=-2)
                    printf("pass");
                else
                    printf("error");
            }
        return 0;
    }
int zhi(char s[])
    {
        if(strcmp(s,"一")==0) return 1;
                else 
            if(strcmp(s,"二")==0) return 2;
        else 
            if(strcmp(s,"三")==0) return 3;
        else 
            if(strcmp(s,"四")==0) return 4;
                else 
            if(strcmp(s,"五")==0) return 5;
                else 
            if(strcmp(s,"六")==0) return 6;
                else 
            if(strcmp(s,"七")==0) return 7;
                else 
            if(strcmp(s,"八")==0) return 8;
                else 
            if(strcmp(s,"九")==0) return 9;
                else 
            if(strcmp(s,"零")==0) return 0;
                else return -2;
    }

并且在写字板上写下以下内容用于测试:

@echo off
cd d:
echo 开始测试
biancheng3.exe
echo 测试结束
Pause

则测试成功
面向对象程序设计2020第二次作业_第10张图片
通过在其他大佬的帮助下,明白了为了可以通过命令行读取一个文件,我还需要使用一个freopen函数。而操作方法就是在原函数中的main函数中再加上以下语句:

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

在写字板上写下要测试的内容:
面向对象程序设计2020第二次作业_第11张图片
然后在编译时输入文件名,即可
面向对象程序设计2020第二次作业_第12张图片
(这个不能编译出结果与我自己的代码本身有问题有关)
二、实践题
在这次实践题中,要求新建一个github仓库,并将该次作业中编程题中的代码以及脚本搬到仓库中。因此,首要问题便是如何新建一个仓库。首先,打开github页面,选择“Create a new repository”,即可出现一下这个界面,
面向对象程序设计2020第二次作业_第13张图片
然后,在填好“Repository name”等信息后,即可进入下一个界面,
面向对象程序设计2020第二次作业_第14张图片
那么,一个新的仓库我们就建好了。
接下来就是将文件上传到我们新建的这个仓库了。
安装git:
下载git。首先,需要下载git安装文件, 安装好git之后,可以这样测试是否成功:安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!即
面向对象程序设计2020第二次作业_第15张图片
使用github Desktop:
首先打开github Desktop,则会出现这样一个界面:
面向对象程序设计2020第二次作业_第16张图片
点击clone a repository,则
面向对象程序设计2020第二次作业_第17张图片
往仓库里上传文件:
我在这里碰上了一个大难题,打开github Desktop之后,我完全没有找到可以添加的按键,然后在查阅资料后,发现可以将需要添加的文件放在目录下,这就可以将文件贴在仓库里了。这样我就将文件上传到github了。
面向对象程序设计2020第二次作业_第18张图片
然后填好一下的内容后,就可以点击“Commit to master”。
面向对象程序设计2020第二次作业_第19张图片
面向对象程序设计2020第二次作业_第20张图片
反思与总结:
总的来说,这次作业对我的挑战很大,毕竟绝大部分对我来说都是新知识(之前真的一点都不会),但是,经过百度以及参考多位大佬的作业,还是艰难的做完作业,收获良多。但还有一些部分并没有真正的做好,会在之后的时间再去努力。

你可能感兴趣的:(面向对象程序设计2020第二次作业)