一、实验目标:
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