20165230 结对编程项目-四则运算 整体总结

20165230 结对编程项目-四则运算 整体总结

一、需求分析

  • 随机生成题目
  1. 生成的题目个数从命令行输入
  2. 用户可选择生成不同难度的题目,比如通过参数指定: (1) 运算符个数范围 (2) 运算符限定(小学一年级题目只生成 + - 题目)
  3. 能多次生成题目
  • 题目运算(判题)
  1. 支持多运算符
  2. 支持整数
  3. 支持真分数
  • 题目合法性判断
  1. 可独立使用
  2. 可用于测试生成题目的正确性
  • 扩展需求
  1. 题目去重
  2. 支持多语言
  3. 处理生成题目并输出到文件
  4. 完成题目后从文件读入并判题

二、设计思路

  1. 设计一个IntNumber类,用来实现整数的四则运算
  2. 设计一个Fraction类,用来实现真分数的四则运算
  3. 设计一个Judgement类,用来判断用户输入与实际计算值是否相等,并统计正确的次数
  4. 设计主类,生成随机数,生成题目,并判断正确率
  5. 设计测试类,测试整数类与分数类的四则运算
  6. 支持生成题目并输出到文件

三、核心代码及注释

  • 支持生成题目并写入到文件
import java.util.*;
public class Calculate {
    public static void main(String[] args) {
        NumberFormat nf = NumberFormat.getPercentInstance();
    ···
        Random ran = new Random();
        Scanner scan = new Scanner(System.in);
        IOFile iof = new IOFile("Exercises.txt");//处理生成题目并输出到文件
        while (true) {
            System.out.print("请输入您所需要的题目数量:");
            int A = scan.nextInt();
            for (int i = 0; i < A; i++) {
                int B = ran.nextInt(2);
                int C = ran.nextInt(4);
                in1 = IntNumber.obj();
                in2 = IntNumber.obj();
                score1 = Score.obj();
                score2 = Score.obj();
                if (B == 0) {
                    switch (C) {
                        case 0:
                            num = in1.add(in2);
                            S1 =in1.toString()+ " + " + in2.toString() + "=";
                            num1 = "" + num;
                            iof.WriteQuestionsToFile(S1);//调用append方法,将题目写入文件
                            N = scan.nextInt();
                            CorrectJudgment.judgment(N == num, num1);
                            break;
                        case 1:
                           ···
                        case 2:
                           ···
                        case 3:
                           ···
                    }
                } else {
                    switch (C) {
                        case 0:
                             num2 = score1.add(score2);
                            num1 = num2.toString();
                            Q = scan.next();
                            S2 =score1.toString()+"+"+score2.toString()+"=";
                            iof.WriteQuestionsToFile(S2);//调用append方法,将题目写入文件
                            CorrectJudgment.judgment(Q.equals(num1), num1);
                            break;
                        case 1:
                           ···
                        case 2:
                           ···
                        case 3:
                           ···
                    }
                }
            }

            System.out.println("你答对的题目总数:" + CorrectJudgment.getTrues());
            double T = (double) CorrectJudgment.getTrues() / A;
            System.out.println("您的正确率为:" + nf.format(T));
            System.out.println("是否继续生成题目?(y/n):"  );
            String s1 = scan.next();
            if (s1.equalsIgnoreCase("n")){
                break;
            }
        }
    }
}
                        
  • 支持真分数
import java.util.Random;
public class Fraction {
    private int numerator, denominator;

···
    public Fraction add(Fraction op2)//实现真分数加法
    {
        int commonDenominator = denominator * op2.getDenominator();
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int sum = numerator1 + numerator2;
        System.out.print("("+this.toString()+")" + " + " + "("+op2.toString()+")" + "=");
        return new Fraction (sum, commonDenominator);
    }

    public Fraction subtract(Fraction op2)//实现真分数减法
    {
        int commonDenominator = denominator * op2.getDenominator();
        int numerator1 = numerator * op2.getDenominator();
        int numerator2 = op2.getNumerator() * denominator;
        int difference = numerator1 - numerator2;
        System.out.print("("+this.toString()+")" + " - " + "("+op2.toString()+")" + "=");
        return new Fraction(difference,commonDenominator);
    }

    public Fraction multiply (Fraction op2)//实现真分数乘法
    {
        int numer = numerator * op2.getNumerator();
        int denom = denominator * op2.getDenominator();
        System.out.print("("+this.toString()+")" + " * " + "("+op2.toString()+")" + "=");
        return new Fraction (numer, denom);
    }

    public Fraction divide (Fraction op2)//实现真分数除法
    {

        int numer = numerator * op2.getDenominator();
        int denom = denominator * op2.getNumerator();
        System.out.print("("+this.toString()+")" + " / " + "("+op2.toString()+")" + "=");
        return new Fraction (numer, denom);
    }

···

    private void reduce()//化简
    {
        if (numerator != 0)
        {
            int common = gcd (Math.abs(numerator), denominator);

            numerator = numerator / common;
            denominator = denominator / common;
        }
    }

    private int gcd (int num1, int num2)//求最大公因子
    {
        if(num2==0)
            return num1;
        else
            return gcd(num2,num1%num2);

    }
    public static Fraction obj(){
        Random ran = new Random();
        return new Fraction(ran.nextInt(20),ran.nextInt(20));
    }
}

四、测试方法

  • IntNumber类的方法测试

  • Fraction类的方法测试

五、运行过程截图

六、代码托管地址

https://gitee.com/BESTI-IS-JAVA-2018/20165230/commit/a8633b2aec49a9632cfea1e732035e8f86073b73

七、遇到的困难及解决方法

  • 问题1:如何实现输出到文件?
  • 问题1解决方案:用到了PrinterStream类的append方法。将表达式作为一个字符串传入参数即可。
  • 问题2:在实现支持输出到文件功能时,题目不能正常显示数字,显示的是其引用
  • 问题2解决方案:发现定义字符串时,把int型数据直接添入,结果只能显示其引用,通过toString()方法即可显示

八、对结对的小伙伴的评价

  • 结对搭档:20165226刘香杉
  • 本周主要是在上一周的基础上进行需求扩展,我们分工独立完成,最终进行汇总并总结。由我实现支持自动生成题目并写入到文件的功能。在扩展的过程中发现自己学过的许多知识不会运用于实际,通过不断的查资料,查书,通过博客进行再学习,才独立完成了该功能的实现。在这个过程中将所学过的知识融会贯通,运用于实际,使我对知识点有了更深的理解与掌握。通过和杉杉交流总结,我们体会到了“纸上得来终觉浅,绝知此事要躬行”,不仅如此,还应多扩展知识的深度和广度,等到需要用时,便不会像无头苍蝇一样东拼西凑。

    九、参考或引用的设计、实现

  • 结对编程项目-四则运算
  • 2017-2018-2 165X 『Java程序设计』课程 结对编程练习_四则运算
  • 结对编程和两人合作
  • Intellj IDEA 简易教程——单元测试
  • 现代软件工程讲义 个人项目和结对项目练习 四则运算

    十、PSP表格

    PSP Personal Software Process Stages) 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划
    Estimate 估计这个任务需要多少时间 360 500
    Development 开发
    Analysis 需求分析 (包括学习新技术) 60 65
    Design Spec 生成设计文档 30 35
    Design Review 设计复审 (和同事审核设计文档) 25 20
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 15 30
    Design 具体设计 75 95
    Coding 具体编码 230 300
    Code Review 代码复审 30 25
    Test 测试(自我测试,修改代码,提交修改) 150 135
    Reporting 报告
    Test Report 测试报告 20 25
    Size Measurement 计算工作量 10 5
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 80
    合计 730 820

原文地址:https://www.cnblogs.com/tiankunye/p/8903656.html

时间: 2024-10-15 11:18:10

20165230 结对编程项目-四则运算 整体总结的相关文章

20165235 结对编程项目-四则运算 整体总结

20165235 结对编程项目-四则运算 整体总结 一.需求分析 本次实验需要产生随机数然后对其进行相应的计算.产生随机数可以直接在主类中进行,四则运算可以通过堆栈实现,可能会出现分母为零的bug,也要对其进行相应的修复.可以将字符序列装换成字符数组,在对字符数组中"/"符号之后的数字进行判断,如果是0就返回-1. 二.设计思路 本次实验总共分为两个思路:(1)是通过类Operate中的calculate方法进行计算,计算的数值由主类Main给出.并对其修复了分母为零的bug(在Mai

20165330 结对编程项目-四则运算 第二周

需求分析 实现一个命令行程序,要求:自动生成小学四则运算题目(加.减.乘.除) 可实现多个运算符一起运算 可以真分数形式输出结果 测试结果的正确性 统计题目完成数并计算正确率 设计思路 实验首先是完成一个计算器的功能,可以实现简单的+.-.*./运算,在这里设计一个主类生成随机数,生成题目,并判断正确率 实现多运算符,编入四个类分别实现整数运算.真分数运算.判断结果正确并计算正确率 利用JUnit检测非法输入 设计测试类,利用JUnit测试整数类与分数类的四则运算 UML类图 功能截图 Juni

结对编程项目——四则运算

1. 结对编程项目---四则运算 (10分) 基本功能要求: 1) 实现一个带有用户界面的四则运算.2) 生成的题目不能重复.3) 支持负数,例如-1,-1/2,-3‘4/5等.(达成) 需要支持的基本设定参数 1) 题目的数量  2) 数值的范围  3) 题目中最多几个运算符(目前没有达成)  4) 题目中或运算过程中有无有分数(比如进行整数除法的时候不能除尽) 5) 题目中是否有乘除法  6) 题目中是否有括号 (目前没有达成) 7) 题目中或运算过程中有无负数         学习感受:

20165206 结对编程项目-四则运算 阶段一总结

20165206 结对编程项目-四则运算 阶段一总结 一.需求分析 通过命令行输入生成题目的数量,随机生成题目. 生成的题目不重复. 生成的四则运算题目支持整数.支持多运算符. 能够根据作答情况统计正确的个数. 二.设计思路 设计一个类来实现整数的四则运算. 用一个循环结构来生成随机数,生成题目. 设计一个类来比较输入的答案与正确答案是否一致. 判断做的题是否正确,并返回正确的个数. 设计单元测试,对代码进行测试及修改 UML图: 三.核心代码 生成随机数: while(true){ a=new

20165227 结对编程项目-四则运算 第一周

20165227 结对编程项目-四则运算 第一周 需求分析 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计题目完成数并计算正确率 设计思路 设计一个计算器能够实现简单的+.-.*./运算 通过编程实现多运算符计算.整数运算.真分数运算.判断结果等 进行junit检测 设计一个程序主类,达到生成随机数.题目.并判断正误 测试 UML类图 功能截图 结对感受 因为同为室友,所以结对起来更轻松方便,讨论的时间也更加地充足,对于队

20165318 结对编程项目-四则运算 阶段总结

20165318 结对编程项目-四则运算 阶段总结 一.需求分析 能随机生成n道四则运算题目,n由使用者输入 支持整数和分数 支持多运算符 能够判断正误,错误时能提醒并输出正确答案 能计算出正确率 能多次生成题目,直到使用者选择退出 后续拓展的可能 题目去重 文件: 处理生成题目并输出到文件 完成题目后从文件读入并判题 多语言支持:简体中文, 繁體中文, English 二.设计思路(同时输出UML类图) 首先考虑生成题目. 随机生成题目,用到Random函数,生成题目应该是同时随机生成数字和四

20165202 结对编程项目-四则运算 第二周

一.码云链接 二.需求分析 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 统计正确率 三.设计思路(同时输出UML类图) 这周的总体设计要在上周的基础上深化,上周我们的代码没有用到中缀表达式转后缀表达式,没有用到栈,所以这周不仅要对上一周的代码进行修改,而且还要在此基础上完成更深层的对真分数的要求. 实现四则运算中后缀转换类 实现四则运算后缀表达式计算类 实现四则运算真分数计算类 实现四则运算生成题

20172327 结对编程项目-四则运算 第二周 阶段总结

20172327 结对编程项目-四则运算 第二周 阶段总结 结对编程项目-四则运算 第二周 输出阶段总结博客 结对对象: 学号:20172317 姓名:蒋子行 伙伴第二周博客地址: 学号:20172320 姓名:李闻洲 伙伴第二周博客地址: 担任角色: 驾驶员:蒋子行 副驾驶:李闻洲 马瑞蕃 小组结对编程的photo: 项目中自己负责的部分: 我在项目中真的没啥贡献,项目主要由祥哥主刀,我和李闻洲就是打杂的. 个人贡献度划分: 我在项目中真的没啥贡献,项目主要由祥哥主刀,我就是打杂的,提点建议和

20175212童皓桢 结对编程项目-四则运算 第一周

20175212童皓桢 结对编程项目-四则运算 第一周 需求分析 实现一个命令行程序,要求自动生成小学四则运算题目(加减乘除) 支持多运算符 测试结果的正确性,用户输入错误时给出正解 统计题目正确率 设计思路 首先要能够按照按人的一般习惯,生成自左向右计算的加减乘除算式. 随机生成多运算符,并随机生成相对应个数的整数 利用eval方法直接计算随机生成的算式的值,并和用户的输入作比较 判断正确率 设计测试类,利用JUnit测试整数的四则运算 UML类图 关键代码 如何生成符合要求格式的运算式 fo