项目设计
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
解析输入参数,调用其他类,实现与用户的交互