结对编程第三次作业

结对编程作业
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)课程结束,任课教师翻阅文档,查看缺勤信息。
结构如下:

graph LR A1[随机点名]-->D1{是否第三次缺课} D1--YES-->A2[提示重修 写入ThirdAbsent名字加T标识] D1--NOT-->D2{是否第二次缺课} D2--YES-->A3[写入SecondAbsend文档名字加S标识] D2--NOT-->D3{是否第一次缺课} D3--YES-->A[写入FirstAbsent文档名字加F标识] D3--NOT-->A5[下一次随机点名] A5-->A1
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)代码测试结果

在这里插入图片描述

七,结对过程展示

在这里插入图片描述

八,作业完成及感悟

1.0 对于代码设计很在很大问题,写程序之前首先确定我要做什么,然后开始做,遇到不会的边学变写代码。
2.0 程序中把第一次缺课学生写入文档很容易,但是如何判断是第二次逃课?就需要遍历第一次逃课名单,每个同学都有可能两次逃课,这样每个学生就要单独写一个判断if语句,也有可能第三次缺勤就要再次遍历第二个文档,这样几乎多写800多行啰嗦重复代码。我选择给缺勤学生名字后加一个字符,判断名字结尾字符就能知道第几次逃课,节约几百行代码,增加程序的可读性。
3.0 因为基础不好,所以完成这个简单的作业很难,几乎都是边学边写代码,但是这样确实进步的也快! 就是耗费时间比较多。

posted on 2019-09-30 20:32  地信李全喜  阅读(181)  评论(2编辑  收藏  举报

导航