• 小学生四则运算


    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("
    ".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("
    ".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)。通过这次实验也更能深刻的体会到自己能力差,但同时也收获了很多。从这个平台上看了其他同学的博客,学到了很多技能和方法。希望自己以后更加努力。

  • 相关阅读:
    面向对象编程
    多任务-线程
    浅析IoC框架
    Android:关于声明文件中android:process属性说明
    Android闹钟设置的解决方案
    【转】RelativeLayout和LinearLayout及FrameLayout性能分析
    SurfaceView浅析
    SQLite Vacuum
    SQLiteStatement优化SQLite操作
    基于Android SQLite的升级详解
  • 原文地址:https://www.cnblogs.com/jyxing/p/8639616.html
Copyright © 2020-2023  润新知