结对编程-四则运算
一、结对成员:
蔡少杭 201421122111
项目开发的coding.net 地址:https://git.coding.net/HangZhe/HomeWork3.git
二、题目描述:
在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI,成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
-
记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
-
有计时功能,能显示用户开始答题后的消耗时间。
-
界面支持中文简体/中文繁体/英语,用户可以选择一种;
三、项目实现:
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 |