C語言程序設(shè)計圖書管理系統(tǒng)_第1頁
C語言程序設(shè)計圖書管理系統(tǒng)_第2頁
C語言程序設(shè)計圖書管理系統(tǒng)_第3頁
C語言程序設(shè)計圖書管理系統(tǒng)_第4頁
C語言程序設(shè)計圖書管理系統(tǒng)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 C語言程序設(shè)計 實驗報告題 目: 圖書管理管理系統(tǒng)院 系: 信息科技學(xué)院專 業(yè): 姓 名: 學(xué) 號: 指導(dǎo)教師: 楊呈勇 日 期: 09-09-181 問題定義 .32 系統(tǒng)設(shè)計 321 總體設(shè)計422 詳細(xì)設(shè)計4 借書模塊 4 圖書維護(hù) 5 新增記錄 5 更改系統(tǒng). 6刪除系統(tǒng) 6 查找系統(tǒng). 6 顯示系統(tǒng) . 73 系統(tǒng)實現(xiàn) 103.1 編碼 8 程序預(yù)處理 .9 主函數(shù)main() .94 系統(tǒng)維護(hù) 165 歸納總結(jié) 165.1 開發(fā)經(jīng)驗 165.2 實訓(xùn)中遇到的問題及解決方法 165.3 設(shè)計中的不足之處165.4 感想和心得體會 16圖書管理系統(tǒng) 本題目設(shè)計目的是訓(xùn)練學(xué)生的基本編程

2、能力,了解管理信息系統(tǒng)的開發(fā)流程,熟悉C語言的文件和單鏈表的各種基本操作。本程序中涉及結(jié)構(gòu)體、單鏈表、文件及各種語句的運(yùn)用如for();switch();if.else等方面的知識。通過本程序的訓(xùn)練,使學(xué)生能對C語言的文件操作有一個更深刻的了解,初步掌握鏈表的一些結(jié)構(gòu)及構(gòu)成。掌握利用單鏈表存儲結(jié)構(gòu)實現(xiàn)對學(xué)生成績管理的原理,為進(jìn)一步開發(fā)出高質(zhì)量的管理信息系統(tǒng)打下堅實的基礎(chǔ)。1、問題定義圖書信息包括:編號、書名、作者名、分類號、出版單位、出版時間、庫存數(shù)量,價格等。 試設(shè)計一圖書信息管理系統(tǒng),使之能提供以下功能: (1)系統(tǒng)以菜單方式工作 (2)圖書信息錄入功能(圖書信息用文件保存) (3)圖書信

3、息瀏覽功能 (4)圖書信息查詢功能 查詢方式:可以按書名,按作者名,按出版單位,按出版時間進(jìn)行查詢。 (5)圖書信息的刪除與修改在問題定義階段要考慮題目的可行性和需求分析,接下來進(jìn)入開發(fā)階段,完成系統(tǒng)設(shè)計和系統(tǒng)實現(xiàn)的任務(wù)。2、系統(tǒng)設(shè)計21 總體設(shè)計采用模塊化的程序設(shè)計方法,即將較大的任務(wù)按照一定的原則分為一個個較小的任務(wù),然后分別設(shè)計各個小任務(wù)。需要注意的是劃分出來的模塊應(yīng)該相對獨立但又相關(guān),且容易理解。可以用模塊化層次結(jié)構(gòu)圖(即模塊圖)來分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。 圖2.1 圖書管理系統(tǒng)功能模塊圖本圖書管理系統(tǒng)要求采用單鏈表

4、實現(xiàn),如圖2.1所示,它由如下四大功能模塊組成:l 借書模塊。通過輸入讀者的編號和圖書的編號,查找到要該借的書,完成借書這一項任務(wù)l 還書模塊。通過輸入讀者的編號和圖書的編號,查找到要該還的書,完成還書這一項任務(wù)l 圖書維護(hù)模塊。完成對圖書信息的維護(hù)。在此圖書管理系統(tǒng)中,它實現(xiàn)了對圖書信息的新曾、更改、刪除、查找和顯示操作,并將追加后的數(shù)據(jù)存入源數(shù)據(jù)文件。l 讀者維護(hù)模塊。一是實現(xiàn)對讀者記錄的存盤,即將讀者信息寫入數(shù)據(jù)文件中; 22 詳細(xì)設(shè)計 借書模塊通過輸入讀者的信息和要借的書的編號。系統(tǒng)顯示相應(yīng)的內(nèi)容,若該文件中沒有數(shù)據(jù),系統(tǒng)會提示單鏈表為空,沒有任何讀者記錄或圖書操作,此時,用戶應(yīng)選擇調(diào)

5、用create()函數(shù),進(jìn)行讀者記錄的輸入,即完成在單鏈表1中添加記錄的操作。值得一提的是,這里的字符串和數(shù)值的輸入分別采用了函數(shù)來實現(xiàn),在函數(shù)中完成輸入數(shù)據(jù)任務(wù),并對數(shù)據(jù)進(jìn)行條件判斷,直到滿足條件為止,這樣一來,大大減少了代碼的重復(fù)和冗余,符合模塊化程序設(shè)計的特點。 還書模塊還書模塊主要實現(xiàn)了在單鏈表中按讀者和圖書的編號查找滿足相關(guān)條件的借書記錄。在用戶選擇4,調(diào)用查詢函數(shù)search()中,為指向保存了讀者信息的單鏈表的首地址的指針變量。為了遵循模塊化編程的原則,我們將在單鏈表中進(jìn)行的指針定位操作,設(shè)計一個int retbook(int bookid) for(int i=0;i<M

6、axbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; /讀出讀者信息 void disp() cout << setw(5) << no <<setw(10) << name<<"借書編號:" for(int i=0;i<Maxbor;i+) if(borbooki!=0) cout << borbooki << "|" cout << ""<<endl

7、; ; 若沒有該記錄,則顯示無此記錄,返回到上一操作。2.2.3 圖書維護(hù)模塊此模塊主要實現(xiàn)了對圖書記錄的新增、更改、刪除、查找和顯示操作。因為圖書記錄是以單鏈表的結(jié)構(gòu)形式存儲的,所以這些操作都在單鏈表中完成。下面分別介紹著4個功能模塊。新增記錄。該操作需要對單鏈表中目標(biāo)節(jié)點的數(shù)據(jù)域中的值進(jìn)行追加新增要輸入圖書的編號和書名,int addbook(int n,char *na) Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na); return 1; return 0; 更改系統(tǒng)。該操作可以將原本錯誤的圖書記錄更改,將之改為正確的

8、記錄。首先輸入原來的記錄的圖書的編號,在此之后輸入新的記錄的書名。刪除系統(tǒng)。該操作可以將原本記錄得圖書信息,在不用之后選擇將此刪除的一種方法,在彈出的窗口輸入原來的圖書的編號,就可以將之刪除。 查找系統(tǒng)。該操作可以幫助讀者快速找到將要借的圖書,只要輸入圖書的編號,如果有這本書,就將顯示出。反之就會顯示不存在。Book *query(int bookid) for (int i=0;i<=top;i+) if (booki.getno()=bookid &&booki.gettag()=0) return &booki; return NULL; 顯示系統(tǒng)。該操作可

9、以顯示出圖書現(xiàn)在的信息。cout << "輸入圖書編號:"<<endl; cin >> bookid; cout << "輸入圖書書名:"<<endl; cin >> bname; addbook(bookid,bname); break; case '2': cout << "輸入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <

10、;< " 該圖書不存在 "<<endl; break; cout << "輸入新的書名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在" <<

11、endl; break; b->delbook(); break; case '4': cout << " 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在"<< endl; break; b->disp(); break; case '5': disp(); break; case '6': clear(); break; defau

12、lt:cout<<"輸入錯誤,請從新輸入:" cout << "輸入圖書編號:"<<endl; cin >> bookid; cout << "輸入圖書書名:"<<endl; cin >> bname; addbook(bookid,bname); break; case '2': cout << "輸入圖書編號:"<<endl; cin >> bookid; b=query(bo

13、okid); if (b=NULL) cout << " 該圖書不存在 "<<endl; break; cout << "輸入新的書名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<&q

14、uot; 該圖書不存在" << endl; break; b->delbook(); break; case '4': cout << " 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在"<< endl; break; b->disp(); break; case '5': disp(); break; case '6&

15、#39;: clear(); break; default:cout<<"輸入錯誤,請從新輸入:" cout << "輸入圖書編號:"<<endl; cin >> bookid; cout << "輸入圖書書名:"<<endl; cin >> bname; addbook(bookid,bname); break; case '2': cout << "輸入圖書編號:"<<endl; cin

16、>> bookid; b=query(bookid); if (b=NULL) cout << " 該圖書不存在 "<<endl; break; cout << "輸入新的書名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid);

17、if (b=NULL) cout <<" 該圖書不存在" << endl; break; b->delbook(); break; case '4': cout << " 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在"<< endl; break; b->disp(); break; case '5':

18、disp(); break; case '6': clear(); break; default:cout<<"輸入錯誤,請從新輸入:" 3、系統(tǒng)實現(xiàn)31 編碼3.1.2 主函數(shù)main()include <iostream> #include <iomanip> #include <string> /輸入/輸出文件流類 #include <fstream> using namespace std; /最多的讀者 const int Maxr=100; /最多的圖書 const int Maxb=1

19、00; /每位讀者最多借五本書 const int Maxbor=5; /圖書庫類,實現(xiàn)對圖書的維護(hù),查找,刪除等 class BDatabase private: /圖書記錄指針 int top; /圖書記錄 Book bookMaxb; public: /構(gòu)造函數(shù),將book.txt讀到book中 BDatabase() Book b; top=-1; fstream file("book.txt",ios:in); while (1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=

20、b; file.close(); /全刪 void clear() top=-1; /增加圖書 int addbook(int n,char *na) Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na); return 1; return 0; /查找圖書 Book *query(int bookid) for (int i=0;i<=top;i+) if (booki.getno()=bookid &&booki.gettag()=0) return &booki; return NULL; /圖書

21、庫維護(hù) void bookdata(); void disp() for (int i=0;i<=top;i+) if (booki.gettag()=0) booki.disp(); /析構(gòu)函數(shù),將book寫到book.txt文件中 BDatabase() fstream file("book.txt",ios:out); for (int i=0;i<=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); ; void BDatabase

22、:bookdata() char choice; char bname40; int bookid; Book *b; while (choice!='0') cout <<"nnnttt圖 書 維 護(hù) "<<endl<<endl; cout<<"tt1 新 增n tt2 更 改ntt3 刪 除ntt4 查 找ntt5 顯 示ntt6 全 刪ntt0 退 出"<<endl; cin >> choice; switch (choice) case '1'

23、: cout << "輸入圖書編號:"<<endl; cin >> bookid; cout << "輸入圖書書名:"<<endl; cin >> bname; addbook(bookid,bname); break; case '2': cout << "輸入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout << &quo

24、t; 該圖書不存在 "<<endl; break; cout << "輸入新的書名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在" << endl; brea

25、k; b->delbook(); break; case '4': cout << " 讀入圖書編號:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 該圖書不存在"<< endl; break; b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<

26、;<"輸入錯誤,請從新輸入:" /main() 函數(shù)的實現(xiàn),程序的主界面的引導(dǎo) int main() char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') cout <<endl<<endl<<"ttt 圖 書 管 理 系 統(tǒng)nnn" cout <<"ttt1 借 書nnttt2 還 書 nnttt3 圖 書

27、維 護(hù)nnttt4 讀 者 維 護(hù)nnttt0 離 開"<<endl; cin >> choice; switch (choice) case '1': cout <<" 借書 讀者編號:" cin >>readerid; cout <<" 圖書編號: " cin >>bookid; /按編號查找 r=ReaderDB.query(readerid); if (NULL=r) cout <<" 不存在該讀者,不能借書"<

28、< endl; break; b=BookDB.query(bookid); if (b=NULL) cout <<" 不存在該圖書,不能借書"<< endl; break; if (b->borrowbook()=0) cout << " 該圖書已借出,不能借書"<< endl; break; r->borrowbook(b->getno(); break; case '2': cout<<"還書n 讀者編號:" cin >&g

29、t;readerid; cout << " 圖書編號:" cin >>bookid; r=ReaderDB.query(readerid); if (r=NULL) cout <<" 不存在該讀者,不能還書" << endl; break; b=BookDB.query(bookid); if (b=NULL) cout <<" 不存在該圖書,不能還書" <<endl; break; b->retbook(); r->retbook(b->get

30、no(); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<"輸入錯誤,請從新輸入:" 4、系統(tǒng)維護(hù)經(jīng)測試與調(diào)試確認(rèn)軟件無錯時,開發(fā)就告一段落,這時可以交付軟件供用戶使用,但是在軟件的使用過程中還會面臨更加漫長的工作,即軟件維護(hù)。一般維護(hù)的工作有:更改使用中發(fā)現(xiàn)的錯誤;為適應(yīng)實際環(huán)境而對程序進(jìn)行修改;為滿足新的需求而對程序作必要的改進(jìn)等等。5、歸納總結(jié)51 開發(fā)經(jīng)驗通過對本題目的開發(fā),體會到要掌握以下幾點內(nèi)容。l 大程序的設(shè)計風(fēng)格。按“自頂向下,逐步細(xì)化,模塊化”的方法進(jìn)行程序設(shè)計。l 編寫主函數(shù),并進(jìn)行測試與調(diào)試。當(dāng)被調(diào)函數(shù)又需要調(diào)用其他函數(shù)時,也要遵循逐步細(xì)化的原則。C語言提供豐富的庫函數(shù),編程序時要善于使用庫函數(shù),避免不必要的勞動。l 定義函數(shù)時,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論