结对编程1——四则运算-GUI

码市链接:https://coding.net/u/hmhhh/p/hmh-homework/git/tree/master/

201421123003 黄建英 201421123004 黄美海

题目描述:

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;
2.有计时功能,能显示用户开始答题后的消耗时间;
3.界面支持中文简体/中文繁体/英语,用户可以选择一种。
在软件开发中,我们需要大量使用工具来辅助设计,每个环节大家都要善于学习和使用工具。设计的时候,请使用思维导图设计你的模块之间的关系。

一、需求分析

1、用户输入数量可随机产生四则运算式
2、对用户输入的答案进行正确率分析
3、GUI界面:a、有计时功能,能显示用户开始答题后的消耗时间 b、界面支持中文简体/中文繁体/英语,用户可以选择一种;

二、思维导图

三、关键代码说明

a计时功能

private void finishActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishActionPerformed
        // TODO add your handling code here:
        rightanswer.setText("");
        int correct = 0;
        int fault = 0;
        String[] anslist = enter2.getText().split("\n");
        for (int i = 0; i < Answer.size(); i++) {
            if (Answer.get(i).equals(anslist[i])) {
                correct++;
                rightanswer.append( "正确!答案是:"+Answer.get(i)+"\n");
            } else {
                rightanswer.append( " 错误!正确答案是:"+Answer.get(i)+"\n");
                fault++;
            }
        }
        String toDate = simpleFormat.format(new Date());
        try {
            to = simpleFormat.parse(toDate).getTime();
        } catch (ParseException ex) {
            Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println((float) ((to - from) / (1000 * 60 * 60)));
        if (language == 1) {
            resultprintf.setText("答对" + correct + "题,正确率:" + (float) correct / (correct + fault) * 100 + "%,花费时间:" + (int) ((to - from) / (1000)) + "秒");
        } else if (language == 2) {
            resultprintf.setText("答對" + correct + "題,正確率:" + (float) correct / (correct + fault) * 100 + "%,花費時間:" + (int) ((to - from) / (1000)) + "秒");
        } else if (language == 3) {
            resultprintf.setText("Answer correct " + correct + "questions, correct rate:" + (float) correct / (correct + fault) * 100 + "%,Spend time:" + (int) ((to - from) / (1000)) + "s");
        }
        for (int i = 0; i < Answer.size(); i++) {
            Answer.remove(i);
            anslist = null;
        }
    }//GEN-LAST:event_finishActionPerformed

  b生成题目

private void startActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startActionPerformed
        // TODO add your handling code here:
        String num = enter1.getText();
        int n = 0;
        try {
            n = Integer.parseInt(num);
        } catch (NumberFormatException e) {
            if (language == 1) {
                resultprintf.setText("输入错误!请重新输入");
            } else if (language == 2) {
                resultprintf.setText("輸入錯誤!請重新輸入");
            } else if (language == 3) {
                resultprintf.setText("input error! please enter again");
            }
        }
        int m = (int) (Math.random() * n);//随机整数题目和分数题目的题量
        for (int i = 0; i < (n - m); i++) {//先随机出整数题型
            Random random = new Random();
            int n1 = random.nextInt(10);
            int n2 = random.nextInt(10) + 1;
            int a = (int) (Math.random() * 4 + 1);//随机决定运算类型
            if (a == 1) {
                Question.add(n1 + "+" + n2 + "=");
                Answer.add(n1 + n2 + "");
            }
            if (a == 2) {
                Question.add(n1 + "-" + n2 + "=");
                Answer.add(n1 - n2 + "");
            }
            if (a == 3) {
                Question.add(n1 + "×" + n2 + "=");
                Answer.add(n1 * n2 + "");
            }
            if (a == 4) {
                Question.add(n1 + "÷" + n2 + "=");
                String n3 = (float) n1 / n2 + "";
                if (n3.indexOf(".0") != -1) {
                    n3 = n3.replace(".0", "");
                }
                Answer.add((n3));
            }
        }
        for (int i = 0; i < m; i++) {
            int[] fn1 = createFraction();
            int[] fn2 = createFraction();
            int a = (int) (Math.random() * 4 + 1);
            if (a == 1) {//加
                Question.add("(" + Reduction(fn1[0], fn1[1]) + ")+(" + Reduction(fn2[0], fn2[1]) + ")=");
                Answer.add(Reduction(((fn1[0] * fn2[1]) + (fn2[0] * fn1[1])), (fn1[1] * fn2[1])));//化简结果并存储
            }
            if (a == 2) {//减
                Question.add("(" + Reduction(fn1[0], fn1[1]) + ")-(" + Reduction(fn2[0], fn2[1]) + ")=");
                Answer.add(Reduction(((fn1[0] * fn2[1]) - (fn2[0] * fn1[1])), (fn1[1] * fn2[1])));
            }
            if (a == 3) {//乘
                Question.add("(" + Reduction(fn1[0], fn1[1]) + ")×(" + Reduction(fn2[0], fn2[1]) + ")=");
                Answer.add(Reduction(fn1[0] * fn2[0], fn1[1] * fn2[1]));//
            }
            if (a == 4) {//除
                Question.add("(" + Reduction(fn1[0], fn1[1]) + ")÷(" + Reduction(fn2[0], fn2[1]) + ")=");
                Answer.add(Reduction(fn1[0] * fn2[1], fn1[1] * fn2[0]));
            }
        }
        int qn = 0;
        question.setText("");
        rightanswer.setText("");
        enter2.setText("");
        for (String string : Question) {
            qn++;
            question.append("[" + qn + "]" + string + "\n");
        }
        for (int i = 0; i < Question.size(); i++) {
            Question.remove(i);
        }
        String fromDate = simpleFormat.format(new Date());
        try {
            from = simpleFormat.parse(fromDate).getTime();
        } catch (ParseException ex) {
            Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_startActionPerformed

  c结果判断与输出

private void finishActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishActionPerformed
        // TODO add your handling code here:
        rightanswer.setText("");
        int correct = 0;
        int fault = 0;
        String[] anslist = enter2.getText().split("\n");
        for (int i = 0; i < Answer.size(); i++) {
            if (Answer.get(i).equals(anslist[i])) {
                correct++;
                rightanswer.append( "正确!答案是:"+Answer.get(i)+"\n");
            } else {
                rightanswer.append( " 错误!正确答案是:"+Answer.get(i)+"\n");
                fault++;
            }
        }
        String toDate = simpleFormat.format(new Date());
        try {
            to = simpleFormat.parse(toDate).getTime();
        } catch (ParseException ex) {
            Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println((float) ((to - from) / (1000 * 60 * 60)));
        if (language == 1) {
            resultprintf.setText("答对" + correct + "题,正确率:" + (float) correct / (correct + fault) * 100 + "%,花费时间:" + (int) ((to - from) / (1000)) + "秒");
        } else if (language == 2) {
            resultprintf.setText("答對" + correct + "題,正確率:" + (float) correct / (correct + fault) * 100 + "%,花費時間:" + (int) ((to - from) / (1000)) + "秒");
        } else if (language == 3) {
            resultprintf.setText("Answer correct " + correct + "questions, correct rate:" + (float) correct / (correct + fault) * 100 + "%,Spend time:" + (int) ((to - from) / (1000)) + "s");
        }
        for (int i = 0; i < Answer.size(); i++) {
            Answer.remove(i);
            anslist = null;
        }
    }//GEN-LAST:event_finishActionPerformed

  d中文简体/中文繁体/英语三种语言的切换

private void language1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language1ActionPerformed
        // TODO add your handling code here:
        language = 1;
        title1.setText("四则运算生成器");
        title2.setText("请输入产生四则算式的数量:");
        title3.setText("请选择语言");
        title4.setText("问题显示:");
        title5.setText("输入答案:");
        title6.setText("正确答案:");
        start.setText("生成");
        finish.setText("结束");
    }//GEN-LAST:event_language1ActionPerformed

  

private void language2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language2ActionPerformed
        // TODO add your handling code here:

        language = 2;
        title1.setText("四則運算生成器");
        title2.setText("請輸入產生四則算式的數量:");
        title3.setText("請選擇語言");
        title4.setText("問題顯示:");
        title5.setText("輸入答案:");
        title6.setText("正確答案:");
        start.setText("生成");
        finish.setText("結束");
    }//GEN-LAST:event_language2ActionPerformed

  

private void language3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language3ActionPerformed
        // TODO add your handling code here:
        language = 3;
        title1.setText("Arithmetic");
        title2.setText("enter number:");
        title3.setText("language");
        title4.setText("problem display:");
        title5.setText("Enter answer:");
        title6.setText("proofreader:");
        start.setText("enter");
        finish.setText("end");
    }//GEN-LAST:event_language3ActionPerformed

  

 e测试运行

简体中文:

繁体中文

英文

结对照片展示:

psp:


PSP2.1


Personal Software Process Stages


Estimated time


actual time


Planning


计划


15min


20min


· Estimate


估计这个任务需要多少时间


10h


12h


Development


开发


4h


3h


· Analysis


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


5min


3min


· Design Spec


生成设计文档


10min


10min


· Design5 R20eview


设计复审


5min


5min


· Coding Standard


代码规范


30min


40min


· Design


具体设计


2h


2h


· Coding


具体编码


3h


4h


· Code Review


代码复审


20min


30min


· Test


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


5min


10min


Reporting


报告


10min


10min


·


测试报告。


-


-


·


计算工作量


5min


5min


·


并提出过程改进计划


5min


6min

小结:

1、两人结对编程对于作业的纠错和细节处理是有明显帮助的。首先我们一起讨论了总体的需求以及该如何设计实现,然后一致决定采用黄建英同学的基础代码进行改进,实现四则运算的GUI界面。因为是基于她上次的代码,所以由黄建英同学负责代码的编写,而我则是负责提醒和审查。

2、虽然两个人的合作会使作业的时间变长,但是可以找出更多的不足之处,毕竟当局者迷。所以这一次通过合作,我们各自都有进步,也觉得这次的作业应该是比较精致的。

汉堡包式评价:

  1. 先来一片面包:我们两人达成结对编程的共识,采用JAVA和GUI实现
  2. 再把肉放上:这次编程过程中,我负责提醒和审查。但是期间遇到了诸多问题和不足,我们经过讨论、查资料就都顺利解决。
  3. 然后再来一片面包: 搭档的默契合作是一个好作品的完美助力。
时间: 2024-08-11 05:29:01

结对编程1——四则运算-GUI的相关文章

结对编程1 —— 基于GUI和Swing的四则运算题目生成器

结对编程1 -- 基于GUI和Swing的四则运算题目生成器 合作伙伴 201421123089 周迪 201421123069 黄睿 代码地址:https://git.coding.net/H1159650478/sizeyunsuanjiaqiang.git 题目描述 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web,手机上的),成为一个有基本功能.一定价值的程序.在下面

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

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

补结对编程(四则运算)

结对编程(四则运算)结对伙伴:刘芳芳.于淼主要用java实现编码内容:给小学生出题的四则运算四种运算1-加法2-减法3-乘法4-除法0-退出 四则运算PSP 类别 开始时间 结束时间 间隔时间 累计净时间 四则运算分析 7:30 8:00 0 30分 编码 8:00 10:43 0 2小时43分 总结 10:43 10:50 0 7分 补充代码函数进度 代码如下:循环遍历运算字符串: 1 private static String interceptOperation(String operat

20165223 结对编程之四则运算

目录 一.结对对象 二.需求分析 三.设计思路 四.UML类图 五.功能截图 六.结对感受 一.结对对象 担任角色 驾驶员(Driver):20165223 蔡霓(是控制键盘输入的人) 领航员(Navigator):20165218 赵冰雨(起到领航.提醒的作用) 搭档本次结对博客: 本次结对码云链接: 二.需求分析 取自<结对编程项目-四则运算> 题目内容(week1) 实现一个命令行程序,要求: 自动生成小学四则运算题目(加.减.乘.除) 支持整数 支持多运算符(比如生成包含100个运算符

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

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

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

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

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

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

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

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

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

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