一、需求分析:

  编写一个适合小学生计算的四则运算小程序,程序相关参数可以定制,并把生成的等式存储到外部result.txt文件中。

二、功能实现:

基本功能

(1)自动生成10道100以内的2个操作数的四则运算算式(+ - *  /),要求运算结果也在100以内

(2)剔除重复算式。  2 + 3 =    和  2 + 3 =     是重复算式      2 + 3 =   和   3 + 2 =  不属于重复算式

(3)题目数量可定制

(4)相关参数可控制

          是否包含乘法和除法

          操作数数值范围可控(如操作数 在100以内   还是1000以内)

          操作数是否含负数    

  (5)生成的运算题存储到外部文件result.txt中

三·设计实现

     此程序使用Java实现,随机生成count个scope范围的数,随机生成count个scope范围的数,判断用户的要求,当用户做出选择时,进入if语句,来执行判断其他条件的分支。以此来完成程序的实现。

 

四、测试运行

 

 

 

 

 

 

 

 

五、代码片段

 

public class Operation {

public static void main(String[] args) {
int count=0,scope=0,isMulandchu,complex;
Operation operation = new Operation();
Scanner scanner = new Scanner(System.in);
System.out.println("请输入生成四则运算的数量");
count= scanner.nextInt();
System.out.println("请输入操作数的范围(结果也会小于该值哦)");
scope=scanner.nextInt();
System.out.println("需要有乘除吗? 1代表有 0代表没有");
isMulandchu= scanner.nextInt();
while(isMulandchu!=0&&isMulandchu!=1){
System.out.println("输入有误,重新输入");
isMulandchu= scanner.nextInt();
}
System.out.println("需要有负数吗?1代表有 0代表没有 ");
complex=scanner.nextInt();
while(complex!=0&&complex!=1){
System.out.println("输入有误,重新输入");
complex= scanner.nextInt();
}
operation.randomOperation(count,scope,isMulandchu,complex);
}

/**
* 随机生成count个scope范围的数
* @param count 个数
* @param scope 范围 运算数的绝对值和结果小于该值
*/
public void randomOperation(int count,int scope,int isMulandchu,int complex){

String result;
int operate1=0,operate2=0;
HashSet<String> number = new HashSet<>();
Random random=new Random();
//complex==1 需要生成两个可能产生负数的两个操作符
if(complex==1){
while(number.size()<count){

//生成随机数1
operate1= (random.nextInt(scope)+1)*(Math.random()>0.5?1:-1);
//生成随机数2
operate2= (random.nextInt(scope)+1)*(Math.random()>0.5?1:-1);
//不可以为0
while (operate2==0){
operate2= (random.nextInt(scope)+1)*(Math.random()>0.5?1:-1);
}

result=calculate(operate1,operate2,scope,isMulandchu);
//返回结果为NULL 不添加到集合中
if(result!=null){
number.add(result);
}
}
}else {

while(number.size()<count){

//生成随机数1
operate1= random.nextInt(scope)+1;
//生成随机数2
operate2= random.nextInt(scope)+1;

result=calculate(operate1,operate2,scope,isMulandchu);
//返回结果为NULL 不添加到集合中
if(result!=null){
number.add(result);
}
}
}


//写入文件
writeBook(number);


}

/**
* 随机产生两个运算数 并返回String
* @param operate1
* @param operate2
* @param scope 结果的绝对值小于该值
* @param isMulandchu 是否有 * /运算
* @return
*/
public String calculate(int operate1,int operate2,int scope,int isMulandchu){

char operator[]={'+','-','*','/'};
Random random=new Random();
int result=0,flag=random.nextInt(isMulandchu==0?2:4);
// 0 1 2 3 分别代表 '+','-','*','/'
switch(flag) {
case 0:result = operate1+operate2;break;
case 1:result = operate1-operate2;break;
case 2:result = operate1*operate2;break;
case 3:result = operate1/operate2;break;
}
//结果的绝对值小于给定范围返回该值否则返回空
return Math.abs(result)<=scope? ""+operate1+operator[flag]+operate2+"="+result: null;
}

/**
* 将集合文件
* @param numbers
*/
public void writeBook(Set<String> numbers){
BufferedWriter writer=null;
try {
writer = new BufferedWriter(new FileWriter("D:\\result.txt", true));

for (String number : numbers) {
writer.write(number);
writer.newLine();
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(writer!=null) {
writer.close();
}
}catch(IOException e) {
e.printStackTrace();
}
}
}

}

 

六、总结

本次作业对于我来说难度较大,所以是在别人的帮助下一点点完成的,接下来的时间会认真学习,多向其他优秀的同学学习,提升自己。

PSP

PSP2.1

任务内容

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

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

Planning

计划

402

620

·       Estimate

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

70

90

Development

开发

100

150

··       Analysis

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

25

50

·       Design Spec

·  生成设计文档

15

30

·       Design Review

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

20

50

·       Coding Standard

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

25

25

·       Design

  具体设计

22

28

·       Coding

  具体编码

60

70

·       Code Review

·  代码复审

8

22

·       Test

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

15

25

Reporting

报告

5

20

··       Test Report

·  测试报告

15

15

·       Size Measurement

  计算工作量

15

25

·       Postmortem & Process Improvement Plan

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

7

20

 
posted on 2019-09-16 19:19  孔祥菲  阅读(215)  评论(1编辑  收藏  举报