寒假作业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.可以有不止一个的查询对象,可以增加多个查询对象并对它们分别进行运算

posted @ 2020-02-15 14:29  ask2  阅读(130)  评论(0)    收藏  举报