面向对象程序设计寒假作业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

posted @ 2020-02-05 16:49  urrry  阅读(162)  评论(0编辑  收藏  举报