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

这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1.继续完成编程题 2.新建一个github仓库,并把作业推送到该仓库。
作业正文 如下
其他参考文献 在文中相关部分

一.实践题

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

1.新建仓库并安装Git

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

(我家的网这几天抽了风,信号时断时续时有时无,导致我作业做得很是痛苦,重点是我下的Git和github desktop一断网就下载失败要重头开始下载,然后这俩还下的贼慢,所以这个作业只有先放一放,等我下好了回补上的)

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

继续完成作业一的编程题。

  • 优化架构,一般要求每个函数长度不超过15行。
  • 优化规范,尤其是命名规范。
  • 制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。
    示例脚本:
    gcc 1.cpp -o lang.exe
  • 进行单元测试,即测试每一个函数,并制作一个测试脚本,运行该脚本可以进行测试,并显示测试结果。
    示例脚本:
gcc 1.cpp test.cpp -o test.exe
test
  • 在作业一编程题的基础上添加以下功能:
    • 通过命令行读取一个文件,然后运行这个文件。如我的程序叫lang,lang 1.txt代表我要运行1.txt这个文本中的代码。
    • 假设我的1.txt内容如下:
      整数 钱包 等于 零    
      钱包 增加 四
      钱包 减少 三
      看看 钱包
    • 输入lang 1.txt后,命令行输出

编程题要求:
1.读题,提取出题目的要求。
2.分解需求,把需求分解为几个你觉得不太相关的模块。
3.思考每个模块怎么写,可以从简单的模块开始写。
4.对于不会的问题进行查阅资料。
5.对于每一个模块设计测试用例。
6.详细记录下以上每一步,并写在博客中。
7.不要求完全做出来,但要求记录详细。
8.建议博客长度不少于1000字(不包含代码)。


  • 题目要求:
    编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
    变量定义:整数 钱包 等于 零
    运算(加法):钱包 增加 四
    运算(减法):钱包 减少 四
    输出:看看 钱包

  • 本次优化:
优化架构:压缩函数行数
优化命名:函数命名规范

关于命名规范:
以前都是想怎么命名就怎么命名,看到这次作业才知道命名是有规范的,就上网参考了一下,看到函数的命名规则大概有:
(1)函数的命名应该尽量用英文(或英文缩写、中文全拼、中文全拼缩写)表达出函数完成的功能——函数名应准确描述函数的功能。遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度不得少于8个字母。函数名首字大写,若包含有两个单词的每个单词首字母大写。如果是OOP 方法,可以只有动词(名词是对象本身)。
(2)避免使用无意义或含义不清的动词为函数命名。如使用process、handle等为函数命名,因为这些动词并没有说明要具体做什么。
(3)必须使用函数原型声明。函数原型声明包括:引用外来函数及内部函数,外部引用必须在右侧注明函数来源: 模块名及文件名;内部函数,只要注释其定义文件名——和调用者在同一文件中(简单程序)时不需要注释。应确保每个函数声明中的参数的名称、类型和定义中的名称、类型一致。
参考资料有:c语言变量名、函数名的命名规则,代码的两种命名方法:驼峰命名、匈牙利命名(优缺点)
---
函数一:

int changeInTen(char s[10])//将输入的中文转化成数字
{
    if(strcmp(s,"零")==0)    return 0;
    else 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 10;
}

函数二:

int calculate(char s[10],int m,int n)//将汉字增加和减少转换为+和-并进行运算
{   
    int k;
    if(strcmp(s,"增加")==0)   k=m+n;
    if(strcmp(s,"减少")==0)   k=m-n;
    return k;
}

函数三:

char exchangeInTen(int t)//将计算结果的数字转化回汉字
{
    if(t>0){
    if(t==0)    printf("零");
    else if(t==1)    printf("一");
    else if(t==2)    printf("三");
    else if(t==4)    printf("四");
    else if(t==5)    printf("五");
    else if(t==6)    printf("六");
    else if(t==7)    printf("七");
    else if(t==8)    printf("八");
    else if(t==9)    printf("九");
    }
    else if(t<0)    printf("Error");
}

完整代码:

#include
#include
int changeInTen(char s[10]);
int calculate(char s[10],int m,int n);
char exchangeInTen(int t)(int t);
int main()
{
    char a[10],b[10],c[10],d[10];
    int x,y; 
    scanf("%s %s %s %s",&a,&b,&c,&d);
    x=changeInTen(d);
    while(1){
        scanf("%s",a);
        if(strcmp(a,"看看")==0){//出现“看看”时计算停止,否则一直计算下去
            scanf("%s",b);
            break;
        } 
        else{ 
            scanf("%s %s",b,c);
            y=changeInTen(c);
            x=calculate(b,x,y); 
        }  
    }
    exchangeInTen(x);
    return 0;
} 
int changeInTen(char s[10])//将输入的中文转化成数字
{
    if(strcmp(s,"零")==0)    return 0;
    else 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 10;
}
int calculate(char s[10],int m,int n)//将汉字增加和减少转换为+和-并进行运算
{   
    int k;
    if(strcmp(s,"增加")==0)   k=m+n;
    if(strcmp(s,"减少")==0)   k=m-n;
    return k;
}
char exchangeInTen(int t)//将计算结果的数字转化回汉字
{
    if(t>0){
    if(t==0)    printf("零");
    else if(t==1)    printf("一");
    else if(t==2)    printf("三");
    else if(t==4)    printf("四");
    else if(t==5)    printf("五");
    else if(t==6)    printf("六");
    else if(t==7)    printf("七");
    else if(t==8)    printf("八");
    else if(t==9)    printf("九");
    }
    else if(t<0)    printf("Error");
}

制作编译脚本:(看群里的讨论我选择了Windows批处理)

根据百度说明的方法,第一步:右键新建一个文本文档。
第二步:打开新建的文本文档,输入需要批处理的DOS命令。(参考了windows批处理命令总结以及Windows 批处理脚本学习教程)
面向对象程序设计寒假作业2_第2张图片

第三步:右键,选择“重命名”。
第四步:后缀为“.bat”,双击处理好的批处理文件即可。
面向对象程序设计寒假作业2_第3张图片

单元测试:

先写出函数一的测试代码:

#include 
#include  
int changeInTen(char s[10])
{
    if(strcmp(s,"零")==0)    return 0;
    else 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 10;
}
void test(char a[],int num)
{
    if(changeInTen(a)==num)
      printf("成功\n");
    else
      printf("错误\n");  
}
int main()
{
    test("零",0);
    test("一",1);
    test("二",2);
    test("三",4);
    test("五",8); 
    return 0;
}

测试脚本:
面向对象程序设计寒假作业2_第4张图片
测试结果:
面向对象程序设计寒假作业2_第5张图片


在作业一编程题的基础上添加以下功能:

  • 通过命令行读取一个文件,然后运行这个文件。如我的程序叫lang,lang 1.txt代表我要运行1.txt这个文本中的代码。
  • 假设我的1.txt内容如下:
    整数 钱包 等于 零    
    钱包 增加 四
    钱包 减少 三
    看看 钱包
  • 输入lang 1.txt后,命令行输出

(这个看了其他大佬的作业发现了要用freopen()函数,然后我又上网参考了一下C 库函数 - freopen())

  • 首先新建一个文本文档:
    面向对象程序设计寒假作业2_第6张图片

  • 在主函数中加上freopen()函数(freopen("in.txt","r",stdin);in.txt处填文件路径)
  • 得到结果:
    面向对象程序设计寒假作业2_第7张图片

因为贪玩这次作业开始得有点晚,做得有点仓促,完成的也很粗糙,脚本我也是完全没听过也不会做啊,所以时间都花在了制作编译脚本上,另外让我卡了很久的就是那句“gcc不是内部命令也不是可运行的程序或批处理文件”,这里真的万分感谢善良的L童鞋一步一步地教我设置path,我才能搞定它)

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