个人第3次作业:结对编程

mac2022-06-30  34

个人第3次作业:结对编程

Github项目地址项目地址结对伙伴的作业地址作业地址

1.PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)Planning计划6060· Estimate· 估计这个任务需要多少时间17601888Development开发600540· Analysis需求分析 (包括学习新技术)6090· Design Spec· 生成设计文档108Design Review· 设计复审 (和同事审核设计文档)2025· Coding Standard· 代码规范 (为目前的开发制定合适的规范)3030· Design· 具体设计120180· Coding· 具体编码600720· Code Review· 代码复审6060· Test· 测试(自我测试,修改代码,提交修改)3040Reporting报告120140· Test Report· 测试报告2015· Size Measurement· 计算工作量1010· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划2030合计17601888

2.实现过程(共同完成)

(1)WinForm界面设计

在设计winform界面时,经过和队友讨论后,在老师原有的基础上增加了进度条读取界面,增加了缺勤记录的新功能,可以记录学生缺勤的次数。

设计界面图:

(2)代码设计基本思路

我和队友分别创建了3个类库,Stu_Database,Stu_Entity,Stu_Layer,这三个类库的主要作用分别是Stu_Database创建了学生信息Database类,在类里录入了学生信息。Stu_Entity创建了Entity类,主要用于创建学生实例。Stu_Layer创建了Layer类主要用于得到学生信息,在主函数中调用。

Stu_Database这个类库用来存储学生的基本信息,在这个基础上增加了缺勤次数的信息。部分代码截图: public class Databse { //模拟数据库中的学生集合

private static List<Entity> studengList; public static List<Entity> getAll()// 学生信息库 { studengList = new List<Entity>(); Entity stu1 = new Entity("001", "王川",0); studengList.Add(stu1); ... Entity stu84 = new Entity("084", "杨也", 0); studengList.Add(stu84); return studengList; } }

Stu_Entity这个内库是将Stu_Database内库中的学生信息进行实例化,用以进行数据的读写输入。部分代码截图: public class Entity { private String id;

public String Id//学号 { get { return id; } set { id = value; } } private String name; public String Name//姓名 { get { return name; } set { name = value; } } private int abse; public int Abse//缺勤次数 { get { return abse; } set { abse = value; } } public Entity() { } public Entity(String id, String name,int Abs) { this.id = id; this.name = name; this.abse = abse; } }}

Stu_Layer是用来计算学生总人数,或者随机点一个学生,还可以在这个内库中增加其他新的功能,方便修改。部分代码截图:

public class Layer { public int getStudentRecordsNums() { List<Entity> studengList = Databse.getAll(); return studengList.Count; } public List<Entity> getAllStudents() { List<Entity> studengList = Databse.getAll(); return studengList; } }
3,新功能

我们在原有的基础上增加了进度条读取界面,和增加了缺勤次数的记录。部分代码截图: public partial class Form2 : Form { public int i; List stuList; Layer Stulayer = new Layer();

public Form2() { InitializeComponent(); Layer Stulayer = new Layer(); stuList = Stulayer.getAllStudents();//获取学生数据 DataTable dt = new DataTable(); dt.Columns.Add("stuNo", Type.GetType("System.String")); dt.Columns.Add("stuName", Type.GetType("System.String")); dt.Columns.Add("abs", Type.GetType("System.String"));//构造数据源 foreach (Entity stu in stuList) { dt.Rows.Add(stu.Id, stu.Name,stu.Abse); } dataGridView1.DataSource = dt; } private void BtnStart_Click(object sender, EventArgs e) { timerCallName.Start(); } private void TimerCallName_Tick(object sender, EventArgs e) { Random ra = new Random(); i = ra.Next(stuList.Count); label2.Text = stuList[i].Name; } private void BtnAbs_Click(object sender, EventArgs e) { stuList[i].Abse= stuList[i].Abse+1; MessageBox.Show("添加成功!"); } }
5,单元测试

代码思路:测试的函数有 Assert.IsNotNull,Assert.ReferenceEquals。通过测试函数Assert.IsNotNull来判断程序是否调用了getAllStudents方法,结果是调用了这个方法。通过测试函数Assert.ReferenceEquals来判断getAllStudents方法的实例是否是Layer实例。部分代码截图:

namespace Stu_Layer.Tests { [TestClass()] public class LayerTests { [TestMethod()] public void getStudentRecordsNumsTest() { Layer test = new Layer(); Assert.IsNotNull(test.getAllStudents());//测试是否为空 Assert.ReferenceEquals(test,test.getAllStudents());//测试实例是否是相同实例 } }

}

3.代码复审过程

在代码复审时我和组员发现部分代码命名不规范,导致了后面的引用实例和调用方法时不知道使用哪个,我们在修改过后使得代码变得更易读,更有逻辑性。在代码合作时队员发现我没有引用命名空间,于是纠正我使用了命名空间。在合并代码时我们遇到了很大困难,就是代码很多名字都不一样,导致了合并不成功,于是我们又互相修改了命名。

4.单元测试

测试的函数有 Assert.IsNotNull,Assert.ReferenceEquals。通过测试函数Assert.IsNotNull来判断程序是否调用了getAllStudents方法,结果是调用了这个方法。通过测试函数Assert.ReferenceEquals来判断getAllStudents方法的实例是否是Layer实例。部分代码如下:

namespace Stu_Layer.Tests { [TestClass()] public class LayerTests { [TestMethod()] public void getStudentRecordsNumsTest() { Layer test = new Layer(); Assert.IsNotNull(test.getAllStudents());//测试是否为空 Assert.ReferenceEquals(test,test.getAllStudents());//测试实例是否是相同实例 } }

5.结对过程

总体来说我和队员的这次结对编程还是很成功的。因为是第一次编程,所以我们之间的默契还不够,还在相互磨合阶段,我相信之后合作多了就会变得更有默契。这次结对编程还大大增加了我们编程的效率,因为我们在编程时会互相提示哪里编写错了,哪里的思路不正确。我们在代码互审发现了许多问题,通过线下沟通我们还是慢慢解决了这些问题。结对照片:

6.附加功能

这次编程的主要附加功能是可以通过 学生点名界面 的 缺勤 按钮来对缺勤的同学进行有效的记录。这个功能主要是通过添加一个新的学生int型来对同学的考勤次数进行初始化,然后再通过缺勤按钮来对学生int型的记录进行增加,从而实现对缺勤的同学进行记录。

转载于:https://www.cnblogs.com/luojunjie/p/11614790.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)