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

- 主選單
- 調整產品
- 新增產品
- 移除產品
- 更新產品
- 銷售商品
- 調整員工
- 新增員工
- 移除員工
- 更新員工
- 報表
- 巧克力
- 啤酒
- 香腸
- 調整產品
更重要的是,你可以繪製一個漂亮的圖表,顯示所有內容如何相互關聯。
如果你正在編寫一個非常複雜的編碼專案,那麼你可能使用程式碼模組,一些模組建立在其他模組的基礎上。你可能還在使用類,你需要展示類繼承圖。
與你的分析非常相似。如果你從那時起沒有進行任何更改,並且它是規範化的,只需將資料複製到這裡。你將在第二部分的驗證區域進行更多工作。寫下值在程式執行期間如何儲存以及哪些資料需要長期儲存,資料是儲存在資料庫表中還是檔案中?
如果你將任何內容儲存到文字檔案或 XML 檔案中,請在此處說明這些檔案如何組織。
如果你在程式碼中使用記錄或結構,請在此處說明它們,以及它們的工作方式。
如果你要讓使用者輸入資料,你肯定需要驗證他們插入的資料。例如,如果你要讓他們填寫新的客戶記錄,你將擁有諸如職稱、姓氏、出生日期、腳趾數量等欄位。你希望他們輸入如下資料:
Mr. Paul Louhisalo 11/08/68 49
如果他們輸入以下內容會發生什麼?
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 | 不,我們無法阻止人們故意惡意行為,您可以嘗試編碼一些檢查,但請注意“Scunthorpe 問題”! |
| 出生日期 | 資料型別(日期) | 確保他們輸入了正確的出生日期 | 請插入有效的日期 | 果凍 | 是 |
| 腳趾數量 | 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]如果您記得第二單元中的硬體部分,這將非常容易。您必須推薦如何將您的系統分發給使用者,然後使用者如何執行系統。
您需要首先計算程式分發時需要多少空間,以及執行時需要多少空間。
分發軟體需要以某種方式將資料傳輸給使用者。這可以透過 CD-ROM、USB 驅動器、DVD-ROM 或網際網路連線來實現。您為什麼要選擇每種方式?哪種最合適?考慮安全、速度、備份、傳輸檔案的大小。
在大多數情況下,執行系統需要使用者能夠向系統寫入新檔案,例如儲存最高得分、新購買的商品等。系統在實際情況下會變得多大?您需要推薦一些允許使用者讀取和寫入的內容,一些安全可靠的內容,一些足夠大且足夠快的內容以處理所有內容。CD-ROM 在這裡不合適,為什麼?硬碟可以適合,為什麼?
識別適合資料轉換的演算法,以及這些演算法的虛擬碼
[edit | edit source]您將被要求提供設計程式碼的示例。如果您有大量程式碼,請選擇 6-8 個最有趣的示例。對於每一部分程式碼,請嘗試包含以下內容
- 標題
- 簡單的英語解釋
- 虛擬碼
例如,使用登入螢幕,您可以編寫以下內容
這段程式碼獲取使用者輸入的使用者名稱和密碼,然後將其與登入檔案中儲存的登入詳細資訊進行比較。
var userName = Textbox.username var password = Textbox.password
從文字檔案載入可接受的登入名和密碼,並將其儲存到 var acceptableLogins 中
如果 userName 和 password 在 acceptableLogins 中,則
- 允許登入
- 顯示選單螢幕
否則
- 顯示錯誤訊息
結束 if

如果你在編寫程式時使用了面向物件程式設計(強烈建議使用這種方法來獲得最高分),你需要在這裡描述它。你必須提到以下內容:
- 類名
- 任何繼承關係
- 屬性(變數),以及它們是公共的還是私有的,解釋它們的作用
- 函式名,包括返回值和描述
- 過程名,包括返回值和描述
- 任何執行的覆蓋操作
在所有專案中,你都會使用某種形式的使用者介面,在幾乎所有情況下,它都是一個 GUI。本節要求你展示並解釋你將用來獲取資料(輸入)的方法,以及你將用來顯示/列印資料(輸出)的方法。請注意,在每種情況下,它都使用的是“示例”,因此你不需要展示每個表單/列印輸出的外觀,4 個示例就足夠了。你可以手繪每個示例,或使用 Inkscape 等繪圖軟體繪製,或者你也可以在 Visual Studio 等軟體包中設計它們,並使用表單的設計檢視。不要使用最終程式碼執行的螢幕截圖,我們需要看到你的設計。
本節需要展示你的表單/介面的設計。不要害怕在設計檢視中包含表單的早期螢幕截圖。記住,我們不是根據工作程式碼來評分,而是根據每個表單/介面的設計理念。你必須說明你的理由。
- 複選框/單選按鈕
- 下拉列表
- 元素的定位
- 配色方案
- 導航的便捷性
你可以透過對每個螢幕截圖進行標註來做到這一點。
這可能是以下幾種情況中的一種或多種:
- 你的系統計劃生成的一些報告的設計
- 遊戲的排行榜或測驗的排行榜
- 遊戲螢幕,顯示分數、生命值等
- 顯示資料的圖表
- 任何計算並顯示給使用者的專案
使用與上一節相同的論據,你必須完成這些專案的標註版本。
安全性與完整性是略微不同的概念。
**安全性**意味著防止未經授權的人訪問你的工作區域。這可能包括學生訪問彼此的考試成績、客戶訪問其他客戶的詳細資訊、學生訪問考試成績,或任何與資料保護法相沖突的行為。為了做到這一點,你需要實施安全系統,例如使用者名稱和密碼、訪問許可權和限制區域。你可能會有一些按鈕和區域只在某些使用者登入時出現。如果他們是有限制的使用者,他們將無法看到系統中的某些部分,而對於管理員使用者,他們應該能夠看到所有內容。
**完整性**是指確保你的資料不會“損壞”。這意味著確保某些資料始終採用正確的格式,或者不違反某些規則。例如,如果你有一個出生日期,你不會希望人們在該欄位中輸入他們的姓名。你如何做到這一點?使用驗證規則。在這裡寫下關於它們的說明。你可能還想確保你的資料庫保持其 參照完整性。這將防止人們連結到不存在的其他表中的記錄。談談你將如何做到這一點。
你不想讓未經授權的人訪問你的資料。這可能包括跟蹤者試圖查詢儲存在你係統上的個人資訊、學生試圖作弊等。你可能會建議終端使用者將資料儲存在安全的位置或作業系統的密碼後面。或者,有一個主密碼可以進入你的系統。
你還要說明如果系統損壞或丟失,如何恢復系統。說明你將用來恢復系統/重新安裝等的方法。
你可以用多種不同的方法測試你的系統。本節要求你考慮每種方法,並說明你將如何針對每種方法測試你的系統。不要僅僅描述每種方法,你必須說明你將如何使用它們來測試你的系統。

在這種模式下,你並不關心正在測試的程式碼背後的內容,你只知道從特定的資料輸入中應該得到什麼結果。這對於具有多個可能輸入的複雜子程式非常有用。例如,測試搜尋演算法。如果你確實遇到了任何問題,那麼你將不得不找到並修復它們。為此,我們使用......

在白盒測試中,你將盡可能測試程式碼中的所有路徑。這意味著檢視你的程式碼,並嘗試設計一些測試,這些測試將測試你編寫的每個邏輯語句。例如,如果你有一個 if 語句來檢查密碼是否正確,請設計一個測試來檢視它在輸入正確密碼時 **以及** 在輸入錯誤密碼時是否有效。你應該包括以下內容:
- if 語句
- while 迴圈
這是查詢和修復問題的好方法。你應該嘗試選擇兩到三個最複雜的程式碼段,並對其執行跟蹤表。透過使用這種方法,你可以證明程式碼有效。