面向对象程序设计寒假作业2
这个作业属于哪个课程 | 我的班级 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 1继续完成编程题 2新建一个github仓库,并把作业推送到该仓库 3发布博客 |
作业正文 | 面向对象程序设计寒假作业2 面向对象程序设计编程题完善1.0 |
其他参考文献 | 使用git将项目上传到GitHub .gitignore的使用 |
实践题:新建一个github仓库并把接下去的编程题的代码及测试脚本传到这个仓库。
新建仓库的过程忘记截图了。。于是只有建成后的截图
我上传过程参考的博客:使用git将项目上传到GitHub
补充截图:
.gitignore
打包放入文件夹
若初次上传,右键后点开"Git Bash Here"
打开GitHub,复制我的仓库链接
由于之前已经上传过一次,上述步骤后续无法进行,如下图:
首次上传请看上方链接!!
所以这次我直接拖动文件夹到GitHub desktop,然后抓取就完成了上传
编程题
汉字编程已经在前几天进行了修改并发布了第一版,面向对象程序设计编程题完善1.0。
今天找出了一个在主函数里的小bug,原来代码为:
if(sum>10)
{
int ten_position=sum/10;
if(ten_position==1)cout<<"十";
else{
output(ten_position);
cout<<"十";
}
output(sum%10);
}
当输出为二十的时候,会变成:
于是做了个小改进output(sum%10);
--> if(sum%10)output(sum%10);
,这样就会修复。
其他函数的分块介绍已经贴在上方链接中,但肯定有人懒得点链接(看到这句话请去点点上面的链接plz),于是在这贴出完整代码:
#include<iostream>
#include<cstring>
using namespace std;
int sum;//总额
char var[10],ini[10],oper[100];//变量variable,初始initial operation 运算
int trans(char str[])
{
if(strcmp("零",str)==0)return 0;
if(strcmp("一",str)==0)return 1;
if(strcmp("二",str)==0)return 2;
if(strcmp("三",str)==0)return 3;
if(strcmp("四",str)==0)return 4;
if(strcmp("五",str)==0)return 5;
if(strcmp("六",str)==0)return 6;
if(strcmp("七",str)==0)return 7;
if(strcmp("八",str)==0)return 8;
if(strcmp("九",str)==0)return 9;
if(strcmp("十",str)==0)return 10;
}
void deal_add(char str[])
{
if(strcmp(" 增加 一",str)==0)sum+=1;
if(strcmp(" 增加 二",str)==0)sum+=2;
if(strcmp(" 增加 三",str)==0)sum+=3;
if(strcmp(" 增加 四",str)==0)sum+=4;
if(strcmp(" 增加 五",str)==0)sum+=5;
if(strcmp(" 增加 六",str)==0)sum+=6;
if(strcmp(" 增加 七",str)==0)sum+=7;
if(strcmp(" 增加 八",str)==0)sum+=8;
if(strcmp(" 增加 九",str)==0)sum+=9;
if(strcmp(" 增加 十",str)==0)sum+=10;
}
void deal_minus(char str[])
{
if(strcmp(" 减少 一",str)==0)sum-=1;
if(strcmp(" 减少 二",str)==0)sum-=2;
if(strcmp(" 减少 三",str)==0)sum-=3;
if(strcmp(" 减少 四",str)==0)sum-=4;
if(strcmp(" 减少 五",str)==0)sum-=5;
if(strcmp(" 减少 六",str)==0)sum-=6;
if(strcmp(" 减少 七",str)==0)sum-=7;
if(strcmp(" 减少 八",str)==0)sum-=8;
if(strcmp(" 减少 九",str)==0)sum-=9;
if(strcmp(" 减少 十",str)==0)sum-=10;
}
void output(int x)
{
if(x==0)cout<<"零";
if(x==1)cout<<"一";
if(x==2)cout<<"二";
if(x==3)cout<<"三";
if(x==4)cout<<"四";
if(x==5)cout<<"五";
if(x==6)cout<<"六";
if(x==7)cout<<"七";
if(x==8)cout<<"八";
if(x==9)cout<<"九";
if(x==10)cout<<"十";
}
int main()
{
for(int i=0;i<2;i++)cin>>var;//读入变量名
for(int i=0;i<2;i++)cin>>ini;//读入初始值
sum=trans(ini);//将初始值转换为数字,赋值给总额。
for(;;)
{
cin>>var;//通过cin读入变量名,遇到空格停止
gets(oper);//通过gets读入计算操作,但会读入前面的一个空格,所以上方的加减函数字符串前面有空格
deal_add(oper);//加
deal_minus(oper);//减
if(strcmp("看看",var)==0)break;//当读入“看看”时退出
}
if(sum<=10)output(sum);
if(sum>10)
{
int ten_position=sum/10;
if(ten_position==1)cout<<"十";
else{
output(ten_position);
cout<<"十";
}
if(sum%10)output(sum%10);
}
return 0;
}
至于助教额外要求的文件读入功能,ddl快到了,来不及写,预计过几天会研究并发布升级版本2.0.
初步思路:
头文件
#include<iostream>
#include<fstream>
#include<string>
#include<cstring>
//还是不要用万能头吧。。
文件读入部分,但目前这种方式不契合我的输入方式,所以暂时是无法输入的。
ifstream in;
string filename;
getline(in,filename);
in.open(filename.data());
if(!in)
{
cout<<"打开文件出错!"<<endl;
return 1;
}
...
in.close(filename.data());
制作脚本环节
我使用的是Windows批处理来制作编译器脚本。制作脚本的前24个小时内我仍然一窍不通,多亏有学长和一位L姓大佬救助。至于参考文献及链接...实在查找太多了,贴不过来...可以谷歌或者bing搜索“Windows批处理” “脚本”等你认为有关的关键字(🤝)
了解了部分知识、开始制作后,我被“编译失败”卡了6个小时。我拷来的原文本为gcc 1.cpp -o 1.exe
,结果一直没发现这边写的是gcc,而我的代码使用了c++来写,自然会编译失败。于是在学长的提醒下改成了g++ 1.cpp -o 1.exe
就成功了。
双击脚本 得到:
文本:
@echo off
cd /d D:/Desktop/OOP
g++ 1.cpp -o 1.exe
if exist "1.exe" echo 编译成功
if not exist "1.exe" echo 编译失败
pause
单元测试环节
脚本代码:
@echo off
cd /d D:/Desktop/OOP
set /p a=请输入所要测试单元
echo 测试开始
"%a%"
echo over
pause
这里仅对output和trans函数进行测试
output
单元测试代码:
#include<bits/stdc++.h>
using namespace std;
int sum;//总额
char var[10],ini[10],oper[100];//变量,初始化 operation 运算
void output(int x)
{
if(x==0)cout<<"零";
if(x==1)cout<<"一";
if(x==2)cout<<"二";
if(x==3)cout<<"三";
if(x==4)cout<<"四";
if(x==5)cout<<"五";
if(x==6)cout<<"六";
if(x==7)cout<<"七";
if(x==8)cout<<"八";
if(x==9)cout<<"九";
if(x==10)cout<<"十";
}
int main()
{
for(int i=0;i<=10;i++)
{
output(i);
cout<<endl;
}
return 0;
}
trans
脚本代码同上
单元测试代码:
#include<bits/stdc++.h>
using namespace std;
int sum;//总额
char var[10],ini[10],oper[100];//变量,初始化 operation 运算
int trans(char str[])
{
if(strcmp("零",str)==0)return 0;
if(strcmp("一",str)==0)return 1;
if(strcmp("二",str)==0)return 2;
if(strcmp("三",str)==0)return 3;
if(strcmp("四",str)==0)return 4;
if(strcmp("五",str)==0)return 5;
if(strcmp("六",str)==0)return 6;
if(strcmp("七",str)==0)return 7;
if(strcmp("八",str)==0)return 8;
if(strcmp("九",str)==0)return 9;
if(strcmp("十",str)==0)return 10;
}
int main()
{
char s[10];
for(int i=1;i<=5;i++)//测试五个数据
{
gets(s);
cout<<trans(s)<<endl;
}
return 0;
}