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