2017《面向对象程序设计》课程作业四
031602230 卢恺翔
题目描述
问题1:采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为?
我认为可以分成3个类:数据类、语言类、和文件类。
其中文件类具有:读取文件的相对路径,从读取文件中读取的生成题目的个数和写入文件的属性。总之就是对文件进行操作的属性。具有读取文件和写入文件的操作。
#pragma once
#ifndef FILE_H
#define FILE_H
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <cstring>
#include <stack>
#include <map>
#include <fstream>
using namespace std;
class File
{
private:
char *inputfile; //读取文件的相对路径
int n; //从读取文件中读取的生成题目的个数
char *outpath; //写入文件的相对路径
public:
int inputcount(char *inputfile);
void outputfile(char *path,string equ,string answer,int rightanswer,char *boundadry);
void outputfile(char *path, char *bourdadry, int n);
protected:
};
#endif
数据类具有随机数,随机符号,表达式,表达式计算值等属性,并具有生成随机数,生成随机符号,生成算式,计算算式结果等操作。
#pragma once
#ifndef DATA_H
#define DATA_H
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <cstring>
#include <stack>
#include <map>
#include <fstream>
using namespace std;
class Data
{
private:
int random; //代表随机数,可用于生成算式中的数字,也用于随机字符和随机括号
char randomsym; //代表随机字符
string equ; //生成的算式
string postfix; //后缀表达式
stack<char> mark; //符号栈
map<char, int> priority; //符号优先级
stack<int> tempResult; //计算后缀表达式的栈
int rightcount=0; //记录回答正确的个数题数
public:
int randomNumber(); //用于随机生成数字;
char randomOperation(); //用于随机生成运算符
string bracket(string n); //随机生成括号
string int_str(int number); //将数字转换为字符串
string connect(string str1, string str2, char a); //将数字与符号连接
string InfixToPostfix(string infix); //将前缀表达式转换为后缀表达式
int expressionCalculate(string s); //计算正确答案
int posfixCompute(string s); //计算后缀表达式
int record(int answer, int input); //计算正确题数
protected:
};
#endif
语言类具有存储语言等属性,并具有选择语言,根据语言生成界面等操作。
#pragma once
#pragma once
#ifndef LANGUAGE_H
#define LANGUAGE_H
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <string>
#include <stack>
#include <map>
#include <fstream>
class language
{
private:
char boundadry[20][200]; //用于存储语言界面的各个语句
char line[100] = ""; //存储语言列表
char path[100] = ""; //存储用户要求的语言,并存储其相对路径
public:
void languagelist(char boundadry[20][200]); //语言列表
void languagechoice(char boundadry[20][200]); //用户选择语言
protected:
};
#endif
问题2:类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用?
语言类为文件类的写入提供语言环境,文件类提供数据类的循环生成算式的次数,数据类提供正确答案,把答案传给文件类并被文件类记录下来。
类图如下
还不是很懂类与类之间的关系,查了资料之后,感觉是相互依赖的薄弱关系。。。
问题3 该自动出题软件采取何种算法或者是如何实现的?可以采用流程图描述的方法。
总之就是用中缀转后缀,计算后缀表达式为核心的算法。