• 面向对象程序设计寒假作业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
    ");
    	else
    	  printf("error
    ");  
    }
    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("请输入测试数据
    ");
    	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("请输入文件名
    "); 
     char s[10];
     scanf("%s",s);
     freopen(s,"r",stdin);
    

    运行得

    要注意不能少了后缀名.txt

  • 相关阅读:
    使用FluentScheduler和IIS预加载在asp.net中实现定时任务管理
    [WCF REST] Web消息主体风格(Message Body Style)
    [WCF REST] Web消息主体风格(Message Body Style)
    REST WCF Service中的WebMessageBodyStyle
    REST WCF Service中的WebMessageBodyStyle
    C#表示空字符
    053517
    053516
    053515
    053514
  • 原文地址:https://www.cnblogs.com/2636r/p/12262142.html
Copyright © 2020-2023  润新知