實用專案:設計
本節應該是您在構建系統之前計劃整個系統的地方。它並不總是按這種方式進行,您可能會發現自己需要在實際編碼專案時返回並更改一些內容。不建議在完成一些編碼之前編寫設計。從您的分析中,您應該對要生產的內容有所瞭解,並且已經找到了一些教科書來幫助您入門。在編寫設計之前,完成幾個簡單的示例程式,這樣您將更好地瞭解所用語言的功能。記住,不要害怕回來更改內容!
為了獲得滿分,您應該努力編寫關於以下所有內容的資訊。一些專案不需要所有部分,例如,您可能沒有資料庫,因此不需要包含 SQL。最好始終與您的老師核實您需要包含的內容。
為了清楚地說明我們將如何完成專案,使用 IPSO 圖表是一個好主意。IPSO 代表輸入、過程、儲存、輸出。每個專案都應該在這些標題下包含資訊。下面是一個示例
- 輸入 - 這些可能包括各種型別的人機互動以及從外部來源載入資料,例如資料庫、網路提要、科學儀器等。
- 過程 - 這是最重要的部分。您將處理什麼,它將計算什麼?
- 儲存 - 這將記錄您將以何種方式儲存資料,它可能包括資料庫表名、結構名以及外部檔案,例如 xml 和 csv。
- 輸出 - 終端使用者將獲得什麼,將輸出到螢幕上的內容?
讓我們來看一個例子
| 輸入 | 過程 | 儲存 | 輸出 |
|---|---|---|---|
| 使用者詳細資訊 新購買 |
月度銷售額 表現最佳的銷售人員 最高付費客戶 |
資料庫表 客戶 庫存商品 購買 |
收據 月度銷售額圖表 |
當您設計系統時,需要將其拆分成更小的元件。就像這本書有關於不同事物的不同章節一樣,您的專案應該有不同的部分(模組)執行不同的操作,但是當它們組合在一起時,它們就形成了一個完整的整體。
將專案拆分成模組有兩種方法,一種是基於程式碼的,另一種是基於表單的。理想情況下,您的專案應該同時使用這兩種方法。
如果您的程式具有許多不同的功能並且使用網站或應用程式,您可能需要使用不同的頁面來執行不同的任務。您還可以從主選單開始,從一個頁面導航到另一個頁面。您需要顯示使用的不同表單/頁面以及如何從一個頁面導航到另一個頁面。

- 主選單
- 調整產品
- 新增產品
- 刪除產品
- 更新產品
- 銷售商品
- 調整員工
- 新增員工
- 刪除員工
- 更新員工
- 報告
- 巧克力
- 啤酒
- 香腸
- 調整產品
更重要的是,您可以繪製一個關於所有內容如何連結在一起的漂亮圖表。
如果您正在編寫一個非常複雜的編碼專案,那麼您可能正在使用程式碼模組,一些模組建立在其他模組之上。您可能還在使用類,您需要顯示類繼承圖。
與您的分析非常相似。如果您自上次分析以來沒有進行任何更改,並且它已規範化,只需將資料複製到這裡。您將需要在驗證區域進行一些額外的操作。寫下程式執行時值將如何儲存以及哪些資料需要長期儲存,資料將儲存在資料庫表中還是檔案中?
如果您將任何內容儲存到文字檔案或 XML 檔案中,請在此處提及這些檔案的組織方式。
如果您在程式碼中使用記錄或結構,請在此處提及它們以及它們的工作方式。
如果您讓使用者輸入資料,您肯定需要驗證他們插入的資料。例如,如果您讓他們填寫新的客戶記錄,您將擁有諸如標題、姓氏、出生日期、腳趾數量之類的欄位。您希望他們輸入以下資料
Mr. Peter 16/07/93 10
如果他們輸入了以下內容會發生什麼
Mrr. PeanutButter jellytime -8
好吧,這可能會破壞您的系統,我們需要阻止他們將“垃圾”輸入到我們的系統中。如果我們允許垃圾資料,我們的計算將無法正常進行,我們的報告將不正確,資料將毫無用處。請記住這條規則
垃圾進,垃圾出
為了防止輸入“垃圾”,我們將進行驗證,這意味著檢查個人輸入到系統中的每項資料。我們可以透過多種方式做到這一點
| 驗證檢查 | 描述 | 適合的適用欄位 | 有效資料 | 錯誤資料 |
|---|---|---|---|---|
| 資料型別 | 檢查僅將特定資料型別插入欄位中。例如日期或整數 | 出生日期 | 18/02/97 | 13/13/13 或“clot” |
| 長度 | 檢查輸入的資料是否具有正確的字元數。例如,英國電話號碼始終為 11 個字元,或者購物商品的 ID 始終為 5 個字元。 | 郵政編碼 | E4 7HJ | EEE668 JUY |
| 範圍 | 檢查資料是否在設定的範圍內,大於、小於、介於等等。例如,某人的年齡將大於 0,一個月的日數將大於或等於 28,小於 31。 | 腎臟數量 | 2 | 45 |
| 存在 | 當您需要使輸入資料成為強制性時,就會出現這種情況,使用者不允許漏掉任何欄位。例如,他們必須說明他們是否同意或不同意法律宣告,他們必須輸入郵政編碼。 | 電話號碼 | 07070707070 | (空白) |
| 查詢/列表 | 這指的是隻允許將設定好的值輸入到欄位中。例如,標題欄位只允許“先生”、“女士”、“小姐”、“夫人”、“博士”等選項。任何其他輸入都會被視為錯誤。您可以使用下拉列表來實現這種驗證方式。 | 性別 | 女性 | 攻擊直升機 |
大多數資料庫軟體包都內建了這些驗證檢查,因此,如果您建立了資料庫,然後使用開發套件建立表單,驗證將自動新增到表單中。如果您沒有此許可權,則需要手動編碼驗證。當然,這將在技術解決方案階段進行。讓我們看看我們最初的垃圾資料,我們是否成功使用驗證來阻止所有亂七八糟的東西進入我們的資料庫?
| 欄位名稱 | 驗證檢查 | 描述 | 錯誤訊息 | 資料 | 捕獲 |
|---|---|---|---|---|---|
| 頭銜 | 查詢(“先生”、“女士”、“小姐”、“夫人”、“博士”) | 只允許正確格式的標題 | 請輸入有效的標題 | Mrr。 | 是 |
| 名字 | 存在 | 確保姓名長度合理且存在 | 請輸入姓名 | Peter8 | 不,我們無法阻止人們故意惡意行為,您可以嘗試編寫一些檢查,但要注意“斯肯索普問題”! |
| 出生日期 | 資料型別(日期) | 確保他們輸入了正確的出生日期 | 請輸入有效的日期 | 果凍 | 是 |
| 腳趾數量 | 14 > 長度 >= 0 | 確保他們輸入了合理的腳趾數量 | 請輸入 0 到 13 之間的數字 | -8 | 是 |
在您的報告中,您需要編寫一個類似於上面表格的表格,但您可以省略最後兩列。
|
驗證符號:正則表示式 當您嘗試對輸入資料的格式進行強制執行時,您可能需要使用驗證符號。例如,如果您想指定一個類名必須是兩位數字後跟三個字母,例如 12PKP,您可以編寫
或者更簡單地
相應的正則表示式可以寫成
或者
|
檔案組織和處理(如果適用)
[edit | edit source]- 檔案大小
- 資料量
資料庫設計,包括規範化關係(如果適用)
[edit | edit source]如果您正在建立資料庫,則需要包含一個 E-R 圖。您應該展示該圖並解釋每個關係的含義。例如
- 一個學生可以有許多預約
- 每個預約只有一名學生
- 每個預約只有一本書
- 一本書可以參與許多預約
計劃的 SQL 查詢示例(如果適用)
[edit | edit source]如果您正在建立資料庫,您需要編寫關於用於SELECT、INSERT、UPDATE 和DELETE 表中內容的 SQL 語句。在某些情況下,您可能還需要編寫建立單個表的程式碼,即資料定義語言。事實上,這些標題正是您需要使用的標題。
|
保留字 當您查詢資料庫時,您可能會遇到一些意外的錯誤,查詢無法執行,即使它似乎沒有任何問題。這可能是由於在查詢中使用了保留字造成的。SQL 有很多保留字,它們具有特殊含義,如果您在查詢中使用其中一個字,它不會將其視為欄位名。例如 SELECT Username, Password FROM tblUsers
這可能會導致錯誤,因為 SELECT Username, [Password] FROM tblUsers
還有很多其他保留字,所以要小心 PERCENT, PLAN, PRECISION, EXISTS, PRIMARY, PRINT, PUBLIC,
BACKUP, FOREIGN, READ,FREETEXT, FROM, REFERENCES, BULK,
FULL, RESTORE, GROUP, IDENTITY, RULE, SAVE, INDEX, SELECT,
STATISTICS, KEY, TABLE, NATIONAL, DATABASE, UNION, DELETE,
DISK, ON, USER, PASSWORD
不同的資料庫具有不同的保留字集,您可以在此處找到一份好的列表。 注意:如果您沒有使用 SQL 伺服器(例如,使用帶有 PHP 的 MySQL),您可能需要使用 `反引號` 而不是方括號表示法。 |
SELECT
[edit | edit source]本節應該列出您編寫的返回記錄選擇的全部 SQL 語句。您應該用簡單的英語描述 SQL 語句的使用位置及其作用,然後包含 SQL 程式碼以及您需要的任何註釋。例如
英語描述
此 SQL 語句選擇使用者選擇的商品的詳細資訊(ID、名稱、價格、描述)。這樣使用者就可以在購買商品之前,在預覽螢幕上檢視商品的詳細資訊。
SQL
SELECT ID, Name, Price, Description FROM Products
WHERE ID=?
INSERT
[edit | edit source]本節應該列出您編寫的將新記錄插入資料庫的所有 SQL 語句。您應該用簡單的英語描述 SQL 語句的使用位置及其作用,然後包含 SQL 程式碼以及您需要的任何註釋。例如
英語描述
此 SQL 語句添加了一個新的最高得分,以及使用者帳戶取得該分數的日期。
SQL
INSERT INTO Scores (ID, DateofScore, Score)
VALUES (?,?,?)
UPDATE
[edit | edit source]本節應該列出您編寫的使用新詳細資訊更新舊記錄的所有 SQL 語句。您應該用簡單的英語描述 SQL 語句的使用位置及其作用,然後包含 SQL 程式碼以及您需要的任何註釋。例如
英語描述
此 SQL 語句更新了使用者的出生日期,這是在使用者首次登入程式後更新啟動的表單時完成的。
SQL
UPDATE User
SET DoB=?
WHERE ID=?
資料定義語言
[edit | edit source]如果您使用 Open ModelSphere 等程式設計了資料庫表,那麼您可以定義建立表的程式碼,然後將其輸入 MySQL 或 MSSQL 中以建立資料庫。為這部分內容獲取一些分數,並列出您的 DDL。例如,建立名為employees 的表幷包含一些示例列的命令將是
CREATE TABLE employees (
id INTEGER PRIMARY KEY,
first_name CHAR(50) null,
last_name CHAR(75) not null,
dateofbirth DATE null
);
儲存介質識別
[edit | edit source](注意:新 AQA 規範中不需要)
如果您還記得Unit 2 中的硬體部分,這將非常容易。您必須推薦您的系統將如何分發到使用者手中,以及如何由使用者執行。
您需要首先計算分發程式需要佔用多少空間,以及執行程式需要佔用多少空間。
分發軟體需要以某種方式將資料傳輸給使用者。這可以透過 CD-ROM、USB 驅動器、DVD-ROM 或網際網路連線實現。為什麼要選擇其中一種?哪一種最適合?考慮安全性、速度、備份、要傳輸的檔案大小等因素。
執行系統在大多數情況下都需要使用者能夠向您的系統寫入新檔案,例如儲存最高得分、新購買內容等。系統在可行的情況下會變得有多大?您需要推薦一些允許使用者讀寫、安全可靠、容量足夠大且速度足夠快的方案。CD-ROM 在這裡不合適,為什麼?硬碟可能適合,為什麼?
識別適合的資料轉換演算法,以及這些演算法的虛擬碼
[edit | edit source]您將被要求提供有關程式碼設計示例的資訊。如果您有很多程式碼,請挑選 6-8 個最有趣的示例。對於每個程式碼片段,請嘗試包含以下內容
- 頭銜
- 用簡潔的英語解釋
- 虛擬碼
例如,對於登入螢幕,您可以編寫以下內容
用簡潔的英語解釋
[edit | edit source]這段程式碼獲取使用者輸入的使用者名稱和密碼,然後將其與儲存在登入檔案中的登入詳細資訊進行比較。
虛擬碼
[edit | edit source]var userName = Textbox.username var password = Textbox.password
從文字檔案載入可接受的登入名和密碼,並將其儲存到 var acceptableLogins 中
如果 userName 和 password 在 acceptableLogins 中,則
- 允許登入
- 顯示選單螢幕
否則
- 顯示錯誤訊息
結束 if
類定義(圖)以及物件行為和方法的詳細資訊(如果適用)
[edit | edit source]
如果您在編寫程式時使用了面向物件程式設計(強烈建議使用這種方式以獲得最高分數段),則需要在此處描述它。您必須提及以下內容
- 類名
- 任何繼承
- 屬性(變數)以及它們是公共的還是私有的,並解釋它們的用途
- 具有返回值和描述的函式名
- 具有返回值和描述的程式名稱
- 任何執行的覆蓋
使用者介面設計(HCI)原理
[edit | edit source]在所有專案中,您都將使用某種形式的使用者介面,幾乎在所有情況下,這都將是 GUI。本節操作要求您展示和解釋您將用來捕獲資料(輸入)的方法,以及您將用來顯示/列印資料(輸出)的方法。請注意,在每種情況下都提到了“示例”,因此您不必展示每種表單/列印的外觀,每個表單/列印的 4 個示例就足夠了。您可以手工繪製每個示例,或者使用像 Inkscape 這樣的藝術軟體包繪製它們,或者您可以在像 Visual Studio 這樣的軟體包中設計它們,並使用表單的設計檢視。不要使用最終程式碼執行的螢幕截圖,我們需要看到您的設計。
計劃的資料捕獲和輸入設計 UI 示例
[edit | edit source]本節需要展示您表單/介面的設計。不要害怕包含表單在設計檢視中的早期螢幕截圖。請記住,我們不是根據工作程式碼來評分本節,而是根據每個表單/介面的設計理念來評分。您必須說明您的推理
- 複選框/單選按鈕
- 下拉列表
- 元素的定位
- 配色方案
- 導航的簡便性
您可以透過標註每個螢幕截圖來完成此操作。
計劃的有效輸出設計 UI 示例
[edit | edit source]這可能是以下幾種情況之一
- 您系統計劃生成的報告的設計
- 遊戲或測驗的高分榜
- 顯示分數、生命值等的遊戲畫面
- 顯示資料的圖表
- 任何計算並顯示給使用者的專案
使用與上一節相同的原理,您必須完成這些示例的標註版本。
計劃用於資料安全性和完整性的措施描述
[edit | edit source](注意:新規範不需要)
安全性和完整性略有不同。
安全是指防止未經授權的人員訪問您的工作區域。這可能包括學生訪問彼此的考試分數、客戶訪問其他客戶的詳細資訊、學生訪問考試分數,或者任何與資料保護法衝突的行為。為此,您需要實施安全系統,例如使用者名稱和密碼、訪問許可權和限制區域。您可能擁有僅對特定使用者顯示的某些按鈕和區域。如果它們是受限使用者,他們將看不到系統的一部分,而管理員使用者則應該能夠看到所有內容。
完整性是指確保您的資料不會“損壞”。這意味著確保某些資料位始終採用正確的格式或不違反某些規則。例如,如果您有一個出生日期,您不希望人們在該欄位中插入姓名。您如何做到這一點?使用驗證規則。在此處寫下關於它們的說明。您可能還想確保您的資料庫保持其 參照完整性。這將防止人們連結到不存在的其他表中的記錄。談談您將如何做到這一點。
計劃用於系統安全的措施描述
[edit | edit source](注意:新規範不需要)
您不希望未經授權的人員訪問您的資料。這可能包括跟蹤者試圖查詢儲存在您系統中的個人詳細資訊、學生試圖作弊等。您可能建議終端使用者將資料儲存在安全位置或作業系統密碼後面。或者,可以使用主密碼進入您的系統。
您還應說明系統在出現損壞或丟失情況下的恢復方式。說明您將用來恢復系統/重新安裝等的方法。
總體測試策略
[edit | edit source](注意:新規範不需要)
您可以透過多種不同的方式測試您的系統。本節要求您考慮每種方式,並說明您將如何使用它們來測試您的系統。不要僅僅描述每種方式,您必須說明您將如何使用它們來測試您的系統。
黑盒測試
[edit | edit source]
在這種模式下,您不關心所測試內容背後的程式碼,您只知道特定資料輸入應該產生什麼結果。這對於具有多個可能輸入的複雜子例程很有用。例如,測試搜尋演算法。如果您遇到任何問題,則需要找到並修復它們。為此,我們使用...
白盒測試
[edit | edit source]
在這種情況下,您將盡力測試程式碼中的所有“路徑”。這意味著檢視您的程式碼,並嘗試設計出測試,以測試您編寫的每個邏輯語句。例如,如果您有一個 if 語句用於檢查密碼是否正確,請進行測試,以檢視在插入正確密碼和插入錯誤密碼時它是否正常工作。您應該包括以下內容
- if 語句
- while 迴圈
跟蹤表
[edit | edit source]這是一個查詢和修復問題的絕佳方法。您應該嘗試選擇兩到三個最複雜的程式碼片段來進行跟蹤表。透過使用它,您可以證明程式碼有效。