结对编程第三次作业

结对编程作业
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 因为基础不好,所以完成这个简单的作业很难,几乎都是边学边写代码,但是这样确实进步的也快! 就是耗费时间比较多。

猜你喜欢

转载自www.cnblogs.com/kingxi/p/11614092.html