寒假作业3
| 这个作业属于哪个课程 | 2020面向对象程序设计 |
|---|---|
| 这个作业要求在哪里 | 面向对象程序设计寒假作业3 |
| 这个作业的目标 | 完善代码 |
| 作业正文 | .... |
| 其他参考文献 | ... |
| 编程题 | |
| ================== |
思考过程
经过前两次修改,功能已经基本完善,能正常实现输入、计算、输出。
仍然需要实现的功能:
1.经过一系列的支出跟收入后,可能会欠钱,因此钱包最后金额需要能实现负数输出(有的同学在输入增加减少的时候就实现负数输入,感觉没有必要)
2.有一些非正常输入,比如三三,四八这样的输入。
3.前几次都没有对输入错误的情况进行分类,这次新增加查询对象不一致的情况以及超出范围的情况。
实现过程
负数输出
新增一个函数f4,该函数用于将数字转换成汉字输出。负数输出只要判断下接收的数是否小于零,如果小于零且在范围内的话,先在屏幕上打出一个‘负’然后再把接收的值转成正的就可以按照之前的方法进行输出。如果判断为不在范围内则会打出‘超出计算范围’
f4函数如下
void f4(int t)/*数字转汉字输出*/
{
int t1,t2;
if(t/10==0)
f3(t);
else
{
t2=t%10;
t1=t/10;
if(t1==1)
{
if(t2==0)
printf("十");
else
{
printf("十");
f3(t2);
}
}
else if(t2==0)
{
f3(t1);
printf("十");
}
else
{
f3(t1);
printf("十");
f3(t2);
}
}
}
实现负数输出的部分
if(t<0&&t>=-99)
{
printf("负");
t=-t;
f4(t);
}
else if(t>=0&&t<=99)
f4(t);
else
printf("超出计算范围");
对非正常输入的讨论
原本对于九十九以内的数都可以正常输入,只要在汉字长度为四个字节的情况多增加一种讨论就可以,所以汉字长度为四个字节总共有三种情况,第一个字为十,第二个字为十,以及都不是的情况
修改后的f2函数如下
int f2(char d[])/*零到九十九汉字转数字*/
{
char a[100];
int l;
if(strlen(d)==2)
l=f1(d);
else if(strlen(d)==4)
{
a[0]=d[0];
a[1]=d[1];
a[2]='\0';
if(strcmp(a,"十")==0)
{
a[0]=d[2];
a[1]=d[3];
a[2]='\0';
l=f1(a)+10;
}
else
{
a[0]=d[2];
a[1]=d[3];
a[2]='\0';
if(strcmp(a,"十")==0)
{
a[0]=d[0];
a[1]=d[1];
a[2]='\0';
l=f1(a)*10;
}
else
{
a[0]=d[0];
a[1]=d[1];
a[2]='\0';
l=f1(a)*10;
a[0]=d[2];
a[1]=d[3];
a[2]='\0';
l=f1(a)+l;
}
}
}
else
{
a[0]=d[0];
a[1]=d[1];
a[2]='\0';
{
l=f1(a)*10;
}
a[0]=d[4];
a[1]=d[5];
a[2]='\0';
{
l=l+f1(a);
}
}
return l;
}
接下来就是进行单元测试
上次的测试脚本稍加修改就可以作为这次的测试脚本使用

第一次测试出现了错误,原因是我第一次修改f2的时候把第一个字是十的和第二个字是十的两种情况改反了,修改过后测试通过,由此可见测试还是很有必要的

之后进行整个的运行测试



想要加入的功能都已加入并且实现
思考
1.人们收入跟支出的范围一般不止99元以内,可以把范围扩大到万甚至更大
2.可以有不止一个的查询对象,可以增加多个查询对象并对它们分别进行运算
浙公网安备 33010602011771号