项目设计
1.项目链接以及队友博客链接
项目链接:
https://github.com/AmnesiaWu/AutoCal
队友博客链接:
2.预计时间表格
PSP2.1 | Personal Software Process Stages | 预估耗时 (分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | |
Estimate | 估计这个任务需要多少时间 | 30 | |
Development | 开发 | 1930 | |
Analysis | 需求分析(包括学习新技术) | 90 | |
Design Spec | 生成设计文档 | 60 | |
Design Review | 设计复审(和同事审核设计文档) | 30 | |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 30 | |
Design | 具体设计 | 120 | |
Coding | 具体编码 | 1200 | |
Code Review | 代码复审 | 60 | |
Test | 测试(自我测试,修改代码,提交修改) | 240 | |
Reporting | 报告 | 190 | |
Test Report | 测试报告 | 120 | |
Size Measurement | 计算工作量 | 10 | |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 60 | |
Total | 合计 | 2150 |
3. 解题思路描述
3.1 项目要求
3.1.1 第一阶段
- 写一个能自动生成小学四则运算题目的命令行“软件”
- 用-i num实现一次性生成的题目个数
- 实现对一个最多10个运算符表达式的求值
- 支持真分数的四则运算
- 实现判定对错,并最后给出总共对/错数量。
3.1.2 第二阶段
- 支持乘方运算,命令行参数-m 1为^表示乘方,命令行参数-m 2为**表示乘方。
3.1.3 第三阶段
- 把程序编程一个Windows上的电脑图形界面程序
- 增加倒计时功能,每道题必须要20s内完成,否则得0分并开始下一题
- 增加历史记录功能,把用户做题的成绩记录下来并可以展现历史记录
3.2 思考过程
题目主要有几个难点:
- 生成不同的表达式
- 求解表达式
- 命令行参数的设置
- 图形界面,倒计时和历史记录
3.2.1 生成表达式
需要生成随机数,随机运算符,随机括号,还要保证表达式的正确性和唯一性。
3.2.2 求解表达式
求解整数表达式将原表达式转化为逆波兰表达式,然后用栈按优先级规则操作即可。问题在于真分数的处理。
3.2.3 图形界面,倒计时,历史记录
图形界面暂时考虑用qt进行实现;倒计时需要多线程;历史记录要么写文件,要么连接数据库,看到时候时间充裕与否。
4. 设计实现过程
4.1 类模块说明
4.1.1 Num类
属性:
- bool isProperFraction //是否是真分数类型
- int numerator //分子
- int denominator //分母
方法:
- 友元函数运算符重载,加减乘除
- 随机的实例化操作
4.1.2 ExpressionBuilder类
属性:
- int num; //生成的题目的数量
- enum powerMark; //乘方标志
方法:
- GenerateExp() //给定题目数量,生成表达式
- BuildExp() //生成一道题
- PrintExp() //将生成的题写入文件中
- 实例化
4.1.3 Expression类
属性:
- String expression; //可打印的表达式
- 视算法而定求解表达式所需要的数据结构(栈)
- Num ans; //答案
方法:
- Solve() //计算表达式
- Check() //检查答案正误
4.1.4 Main
解析输入参数,调用其他类,实现与用户的交互
4.2 程序执行流程图
5. 单元测试
- 单元测试用例设计如下
1.输入测试
主要测试程序的合法输入以及不合法输入情况。
编号 | 输入格式 | 预期输出 |
---|---|---|
1 | 简单模式 + max_num | 整数运算式 |
2 | 中等模式 + max_num | 分数、整数运算式 |
3 | 困难模式 + max_num | 分数、整数乘方运算式 |
2.输入测试
检测四则运算器中每一种算符的运算正确性
编号 | 操作数1 | 操作数2 | 运算符 | 预测结果 |
---|---|---|---|---|
1 | 2 | 1/2 | + | 5/2 |
2 | 2 | 1/2 | - | 3/2 |
3 | 2 | 3/2 | * | 3 |
4 | 2 | 1/2 | / | 4 |
5 | 3 | 3 | ^ | 27 |
6 | 3 | 0 | ^ | 1 |
7 | 1/2 | 1 | ^ | 1/2 |
3.题目查重测试
编号 | 算式1 | 算式2 | 预测结果 |
---|---|---|---|
1 | 2+3+4 | 4+(2+3) | 重复 |
2 | 1+2+3 | 3+2+1 | 不重复 |
3 | 2*3 | 3*2 | 重复 |
4 | (1 + 2) * 3 | 3* (1 + 2) | 不重复 |
5 | (1+2)*(3+4) | (3+4)*(1+2) | 不重复 |
6 | (2-1)/(5-3) | (5-3)/(2-1) | 不重复 |
7 | (3+6)/(5-3) | (6+3)/(5-3) | 重复 |
8 | (1/2+2/3)+3/4 | 1/2+(2/3+3/4) | 重复 |
9 | (1/2+2/3)* 3/4 | 3/4 *(1/2+2/3) | 重复 |