四则运算生成器项目

一世执手 提交于 2020-01-15 07:54:18

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 程序执行流程图

Created with Raphaël 2.2.0开始main()输入是否合法生成表达式用户交互判断答案正误(Lazy模式)结束错误yesno
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!