近更新时间:2019.1.18
GitHub地址:https://github.com/acromema/CPGenerator
本项目为结对项目,两人各写一部分各自做的工作记录。传送门:马同学的博客
此程序用C#完成
目录
经过两人探讨,估计的时间如下:
讨论阶段:
经过两人讨论研究,决定选四则运算题目生成该题目。由于真分数处理和运算与整数的有些不同,所以决定一人写一个类,由我负责写整数运算类,马同学写真分数运算类,最后再由我整合,写UI界面。
第一阶段:
分析阶段:
第一阶段需求可以概括为:
- 可以出1000道不重复的题,并写入文件。
- 支持多目运算。
- 可支持真分数四则运算。(此部分不由我实现)
- 可以让程序接受用户输入答案,并判定对错,最后给出对错数量。
所以,需要有出题功能和算题功能,两个主要功能。
概要设计:
首先,我们要有一个保存题目的字段,统一命名为Problem,以及保存结果的字段。
public string Problem { get; set; }
public string Result { get; set;}
而且要有一个生成算式的方法和一个生成解的方法。生成算式需要外部直接调用,生成算式的同时可以直接生成解存到Result中,所以一个是public一个是private。
public void GenerateProblem()
private void CalculateValue()
同时为了保证生成的题不重复,所以采用随机的生成方法,由于整数除法要保证必须除尽,所以我们采用先随机生成运算符个数,然后随机生成运算符,最后根据运算符再生成数字,整体构成一个算式。
private void GetOperaNum()
private void GetOperaList()
private void GetNumList()
详细设计:
首先要生成运算符的数目,直接随机1-10之间的整数即可。
private int operaNum;
private void GetOperaNum()
{
operaNum = rand.Next(10) + 1;
}
接着根据这个数字,来生成运算符,为了处理方便,约定不会出现连续的除号,为了让数字不会太大,约定乘号最多出现两次。其中Mod为选择模式,默认为0,即不带乘方,为后续扩展做准备。
private string[] operaList = new string[10];
opera[0] = new string[4] { "+", "-", "*", "/" };
public int Mod { get; set; } = 0;
private void GetOperaList()
{
//GetOperaNum();
int multNum = 0;
for (int i = 0; i < operaNum; i++)
{
string temp = opera[Mod][rand.Next(opera[Mod].Length)];
if (multNum == 2 && temp == "*")
{
i--;
continue;
}
if (temp == "*")
{
multNum++;
}
if (i > 0 && operaList[i - 1] == "/" && temp == "/")
{
i--;
continue;
}
operaL