• 实验二:结对编程--第二阶段


    一、实验目标:

    1)体验敏捷开发中的两人合作。

    2)进一步提高个人编程技巧与实践。

    二 、实验内容:

    1)根据以下问题描述,练习结对编程(pair programming)实践;

    2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求。

    3)要求在结对编程工作期间,两人的角色至少切换 4 次;

    4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

    三、实验内容:

    1、代码规范:

    实验采用j基于JAVA的GUI编程,需要调用库中大量的包,以实现程序的界面化处理。

    编写JAVA语言的代码规范有:

    命名规范:

      变量和函数为小驼峰法标识, 即除第一个单词之外,其他单词首字母大写

      全局变量为大写

      常量 (如 PI) 为大写

    对象定义的规则:

      将左花括号与类名放在同一行。

      冒号与属性值间有个空格。

      字符串使用双引号,数字不需要。

      最后一个属性-值对后面不要添加逗号。

      将右花括号独立放在一行,并以分号作为结束符号。

    2.程序的总体设计

     3、结对编程过程

    编程之前,我和周宗逸决定使用GUI实现该功能。

    一来我们觉得用界面的方式实现该项目,在人机交互方面相较于传统的命令行式编程有无可比拟的优势。虽然在GUI不是实现界面编程的最佳途径,但是GUI中包括了大量的包和现成的函数可供调用。因为我在暑假因为课程设计的需要,做过关于GUI方面的编程,所以对这方面有一定的了解,所以在完成相关框架样式的搭建上来说,就有比较有经验。而我的搭档则完成关于四则运算具体步骤的实施,因为这部分大多涉及基础语法的应用,但是工作量较大,需要考虑的东西较多,对于我的搭档来说是一个利弊兼而有之的挑战。

    我们在结对编程过程中,用QQ视频通话实时共享电脑编程实况,目前来看是最直接的能够了解彼此编程进程和解决当下问题的方式。

     4、部分代码

    记录和读取对措数

    if (!File.Exists(@"E:\result.txt"))
    {
          FileStream fss = new FileStream("E:\result.txt", FileMode.Create);
          StreamWriter sww = new StreamWriter(fss);
          //开始写入
          sww.WriteLine("0");
          sww.WriteLine("0");
          //清空缓冲区
          sww.Flush();
          //关闭流
          sww.Close();
          fss.Close();
    }
    
          FileStream fs = new FileStream("E:\result.txt", FileMode.Open, FileAccess.Read);
          StreamReader read = new StreamReader(fs, Encoding.Default);
          string strReadline;
          while ((strReadline = read.ReadLine()) != null)
          {
               result_list.Add(strReadline);
          }
    
          read.Close();
          fs.Close();
    
          right_number=Convert.ToInt32(result_list[0]);
          wrong_number= Convert.ToInt32(result_list[1]);
          this.right_show_text.Text = right_number.ToString();
          this.wrong_show_text.Text = wrong_number.ToString();
    
          Program.right_wrong_init(right_number, wrong_number);

    修改对错数

    if (question_num <a)
    {
         if (is_count)
         {
               is_count = false;
               this.anwser.Text = "";
    
                      
               Program.gen();
               question_num++;
               this.count_text.Text = "第" + question_num.ToString() + "题";
               this.label7.Text = Program.getNum();
          }
          else
          {      
                 Program.gen();
                 question_num++;   
                 this.count_text.Text = "第" + question_num.ToString() + "题";
                 this.label7.Text = Program.getNum();
    
                 this.right_show_text.Text = Program.get_right_count().ToString();
                 Program.add_wrong_count();
                 this.wrong_show_text.Text = Program.get_wrong_count().ToString();
    
    
                 FileStream fs3 = new FileStream("E:\result.txt", FileMode.Create);
                 StreamWriter sw3 = new StreamWriter(fs3);
                 //开始写入
                        sw3.WriteLine(Program.get_right_count().ToString());
                        sw3.WriteLine(Program.get_wrong_count().ToString());
                  //清空缓冲区
                  w3.Flush();
                  //关闭流
                  sw3.Close();
                  fs3.Close();
    }

    计时

    public Form1()
    {
          InitializeComponent();
    
          //timer控件可用
          this.timer1.Enabled = true;
    
          //设置timer控件的Tick事件触发的时间间隔
          this.timer1.Interval = 1800;
    
          //停止计时
          this.timer1.Stop();
    }    

     //开始计时 this.timer1.Start(); 

    private void timer1_Tick(object sender, EventArgs e)
    {
                second_r++;
                if (second_r > 9)
                {
                    second_r = 0;
                    secend_l++;
                }
                if (secend_l > 5)
                {
                    secend_l = 0;
                    minute_r++;
                }
                if (minute_r > 9)
                {
                    minute_r = 0;
                    minute_l++;
                }
                time = minute_l.ToString()+minute_r.ToString()+":" +secend_l.ToString()+second_r.ToString();
                this.time_show_text.Text = time;
    }

      5、运行结果

    1)主界面

     2)超出预设范围报错

    3)从文件调出题目答题

    4)结果与答案的比对

     5)题目做完和计时结束

    6)界面中涉及的语言问题,我们最后放弃了,因为代码复写的东西太多,反而使得整个程序显示的冗长。

    四、实验总结

        1.在进行代码编辑之前的准备工作,我们就面临了很多问题,比如模块下载不成功、模块导入不成功等。寻找能正真解决问题的方法也比较漫长,不是方法不适用就是方法不正确,我们参考多个平台(百度、CSDN、博客园等)最终找到解决问题的方法。

        2.由于之前学习GUI编程是比较浅层次的,由于GUI做界面会存在很多问题(格式调节不易,容错率较低,代码耦合性高)等问题。需要我们借鉴很多网络上的范本,参考别人数据结构,仿照前人精简的模块,写自己的代码。

        3.GUI最头疼的问题就是库、包与函数的调用,要调用的对象不存在,需要换或者下载对应的对象(本次编程涉及的东西不多,暂且未碰到此类棘手的问题)。代码在编译修改的每阶段都很头疼,因为很多东西根本不知道具体是干嘛的,需要一一百度,找很多资料。

    结对编程(阶段一):https://www.cnblogs.com/alanandpython/p/12545811.html

    成员博客地址&仓库地址

    1 周宗逸:https://www.cnblogs.com/zzynb/

    2 周乐天 https://www.cnblogs.com/alanandpython/


    3 仓库地址:https://www.github.com/zhoudashuaibi/homeworkillers

  • 相关阅读:
    ios入门笔记(创建隐式首选项,实现系统设置,实现文件系统存储)
    ios开发(表视图)
    Android上使用OpenglES2.0遇到的一点问题
    Android平台对H264视频硬解码
    Java GC机制和对象Finalize方法的一点总结
    JVM GC之一找出不可达对象并回收
    docker 使用Data Volume 共享文件
    sscanf函数用法详解
    va_start和va_end使用详解
    NDK 的helloworld步奏
  • 原文地址:https://www.cnblogs.com/alanandpython/p/12624233.html
Copyright © 2020-2023  润新知