面向对象程序设计寒假作业2

这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业2
这个作业的目标 1.继续完成编程题
2.新建一个github仓库,并把作业推送到该仓库
3.发布博客
作业正文 实践题
编程题
其他参考文献 ...

编程题

1.继续完成作业一的编程题。
2.优化架构,一般要求每个函数长度不超过15行。
3.优化规范,尤其是命名规范。
4.制作一个编译脚本,运行该脚本可以编译你的代码,可选的脚本语言,python(2.7),windows批处理,powershell,shell。

代码优化

在上次作业完成后,我将自己的代码与其他同学进行对比,发现上次作业代码中缺少了对输入数据的要求判断函数。故本次作业代码较上次作业增加了检测用的函数。

#include <iostream>
#include <string.h>
using namespace std;
const char jia[]="增加";
const char jian[]="减少";
const char check[]="看看";
const char wallet[]="钱包";
const char num[11][3]={"零","一","二","三","四","五","六","七","八","九","十"};//定义题设的常量汉字关键词
int w,*p=&w;//通过指针使“钱包”内累计值在函数内更新
int CHECK(char N[100])//新增检测数据合法性函数 
{
	int flag=0;
	if(strlen(N)>2) flag=-1;
	else{
	for(int i=0;i<=10;i++)
    {
        if(strcmp(num[i],N)==0) flag=1;
    }	
	}
	return flag;
}
void defin()
{
    char type[10],wa[10],op[10],start[10]; int i;
    cin>>type>>wa>>op>>start;//输入初始值
    i=CHECK(start);
    if(i==1){
    for(int i=0;i<=10;i++)
    {
        if(strcmp(num[i],start)==0) *p=i;//输入汉字在程序内部转化为阿拉伯数字
    }
    }
    else {
    	cout<<"Input Error"<<endl; defin();
	}
}
void up(char number[10])
{
	int a; a=CHECK(number);
	if(a==1){
    for(int i=0;i<=10;i++)
    {
        if(strcmp(num[i],number)==0) *p=*p+i;//寻找汉字对应阿拉伯数字,并对“钱包”内累计值做加法更新
    }
    } 
	else  cout<<"Input Error"<<endl; 
}
void down(char number[10])
{
	int a; a=CHECK(number);
	if(a==1){
    for(int i=0;i<=10;i++)
    {
        if(strcmp(num[i],number)==0) *p=*p-i;//寻找汉字对应阿拉伯数字,并对“钱包”内累计值做减法更新
    }
    }
    else cout<<"Input Error"<<endl;
} 
void output()
{
    if(w<=10){
        cout<<num[w];
    }//对10以内的数值直接输出
    else if(w>=11&&w<20){
        int ge;
        ge=w%10;
        cout<<"十"<<num[ge];
    }//输出11至19之间的数值
    else{
        int ge,shi;
        ge=w%10; shi=w/10;
        if(ge) cout<<num[shi]<<"十"<<num[ge];
        else cout<<num[shi]<<"十";
    }//输出大等于20的数值
}
int main() 
{
     defin();//调用初始定义模块函数
     char object[10],order[10],number[10];
     while(1)//对指令逐条处理
     {
        cin>>object;//接收指令的首个关键词
        if(strcmp(object,wallet)==0){
            cin>>order>>number;
            if(strcmp(order,jia)==0) up(number);
            else down(number);
         }//对加减法指令判断
         else{
            cin>>order;
            output();
            break;
         }//对输出指令判断并跳出循环
    }
    return 0; 
}

制作编译脚本

脚本使用Windows批处理制作


exe文件生成成功

制作测试脚本

本次程序中函数模块分为5部分

  • 纠错函数
  • 定义函数
  • 加法函数
  • 减法函数
  • 输出函数
    但是其中,从单一函数测试就能客观看出效果的仅有纠错函数和输出函数,故本次测试仅对这两组函数进行测试。
#include <iostream>
#include <string.h>
using namespace std;
const char num[11][3]={"零","一","二","三","四","五","六","七","八","九","十"};
const char tst[7][3]={"福","州","大","学","F","Z","U"};
int w,*p=&w;
int CHECK(char N[100])
{
	int flag=0;
	if(strlen(N)>2) flag=-1;
	else{
	for(int i=0;i<=10;i++)
    {
        if(strcmp(num[i],N)==0) flag=1;
    }	
	}
	return flag;
}
void output()
{
    if(w<=10){
        cout<<num[w];
    }
    else if(w>=11&&w<20){
        int ge;
        ge=w%10;
        cout<<"十"<<num[ge];
    }
    else{
        int ge,shi;
        ge=w%10; shi=w/10;
        if(ge) cout<<num[shi]<<"十"<<num[ge];
        else cout<<num[shi]<<"十";
    }
}
int main()
{
	cout<<"开始测试纠错函数"<<endl;
	int a; char dammy[10];
	for(int i=0;i<=10;i++){
		cout<<"试数"<<' '<<num[i]<<' '; 
		strcpy(dammy,num[i]);
		a=CHECK(dammy);
		if(a==1) cout<<"PASS";
		else cout<<"ERROR";
		cout<<endl; 
	} 
	for(int i=0;i<=6;i++){
		cout<<"试数"<<' '<<tst[i]<<' '; 
		strcpy(dammy,tst[i]);
		a=CHECK(dammy);
		if(a==1) cout<<"PASS";
		else cout<<"ERROR"; 
		cout<<endl;
	} 
	cout<<"开始测试输出函数"<<endl;
	for(int i=0;i<21;i++){
		cout<<"试数"<<' '<<i<<' '; 
		*p=i;
		output();
		cout<<' '<<endl;
	} 
	cout<<"测试结束";
	return 0; 
}
@echo off
set/p a=
cd "%a%"
set/p b=
g++ "%b%" -o functest.exe
functest.exe
pause

脚本如上。

部分测试结果如上所图所示。

实践题

新建一个github仓库,使用git,或者github desktop把接下去的编程题的代码及测试脚本传到这个仓库。
请使用.gitignore文件忽略不要上传的文件。用法自行百度。
1.新建一个GitHub仓库


下载GitHub desktop并将新建仓库与本地同步,将文件导入其指定目录再发布即可。

posted @ 2020-02-05 17:49  Excalibur_Morgan  阅读(146)  评论(0编辑  收藏  举报