java四则运算表达式分析程序,小学四则运算练习软件项目报告

一、实验要求

软件基本功能要求如下:

程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符是3-4个。

为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。

练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

当程序接收的参数为4时,以下为输出文件示例。

e0d900aaef19f321b94bbd50260f1c12.png

软件附加功能要求如下:(请有余力的同学完成)

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

扩展程序功能支持真分数的出题与运算,例如:1/6 + 1/8 + 2/3= 23/24。注意在实现本功能时,需支持运算时分数的自动化简,比如 1/2+1/6=2/3,而非4/6。

二、需求分析

程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符是3-4个。

为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。

练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。

三、功能实现

1、随机生成2-5个数的运算表达式,运算符在1-4个之间。

2、每个数字在0-100之间。

3、完成了基本的运算。

4、将学号和四则运算及其结果保存到result.txt中。

四、设计实现

b0d6ef6780f2ef46024832b6d4e4dcde.png

在主类Main.java中,先进行了文件操作,也就是基本的初始化,然后接收一个数,也就是将来生成的表达式的个数。接着调用随机函数,随机生成5位数数组,并产生随机运算符下标,之后运用switch语句生成有2-5个数的随机表达式并且有1-4个运算符,之后调用JavaScript的eval函数计算出所求的结果,将结果和自己的学号保存到文本文件中。

五、测试运行

输入产生的表达式8个,运行结果如图2,结果保存到result.txt,如图3所示,命令行测试如图4所示。

53c59cfb5b8a9a97f8766cbd72b2e844.png     

6808dfe13adcd8723c3d7d096a989170.png  

2ecedffe8e81a23b5d92849ea1f947c6.png

六、核心代码

1.文件操作

1 PrintStream ps = null;2 try

3 {4 File file =new File("./result.txt");5 ps = new PrintStream(newFileOutputStream(file));6 }7 catch(FileNotFoundException e)8 {9 e.printStackTrace();10 }11 ps.println("201571030101");

2.产生五位数的随机数组

1 int[] array = new int[5];2 Random r = newRandom();3 for (int i = 0, n = array.length; i < n; i++)4 {5 array[i] = r.nextInt(100);6 }

3.产生随机运算符下标

char[] c={'+','-','*','/'};

Random ran= newRandom();int index=ran.nextInt(c.length);int index1=ran.nextInt(c.length);int index2=ran.nextInt(c.length);int index3=ran.nextInt(c.length);

4.switch语句分情况生成2-5个数的四则运算

int s = r.nextInt(4);switch(s)

{case 0:

{

exp= String.valueOf(""+array[0]+c[index]+array[1]);break;

}case 1:

{

exp= String.valueOf(""+array[0]+c[index]+array[1]+c[index1]+array[2]);break;

}case 2:

{

exp= String.valueOf(""+array[0]+c[index]+array[1]+c[index1]+array[2]+c[index2]+array[3]);break;

}case 3:

{

exp= String.valueOf(""+array[0]+c[index]+array[1]+c[index1]+array[2]+c[index2]+array[3]+c[index3]+array[4]);break;

}

}

5.计算结果并保存

try{

result=Double.parseDouble(String.valueOf(javascript.eval(exp)));

}catch(ScriptException e)

{

e.printStackTrace();

}if(Math.floor(result)==result&&result>0&&result<99999)

{

System.out.println(exp+ "=" + (int) result);

ps.println(exp+ "=" + (int) result);

}

七、总结

本次实验,我明白了软件工程的庞大性,设计一个好的软件并不是很简单的,刚开始写这个实验,甚至都忘记了Java如何创建一个项目。虽然有这些困难,但还是努力克服。这已经是我第二次去修改已经提交了的代码,感觉自己的这个实验一次比一次成熟,我觉得学习就是慢慢积累的过程,虽然本次实验还有一些不足的地方,但是已经基本完成了老师所说的一些功能,其他功能还有待提高,我会在第三次实验中再接再厉的。

八、展示PSP

PSP

任务内容

计划完成需要的时间(min)

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

Planning

计划

30

40

Estimate

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

30

30

Development

开发

200

300

Analysis

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

15

30

Design Spec

生成设计文档

10

20

Design Review

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

10

20

Coding Standard

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

5

10

Design

具体设计

30

30

Coding

具体编码

100

120

Code Review

代码复审

10

20

est

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

10

20

Reporting

报告

30

60

Test Report

测试报告

25

30

Size Measurement

计算工作量

2

3

Postmortem & Process

Improvement Plan

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

3

10

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值