這篇文章主要是第一部分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 ...