面向对象程序设计寒假作业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文件忽略不要上传的文件。
首先在主页中创建一个新的仓库,如图
创建完成后安装Git Bash
通过查找资料和参考其他同学博客了解相关操作。
首先通过如下代码登录
git config --global user.name "(你自己的登录名)"
git config --global user.emial "(你自己用的登陆邮箱)"
成功登录后创建本地代码仓库,在github中找到地址输入
不知道为什么一直出现警告,但好像对最后提交代码没有什么影响
将要提交的代码文件放在刚刚在github上所创建的仓库名所表示的文件夹下,出现下面界面则代码成功同步到git上
最后把代码全部递交到github上
打开相应仓库则可以看到代码已成功提交
查找资料了解到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 <stdio.h>
#include <string.h>
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文件所在位置就可以成功编译
用脚本测试时要先编写相应测试代码,如下
#include <string.h>
#include <stdio.h>
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;
}
编写测试脚本后,结果如下
出现不推荐将字符串常量转换为“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;
}
正常运行
输出测试函数如下
#include <stdio.h>
#include <string.h>
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
测试结果
用命令行运行文件,通过百度及参考其他同学做法,了解到需要用到freopen函数,其有6种使用文件方式,分别是
r(read):只读;
w(write):只写;
a(append):追加;
t(text):文本文件,可省略;
b(binary):二进制文件。
+:读和写
首先要新建一个文本文档
在主函数中添加如下代码
printf("请输入文件名\n");
char s[10];
scanf("%s",s);
freopen(s,"r",stdin);
运行得
要注意不能少了后缀名.txt