软导作业之个人实战 - 四则运算练习软件项目报告

Github源码仓库地址:https://github.com/leungll/myCalculator

测试步骤:

1. 进入src文件夹

2. 在命令行输入javac -encoding utf-8 Main.java

3. 回车再输入java Main 50

4. 回车,将会在根目录下(与src同级)产生result.txt

目录

一、需求分析

二、功能设计 

三、设计实现

四、算法详解

五、测试运行

六、PSP


一、需求分析

1.程序可从命令行接收一个输入参数n,然后随机产生n道加减乘除练习题。

2.每个数字在 0 和 100 之间,运算符在3个到5个之间。

3.每个练习题至少要包含2种运算符。

4.所出的练习题在运算过程中不得出现负数与非整数。

5.将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中。

6.支持有括号的运算式,包括出题与求解正确答案。算式中存在的括号必须大于2个,且不得超过运算符的个数。

7.支持真分数的加减法,并且每个分数都化到最简

二、功能设计 

能够根据用户输入的参数n随机产生n道符合要求的练习题,自动算出答案,并将式子与答案以文档的形式呈现。并实现附加功能:支持有括号的运算、支持真分数的加减运算。

三、设计实现

整个项目共设计了五个类:

Main类:主类,负责接收命令行的参数并启动程序

CreateFile类:负责产生result.txt文件,并将学号和产生的练习题写入文件

SimpleCalculator类:负责随机产生一条带括号的至少2种运算符四则运算的式子,且有3-5个运算符

ProperFraction类:负责产生真分数式子并计算答案

Calculator类:负责筛选运算过程中不产生负数和小数的式子,并计算答案

五个类之间的调用关系:

 每个类中的重要函数:

1、SimpleCalculator类:

calculatorInteger():整数生成器

index(int operatorCount,int operatorTotal, Random random):产生运算符下标数组,并保证至少有2个不同的运算符

stitchingFormula(int operatorCount, int[] operatorNum, int[] operatorIndex):拼接式子

2、ProperFraction类:

properFraction():真分数生成器

greatFactor(int x,int y):求最大公因数,用于化简

3、Calculator类:

NBL(String str):结合了调度场算法和逆波兰表达式的求值,计算出式子的答案

calculate(int a, int b, String stmp):计算式子每一部分的运算,排除运算过程中出现小数和负数的式子

四、算法详解

关于调度场算法和逆波兰表达式(即后缀表达式)的求值

调度场算法的作用是将中缀表达式变为后缀表达式,它需要一个队列来装后缀表达式和一个栈来装符号。先从左到右遍历中缀表达式的每个符号和数字,若是数字就入队;若是符号,则判断其与栈顶符号的优先级,若该符号是右括号或其优先级低于栈顶符号,则栈顶元素依次出栈并输出进入队列,并将当前符号进栈,一直到最终输出后缀表达式。

逆波兰表达式求值步骤(只需要一个栈):

1. 先初始化一个空栈,开始遍历后缀表达式。

2. 如果字符是一个操作数,则令其入栈。

3. 如果字符是个运算符,则弹出栈里的两个操作数(一定会有两个数在栈里,因为是后缀表达式),进行运算,再把结 果入栈。

4. 到后缀表达式末尾,从栈中弹出结果。

五、测试运行

进入src文件夹,在命令行输入javac -encoding utf-8 Main.java 将类编译成class文件,再输入java Main 50运行class文件。

这里先做一个非法输入和越界测试,如输入java Main e或java Main 1200:

再正常输入如java Main 50,将会在根目录下(与src同级)产生result.txt文件: 

六、PSP

PSP2.1

任务内容

计划共完成需要的时间(h)

实际完成需要的时间(h)

Planning

计划

27

35

·        Estimate

·   估计这个任务需要多少时间,并规划大致工作步骤

27

35

Development

开发

24

29

·        Analysis

·         需求分析 (包括学习新技术)

6

8

·        Design Spec

·         生成设计文档

0

0

·        Design Review

·         设计复审 (和同事审核设计文档)

0

0

·        Coding Standard

·         代码规范 (为目前的开发制定合适的规范)

0

0

·        Design

·         具体设计

2

3

·        Coding

·         具体编码

6

11

·        Code Review

·         代码复审

2

2

·        Test

·         测试(自我测试,修改代码,提交修改)

8

11

Reporting

报告

3

6

·         Test Report

·         测试报告

2

5

·         Size Measurement

·         计算工作量

0.5

0.5

·         Postmortem & Process Improvement Plan

·         事后总结, 并提出过程改进计划

0.5

0.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值