数独生成求解器——软件工程2018年个人作业项目(完成)

最近更新时间2018.12.29(百忙之中实现了UI界面,另开了一篇)

GitHub连接:https://github.com/blingopen/sudoku

部分参考资料链接(有些参考之后忘记贴出来了):

内容目录

需求分析

概要设计

详细设计&核心代码实现

求解数独算法

生成终局函数

随机函数(生成随机数组)

输入输出函数

主函数

改进与提升!

性能分析与提高

单元测试

Sudoku类内测试

主函数测试

代码质量分析

        总结


 


此软件会用C#语言编写。 

首先我对这个数独项目完成的时间做了一个大致的估计。

psp2.1表格
PSP2.1

Personal Software

Process Stages

预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60  
·Estimate ·估计这个任务需要多少时间 60  
Development 开发 1170  
· Analysis · 需求分析(包括学习新技术) 300  
· Design Spec · 生成设计文档 30  
· Design Review · 设计复审(和同事审核设计文档) 0  
· Coding Standard · 代码规范(为目前的开发制定合适的规范) 60  
· Design · 具体设计 180  
· Coding · 具体编码 300  
· Coding Review · 代码复审 120  
· Test · 测试(自我测试,修改代码,提交修改) 180  
Reporting 报告 360  
· Test Reporting · 测试报告 120  
· Size Measurement · 计算工作量 60  
· Postmortem & Process Improvement Plan · 事后总结,并提出过程改进计划 180  
  合计 1590  

本项目为个人项目,所以设计复审为本人自行复审(算在需求分析中),故和同行设计复审一栏时间花费为0.

需求分析

拿到题目之后我读了好几遍,终于把这个数独的需求摸索清楚了:

  1. 在控制台输入指令“sudoku.exe -c 有效数字”可以输出改有效数字数量的数独终局到txt文件中。
  2. 在控制台输入“sudoku.exe -s 绝对路径”可以读取绝对路径中txt文本中的数独,求解并输出结果到txt文件中。

首先计划了一番,计划的大致时间如上表,因为需求比较明确,并且功能没有很复杂,所以准备用瀑布模型来开发。

接着,我思考了一下,程序结构很简单,主要可分为以下几个板块,区分指令板块(包括不同的有效指令和无效指令),生成多个数独终局板块,求解数独板块,第一个板块直接在主函数中写一个判断就可以,后面两个板块要分别设计一些算法。

当然设计算法是后话,“工欲善其事,必先利其器”,要先把准备工作做好。所以先按照文档要求,创建一个CSDN博客和GitHub工程文件夹,在这里寻求百度的帮助,查找了一些使用GitHub和Git的方法,配置好了相关环境,建立了相应的文件夹和博客。(前三次commit是试验自己是否创建成功

然后按照正常的瀑布模型开发流程,计划了大致时间后,写了一个需求分析,参考了网上的模板和教材的流程,存入了GitHub中(文件 Analysis.docx),其中建模结果大致如下。

 

数据建模

             本软件数据较为简单,抽象出来的实体只有一个完整的9×9的数独,和对应的每个3×3的小矩阵(共9个)。

图 1 sudoku系统初步ER图

功能建模

            数据源即用户,数据终点为本地计算机,主要数据流即用户在控制台应用输入的各种指令和输出结果,主要处理过程即生成终局和求解数独。(详细设计回来发现此处图有些不恰当

图 2 sudoku系统顶层DFD图

            继续划分,系统主要分为数独生成终局部分和数度求解部分,无法进一步精细化,故画到一层即可。

图 3 sudoku系统第1层DFD图

行为建模

          主要状态分为等待指令的主界面状态,生成终局状态,求解数独状态和错误信息状态,其行为关系如下:(详细设计回来发现此处图有些不恰当

图 4 sudoku系统的状态图

通读文档需要学习的新技术有:

  1. 使用GitHub和git来管理代码。
  2. 生成数独终局和数独求解的算法。
  3. 如何使用代码质量分析工具,性能分析和诊断工具。
  4. 如何写GUI。

在之后的相应步骤处会仔细说明如何查找材料与具体步骤。接下来是设计阶段。(对应文档HighLevelDesign.docx)

概要设计

关于类的设计,需求分析中大概设计了两个类,后来觉得设置一个类应该就可以了,3×3矩阵的判断可以转化成一个二维数组。便于判定每个3×3矩阵内内行每列是否满足1-9只出现了一次,所以就除了本身的数独数组,分别设置了3个判定数组。

该类命名为Sudoku类,包含四个字段及其相应属性分别是:

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值