簡易的書店管理系統(tǒng)
設計目的:
1. 提高分析問題、解決問題的能力以及實際動手能力。
2. 深入理解C語言中控制語句、數(shù)組、函數(shù)、指針、結構體等知識的滲透交互應用,提高用C語言解決實際問題的技術和能力。
3. 初步理解數(shù)據(jù)處理的一般方法,了解數(shù)據(jù)的讀取、處理、保存等技術。
4. 通過具體而微的圖書管理系統(tǒng),初步了解系統(tǒng)開發(fā)的一般過程、形式。了解并基本掌握結構化程序設計,加強對一個系統(tǒng)開發(fā)的整體把控能力。
設計環(huán)境:? DEV-C 5.0 / Visual C6.0
實驗項目及分析:
0. 前言
軟件開發(fā)流程(Software development process)即軟件設計思路和方法的一般過程,包括設計軟件的功能和實現(xiàn)的算法和方法、軟件的總體結構設計和模塊設計、編程和調試、程序聯(lián)調和測試以及編寫、提交程序(請同學們查閱軟件開發(fā)流程的相關文獻)。
作為一個小系統(tǒng),本實驗的開發(fā)過程大致包括:功能(需求)分析、系統(tǒng)設計、編程實現(xiàn)和調試、測試、提交程序和相關文檔。
1. 功能(需求)分析
?????? 書店為了能實現(xiàn)日常的經(jīng)營,經(jīng)常涉及到到事物及應該具有的功能是:圖書入庫(進書采購時)、圖書銷售、查看圖書的庫存情況(清單)、圖書刪除、數(shù)據(jù)保存、數(shù)據(jù)備份等功能。
在現(xiàn)實中的商店,商品都具有一個條形碼,用來唯一識別商品種類。這是一個重要的數(shù)據(jù)信息,對于圖書來說,就是ISBN號,現(xiàn)實商店中都用條碼閱讀器來閱讀,本實驗中條件所限,使用鍵盤輸入書號來模擬條碼閱讀器。下圖是數(shù)據(jù)流動示意圖:
由圖中可見,所有的功能操作都圍繞著bk數(shù)組作為數(shù)據(jù)基礎,數(shù)組bk的數(shù)據(jù)來自文件bookdata.txt,bk數(shù)組數(shù)據(jù)的變化,最終也要保存在該文件。
2. 系統(tǒng)設計
?????? 2.0 涉及到的數(shù)據(jù)結構
- 圖書信息數(shù)據(jù)類型,采用結構體,包含了書號、書名、作者、單價、庫存數(shù)量等核心信息:
typedef struct
{char isbn[10];? ??? /*書號*/
char bkName[20];??? ??? /*書名*/
char author[10];??? ??? /*作者*/
float price; ?? ??? ??? /*單價*/
int num;??? ??? ??? ??? /*數(shù)量(單位:冊)*/
} Book;
- 最大數(shù)組長度,實驗中設置為2000;
#define MAXNUM 2000
- 圖書數(shù)據(jù)庫,用Book類型的數(shù)組bk保存,每個數(shù)組單元代表一種圖書,退出系統(tǒng)時應該把數(shù)組中的數(shù)據(jù)保存在文件bookdata.txt中,啟動程序時數(shù)組從文件中讀取數(shù)據(jù)。數(shù)組設置為全局數(shù)組:
BOOK bk[MANUM];
- 圖書種類數(shù)量,為全局變量,退出系統(tǒng)時應該保存在文件中:
int bookNum =0;? /*不同圖書的數(shù)量,初始值為0*/
2.1 圖書入庫(采購):
采購后,把采購的圖書數(shù)據(jù)輸入到系統(tǒng):讀取條形碼(ISBN號),如果該書已經(jīng)存在(書號已經(jīng)在數(shù)據(jù)庫也就是bk數(shù)組),直接顯示該圖書信息,輸入數(shù)量后,修改書庫中的圖書數(shù)量;如果書號不在書庫,則錄入該圖書詳細信息,并添加信息到書庫bk數(shù)組。
相關函數(shù)原型:void purchase ()
2.2 圖書銷售:
如果顧客將購買某本書,營業(yè)員讀取條形碼(ISBN號),系統(tǒng)會告知該書是否在庫存清單中,如果不在,顯示適當?shù)奶崾拘畔?;如果在,系統(tǒng)顯示該書的詳細信息并詢問所需的冊數(shù)。如果庫存書的冊數(shù)不足,顯示相應的銷售失敗的提示信息;冊數(shù)足夠則顯示這些書的總價格,此時銷售成功,在書庫中的冊數(shù)減去銷售的冊數(shù)。
相關函數(shù)原型:void sale()
2.3 圖書列表:
顯示庫存中現(xiàn)有的圖書,每20行暫停,主要用于查看和測試。
相關函數(shù)原型:void list()
2.4 打開和保存數(shù)據(jù)文件:
所有圖書相關信息都可以保存在磁盤文件(data.txt)上,程序開始后,先從數(shù)據(jù)文件讀取數(shù)據(jù)(到數(shù)組),以數(shù)組為中心進行圖書進、銷等操作;所有操作結束后,退出程序時必須把數(shù)組數(shù)據(jù)保存回磁盤文件,并把原數(shù)據(jù)文件作為備份文件data.bak。
相關函數(shù)原型:void readData(),從文件讀取數(shù)據(jù)到bk數(shù)組。
void saveData()? 保存bk數(shù)組的數(shù)據(jù)到文件,同時備份舊文件。
2.5 友好的界面:
要求有友好的操作界面,以上功能都能在界面中以適當?shù)男问襟w現(xiàn)并方便地操作。
相關函數(shù)原型:? int showSel():清屏并顯示功能選項并返回選項的序號。
2.6 文件結構:
前兩字節(jié)存放記錄個數(shù)(即不同書的數(shù)量bookNum),這兩個字節(jié)之后的內(nèi)容是每個不同的書具體信息記錄(即用來存放bk數(shù)組的所有有效數(shù)據(jù))
2.7 可以自由發(fā)揮,實現(xiàn)其他相關功能,比如圖書查詢等。(該部分請根據(jù)自己的設計進行完善,文字可自行修改)
2.8圖書查詢:
如果顧客需要通過書號、書名、作者、價格....等查詢圖書的相關信息;我們要根據(jù)客戶需求去查詢相關信息;通過書號查詢看書庫中是否存在該圖書,然后顯示相關信息;通過書名查詢書庫中的圖書,還可以通過查詢作者看該作者的圖書信息等。
相關函數(shù)原型:void find()
void isbnFind()
void bkNameFind()
void authorFind()
void priceFind()
??? 2.9圖書刪除:
?通過查詢書號刪除書庫中一些圖書的信息;使得這些刪除的圖書不在圖書列表中顯示。
相關函數(shù)原型:void Delete()