• 2020面向对象寒假作业(二)


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

    这个作业属于哪里 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块:提示错误信息

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

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

    num块:执行字符转为数字

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

    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函数的数据进行判断,如果是指定符号,则进行指定操作;如果不是指定符号,则返回错误信息。

    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("请输入文件地址
    ");
    	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
    ");
    			else printf("number error
    ");
    		}
    		else
    		{
    			if(k==1) a=judge(d[i]);
    			else a=num(c[i]);
    			if(a!=-1) printf("symbol pass
    ");
    			else printf("symbol error
    ");
    		}
    		if(i==12&&k==1)
    		{
    			k++;
    			i=0;
    			printf("正确输入测试完毕,进行错误输入测试
    "); 
    		}
    		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("数据类型输入错误
    ");
    	else if(judge==2) printf("数值输入错误,应属于零到十范围
    ");
    	else if(judge==3) printf("数值总和必须在0~99范围
    ");
    	else if(judge==4) printf("符号输入错误
    ");  
     }
    
    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("请输入文件地址
    ");
    	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批处理天下第一!

  • 相关阅读:
    C#socket客户端自己输入消息发送到服务端通信实现通信
    C#设计模式:观察者模式(Observer Pattern)
    C#冒泡排序法学习
    强类型和弱类型
    计算机网络基础知识总结
    推荐几个搜索资源网站
    推荐几个搜索资源网站
    前端:闭包的概念
    前端:闭包的概念
    收集12个经典的程序员段子
  • 原文地址:https://www.cnblogs.com/trainking-star/p/12256907.html
Copyright © 2020-2023  润新知