• 软工随堂小测——四则运算


    我说的都队

    031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬涛


    一、算法流程

    二、算法功能

    • 能对0--10之间的整数进行四则运算(加减乘除)
    • 程序能接收用户输入的整数答案,并判断对错
    • 支持真分数的四则运算
    • 程序结束时,统计出答对、答错的题目数量。

    三、算法分析

    类CaculatorView: UI界面的加载,程序的主体框架,对运算式的正确答案以及用户给定的答案进行检验,并返回检验结果。

    类Equation: 随机成成运算式,并返回

    类Caculate: 对给定的运算式,计算出结果并返回

    类MatchAnswer: 对用户的输入答案与正确答案进行检验,并返回检验结果

    类Fraction: 实现真分数的四则运算

    /**
     * 程序的UI界面,对用户的输入输出进行判定运算,并给出相应的提示
     * 程序的主框架,调用了其他类封装好的静态方法
     * @author 陈燊
     *
     */
    public class CaculatorView extends JFrame implements ActionListener {
    
    	/** 窗口的宽度 */
    	public static final int WIDTH = 810;
    	/** 窗口的高度 */
    	public static final int HEIGTH = 500;//窗口的高度
    	
    	//swing部件的定义
    	.
    	.
    	.
    
    	private StringBuffer equationStrs = new StringBuffer();//表达式的字符串缓冲区
    	private StringBuffer resultStrs = new StringBuffer();//用户给定答案的字符串缓冲区
    	private StringBuffer matchOutputStrs = new StringBuffer();//检测结果的字符串缓冲区
    
    	private String[] userResult = new String[100];//用户给定的答案
    	private String[] rightResult = new String[100];//运算式的正确答案
    	private String[] expression = new String[100];//随机生成的表达式
    	private int ensureNumber;//运算式的题量
    		
    	/**
    	 * CaculatorView的构造方法
    	 */
    	public CaculatorView() {
    		
    		//设置标题和大小
    		this.setTitle("运算器");
    		this.setSize(WIDTH,HEIGTH);
    		
    		//swing部件的初始化
    		.
    		.
    		.
    		
    		//生成表达式的数据初始化方法
    		Equation.createEquation();
    		
    	}
    	
    	public static void main(String[] args) throws IOException{
    		new CaculatorView();
    	}
    	
    	/**
    	 * 所有数据的重置
    	 * @param flag
    	 * flag为true,表示点击了重置按钮,则numberText清空
    	 * flag为false,表示点击了确定按钮,则numberText不清空
    	 */
    	void resetDatas(boolean flag) {
    		if (flag) {
    			numberText.setText("");
    		}
    		equationInput.setText("");
    		answerInput.setText("");
    		matchAnswer.setText("");
    		ensureNumber = 0;
    		equationStrs.delete(0, equationStrs.length());
    		resultStrs.delete(0, resultStrs.length());
    		matchOutputStrs.delete(0, matchOutputStrs.length());
    		userResult = new String[100];
    		rightResult = new String[100];
    		expression = new String[100];
    		MatchAnswer.setRightNums(0);
    		MatchAnswer.setWrongNums(0);
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e) {
    
    		String button = e.getActionCommand();
    		if (button.equals("确认")) {
    			resetDatas(false);
    			String numberStr = numberText.getText();
    			
    			if (numberStr.length() != 0) {
    				
    				/**
    				 * 对输入题量进行判断,上限为100题,如果超出或则小于等于0题,都会给出相应提示
    				 * 当输入正确时,把输入转化为int型保存在ensureNumber里
    				 */
    				if ((Integer.parseInt(numberStr) > 100) || (Integer.parseInt(numberStr) <= 0)) {
    					JOptionPane.showMessageDialog(null, "题量最多为100题!请重新输入!", "提示", JOptionPane.INFORMATION_MESSAGE);
    				} else {
    					ensureNumber = Integer.parseInt(numberStr);
    				}
    			} else {
    				JOptionPane.showMessageDialog(null, "请先输入题量!", "提示", JOptionPane.INFORMATION_MESSAGE);
    			}
    			
    			for (int i = 0; i < ensureNumber; i ++) {
    				
    				/**
    				 * 调用Equation类的getEquation()生成表达式方法
    				 * 并把生成的表达式保存在expression数组里面
    				 */
    				expression[i] = Equation.getEquation();
    				equationStrs.append("题" +  (i + 1) + ": " + expression[i] + "
    ");
    		  
    				/**
    				 * 调用Calculate类的getAnswer()方法
    				 * 计算出运算式的答案并保存在rightResult数组里面
    				 */
    		        rightResult[i] = Calculate.getAnswer(expression[i]);
    		        resultStrs.append("题" +  (i + 1) + ": " + rightResult[i] + "
    ");
    			}
    			equationInput.setText(equationStrs.toString());			
    		} else if (button.equals("确认答案")) {
    			String numberStr = numberText.getText();
    			
    			/**
    			 * 对输入进行判断,当题量或则表达式未生成时,给出相应错误提示
    			 */
    			if (numberStr.length() == 0) {
    				JOptionPane.showMessageDialog(null, "请先输入题量!", "提示", JOptionPane.INFORMATION_MESSAGE);
    			} else if(ensureNumber == 0) {
    				JOptionPane.showMessageDialog(null, "请先生成表达式!", "提示", JOptionPane.INFORMATION_MESSAGE);
    			} else {
    				userResult = answerInput.getText().split("
    ");
    				
    				/**
    				 * 对用户给定的答案数量进行判断
    				 * 当答案数小于或大于运算式的数量时,给出相应错误提示
    				 */
    				if (userResult.length < ensureNumber) {
    					JOptionPane.showMessageDialog(null, "答案数量过少,请给出正确数量的答案!", "提示", JOptionPane.INFORMATION_MESSAGE);
    				} else if (userResult.length > ensureNumber) {
    					JOptionPane.showMessageDialog(null, "答案数量过多,请给出正确数量的答案!", "提示", JOptionPane.INFORMATION_MESSAGE);
    				} else {
    					
    					/**
    					 * 调用MatchAnswer类的match()方法,对用户给定的答案进行检验
    					 * 并把检验结果保存到matchOutputStrs字符缓冲区里
    					 * 给出正确和错误的答案数
    					 */
    					for (int i = 0; i < ensureNumber; i ++) {
    						matchOutputStrs.append(MatchAnswer.match(rightResult[i], userResult[i]));
    					}
    					matchOutputStrs.append("
    共有 " + ensureNumber + " 题运算式
    ");
    					matchOutputStrs.append("正确答案: " + MatchAnswer.getRightNums() + "题
    ");
    					matchOutputStrs.append("错误答案: " + MatchAnswer.getWrongNums() + "题
    ");
    					if (MatchAnswer.getRightNums() == ensureNumber) {
    						matchOutputStrs.append("厉害了我的哥!你答对了所有题目!
    ");
    					} else if (MatchAnswer.getRightNums() == 0) {
    						matchOutputStrs.append("一题都没答对。。。小学校长想你了!");
    					} else {
    						matchOutputStrs.append("谢谢参与,欢迎再次挑战!");
    					}
    					matchAnswer.setText(matchOutputStrs.toString());
    				}
    			}
    		} else if (button.equals("重置")) {
    			/**
    			 * 清空所有文本框,以及所有数据
    			 */
    			resetDatas(true);
    		}	
    		
    	}
    
    }
    

    四、程序运行流程GIF图演示

    五、单元测试

    • 分数加减法的单元测试

    • 答案检验的单元测试

    六、结果测试

    测试样例一:答案全部正确

    测试样例二:答案全部错误

    测试样例三:部分正确部分错误

    七、组员分工和Git提交记录

    • 陈 燊(031402304)图形化界面输入、比较结果并输出

    • 陈齐民(031402203)程序流图、main函数

    • 黄炜伟(031402209)生成计算题

    • 郑扬涛(031402233)计算结果

    • 胡心颖(031402337)分数的加减乘除

    • 许玲玲(031402342)单元测试

    • 王婷婷(031402341)博客编写

    八、Github项目记录

    九、分支合并记录

  • 相关阅读:
    stand meeting
    ubuntu14.04安装百度云Bcloud
    4.1Reduction模型
    3.3分析卷积乘法优化的复用
    3.2 卷积
    3.1 全局存储带宽与合并访问 -- Global Memory(DRAM) bandwidth and memory coalesce
    AngularJS初探:搭建PhoneCat项目的开发与测试环境
    Centos 安装 NodeJS
    git安装
    CentOS安装VSFTP及配置用户
  • 原文地址:https://www.cnblogs.com/wangtingting007/p/6128206.html
Copyright © 2020-2023  润新知