【第四篇】数独终局

注:此处为拆分内容,可直接看总篇

四.设计实现

2.编码实现

(3)GUI界面设计实现

采用VS下C#窗体应用项目开发。
思路和某些编码方法参考了weixin_40629184的****文章
其中,以TextBox作为数独的格子,装入一个ArrayList中,使在窗体Load时就出现,采用ReadOnly属性实现操作方的填入数字。
设置两个button,分别为“submit”和“start”:
当点击“start”按钮时,以StreamReader从中读入挖空的数组题目,显示之;
当点击“submit”按钮时,将题目提交,根据作答情况有“请作答完毕”、“作答错误”、“作答正确”三类提示。

3.测试

采用如下图所示的方式进行单元测试的组织:【第四篇】数独终局
【第四篇】数独终局
【第四篇】数独终局

五.程序改进

1.代码质量分析

使用VS下质量分析工具,消除所有警告:
【第四篇】数独终局

2.性能分析

使用VS下性能分析工具,经过了如下改进:

  1. 将输出先存入buffer数组中:因为对文件的输出需要反复地打开文件关闭文件,这个过程会极大地增加时间消耗,因此采用一个缓冲区进行速度上的优化。
  2. 对数独解的正确性判断采用vis数组进行:这是我经过查阅资料得出的一个判定方法,比起我之前的遍历判断更简洁。
  3. 现在情况:可见,目前主函数占用CPU最多,其次是读写文件的函数,剩余的函数占用CPU比例可忽略不计。
    【第四篇】数独终局
  4. 还可以改进的方向:对于解数独,可以根据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几乎没有应用,以后还是要继续改进。