zoukankan      html  css  js  c++  java
  • 软工网络15结对编程练习

    1、项目成员及链接

    丁 蓉 201521123070 博客链接:http://www.cnblogs.com/TSlover/
    包梦榕 201521123068 博客链接:https://www.cnblogs.com/bmr666/
    结对编程码云地址:https://gitee.com/drbmr/four_arithmetic_generator


    2、改进现有代码

    2.功能改进与扩展
    增加括号操作符、减少重复题目


    3、程序设计

    1.代码规范(沿用原代码规范)

    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
    

    2.类图

    3.主要代码展示

    • 计时功能

       public class Work_Time extends TimerTask{
      
       static int y=0;
       static int z=0;
       @Override
       public void run() {
       	// TODO Auto-generated method stub
        String str_second =Frame.Time.getText().substring(6);
        int x = Integer.parseInt(str_second);
        if(Frame.Time.getText().equals("00:00.00")){
       	x=0;y=0;z=0;
        }
           x++;
           if(z<10){
           	if(y<10)
               {
               	if(x<100)
           		Frame.Time.setText("0"+z+":0"+y+"."+x);
       	        if(x==100)
       	        {
       	        	y++;
       	        	Frame.Time.setText("0"+z+":0"+y+".0");
       	        	x=0;
       	        }
               }
               if(y<60&&y>=10)
               {
               	if(x<100)
               		Frame.Time.setText("0"+z+":"+y+"."+x);
       	        if(x==100)
       	        {
       	        	y++;
       	        	Frame.Time.setText("0"+z+":"+y+".0");
       	        	x=0;
       	        }
               }
               if(y==60){
               	y=0;
               	x=0;
               	z++;
               }
           }
           if(z<60&&z>=10){
           	if(y<10)
               {
               	if(x<100)
               		Frame.Time.setText(z+":0"+y+"."+x);
       	        if(x==100)
       	        {
       	        	y++;
       	        	Frame.Time.setText(z+":0"+y+".0");
       	        	x=0;
       	        }
               }
               if(y<60&&y>=10)
               {
               	if(x<100)
               		Frame.Time.setText(z+":"+y+"."+x);
       	        if(x==100)
       	        {
       	        	y++;
       	        	Frame.Time.setText(z+":"+y+".0");
       	        	x=0;
       	        }
               }
               if(y==60){
               	y=0;
               	x=0;
               	z++;
               }
               else
               {
               	Frame.Time.setText("都一小时了放弃吧");
               }
           }
       }
       }
      
    • 语言切换

       private void         
       Simplified_ChineseMouseClicked(java.awt.event.MouseEve nt evt) {                                                
       jLabel6.setText("语言:");
       jLabel1.setText("所需习题数:");
       jLabel2.setText("(1-10之内)");
       Cancel_Button.setText("取消");
       Sure_Button.setText("确定");
       l=0;
       }                                               
       private void Traditional_ChineseMouseClicked (java.awt.event.MouseEvent evt) {                               	    jLabel6.setText("語言:");
       jLabel1.setText("所需習題數:");
       jLabel2.setText("(1-10之內)");
       Cancel_Button.setText("取消");
       Sure_Button.setText("確定");
       l=1;
       }                                                
       private void  EnglishMouseClicked (java.awt.event.MouseEvent evt) {                             
       jLabel6.setText("Language:");
       jLabel1.setText("How many questions:");
       jLabel2.setText("(1-10)");
       Cancel_Button.setText("Cancel");
       Sure_Button.setText("OK");
       l=2;
       } 
      
    • 算术运算

        public class Arithmetic {
        int a = new Random().nextInt(4);
        int b = new Random().nextInt(10)%(10-1+1) + 1;
        int c = new Random().nextInt(10)%(10-2+1) + 2;
        int d = new Random().nextInt(10)%(10-1+1) + 1;
        int e = new Random().nextInt(10)%(10-2+1) + 2;
        int f = new Random().nextInt(100);
        int g = new Random().nextInt(100);
        String astr="";
        String qstr="";
        boolean x;
        public Arithmetic(boolean x) {
        this.x=x;
        }
        public String int_operation()
        {
       int result = 0;
       if(a==0)
       	result=f+g;
       if(a==1)
       	result=f-g;
       if(a==2)
       	result=f*g;
       astr = String.valueOf( result);
       if(a==3)
       {
       	if(g==0)
       	{
       		astr=int_operation();
       		return astr;
       	}
       	else
       	{
       		if(g!=0&&g!=1){
       			int d=common_divisor(f,g);
       			f=f/d;
       			g=g/d;
       			astr = (f+"/"+g);
       		}
       		if(g==1)
       			astr=(""+f);
       	}
       	
       }
       return astr;
       }
       public String fra_operation(){
       this.b = new Random().nextInt(10)%(10-1+1) + 1;
       this.c = new Random().nextInt(10)%(10-2+1) + 2;
       this.d = new Random().nextInt(10)%(10-1+1) + 1;
       this.e = new Random().nextInt(10)%(10-2+1) + 2;
       if(c<b||e<d||c%b==0||e%d==0)
       {
       	astr=fra_operation();
       	return astr;
       }
       	
       int fz=1,fm=c*e;
       if(a==0)
       	fz=b*e+c*d;
       if(a==1){
       	fz=b*e-c*d;
       	if(fz==0)
       	{
       		return astr=("0");
       	}
       }
       	
       if(a==2)
       	fz=b*d;
       if(a==3)
       {
       	fz=b*e;
       	fm=c*d;
       }
       int f=common_divisor(fm,fz);
       if(f>0){
       	fm=fm/f;
       	fz=fz/f;
       }
       if(f<0){
       	fm=-fm/f;
       	fz=-fz/f;
       }
       astr = (fz+"/"+fm);
       return astr;
       }
       public static int common_divisor(int m,int n)
       {
       while(m%n!=0){
       	int t=m%n;
       	m=n;
       	n=t;
       }
       return n;
       }
      
    • 题数累计

       public void Histroy_read() throwsFileNotFoundException
       { 
       Scanner in = new Scanner(newFile("d:\Myapp\histroy.
       txt"));
       //为历史信息.tit这个File创建一个扫描器in
       while(in.hasNextLine()){
       	String line =in.nextLine();//读出历史信息.txt的下 一行
       	Scanner lineScanner = new Scanner(line);//为每一行建立一个扫描器
       	lineScanner.useDelimiter(" ");//使用空格作为分隔符
       	qstr = lineScanner.next();//问题
       	astr = lineScanner.next();//答案
       	qstrlist.add(qstr);
       	astrlist.add(astr);
       }
       in.close();
       }
       public void History_num() throws FileNotFoundException        {
       Scanner in = new Scanner(new File("d:\Myapp\histroy_num.txt"));//为历史信息.tit这个File创建一个扫描器in
       while(in.hasNextLine()){
       	String line = in.nextLine();//读出历史信息.txt的下一行
       	Scanner lineScanner = new Scanner(line);//为每一行建立一个扫描器
       	lineScanner.useDelimiter(" ");//使用空格作为分隔符
       	tot = Integer.parseInt(lineScanner.next());//问题
       	rn = Integer.parseInt(lineScanner.next());//答案
       }
       in.close();
       }
       }
      

    4、运行结果显示





    5、PSP表格

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

    6、结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(附上描述结对的过程,提供非摆拍的两人在讨论、细化和编程时的结对照片)

    • 小结
      此次结对编程的过程中,我和舍友蓉一起组队,两个人自然会有不同的想法和习惯,但是我们很和谐,互相迁就互相配合,这也为我们完成任务节约了时间,充分感受到了1+1>2的效果。由于编程基础不太好,希望以后多积累经验,能完成的更好。

    • 结对照片

  • 相关阅读:
    pandas DataFrame(5)-合并DataFrame与Series
    pandas Series的sort_values()方法
    np.corrcoef()方法计算数据皮尔逊积矩相关系数(Pearson's r)
    switch case 多个处理方式涉及到销售优惠折扣方案处理
    标量函数取规则名称
    调用企业微信接口发送消息
    C#中NameValueCollection类用法 读取配置信息
    .NET Datable分解数据表
    触发器批量业务操作实现方式 update触发器用游标处理
    Lamda OrderBy 排序问题
  • 原文地址:https://www.cnblogs.com/bmr666/p/8645883.html
Copyright © 2011-2022 走看看