第三次结对编程作业(队友肖逸菲)

结对编程作业
GitHub项目地址https://github.com/15565048308/PairProgramming
搭档博客地址https://www.cnblogs.com/XYFWXR/
作业地址https://www.cnblogs.com/cherish599/p/11577268.html

一、PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划1530
Estimate估计这个任务需要多少时间9001020
Development开发720840
Analysis需求分析 (包括学习新技术)80120
Design Spec生成设计文档2015
Design Review设计复审 (和同事审核设计文档)1515
Coding Standard代码规范 (为目前的开发制定合适的规范)3020
Design具体设计4060
Coding具体编码450500
Code Review代码复审3035
Test测试(自我测试,修改代码,提交修改)100120
Test Report报告测试报告70120
Size Measureme计算工作量105
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划6060
合计24452120

关于PSP请参阅邹欣老师博客

二、代码设计及其实现过程

1 程序设计及实现

这个项目是在已有的点名系统的基础上进一步完成的,实现点名自动将缺课学生写入指定文档,并根据缺课次数写入不同的文档,一次作为平时考勤加减分和是否重修的依据,减轻老师点名记录负担。
(1)随机点名,判断该同学是否缺课
(2)将第一次缺课学生写入FirstAbsent文档
(3) 随机点名,遍历第一次缺课学生文档,判断该同学是否第二次缺课,若是写入第二次缺课文档并给与提示,第三次同理。
(4)课程结束,任课教师翻阅文档,查看缺勤信息。
结构如下:

YES
NOT
YES
NOT
YES
NOT
随机点名
是否第三次缺课
提示重修 写入ThirdAbsent名字加T标识
是否第二次缺课
写入SecondAbsend文档名字加S标识
是否第一次缺课
写入FirstAbsent文档名字加F标识
下一次随机点名
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 因为基础不好,所以完成这个简单的作业很难,几乎都是边学边写代码,但是这样确实进步的也快! 就是耗费时间比较多。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值