小学生四则运算

github地址:https://github.com/jiyx/Student_Comput

一、需求分析

     1、由用户输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间;

     2、运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式;

     3、将学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,文件目录与程序目录一致。

      例如:当程序接收的参数为4时,输出如下:

      

 软件附加功能要求如下:

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

扩展程序功能支持真分数的出题与运算,运算时分数需自动化简,比如 1/2+1/6=2/3,而非4/6。

二、设计实现

      1、运算结果不能为负数和非整数;

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

三、功能实现

                                                                     

四、测试运行   

                   

 

                       

五、核心代码

         1、输入题目数量和写入学号

              由用户输入要产生的运算式数量,将学号写入文件。

1         int x;//题目数量
2         System.out.println("请输入题目的数量:");
3         Scanner scan2 = new Scanner(System.in);
4         x = scan2.nextInt();
5         String serialNo = "201571030306";
6         
7         fop.write(serialNo.getBytes());   //写入学号 
8         fop.write("\r\n".getBytes());     //换行

    2、运算式的产生

          产生三个0~100之间的随机数a,b,c 作为运算数,定义字符串q保存运算式;产生0~3之间的随机数,分别表示四种运算符

 1             int a=(int)(Math.random()*100);
 2             int b=(int)(Math.random()*100);
 3             int c=(int)(Math.random()*100);
 4             
 5             String q="";    //保存运算式
 6             int ans=0;
 7             int[] flag=new int[2];         
 8             for(int j=0;j<2;j++){      
 9                 int f=(int)(Math.random()*4);
10                 switch(f){
11                 case 0:
12                     if(j==0){
13                         q=a+"+"+b;
14                     }
15                     else{
16                         q=q+"+"+c;
17                     }
18                     flag[j]=0;
19                     break;
20                 case 1:
21                     if(j==0){
22                         q=a+"-"+b;
23                     }
24                     else{
25                         q=q+"-"+c;
26                     }
27                     flag[j]=1;
28                     break;
29                 case 2:
30                     if(j==0){
31                         q=a+"*"+b;
32                     }
33                     else{
34                         q=q+"*"+c;
35                     }
36                     flag[j]=2;
37                     break;
38                 case 3:
39                     if(j==0){
40                         q=a+"/"+b;
41                     }
42                     else{
43                         q=q+"/"+c;
44                     }
45                     flag[j]=3;
46                     break;
47                 }
48             }

3、计算运算式结果,将结果存入变量ans中。

 1    if(flag[0]<2){
 2                 if(flag[1]<2){
 3                     if(flag[0]==0){
 4                         ans=a+b;
 5                     }
 6                     else{
 7                         ans=a-b;
 8                     }
 9                     if(flag[1]==0){
10                         ans+=c;
11                     }
12                     else{
13                         ans-=c;
14                     }
15                 }
16                 else{
17                     if(flag[1]==2){
18                         ans=b*c;
19                     }
20                     else{
21                         if(c==0){
22                             continue;
23                         }
24                         if(b<c || b%c!=0) {
25                             i=i-1;       //如果出现重新循环
26                             continue;   //判断结果不能为负数和非整数
27                         }
28                         ans=b/c;
29                     }
30                     if(flag[0]==0){
31                         ans+=a;
32                     }
33                     else{
34                         ans=a-ans;
35                     }
36                 }
37             }
38             else{
39                 if(flag[0]==2){
40                     ans=a*b;
41                 }
42                 else{
43                     if(b==0){
44                         continue;
45                     }
46                     if(a<b || a%b!=0) {
47                         i=i-1;       //如果出现重新循环
48                         continue;   //判断结果不能为负数和非整数
49                     }
50                     ans=a/b;
51                 }
52                 if(flag[1]==0){
53                     ans+=c;
54                 }
55                 else if(flag[1]==1){
56                     ans-=c;
57                 }
58                 else if(flag[1]==2){
59                     ans*=c;
60                 }
61                 else{
62                     if(c==0){
63                         continue;
64                     }
65                     if(ans<c || ans%c!=0) {
66                         i=i-1;       //如果出现重新循环
67                         continue;   //判断结果不能为负数和非整数
68                     }
69                     ans/=c;
70                 }
71             }

4、判断结果(结果不能为负数)将结果ans和运算式连接起来写入文件。

1      if(ans<0) //判断结果不能为负数
2             {
3                 i=i-1; continue;
4             }   
5             
6             q=q+"="+ans;           //用字符串将算式和答案连在一起
7             System.out.println(q);
8             fop.write(q.getBytes());    //写入表达式
9             fop.write("\r\n".getBytes());   //换行

六、PSP展示

 

PSP2.1

任务内容

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

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

Planning

计划

30

30

·       Estimate

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

10

20

Development

开发

230

360

··       Analysis

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

20

40

·       Design Spec

·  生成设计文档

5

5

·       Design Review

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

5

8

·       Coding Standard

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

2

2

·       Design

  具体设计

40

50

·       Coding

  具体编码

120

200

·       Code Review

·  代码复审

10

10

·       Test

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

30

45

Reporting

报告

40

60

··       Test Report

·  测试报告

8

10

·       Size Measurement

  计算工作量

3

3

·       Postmortem & Process Improvement Plan

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

10

15

 

七、总结

        本次项目在刚开始分析问题时觉得不是特别困难,但实际操作时才发现自己能力实在是太差了,(每次都是看着不难上手难o(╥﹏╥)o)。通过这次实验也更能深刻的体会到自己能力差,但同时也收获了很多。从这个平台上看了其他同学的博客,学到了很多技能和方法。希望自己以后更加努力。

posted @ 2018-03-24 21:58  听你说呵呵  阅读(226)  评论(1编辑  收藏  举报