分析:
根据对于自我代码的分析,我总体上归纳出三类,一类是关于表达式的生成,一类是关于文件的读写,一类是关于语言的选择。
以下为我的分类:
- 表达式类:随机数字,随机运算符,随机数计算,生成表达式,结果计算。
- 读取类:题数,输出流文件,输入流文件,答案判断错误。
- 语言类:语言类型输入,初始化语言选择,界面输出。
协作关系:
主函数主要代码(具体没有实现)
#include "allclass.h"
#include<iostream>
using namespace std;
int main()
{
//创建对象
expresses ex;
Language lan;
R_and_W file;
int n, i, j, k;//一些传入变量
double ans;//答案
char c;//一些传入变量
char * express = new char[20];//一些传入变量
/*
主要使用通过信息传递:
lan.scanf();//开始界面
file.readFile(char * s);//读取题数
express=ex.generateExpression();//得到表达式
an=ex.calculateResult();//得到答案
sum+=file.Coutright(double answers, double inputerswner);//判断错误
lan.Choose();//选择语言输出
file.writeFile();//写入文件中
*/
return 0;
}
类的主要内容:
class expresses {//表达式类
private:
char a[4];//个位数整数
char oper[3];//运算符
char change(int x);//随机数转变成运算符
char randomNumber();//用于随机生成数字
char randomOperation();//用于随机生成运算符
int IsOperator(char c);// 判断是否为运算符
int Priority(char oper1, char oper2);//运算符比较
double calculate(double a, int oper, double b);//两个数的计算
public:
double calculateResult(char *express);//用于计算结果
char * generateExpression(/*char num[], char o[]*/);//用于生成运算式-里面可以改成无参数-因为是private
};
class Language//语言类
{
private:
char language;
ifstream inf;//读取语言文件
public:
void set(char c);//外界传入
void scanf();//初始界面选择语言
void Choose(char c, int a);//语言选择,以及选择输出 错误 或 正确
};
class R_and_W//读取类
{
private:
int n;//题数
ifstream fin;//读取题数文件
ofstream fout;//结果写入文件
double inputanswer;//输入的答案
public:
void set();//外界数据存入
int readFile(/*char * s*/);//读取题数
void writeFile2(/*char *s, double n, double right*/);//每次运行的结果总结
void writeFile(/*char *s, char * p, double rans, double inans*/);//每题内容的写入
int Coutright(double answers, double inputerswner);
};
具体编码没有实现,以上是目前自我的设想。
不足之处:
- 有部分功能有交叉现象
- 没有具体写出类与类之间的消息协作
- 没有运用继承,与派生的知识
- 以上代码还没有修改其一些参数形式