博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
作业五 | 结对项目-四则运算 “软件”之升级版
阅读量:5876 次
发布时间:2019-06-19

本文共 7958 字,大约阅读时间需要 26 分钟。

作业要求来自于

GitHub远程仓库的地址

结对同伴:林溢漫  学号:201606120099  博客地址:

注:这次的结对编程我们一起做了Java版和Web版的四则运算答题软件/系统。我们首先做的是Java版的四则运算答题软件,功能齐全,符合作业要求,而Web版是一个尝试的额外制作,初衷是令用户界面更美观、友好,也完成了基本和扩展功能。

 

(Java版)四则运算 

 

  • 基本要求:
    • 生成题目,单个题目最多不能超过4个运算符,操作数小于100
    • 用户可以输入答案
    • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少
  • 扩展要求(选择方向):
    • 用户答题结束以后,程序可以显示用户答题所用的时间
    • 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
    • 程序可以出单个整数阶乘的题目:如:4!=24
    • 程序可以设置皮肤功能,可以改变界面的颜色即可
    • 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题
  • 开发环境:IntelliJ Idea
  • 文件名称:CalculationSystem
  • 分工:
    • 林溢漫  Java用户界面设计以及第2、3、4功能的实现
    • 郭晓莹  第1、5功能的实现以及调试、修改程序的一些小错误
  • 算法设计说明:
    • public class FourCalculations {...}

      随机生成最多不能超过4个运算符,操作数小于100的单个四则运算式,并且能进行正确答案的计算。

    • public class FactorialCalculations {...}

      设置随机数种子随机产生一个范围在1~20的数字,并且能进行正确的阶乘运算。

    • public class JudgeLabel extends JLabel {...}

      创建一个JudgeLabel类用于显示图标“√”和“×”,若用户在答案区输入的答案正确,则图标为“√”,若用户在答案区输入的答案错误,则图标为“×”。

    • public class Window extends JFrame implements Runnable {...}

      设计非控制台的用户界面,初始化各类按钮,主函数就在这个类里面,程序的执行从主函数里的代码语句开始。

  • 调试结果:
    • 用户界面

    • 设置背景色

    • 输入题目数,范围为1~5,否则出现信息提示,需要重新输入

    • 四则运算开始计时

    • 四则运算交卷判断答案正确与否

    • 限时120秒交卷

    • 阶乘题目开始计时

    • 阶乘交卷判断答案正确与否

  • 详细代码:

(1)计算四则运算式的正确结果。首先遍历存储在operators列表中的所有运算符,当有乘除时,就取出operations列表中位于此符号的左右两侧的操作数,然后进行四则运算。计算结束后要将此运算符和操作了的两个操作数从列表中移除,运算符容器的指针回到原来的位置。遍历完所有的乘号和除号后,再遍历operators列表中的所有加号和减号。

public int generateCorrectAnswer(List
operators, List
operations) { //遍历运算符容器,完成乘除运算 for (int i = 0; i < operators.size(); i++) { String operator = operators.get(i); if (operator.equals("*") || operator.equals("/")) { operators.remove(i); //乘除符号将其从集合中移除 int operateLeft = operations.remove(i); //拿运算符左侧的数字 int operateRight = operations.remove(i); //拿运算符右侧的数字 if (operator.equals("*")) operations.add(i, operateLeft * operateRight); else operations.add(i, operateLeft / operateRight); i--; //运算符容器的指针回到原来的位置,防止跳过下一个运算符 } } //遍历运算符容器,完成加减运算,当运算符容器为空时,运算结束 while (!operators.isEmpty()) { String operator = operators.remove(0); int operateLeft = operations.remove(0); int operateRight = operations.remove(0); if (operator.equals("+")) operateLeft = operateLeft + operateRight; else operateLeft = operateLeft - operateRight; operations.add(0, operateLeft); } return operations.get(0); }
计算四则运算正确结果

 

(2)产生一个范围在1~20的随机数,进行阶乘运算,将最终得到的int整型运算结果result转换成String字符串类型。

//随机产生的阶乘数字    public int generateFormula() {        Random random = new Random();        int num = random.nextInt(19)+1;        //计算阶乘结果        int result = 1;        for (int i = 1; i <= num; i++) {            result*= i;        }        correctAnswerList.add(String.valueOf(result));        return num;    }
随机产生的阶乘数字

 

(3)进行答案判断。首先判断用户进行的是四则运算操作还是阶乘运算操作,接着从答题区answerArea[]中取出用户输入的答案与标准正确答案进行对比,若相同,则在图标区显示“√”,若不相同,则表示用户计算结果不正确,图标区显示“×”,并且将答题区用户原先输入的答案修改为正确答案。

private void markingPapers() {        if(fourCalculation == true) {            for (int i = 0; i < answerArea.length; i++) {                //System.out.println("answer:"+fourCalculations.correctAnswerList.get(i));                //System.out.println("input:"+answerArea[i].getText());                if (answerArea[i].getText().equals(fourCalculations.correctAnswerList.get(i))) {                    judgeLabel[i].setImageUrl("./FourOperations/src/main/img/right.png");   // 正确,显示“√”图标                    numT++;                }                else {                    //answerArea[i].setText("错");                    judgeLabel[i].setImageUrl("./FourOperations/src/main/img/error.png");   // 错误,显示“×”图标                    answerArea[i].setText(fourCalculations.correctAnswerList.get(i));        //将用户输入的错误答案修改为正确答案                    numF++;                }            }        }        else{            for (int i = 0; i < answerArea.length; i++) {                //System.out.println("answer:"+fourCalculations.correctAnswerList.get(i));                //System.out.println("input:"+answerArea[i].getText());                if (answerArea[i].getText().equals(factorialCalculations.correctAnswerList.get(i))) {                    judgeLabel[i].setImageUrl("./FourOperations/src/main/img/right.png");   // 正确,显示“√”图标                    numT++;                }                else {                    //answerArea[i].setText("错");                    judgeLabel[i].setImageUrl("./FourOperations/src/main/img/error.png");   // 错误,显示“×”图标                    answerArea[i].setText(factorialCalculations.correctAnswerList.get(i));    //将用户输入的错误答案修改为正确答案                    numF++;                }            }        }    }
答案判断

 

(4)设置时间线程显示用户答题时间。若用户在120s时仍未答题结束,则弹出提示框提示用户“时间已到,不能答题!”。

public void run() {      //  完成时间计时        int second = 0;        int minute = 0;        String time;        timeLabel.setText("用时 00:00");    // 初始化用时        while (true) {            try {                Thread.sleep(1000);   //  按时间设置            } catch (InterruptedException e) {                e.printStackTrace();            }            second++;            if (second == 60) {                second = 0;                minute++;            }            if (minute < 10) {                time = "用时 " + "0" + minute + ":";            } else {                time = "用时 " + minute + ":";            }            if (second < 10) {                time = time + "0" + second;            } else {                time = time + second;            }            if (minute == 2) {      //  如果时间到120s,用户还未答完题,提示信息                JOptionPane.showMessageDialog(this, "时间已到,不能答题!");                submit();                return;            }            timeLabel.setText(time);        }    }
显示用户时间

 

(5)设置用户界面的背景色。当用户单击“背景色”按钮时,会显示一个颜色选择界面,用户选择合适的背景色之后单击“确认”按钮,背景色就会改变。

//  背景色按钮        JButton changeButton = new JButton("背景色");        changeButton.setBounds(startX, startY+step*5, width, height);        changeButton.addMouseListener(new MouseListener() {            @Override            public void mouseClicked(MouseEvent e) {                Color color = JColorChooser.showDialog(outPanel, "背景色", outPanel.getBackground());    // 弹出颜色界面供用户自由选择背景色                if (color != null) {                   outPanel.setBackground(color);                }            }
设置背景色

 

 

(Web版)四则运算 

 

  • 基本要求
    • 生成题目,单个题目最多不能超过4个运算符,操作数小于100
    • 用户可以输入答案
    • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少
  • 扩展要求(选择方向)
    • 用户答题结束以后,程序可以显示用户答题所用的时间
    • 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
    • 程序可以出单个整数阶乘的题目:如:4!=24
    • 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题
  • 开发环境:IntelliJ Idea
  • 文件名称:web-calSystem.zip
  • 分工:
    • 林溢漫  第1、4功能的实现以及程序的调试与修改小错误
    • 郭晓莹  Web用户界面设计以及第2、3功能的实现
  • 调试结果
    • 首页选择答题数目与类型

    • 选择题目数量进入简单运算,120秒倒计时开始,输入结果

    • 选择题目数量进入阶乘运算,120秒倒计时开始,输入结果对比后判断对错和计算用时,确定返回主页

    • 答题超过120秒时按确认返回主页

 

 总结 

 

  • 结对编程时间统计表:

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

    420

    420

    · Estimate

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

    420

    420

    Development

    开发

    420

    420

    · Analysis

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

    30

    15

    · Design Spec

    生成设计文档

    0

    0

    · Design Review

    设计复审

    20

    40

    · Coding Standard

    代码规范

    120

    120

    · Design

    具体设计

    30

    35

    · Coding

    具体编码

    420

    400

    · Code Review

    代码复审

    100

    60

    · Test

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

    120

    120

    Reporting

    报告

    120

    125

    Test Report

    测试报告

    0

    0

    ·workload

    计算工作量

    420

    400

    ·correction

    并提出过程改进计划

    0

    0

  •  结对照片:

          

  •  总结:
    • 遇到的问题/如何解决

    1. 我们之前是运用c语言写四则运算初版软件,这次作业要将程序改装成一个单机带用户界面(不是控制台)的程序,而我们考虑过是否试用一下之前我们没有接触过的visual studio来完成,但由于上手新软件比较费时间,所以我们最终选择了用IntelliJ Idea重写程序。
    2. 我们使用java重写程序时有纠结是使用jFrame还是用JavaScript来完成可视化界面。我个人比较熟悉html的JavaScript编写,而我的同伴比较熟悉java的编写,后来我们一起分析了一下两种方法的利弊,最后选定了使用java编写的方法。
    3. 由于我对java语言不是特别熟练,在完成我负责的功能的时候有很多方法是通过网上查询的。通过对比不同方法和写法,再选用比较合适的方法写进程序里。
    4. 在web版程序的实现时,在循环输出题目的过程中曾尝试过很多种方法但未能实现,后来向web老师请教后学会了通过循环输出.push()方法才实现了该功能。
    • 收获体会

              这次的结对编程我和我的同伴在完成程序的过程中合作很愉快,我们分工明确,在遇到困难时互相帮助,并且会自己查找不同的资料来解决编程的过程中所遇到的问题。在完成了java版的四则运算程序后,也抱着尝试和学习的想法制作了web版的四则运算,从中我们也学习到了新的JavaScript的知识与逻辑运用。

转载于:https://www.cnblogs.com/kunnkkk/p/9809435.html

你可能感兴趣的文章
spring-boot-devtools在Idea中热部署方法
查看>>
对服务器“防护过度”导致恢复服务过程中引发一系列问题
查看>>
常见字符串函数
查看>>
逻辑三层ORM通用类库 ThreeLayerLib.dll v1.0
查看>>
linux 处理文件名中带空格的方法
查看>>
51CTO稿酬标准2016版正式发布!
查看>>
数据库存储表情(设置utf8mb4编码)
查看>>
Java——容器(Auto-boxing/unboxing)
查看>>
反向输出链表
查看>>
poll---socket客户/服务器端编程
查看>>
调整数组中奇数偶数位置
查看>>
数据库SQL优化大总结之 百万级数据库优化方案
查看>>
Lua For Windows 环境配置及使sciTE支持中文
查看>>
找回密码测试注意
查看>>
步进器和分组按钮
查看>>
php 字符串转成二维数组
查看>>
Linux通配符和正则表达式的异同
查看>>
GCD 使用中需要注意的细节以及容易混淆的知识点
查看>>
CCNA学习笔记--VLAN划分及vlan间通信
查看>>
李新海:不甘心,就让自己更忙一点
查看>>