结对编程作业 | |
---|---|
GitHub项目地址 | https://github.com/15565048308/PairProgramming |
搭档博客地址 | https://www.cnblogs.com/XYFWXR/ |
作业地址 | https://www.cnblogs.com/cherish599/p/11577268.html |
一、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 15 | 30 |
Estimate | 估计这个任务需要多少时间 | 900 | 1020 |
Development | 开发 | 720 | 840 |
Analysis | 需求分析 (包括学习新技术) | 80 | 120 |
Design Spec | 生成设计文档 | 20 | 15 |
Design Review | 设计复审 (和同事审核设计文档) | 15 | 15 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
Design | 具体设计 | 40 | 60 |
Coding | 具体编码 | 450 | 500 |
Code Review | 代码复审 | 30 | 35 |
Test | 测试(自我测试,修改代码,提交修改) | 100 | 120 |
Test Report | 报告测试报告 | 70 | 120 |
Size Measureme | 计算工作量 | 10 | 5 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 60 |
合计 | 2445 | 2120 |
关于PSP请参阅邹欣老师博客
二、代码设计及其实现过程
1 程序设计及实现
这个项目是在已有的点名系统的基础上进一步完成的,实现点名自动将缺课学生写入指定文档,并根据缺课次数写入不同的文档,一次作为平时考勤加减分和是否重修的依据,减轻老师点名记录负担。
(1)随机点名,判断该同学是否缺课
(2)将第一次缺课学生写入FirstAbsent文档
(3) 随机点名,遍历第一次缺课学生文档,判断该同学是否第二次缺课,若是写入第二次缺课文档并给与提示,第三次同理。
(4)课程结束,任课教师翻阅文档,查看缺勤信息。
结构如下:
2 如何体现原则的
1)Design By Contract(契约式设计):
契约式设计就是按照某种规定对一些数据等做出约定,如果超出约定,程序将不再运行
如何体现:在输入数据情况下,能得到与预期一样的结果
(2)Information Hiding(信息隐藏):
信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
如何实现:信息隐藏就是对信息的封装,设置访问权限public、protect private等
(3)Interface Design(接口设计):
对接口的名字,功能,接口与接口间的继承关系进行设计;好的接口设计可以增强代码可读性,易用性,可更改性。
如何实现:将不同的功能程序段写到不同的方法中,然后包装在同一个类中,增强可读性,便于调用
(4)Loose Coupling 松耦合:
想让对象与对象间松耦合,通过增加抽象类(Abstract Class)或者接口来做到
如何实现:软件设计的一条基本原则就是“低耦合,高内聚”,降低对象与对象之间的耦合性,便于代码设计与维护,本程序只增加啦一个方法,所有无法提现松耦合
三、代码复审过程
(1)代码规范参考
(2)
四、具体代码
(1)当停止点名事件触发,调用方法
private void btnStop_Click(object sender, EventArgs e)
{
timerCallName.Stop();
//调用记录缺课次数的方法
AbsentTems();
}
(2)将随机被选中的字符串(姓名)带入新方法中,进行判断
使用MessageBox类进行提示
public void AbsentTems()
{
string Str = stuList[i].Name;
if (MessageBox.Show("该学生是否缺课?", "Absent OR Not?",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
(3)进行循环,并将缺课学生姓名写入文档,以便查看
if (Str.EndsWith ("S")==true )
{
stuList[i].Name += "T";
string Strpath3 = @"F:\软件工程文件\GisWinformPractice\WinformControlUse\TestFile\ThirdAbsent";
File.AppendAllText(Strpath3, Str + " ");
MessageBox.Show("取消考试资格来年重修!!!");
}
else if (Str.EndsWith ("F") == true )
{
//第四次尝试修改
stuList[i].Name += "S";
string Strpath2 = @"F:\软件工程文件\GisWinformPractice\WinformControlUse\TestFile\SecondAbsent";
File.AppendAllText(Strpath2, Str + " ");
MessageBox.Show("第二次缺课,离重修更进一步!!");
}
else
{
stuList[i].Name += "F";
string Strpath1 = @"F:\软件工程文件\GisWinformPractice\WinformControlUse\TestFile\FirstAbsent";
File.AppendAllText(Strpath1, Str + " ");
MessageBox.Show("第一次缺课,第一次重修半价哦!");
}
效果展示
五、附加功能
此代码是在已有代码的基础上进一步完成的,辅助任课教师记录缺课名单,不足就是不能语音自动播报。若实现自动语音点名,这样可以解决在老师嗓子不舒服的情况下(感冒生病等),也能考勤;
六、单元测试
(1)单元测试代码
(2)代码测试结果