PairProgramming 个人第三次作业
- Github地址:主仓库 https://github.com/Yanyixiao/PairProgramming.git
 - Partner博客园地址: https://www.cnblogs.com/shiki510/p/11603964.html
 
结对照片:国庆假期前几天,我和我的partner分隔两地,我在自贡吃冷吃兔,他回到了青海的家里,所以我们用QQ电话沟通了合作开发的具体事项,QQ电话截图在Partner的博客作业里。
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) | 
|---|---|---|---|
| · Planning | · 计划 | 10 | 10 | 
| · Estimate | · 估计这个任务需要多少时间 | 5 | 5 | 
| Development | 开发 | 60 | 55 | 
| · Analysis | · 需求分析 (包括学习新技术) | 10 | 15 | 
| · Design Spec | · 生成设计文档 | 5 | 10 | 
| · Design Review | · 设计复审 (和同事审核设计文档) | 10 | 10 | 
| · Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 15 | 
| · Design | · 具体设计 | 30 | 20 | 
| · Coding | · 具体编码 | 60 | 80 | 
| · Code Review | · 代码复审 | 10 | 10 | 
| · Test | · 测试(自我测试,修改代码,提交修改) | 10 | 10 | 
| Reporting | 报告 | 30 | 30 | 
| · Test Report | · 测试报告 | 20 | 20 | 
| · Size Measurement | · 计算工作量 | 10 | 10 | 
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 | 
| 合计 | 315 | 320 | 
解题思路

实现过程

代码规范
- 见Partner王万成的博客
 
代码说明
- 界面设计。
做winform随机点名程序的第一步就是界面设计,我们不打算用其他花里胡晒的东西,只想做出一个简洁明了的界面(学生姓名一定要大)。 - 类的设计
我们活用了C#的一些官方类库,例如System.Windows.Forms,System.IO,以及利用System.Threading实现了点名时学生姓名随机闪烁的效果。代码功能大多来源于活用已有”轮子“,非常方便,故并未新建所需类;好处便是代码十分简洁,两个Click事件仅用25行代码实现。 - 详细代码
 
public void Read_Click(object sender, EventArgs e)
        {
            OpenFileDialog OFD = new OpenFileDialog();
            OFD.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            OFD.Filter = "(*.txt)|*.txt";
            if (OFD.ShowDialog() == DialogResult.OK)
            {
                string strNames = OFD.FileName;
                //将文件名添加到 textbox中
                TxtName.Text = strNames;
            }
            StudentName = File.ReadAllLines(TxtName.Text);
            //读取完成txt中的姓名,txt中姓名由换行隔开
        }

- 调用C#本身提供的
OpenFileDialog类。 - 这是我在思考如何做读取学生数据时,联想到很多时候发博客,需要从计算机硬盘中选择图片这个过程,我想这个过程,很多软件都有,而且界面是一样的,应该是有通用的标准,就去bing查了如何实现在winform里用该界面选择文件。
 InitialDirectory是确定此界面弹出时默认的文件路径是什么,我选择了系统环境中的特殊文件夹,桌面,我思考大家选择文件时很容易从桌面开始选择,这样子提高了软件的易用性。OFD.Filter = "(*.txt)|*.txt"是限定了选择学生文件时的文件类型,我选择了使用txt文件来记录学生姓名,要求该txt文件中,每个学生姓名占一行,方便阅读同时方便函数读取。- 当点下确定键时,
OFD.File会返回选定文件的路径。 - 同时将程序界面文本框显示成文件路径。
 - 利用
File.ReadAllLines这个函数将每一行姓名分别存入一个string数组中,存放在内存里。 - 曾经思考过如何读取excel文件,因为excel文件记载姓名的方式并不清楚,所以一点头绪没有,便选择了放弃。
 
 private void Select_Click(object sender, EventArgs e)
        {
            Random RD = new Random();
            for (int i = 1; i <= 20; i++)
            {
                Student.Text = StudentName[RD.Next(0, StudentName.Length - 1)];
                Application.DoEvents();
                Thread.Sleep(150);
            }
            Student.Text = StudentName[RD.Next(0, StudentName.Length - 1)];
        }//姓名滚动3秒后,显示随机选中的姓名
- 该函数思路较为简单,先将循环内代码执行20次,每次执行会从上一个Function中生成的数组中随机抽取一个姓名,更新到
Student.Text中 - 我们发现,在执行
Thread.Sleep()函数时,程序界面会无法更新,也无法点击两个bottom,Student.Text的更新不会实时展示在页面上。 - 我们通过探讨与学习,在搜索引擎中学到了使用
Application.DoEvents()函数来刷新我们的程序界面,这样整个程序恢复了正常。 
代码本身对txt文件的支持很好,支持任意数量的学生姓名,只要格式满足每个学生占单独一行即可,程序复用性很高,不同班级学生适合存储在不同的txt文件中,随课程读取不同班级,非常方便快捷。
该程序满足题目要求随机点名。
本次代码失败之处在于,对于单元测试的编写毫无头绪,两个功能的实现都较为简单,文件输入来源于txt,输出至Student.Text,功能直接在Click事件中实现,没有返回值,绞劲脑汁想不到如何编写单元测试,多轮测试,故放弃。
结对编程
在我们结对编程的过程中,发现Visual Studio 2019内置了对于Github的支持,可以很方便的实行分支管理,上传的等操作,但是i还是还是不熟练,所以使用的仍旧是git命令行。

总结
- 我认为利用Github管理源代码对于大型项目来说,应该是十分有帮助的,可以由架构师先写好Framework,定义好interface,先控制好各个开发者需要开发何种Function,接受什么样的参数,返回值类型。然后再分责任耕耘细部,将一个只有钢结构的大楼填补成摩天大厦。
 - 但是我同样要说,对于很小很小的项目,结对编程起到的作用并不如大项目中一样显著,类似本次作业中,功能如此简单的函数,我认为我和Partner都有能力独立完成,并且可以节约劳动力,
 
PairProgramming 个人第三次作业的更多相关文章
- 耿丹CS16-2班第三次作业汇总
		
-- Deadline: 2016-10-12 22:48 -- 作业内容: 1.实验2-6 猜数字游戏 2.实验2-7 判断能否为三角形 3.实验2-8 个人所得税计算器 -- 第三次作业总结: 1 ...
 - JAVA第三周作业(从键盘输入若干数求和)
		
JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...
 - 第三次作业:caculator
		
第三次作业 作业链接 ********* 遇到的问题: Scan类: 队列的使用方法不了解,上网查询并自己练习了一下才初步了解,才运用到作业 . 判断数字用的 if (input[i] >= ' ...
 - HTML第三天作业做的表格
		
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
 - 第三次作业——《K米评测》
		
第三次作业--<K米评测> 一.调研.评测 上手体验 APP的图标做的不错,一眼就知道和KTV唱歌相关的 点进去就是连接包箱的界面和直播界面,把软件最重要的两个功能展示出来了,一目了然 热 ...
 - 软件工程(QLGY2015)第三次作业点评(含成绩)
		
相关博文目录: 第一次作业点评 第二次作业点评 第三次作业点评 团队信息 本页点评团队1-22,其他组见:http://www.cnblogs.com/xiaozhi_5638/p/4490764.h ...
 - 第三次作业随笔(new)包含了补作业
		
第三次作业的题目:http://www.cnblogs.com/fzuoop/p/5187275.html 第一次看到题目的时候觉得应该是挺简单的,只要把输入的那一串东西挨个判断,用数列的方法,如果碰 ...
 - 第三周作业、实时操作系统µC/OS介绍及其它内容
		
作业要求 见<实时控制软件设计>第三周作业 1 阅读笔记--µC/OS 1.1 基本介绍 µC/OS是由Micrium公司研发的实时操作系统,以µC/OS-II或µC/OS-III为内核, ...
 - 软件工程(GZSD2015)第三次作业提交进度
		
第三次作业题目请查看这里:软件工程(GZSD2015)第三次作业 开始进入第三次作业提交进度记录中,童鞋们,虚位以待哈... 2015年4月19号 徐镇.尚清丽,C语言 2015年4月21号 毛涛.徐 ...
 
随机推荐
- location对象相关
			
JS是由DOM(文档对象模型).BOM(浏览器对象模型).以及ECMA组成,而location对象是BOM中的一个非常重要的对象,所有关于地址栏信息的内容都在这里.了解location对象之前让我们先 ...
 - op挂载摄像头
			
挂载摄像头openwrt挂载ZC0301PL-USB摄像头教程http://www.openwrt.org.cn/bbs/viewthread.php?tid=30
 - deep Q learning小笔记
			
1.loss 是什么 2. Q-Table的更新问题变成一个函数拟合问题,相近的状态得到相近的输出动作.如下式,通过更新参数 θθ 使Q函数逼近最优Q值 深度神经网络可以自动提取复杂特征,因此,面对高 ...
 - java通过freemarker模板导出pdf
			
需求:将网页内容导出为pdf文件,其中包含文字,图片,echarts图 原理:利用freemarker模板与数据渲染所得到的html内容,通过ITextRenderer对象解析html内容生成pdf ...
 - 关于Mac VMFusion Centos7虚拟机网络的配置
			
1.环境配置: 创建完快照后启动虚拟机,使用root用户和root密码登录系统 1.1 停止防火墙 #停止防火墙 [root@localhost ~]#systemctl stop firewalld ...
 - MediatorPattern(中介者模式)-----Java/.Net
			
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式.
 - 一个C#开发者重温Java的心路历程
			
前言 我们都知道软件开发是工科,不是理科:本质上和电工.钳工是一样的. 也就是说,软件技术成长也与电工.钳工的技术成长是一样的,靠的是练,而不是学. 所以,很多时候,我们称应届大学生是一张白纸,啥也不 ...
 - linux入门系列5--新手必会的linux命令
			
上一篇文章"linux入门系列4--vi/vim编辑器"我们讨论了在linux下如何快速高效对文本文件进行编辑和管理,本文将进一步学习必须掌握的linux命令,掌握这些命令才能让计 ...
 - CI框架获取post和get参数_CodeIgniter使用心得
			
请参考:CI文档的输入类部分: $this->input->post()$this->input->get() -------------------------------- ...
 - Longhorn入门级教程!轻松实现持久化存储!
			
介 绍 在本文中你将学会如何使用k3s在Civo上运行Longhorn.如果你还没使用过Civo,可以到官网注册(https://www.civo.com/ )还可以申请免费的使用额度.首先,需要一个 ...