【第四篇】数独终局
注:此处为拆分内容,可直接看总篇
四.设计实现
2.编码实现
(3)GUI界面设计实现
采用VS下C#窗体应用项目开发。
思路和某些编码方法参考了weixin_40629184的****文章。
其中,以TextBox作为数独的格子,装入一个ArrayList中,使在窗体Load时就出现,采用ReadOnly属性实现操作方的填入数字。
设置两个button,分别为“submit”和“start”:
当点击“start”按钮时,以StreamReader从中读入挖空的数组题目,显示之;
当点击“submit”按钮时,将题目提交,根据作答情况有“请作答完毕”、“作答错误”、“作答正确”三类提示。
3.测试
采用如下图所示的方式进行单元测试的组织:
五.程序改进
1.代码质量分析
使用VS下质量分析工具,消除所有警告:
2.性能分析
使用VS下性能分析工具,经过了如下改进:
- 将输出先存入buffer数组中:因为对文件的输出需要反复地打开文件关闭文件,这个过程会极大地增加时间消耗,因此采用一个缓冲区进行速度上的优化。
- 对数独解的正确性判断采用vis数组进行:这是我经过查阅资料得出的一个判定方法,比起我之前的遍历判断更简洁。
- 现在情况:可见,目前主函数占用CPU最多,其次是读写文件的函数,剩余的函数占用CPU比例可忽略不计。
- 还可以改进的方向:对于解数独,可以根据DLX算法进行进一步的优化。
六.代码说明
1.生成数独
核心部分如下,详见GitHub:
2.求解数独
详见GitHub:
运行结果如下:
3.GUI
实现结果如下:
七.时间统计
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 90 | 30 |
Estimate | 估计任务需要多少时间 | 20 | 30 |
Development | 开发 | 2500 | 1720 |
Analysis | 需求分析(新技术) | 400 | 360 |
Design Spec | 生成设计文档 | 60 | 60 |
Design Review | 设计复审 | 30 | 10 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 300 | 300 |
Coding | 具体编码 | 1200 | 600 |
Coding Review | 代码复审 | 200 | 20 |
Test | 测试 | 300 | 360 |
Reporting | 报告 | 410 | 0 |
Test Report | 测试报告 | 330 | 300 |
Size Measurement | 计算工作量 | 20 | 10 |
Postmortem&Process Improvement Plan | 事后总结,提出改进 | 60 | 30 |
总计 | 3000 | 2090 |
八.个人总结
首先,总体来说:虽然项目的具体编码工作并不很难,网上也有许多可供参考的资料,但是在其他部分,比如单元测试、性能分析等等我以为可以很快完成,因此放在了最后一周以做修缮的部分,却出我意料地花了我很多时间。
其次,从收获来讲:我熟悉了一个项目生成的过程,软件工程≠编码这一理论知识在实践中得到了充分的说明,同时,对****博客的编写和GitHub的具体使用有了更深的理解。尤其是GitHub上传项目,之前我都是直接在网页端操作,之后要上传exe必须进行仓库的合并上传,上传过程中出现了很多阻碍,比如上传后的文件夹是灰色的无法打开、exe文件被忽略没有上传……虽然我的时间统计中时间尚可,但是实际上GitHub上传这种不计入时间的活动也很费了我一番功夫。
最后,从改进来说:其一,我可以进一步了解DLX算法,针对代码进行进一步的优化;其二,我在此处使用的是结构化的分析设计方法,对OOAD几乎没有应用,以后还是要继续改进。