个人第三次作业——结对编程
Github项目地址 | 项目地址 |
---|---|
结对伙伴的作业地址 | 作业地址 |
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 20 | 20 |
Estimate | 估计这个任务需要多少时间 | 800 | 970 |
Development | 开发 | 660 | 750 |
Analysis | 需求分析 | 60 | 120 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 | 10 | 10 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 30 | 30 |
Coding | 具体编码 | 360 | 420 |
Code Review | 代码复审 | 60 | 30 |
Test | 测试 | 120 | 120 |
Reporting | 报告 | 120 | 120 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 40 | 60 |
合计 | 800 | 970 |
二、计算模块接口的设计与实现过程
- 设计思路
这次代码本来我们我们设想的是链接数据库来进行点名设计,但考虑到只能用VS完成,所以就简化了很多东西,没有链接数据库,但这样就不是很方便进行信息的及时更新,核心代码还是以老师的为主。我们设计的界面有
- 登录界面
- 点名界面
- 学生信息展示界面
流程图
graph LR
A[登录界面] --登录成功 --> B((学生信息展示界面))
A -- 登陆失败 --> C(取消)
B --> D{点名界面}
2.体现原则
Design By Contract(契约式设计):
契约式设计就是按照某种规定对一些数据等做出约定,如果超出约定,程序将不再运行,例如要求输入的参数必须满足某种条件。
如何体现: 在老师登录界面,如果密码正确即可进入学生信息界面,如果不正确,就不能进入点名界面,并且会显示登录失败。
Information Hiding(信息隐藏):
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
如何体现: 登录界面不需要学生信息,所以就没有添加对学生信息的引用,学生信息在登录界面也就不可访问,同样,在学生信息界面也不需要登录界面的信息。
三、代码复审过程
1.代码规范参考
2.代码互审
由于我们是室友在同一个寝室,所以我们完成这个项目都是一起讨论编程的,因此没有发现什么大的问题。
四、代码说明及截图
- StuDataBase 这个类库用来存储学生的基本信息,由于代码较长,只截取部分代码如下:
public class StudentDataset
{
private static List<Student> studengList;
public static List<Student> getAll()
{
studengList = new List<Student>();
Student stu1 = new Student("001", "王川", "男");
studengList.Add(stu1);
Student stu2 = new Student("002", "于丁", "男");
studengList.Add(stu2);
Student stu3 = new Student("003", "张莹", "女");
studengList.Add(stu3);
Student stu4 = new Student("004", "李楠", "女");
studengList.Add(stu4);
Student stu5 = new Student("005", "陈欣", "女");
studengList.Add(stu5);
Student stu6 = new Student("006", "马芸慧", "女");
studengList.Add(stu6);
Student stu7 = new Student("007", "汪小萍", "女");
studengList.Add(stu7);
Student stu8 = new Student("008", "母丹", "女");
studengList.Add(stu8);
- StuData这个类库将StuDatabase类库中的学生信息进行实例化,用以进行数据的读写输入。代码如下:
public class Student
{
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 String sex;
public String Sex
{
get { return sex; }
set { sex = value; }
}
public Student()
{
}
public Student(String id, String name, String sex)
{
this.id = id;
this.name = name;
this.sex = sex;
}
}
- DaoLayer这个类库是用来计算学生总人数,或者随机点一个学生。代码如下:
public class StudentDAO
{
public int getStudentRecordsNums()
{
List<Student> studentList = StudentDataset.getAll();
return studentList.Count;
}
public List<Student> getAllStudents()
{
List<Student> studentList = StudentDataset.getAll();
return studentList;
}
}
截图如下:
在加载学生信息时代码出了差错,就是加载出来以后会另外添加3列放置学生信息,我们也没有修改成功。
- 新增功能
新设置了登录界面,因为没有数据库,故我们就只设计了一个用户名和密码,“text”,“1111”
五、单元测试
public void TestMethod1()
{
StudentDAO sd = new StudentDAO();
StudentDataset st = new StudentDataset();
}
六、结对过程
-
具体分工
何玉姣(我)负责窗体信息设计及单元测试
王春兰(我的队友)负责代码编写
-
合作照片
七、总结
在这次结对作业中,我学到了很多东西,通过查阅各种资料,极大的丰富了自己的知识,同时,两个人合作的方式也让我感受到了团队的力量,每个人在团队中都是不可缺少的,编程过程中,由于不使用数据库,单用C#就显得比较难做,给我们增加了困难,最后我们还是成功了。