2016011996小学生四则运算练习软件项目报告

时间:2021-10-12 11:09:54

2016011996小学生四则运算练习软件项目报告

代码未提交,所以没有地址

一.需求分析

1.程序可以接收一个参数n,随机生成n道四则运算题,+-*÷分别用+-*/来表示

2.每个数字都必须在0和100之间

3.每个运算式必须包括3~5个运算符并且至少有两种运算符

4.运算式在运算过程中不能出现负数以及小数

5.将学号以及输出的n道运算题以及答案一起输出到result.txt文件中,不输出其他信息,文件目录与程序目录一致

二.功能设计

 能够根据用户输入的参数n随机产生n道符合要求的四则混合运算练习题,判断优先级,自动算出答案,并将等式以及答案以文档的形式呈现(即自己的学号还有生成的n道练习题以及对应的正确答案存于“result.txt”中)

三.设计实现

主函数实现数据的输入打印,

四.算法详解

查了资料以后知道了要解决算法优先级问题,大多数人用的都是逆波兰算法,但是我看不懂,java学的差,无法用代码实现,就只写一下大概的算法构想:

中缀表达式转换为后缀表达式(逆波兰表达式),即调度场算法(shunting yard algorithm)

1.建立运算符栈用于运算符的存储,此运算符遵循越往栈顶优先级越高的原则。

2.预处理表达式,正、负号前加0(如果一个加号(减号)出现在最前面或左括号后面,则该加号(减号) 为正负号)。   

3.顺序扫描表达式,如果当前字符是数字(优先级为0的符号),则直接输出该数字;如果当前字符为运算符或者括号(优先级不为0的符号),则判断第四点。

4.若当前运算符为'(',直接入栈;若为')',出栈并顺序输出运算符直到遇到第一个'(',遇到的第一个'('出栈但不输出;  若为其它,比较运算符栈栈顶元素与当前元素的优先级:

如果栈顶元素是'(',当前元素直接入栈;

如果栈顶元素优先级>=当前元素优先级,出栈并顺序输出运算符直到栈顶元素优先级<当前元素优先级,然后当前元素入栈;

如果栈顶元素优先级<当前元素优先级,当前元素直接入栈。

5.重复第三点直到表达式扫描完毕。

6.顺序出栈并输出运算符直到栈元素为空。

7.最后解析后缀表达式,对逆波兰表达式求值,得到运算结果。

五.测试运行

六.代码展示

七.PSP展示

PSP2.1

任务内容

计划共完成需要的时间/h

实际完成需要的时间/h

Planning

计划

2

2

·        Estimate

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

33.5

41.5

Development

开发

2

 2

·        Analysis

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

1

1

·        Design Spec

·         生成设计文档

0.5

0.5

·        Design Review

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

1

1

·        Coding Standard

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

1

3

·        Design

·         具体设计

1

1

·        Coding

·         具体编码

12

18

·        Code Review

·         代码复审

6

6

·        Test

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

1

1

Reporting

报告

1

1

·         Test Report

·         测试报告

2

2

·         Size Measurement

·         计算工作量

1

1

·         Postmortem & Process Improvement Plan

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

2

 2

 

八.总结反思

编程的时间对我很漫长难熬,毫无头绪,而且很多不会,又回头去看java基础书,查了也还是不会,实现不了程序的功能,代码写的很差,java学的也差,本来想这次作业应该是交不了的,后来想了想写博客也占了一定的分数,所以还是写一写博客,至少有点分数。心里挺难受的,交不上作业,这段时间必须得去好好地补补java知识了。