zoukankan      html  css  js  c++  java
  • 结对编程-四则运算

    一、结对成员:

    蔡少杭 201421122111

    XXX XXXXXXXXXXXX

    项目开发的coding.net 地址:https://git.coding.net/HangZhe/HomeWork3.git

    二、题目描述:

    在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI,成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

    1. 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。

    2. 有计时功能,能显示用户开始答题后的消耗时间。

    3. 界面支持中文简体/中文繁体/英语,用户可以选择一种;

    三、项目实现:

    1、需求分析

    • 首先需要一个GUI界面,方便用户操作,需要用到按钮,文本框,文字等控件。
    • 我给自己分派的任务是完成记录用户的对错总数,每次打开程序都能加载上次的对错总数。
    • 她的任务是完成计时的功能,在点击开始后开始计时,在用户点击提交或答完全部题目后停止计时。
    • 语言选择,设置为三种,中文简体,中文繁体和英文。

    2、程序设计

      主要功能分为:生成题目、记录对错数、计时、语言切换。其中计算使用的是第一次作业中的生成四则运算表达式的方式。对错数打算是用文件记录,每次运行的开始时候先从文件读取对错数,每次答对答错都会对对错数进行修改。计时功能,当用户点击开始按钮开始答题时开始计时,结束答题或者答完所有题目后停止计时,使用的是C#中设置事件触发时间间隔的方式。语言切换默认开始是中文,当用户选择对应的语言的时候会做相应的切换,计划使用切换配置文件的方式来修改所有控件的文本。

    3、代码展示

    记录和读取对措数

    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;
    }

    4、程序运行

    1.主界面

     

    2.开始之前必须输入题目数和表达式中数的运算范围,不大于这个值

    3.开始答题,同时开始计时,答错答对的题数是提取自文件的,随着用户的答题结果而发生变化

    4.用户输入答案,点击确定进行比较,正确就答对题数加1,错误就答错题数加1,然后点击下一题换题目

     

    5.题目做完或者结束答题,结束计时

      

    5、小结感受

    本次作业是在第一次作业的基础上制作出图形界面,使用的是C#语言编写的窗体运用程序,计时和对错数记录的功能都已经实现,语言切换方面遇到字体资源无法加载的问题还在解决。

    给我最大的感受就是团队协作真的很有趣,刚开始确实会有一些编码的不统一而产生分歧,但是随着双方规范的约定,就会很快适应对方的代码,也就能成功地整合。

    四、运用“汉堡包”的方式,评价结对伙伴:

    优点:队友的思维很活跃,我在思考一个问题没有思路时,她能给出我未曾想到的解决思路,瞬间让我恍然大悟。

    缺点:一些变量名字的定义不是很好理解,需要询问后才能知道。

    希望她提高的地方:在定义变量名字时尽量定义一些对方能瞬间理解的名字。

    五、描述结对过程:

    1.阅读作业的要求,确定这次作业的所有需求。

    2.根据任务量和各自熟悉的领域划分,各自负责对应的功能模块。

    3.制定编码规范,约定参数传递的方式,使用的语言,环境,开发模式等等。

    4.开始各自的开发,期间遇到难以解决的问题就提出,共同讨论和解决。

    5.完成各自功能模块后,整合代码,解决整合过程中遇到的问题。

    6.测试程序,排查BUG。

    六、展示PSP:

    PSP2.1 Personal Software Process Stages Time Senior Student Time
    Planning 计划 20 15
    · Estimate 估计这个任务需要多少时间 24 20
    Development 开发 500 650
    · Analysis 需求分析 (包括学习新技术) 30 60
    · Design Spec 生成设计文档 30 10
    · Design Review 设计复审 30 15
    · Coding Standard 代码规范 20 20
    · Design 具体设计 25 32
    · Coding 具体编码 200 350
    · Code Review 代码复审 20 25
    · Test 测试(自我测试,修改代码,提交修改) 30 25
    Reporting 报告 30 45
    · 测试报告 25 15
    · 计算工作量 20 12
    · 并提出过程改进计划 20 10
  • 相关阅读:
    Codeforces Round #113 (Div. 2) Tetrahedron(滚动DP)
    Codeforces Round #300 Quasi Binary(DP)
    Codeforces Round #119 (Div. 2) Cut Ribbon(DP)
    Codeforces Round #260 (Div. 1) Boredom(DP)
    Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Cards Sorting(树状数组)
    Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Office Keys(思维)
    图灵杯 E 简单的RMQ(UVA 11235)(RMQ)
    qwb与学姐 (带秩并查集)
    计蒜客 UCloud 的安全秘钥(困难)(哈希)
    第八届山东省ACM大学生程序设计竞赛个人总结
  • 原文地址:https://www.cnblogs.com/HangZhe/p/7706277.html
Copyright © 2011-2022 走看看