面向对象程序设计寒假作业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并将新建仓库与本地同步,将文件导入其指定目录再发布即可。