结对照片:国庆假期前几天,我和我的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王万成的博客

代码说明

  1. 界面设计。

    做winform随机点名程序的第一步就是界面设计,我们不打算用其他花里胡晒的东西,只想做出一个简洁明了的界面(学生姓名一定要大)。
  2. 类的设计

    我们活用了C#的一些官方类库,例如System.Windows.Forms,System.IO,以及利用System.Threading实现了点名时学生姓名随机闪烁的效果。代码功能大多来源于活用已有”轮子“,非常方便,故并未新建所需类;好处便是代码十分简洁,两个Click事件仅用25行代码实现。
  3. 详细代码
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都有能力独立完成,并且可以节约劳动力,

最新文章

  1. MyEclipse使用心得:SVN插件安装方法
  2. SQLServer语句执行效率及性能测试
  3. java中数组的相关知识
  4. Android使用Unity导致Activity被销毁的解决办法
  5. 动手动脑及java程序之用消息框进行数的运算
  6. IOS 开发qq登陆界面
  7. CSS快速制作图片轮播的焦点
  8. IE9中jquery发生Object未定义原因及解决办法
  9. Vijos1386 IOI2007 矿工配餐 动态规划
  10. FORM表单不刷新提交POST数据
  11. codevs 1515 跳 贪心+lucas
  12. Effective C++ Item 33 避免遮掩继承过来的名称
  13. 手算平方根和基于 Java BigInteger 的大整数平方根的实现
  14. vuex入门
  15. Spring Boot 入门教程
  16. CodeForces 510C Fox And Names (拓扑排序)
  17. 转载:Linux服务器Cache占用过多内存导致系统内存不足最终java应用程序崩溃解决方案
  18. PowerScript数据类型及变量
  19. 第一册:lesson forty three。
  20. keepalived 的某台vip连接不通【原创】

热门文章

  1. 38.CSS
  2. 使用Miniconda安装Scrapy遇到的坑
  3. 日期格式化跨年bug,是否与你不期而遇?
  4. 深度探索c++对象模型阅读笔记图
  5. 使用rapidjson把文本json数据解析到树状结构
  6. 【题解】CF1056F Write the Contest(三分+贪心+DP)
  7. Java高级特性——流
  8. Python PyInstaller安装和使用教程
  9. Java 从入门到进阶之路(二十一)
  10. 前端面试基础回顾之深入JS继承