十二新作

导航

个人第三次作业——结对编程

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

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
· Estimate · 估计这个任务需要多少时间 1760 1888
Development 开发 600 540
· Analysis 需求分析 (包括学习新技术) 60 90
· Design Spec · 生成设计文档 10 8
Design Review · 设计复审 (和同事审核设计文档) 20 25
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 30
· Design · 具体设计 120 180
· Coding · 具体编码 600 720
· Code Review · 代码复审 60 60
· Test · 测试(自我测试,修改代码,提交修改) 30 40
Reporting 报告 120 140
· Test Report · 测试报告 20 15
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 20 30
合计 1760 1888

一 . WinForm随机点名的程序(共同完成)

1,WinForm窗口界面的设计

我们设计了winform界面,希望可以实现班级学生的随机点名,运行程序时可以实现进度条的跟踪,并且此基础上,增加了其他的功能,可以记录学生的缺课次数在表中。

下面是我们的winform界
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190926152109564.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ,size_16,color_FFFFFF,t_70)
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190926152034294.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ
,size_16,color_FFFFFF,t_70)

2,基本功能设计及代码基本的思路

我们创建了三个类库,Stu_Database,Stu_Entity,Stu_Layer。这三个类库之间相互引用。Stu_Database创建Database 类,Stu_Entity中创建Entity类,Stu_Layer中创建Layer。三个类库之间相互引用,基本思路是通过Stu_Entity将学生基本信息实例化,然后在Stu_Layer对其进行相关规则,并在主函数中调用,显示到winform界面。

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190926152651820.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ==,size_16,color_FFFFFF,t_70)
Stu_Database这个类库用来存储学生的基本信息,由于没有连接数据库,所以创建这个类库,存储学生的基本信息。代码如下:
public class Databse
{
//模拟数据库中的学生集合

private static List studengList;

public static List getAll()// 学生信息库
{
studengList = new List();
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 studengList = Databse.getAll();
return studengList.Count;
}
public List getAllStudents()
{
List studengList = Databse.getAll();
return studengList;
}
}

3,新功能和附加功能

增加了启动界面,和进度条跟踪载入学生信息。
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190926154158811.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ,size_16,color_FFFFFF,t_70)
增加的新功能,我们可以 记录对点名过程中未到学生的 做记录。
![在这里插入图片描述]( https://img-blog.csdnimg.cn/2019092615363271.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ
,size_16,color_FFFFFF,t_70)
代码
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 Form2_Load(object sender, EventArgs e)
{

}

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 BtnStop_Click(object sender, EventArgs e)
{
timerCallName.Stop();
}

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实例。
代码如下:![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190926193547475.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ==,size_16,color_FFFFFF,t_70)

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());//测试实例是否是相同实例
}
}
}

二,代码复审过程发现的问题。

  • 代码格式不规范,大小写混用,命名不合理,层次不清晰。导致后面在其他类中调用时出现未声明其变量的错误,结构混乱,程序整体没有逻辑结构。

  • 在引用时没有加入头文件 using 命名空间 ,导致引用不成功,很久没有发现是怎么回事,最后上网查资料发现了解决方法。

  • 在设计载入学生信息时,程序载入界面未将 Opacity 选项设置为0%,导致载入时未出现进度条加载界面,在复审过程中发现这个问题将其调整为0%。

三,描述结对的过程,两人在讨论的结对照片

这次结对过程中,我们两人基本上都是一起完成所有的过程,在编程的过程里,我负责Attendance_System中两个窗体的创建和Stu_Layer类库这两个部分的编码。![在这里插入图片描述]( https://img-blog.csdnimg.cn/20190926192453769.jpg?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDE5MzgxMQ==,size_16,color_FFFFFF,t_70)

四.总结

本次个人作业收获颇多,两个人一起编码与一个人体验不同,在编码过程中互相指出问题,互相提出自己的见解,是整个过程更加的迅速,效率更高。这次的编码整体上较为顺利,在点名系统的附加功能上,将学生添加到表中,花费时间较多,还有就是最后的单元测试花费时间较多。也有很多不懂的地方,不过通过网上学习,百度,也知道了更多的方法。

posted on 2019-10-01 09:29  十二新作  阅读(219)  评论(0)    收藏  举报