軟體工程大作業 數獨遊戲

2021-10-01 17:00:11 字數 3156 閱讀 6991

這篇文章主要是第一部分psp**、第二部分問題分析和第三部分系統設計

psp2.1

personal software progress stages

預估耗時(分鐘)

實際耗時(分鐘)

planning

計畫estimate

估計這個任務需要多少時間

2030

development

開發analysis

需求分析(包括學習新技術)

180150

design spec

生成設計文件

120180

review

設計複審(和同事審核設計文件)

3030

coding standard

**規範

120100

design

具體設計

180150

coding

具體編碼

9001200

code review

**複審

300300

test

測試(自我測試,修改**,提交更改)

300360

reporting

報告test report

測試報告

60120

size measurement

計算工作量

3060

postmortem & process improvement

事後總結,並提出過程改進計畫

12090

total

合計2360

2770

1、需求分析

經過研究,我認為軟體需要滿足的需求如下:

生成不重複的數獨終盤(0生成數獨題目(0讀取數獨問題,求解,將結果輸出(0

2、解決方法:

經過查閱資料,我確定的方法如下:

生成數獨題目:隨機挖空,但挖空的數量不能太少也不能太多。經過我的觀察,數獨題目中空位的數量大約是30至42個。所以我挖空的具體方法為:首先在每個小九宮格中挖兩個空,然後再隨機挖空,第二步挖的空有可能與第一步挖過的某些空重複,保證整個數獨題目最少有30個空,最多有42個空

解數獨題目:回溯法,用dfs來解決

三個功能,就需要分為三個模組,使用物件導向的方法對其進行分析和建模。

用例圖分析需求中的使用者,分為使用者和管理員,根據需求描述,畫出用例圖如下:

類圖需求描述中設計到的類與物件包括:使用者需求解決類(solve)、數獨終盤生成類(base)、數獨問題求解類(answer)。 功能需求中,第二個功能並沒有在使用者需求中直接體現出來,所以我將其另作為乙個程式。畫出的類圖如下:

順序圖生成數獨終盤的過程順序圖如下:

求解數獨的過程順序圖如下:

用於產生數獨終盤

變數:double tottime; 記錄執行時間

int count; 表示需要產生的數獨終盤的數量

struct node; 表示數字num的移動方向,dir為true表示向左,false表示向右

struct node location[9]; 表示數字1-8的移動方向

file* file_write; 寫檔案指標,指向將要寫入數獨的檔案

方法:base(int number, file* file)建構函式,初始化base物件和數獨

generate(): void 生成指定數量count個數獨

out(): void 輸出函式,將生成的數獨寫入指定檔案中

transform(): void 橫向改變量獨終盤

change(): void 產生橫向改變後的數獨終盤

line_exchange_floor(int* number): void 輪換數獨終盤的第1,2行

line_exchange_middle(int* number: void 輪換數獨終盤的第3,4,5行

line_exchange_ground(int* number): void 輪換數獨終盤的第7,8,9行

swap_line(int a, int b); 交換數獨終盤中指定的兩行

根據軟體設計說明,answer類的功能為從指定檔案solver.txt中讀取待解決的數獨並完成數獨填寫,然後將數獨終盤寫入指定檔案sudoku.txt中。在answer類中,有如下成員:

變數:int sudo[9][9]; 存放數獨

file* question; 檔案指標,指向存放待解決的數獨的檔案

file* file_write;檔案指標,指向將要寫入數獨終盤的檔案

int flag; 標記解決完成的數獨是否符合要求,0表示符合,1表示不符合

方法:answer() 建構函式,初始化answer物件

test(): int 返回flag的值

in(): int 從檔案中讀取待解決的數獨,完成數獨並寫入檔案

out(): void 將完成後的數獨終盤寫入檔案

dfs(): bool 採用回溯法來完成數獨填寫

check(int line, int col, int num): bool 判斷數獨中指定行、列的數字填寫是否符合要求

valid(int sudoku[9]): bool

判斷完成後的數獨是否符合要求

根據軟體設計說明,solve類的功能有三部分:一、判斷輸入命令是否合法;二、如果為-c命令,建立base類物件,建立指定數量的數獨終盤寫入檔案;三、如果為-s命令,建立answer類物件,從檔案中讀取待解決的數獨並完成數獨,將完成的數獨終盤寫入檔案。在answer類中,有如下成員:

變數:int argc; 來自main()的引數,表示命令的引數個數

char**ar**; 來自main()的引數,指向存放命令的引數的位址

int flag;

方法:olve(int argc, char** ar**) 建構函式,初始化solve物件

solveinput(): int 判斷命令格式是否符合要求,並根據命令執行數獨生成或數獨解決功能

軟體工程大作業 數獨遊戲2

這篇文章主要是第四部分具體實現 第五部分單元測試和第六部分程式效能及質量分析 check.h 負責對使用者輸入的命令進行處理,如果命令輸入錯誤,進行錯誤提示,下面是判斷輸入並執行的 部分 int solveinput 判斷並執行命令 if strcmp ar 1 c strcmp ar 1 s 字母...

軟體工程大作業

一.uml圖 需求分析 設計原型 例會記錄1 例會記錄2 二.工具 python mysql 三.實現過程 首先確認基本需求,然後確定了使用python的flask框架,再逐步實現所有功能。我主要做了資料庫的一部分操作,新學生,新老師的增刪功能,因為我們的資料庫資訊是採用檔案匯入的方式,加快了效率的...

軟體工程大作業(一)

1.1 功能需求 1 類似 visio.能完成向量圖形的建立 儲存 讀取功能。2 除了圖形介面操作,還可以通過命令指令碼操作。例如下面的指令碼建立乙個園,然後對其進 行放大。createcircle a center 0,0 radius 10 zoom a 1.5 令指令碼的格式可以自己確定 3 ...