• 软工15结对编程练习


    1.项目组员

    郭琪容201521123033 ; 吴玲201521123035

    2.项目开发的码云地址

    https://gitee.com/gqirong/soft_work_pair.git

    3.结对照片

    4.PSP

    PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
    Planning 计划 10 5
    Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 8 5
    Development 开发 240 270
    Analysis 需求分析 (包括学习新技术) 6 5
    Design Spec 生成设计文档 10 0
    Design Review 设计复审 8 10
    Coding Standard 代码规范 10 10
    Design 具体设计 10 12
    Coding 具体编码 36 21
    Code Review 代码复审 15 11
    Test 测试(自我测试,修改代码,提交修改) 30 50
    Reporting 报告 30 20
    · 测试报告 3 2
    · 计算工作量 10 6
    · 并提出过程改进计划 10 15

    5.需求分析

    源代码中,语言切换,基础四则运算,正确率统计等做的很好,所以,在此基础上,新增了括号操作符;对用户输入题数的内容设置了容错功能,只可以输入1~10之间的数字,输入字母或者不在范围内的数字将无法点击确定按钮;实现了错题复习功能,可以将用户使用以来做错的题目保存在文档中,点击“复习”按钮,生成的题目将全部是之前用户做错的题目,达到用户复习的目的

    6.思维导图

    7.编码规范文档

    Arithmetic类

    astr 返回答案字符串

    qstr 返回问题字符串

    int_operation() 整数计算函数

    fra_operation() 分数计算函数

    common_divisor(int m,int n) 公约数计算函数

    toString() 输出函数

    Frame类

    hs 实例化History

    hh 实例化QA_List

    timer 实例化Work_Time

    Time 计时器动态窗口

    answer1~10 输入窗口

    Review 复习按钮

    question1~10 题目显示标签

    Right_answer1~10 正确答案显示标签

    Tip1~10 提示正确与否标签

    Time_cost 所花时间显示标签

    Right_percent 正确率显示标签

    Set_question 开始按钮

    jLabel5 历史正确题数

    jLabel7 历史总题数

    rn 单次正确题数

    tot 单次总题数

    Frame() Frame构造函数

    initComponents() 窗体显示

    xxxClicked(KeyEvent evt) 点击事件

    KeyPressed(JLabel i,JLabel j,JLabel l,int x,JTextField k) 点击事件批量处理函数

    Hide() 使不需要的输入窗口关闭

    Tip(String answer,int i)提示对错并计入

    Histroy类

    qstr 问题字符串

    astr 答案字符串

    str 答案+问题字符串(写入文件)

    str2 正确题数+总题数字符串(写入文件)

    tot 总题数

    rn 正确题数

    qstrlist 问题字符串列(读入文件)

    astrlist 答案字符串列(读入文件)

    scan(String qstr,String astr)

    qstr+" "+astr

    scan2(int tot,int rn)

    tot+" "+rn

    Histroy_create() 历史文档生成

    Histroy_save() 存储历史题目与答案

    Histroy_saveNum() 存储历史题目数目

    Histroy_read() 读入历史题目与答案

    History_num() 读入历史题目数目

    QA_List类

    i 加入列题目个数

    Qusetion 问题字符串列

    Answer 答案字符串列

    QA_List() QA_List构造函数

    Test_Number类

    i 显示Test_Number窗体次数

    l 语言转化参数标识

    Cancel_Button 取消按钮

    Sure_Button 确定按钮

    English 英文界面标签

    Simplified_Chinese 简体中文界面标签

    Traditional_Chinese 繁体中文界面标签

    Number 所需题数

    Test_Number() Test_Number构造函数

    initComponents() Test_Number窗体显示

    xxxClicked(KeyEvent evt) 点击事件

    Test类

    main(String[] args)

    Work_Time类

    x 00:00.x

    y 00:y.00

    z z:00.00

    8.代码展示

    public class Test {
    
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);// 创建输入流扫描器
    		System.out.println("请输入生成题目的个数:");// 提示用户输入
    		
    //		String num = scanner.nextLine();// 获取用户输入的一行文本
    		
    		int num = scanner.nextInt();//输入一个整数
    	    // 打印对输入文本的描述
    	    List<String> list = new ArrayList<String>();
    	    list.add("+");
    	    list.add("-");
    	    list.add("*");
    	    list.add("/");
    	    List<String> repeat = new ArrayList<String>();
    	    for(int i=0;i<num;i++){
    	    	int index = (int) (Math.random()*4);
    	 	    //从list中取出运算符
    	 	    String operator = list.get(index);
    	 	    //随机生成参与运算的两位数
    	 	   int num1 = (int) (Math.random()*100);
    	 	   int num2 = (int) (Math.random()*100);
    	 	   String work = null;
    	 	   String ob_work = null;
    	 	    //随机获取运算符
    	 	    if("+".equals(operator)){
    	 	    	work = num1+"+"+num2;
    	 	    	ob_work = num2+"+"+num1;
    	 	    	if(!repeat.contains(work) && !repeat.contains(ob_work)){
    	 	    		System.out.println(work+"="+(num1+num2));
    	 	    		repeat.add(work);
    	 	    	}
    	 	    }else if("-".equals(operator)){
    	 	    	work = num1+"-"+num2;
    	 	    	ob_work = num2+"-"+num1;
    	 	    	if(!repeat.contains(work) && !repeat.contains(ob_work)){
    	 	    		System.out.println(work+"="+(num1-num2));
    	 	    		repeat.add(work);
    	 	    	}
    	 	    }else if("*".equals(operator)){
    	 	    	work = num1+"*"+num2;
    	 	    	ob_work = num2+"*"+num1;
    	 	    	if(!repeat.contains(work) && !repeat.contains(ob_work)){
    	 	    		System.out.println(work+"="+(num1*num2));
    	 	    		repeat.add(work);
    	 	    	}
    	 	    }else if("/".equals(operator)){
    	 	    	if(num2 != 0){
    	 	    		work = num1+"/"+num2;
    	 	    		ob_work = num2+"/"+num1;
    	 	    	}
    	 	    	if(!repeat.contains(work) && !repeat.contains(ob_work)){
    	 	    		//结果保留两位小数
    	 	    		DecimalFormat df = new DecimalFormat("####0.00");
    	 	    		System.out.println(work+"="+(df.format((float)num1/num2)));
    	 	    		repeat.add(work);
    	 	    	}
    	 	    }
    	    }
    	   
    	    
    	}
    }
    

    9.运行截图



    10.码云提交记录

    11.小结感受

    我们两个成员的编程能力都不是很好,所以此次的作业难度对我们来讲难度颇高,但是我们还是努力完成一些我们力所能及的功能。这次的结对编程,是第一次尝试这种编程方式,一个人的编程工作量比较大,有些函数其实每个人都写的出来,但是一个人的话就要写很多,比较繁琐,两个人的话就能解决这些问题,互相监督。不好的地方在于要花大量的时间沟通,要让对方理解,比较耗费时间。而且,这次实验时间安排不够合理,导致后面做的很匆忙,后面的作业会注意这方面的问题的。

  • 相关阅读:
    python输出shell命令执行结果
    python实验二:字符串排序
    python学习系列
    linux命令系列目录
    git初步
    HTML基础教程 七 高级
    HTML/CSS基础教程 六
    linux命令---sed
    linux命令---unzip
    模块
  • 原文地址:https://www.cnblogs.com/gqirong/p/8642546.html
Copyright © 2020-2023  润新知