2020面向对象寒假做业(二)

#2020面向对象寒假做业(二)html

这个做业属于哪里 2020面向对象程序设计
这个做业在哪里 2020面向对象寒假做业二
- 1.继续完成编程题
这个做业目标 2.新建一个github仓库,并把做业推送到该仓库
- 3.发布博客
做业正文 2020面向对象寒假做业(二)
参考文献 2020面向对象程序设计寒假做业2 题解
- Windows批处理(cmd/bat)经常使用命令教程
##1.使用github desktop新建一个github仓库
###(1)下载github desktop
###(2)注册信息,进入以下页面
###(3)点在右上角file,点击new repository,填入信息创建新仓库
###(4)进入仓库所在文件夹,把做业相关文件复制到该文件夹,再上传到仓库

##2.编程题 ·继续完成做业一的编程题。 ·优化架构,通常要求每一个函数长度不超过15行。 ·优化规范,尤为是命名规范。 ·制做一个编译脚本,运行该脚本能够编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。 ·进行单元测试,即测试每个函数,并制做一个测试脚本,运行该脚本能够进行测试,并显示测试结果。 ·在做业一编程题的基础上添加如下功能 ·经过命令行读取一个文件 ###(1)代码分块 ####error块:提示错误信息python

对输入error函数的数据进行判断,若是数据错误,输出错误提示信息若是数据正确,不执行任何操做。git

void error(int judge)
{
	if(judge==1) printf("数据类型输入错误\n");
	else if(judge==2) printf("数值输入错误,应属于零到十范围\n");
	else if(judge==3) printf("数值总和必须在0~99范围\n");
	else if(judge==4) printf("符号输入错误\n");  
 }

####num块:执行字符转为数字github

将输入num函数的字符进行判断,若是能转化成数字,则返回对应数字;若是不能转化成数字,则返回错误信息。shell

int num(char d[])
{
	if(!strcmp(d,"零")) return 0;
	else if(!strcmp(d,"一")) return 1;
	else if(!strcmp(d,"二")) return 2;
	else if(!strcmp(d,"三")) return 3;
	else if(!strcmp(d,"四")) return 4;
	else if(!strcmp(d,"五")) return 5;
	else if(!strcmp(d,"六")) return 6;
	else if(!strcmp(d,"七")) return 7;
	else if(!strcmp(d,"八")) return 8;
	else if(!strcmp(d,"九")) return 9;
	else if(!strcmp(d,"十")) return 10;
	else error(2); 
}

####judge块:符号判断编程

对输入judge函数的数据进行判断,若是是指定符号,则进行指定操做;若是不是指定符号,则返回错误信息。windows

int judge(int n ,char c[],char d[])
{
	if(!strcmp(c,"增长")) return n+num(d);
	else if(!strcmp(c,"减小")) return n-num(d);
	else error(4); 
}

####sum块:将最终数据转化成字符输出架构

将输入sum函数的最终数据转化成汉字输出。函数

void sum(int n)
{
	char nums[10][4]={"零","一","二","三","四","五","六","七","八","九"};
	if(n<10) printf("%s",nums[n]);
	else
	{
		int m=n%10;
		n=n/10;
		if(!strcmp(nums[n],"一")) printf("十%s",nums[m]);
		else printf("%s十%s",nums[n],nums[m]);
	} 
}

####calculate块:针对每一次的运算调用judge、sum、num块单元测试

对输入calculate函数的运算操做,调用相关函数,执行运算操做

void calculate(int coin)
{
	char b[10],c[10],d[10];
	while(2)
	{
		scanf("%s",b); 
		if(!strcmp(b,"看看"))
		{
			if(coin>99) error(3);
			else sum(coin);
			break;
		}
		scanf("%s%s",c,d);
		coin = judge(coin,c,d); 
	}
}

####main块:打开输入信息文件,链接函数

负责打开包含输入信息的文件,做为主函数链接其余函数。

int main()
{
	char file[100];
	printf("请输入文件地址\n");
	scanf("%s",file); 
	freopen(file,"r",stdin);
	char a[10], b[10], c[10], d[10];
	int coin;
	scanf("%s%s%s%s",a,b,c,d);
	getchar();
	if(!strcmp(a,"整数"))
	{
		if(num(d)==-1) error(2);
		else
		{
			coin += num(d);
		} 
	}
	else error(1); 
	if(coin>99||coin<0) error(3); 
	else
	{
		calculate(coin);
	}
}

###(2)制做编译脚本

题目信息理解错,分析其余同窗做业(感谢大佬)以后,改用Windows批处理。

@echo off
echo 请输入文件所在磁盘
set /p a=
echo 正在转移到该磁盘
cd "%a%"
echo 请输入文件所在路径
set /p b=
echo 转移到文件路径
cd "%b%"
echo 请输入文件名
set /p c=
echo 编译开始
gcc "%c%" -o try.exe
if exist "try.exe" echo 编译成功
if not exist "try.exe" echo 编译失败
pause

####问题: >【1】用Notepad++编译脚本,出现乱码状况 >【2】出现bat文件快速打开快速关闭状况 >【3】出现没法用变量a实现cd、if操做问题 ####解决方法: >【1】使用Windows自带的记事本 >【2】在文件中末尾添加pause语句 >【3】使用"%a%"格式解决 ###(3)测试脚本

继续使用Windows批处理制做简单测试脚本 ####单元测试模块选取 由于代码中num函数与judge函数,承担最重要的运算部分,故选取num函数与judge函数进行单元测试。 设计测试程序

#include<stdio.h>

int num(char d[])
{
	if(!strcmp(d,"零")) return 0;
	else if(!strcmp(d,"一")) return 1;
	else if(!strcmp(d,"二")) return 2;
	else if(!strcmp(d,"三")) return 3;
	else if(!strcmp(d,"四")) return 4;
	else if(!strcmp(d,"五")) return 5;
	else if(!strcmp(d,"六")) return 6;
	else if(!strcmp(d,"七")) return 7;
	else if(!strcmp(d,"八")) return 8;
	else if(!strcmp(d,"九")) return 9;
	else if(!strcmp(d,"十")) return 10;
	else return -1; 
}

int judge(char c[])
{
	if(!strcmp(c,"增长")) return 1;
	else if(!strcmp(c,"减小")) return 2;
	else return -1; 
}

int main()
{
	int a,i,k;
	char d[13][10]={"零","一","二","三","四","五","六","七","八","九","十","增长","减小"};
	char c[13][10]={"0","我","真","的","好","菜","啊","!","十一","1","2","加上","-"}; 
	for(i=0,k=1;i<13;i++)
	{
		if(k==1) printf("输入 %s  ",d[i]);
		else printf("输入 %s  ",c[i]); 
		if(i<11)
		{
			if(k==1) a=num(d[i]);
			else a=num(c[i]);
			if(a!=-1) printf("number pass\n");
			else printf("number error\n");
		}
		else
		{
			if(k==1) a=judge(d[i]);
			else a=num(c[i]);
			if(a!=-1) printf("symbol pass\n");
			else printf("symbol error\n");
		}
		if(i==12&&k==1)
		{
			k++;
			i=0;
			printf("正确输入测试完毕,进行错误输入测试\n"); 
		}
		if(k==2&&i==12) printf("全部输入测试完毕");
	}
}

编写测试脚本

@echo off
cd d:
echo 开始测试
text1.exe
echo 测试结束
pause

测试结果展现 ###(3)经过命令行读取一个文件

使用C语言中的freopen()函数传入包含输入信息的文件,再执行后续操做 ####首先编写几个输入信息的文件 ####运行C语言程序 ####问题: 【1】使用fopen函数,显示错误信息 【2】使用正确的函数,地址输入错误 ####解决方法: 【1】使用freopen函数 【2】地址错误形式"E:\aa.txt",正确形式"E:\aa.txt"或者"E:/aa.txt" ###(4)完整代码

#include<stdio.h>
#include<string.h>

void error(int judge)
{
	if(judge==1) printf("数据类型输入错误\n");
	else if(judge==2) printf("数值输入错误,应属于零到十范围\n");
	else if(judge==3) printf("数值总和必须在0~99范围\n");
	else if(judge==4) printf("符号输入错误\n");  
 }

int num(char d[])
{
	if(!strcmp(d,"零")) return 0;
	else if(!strcmp(d,"一")) return 1;
	else if(!strcmp(d,"二")) return 2;
	else if(!strcmp(d,"三")) return 3;
	else if(!strcmp(d,"四")) return 4;
	else if(!strcmp(d,"五")) return 5;
	else if(!strcmp(d,"六")) return 6;
	else if(!strcmp(d,"七")) return 7;
	else if(!strcmp(d,"八")) return 8;
	else if(!strcmp(d,"九")) return 9;
	else if(!strcmp(d,"十")) return 10;
	else return -1; 
}

int judge(int n ,char c[],char d[])
{
	if(!strcmp(c,"增长")) return n+num(d);
	else if(!strcmp(c,"减小")) return n-num(d);
	else error(4); 
}

void sum(int n)
{
	char nums[10][4]={"零","一","二","三","四","五","六","七","八","九"};
	if(n<10) printf("%s",nums[n]);
	else
	{
		int m=n%10;
		n=n/10;
		if(!strcmp(nums[n],"一")) printf("十%s",nums[m]);
		else printf("%s十%s",nums[n],nums[m]);
	} 
}

void calculate(int coin)
{
	char b[10],c[10],d[10];
	while(2)
	{
		scanf("%s",b); 
		if(!strcmp(b,"看看"))
		{
			if(coin>99) error(3);
			else sum(coin);
			break;
		}
		scanf("%s%s",c,d);
		coin = judge(coin,c,d); 
	}
} 
 

int main()
{
	char file[100];
	printf("请输入文件地址\n");
	scanf("%s",file); 
	freopen(file,"r",stdin);
	char a[10], b[10], c[10], d[10];
	int coin;
	scanf("%s%s%s%s",a,b,c,d);
	getchar();
	if(!strcmp(a,"整数"))
	{
		if(num(d)==-1) error(2);
		else
		{
			coin += num(d);
		} 
	}
	else error(1); 
	if(coin>99||coin<0) error(3); 
	else
	{
		calculate(coin);
	}
}

##总结:此次的做业我作了很长时间,从最开始的理解错题目,用Python在错误的方向上寻找解决办法,迟迟没有成果而放弃,再到如今的成功完成。我明白正确的方向比盲目的寻找更重要。 ##Windows批处理天下第一!

相关文章
相关标签/搜索