語言程序設計圖書管理系統_第1頁
語言程序設計圖書管理系統_第2頁
語言程序設計圖書管理系統_第3頁
語言程序設計圖書管理系統_第4頁
語言程序設計圖書管理系統_第5頁
已閱讀5頁,還剩12頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

5、用create()函數,進行讀者記錄的輸入,即完成在單鏈表1中添加記錄的操作。值得一提的是,這里的字符串和數值的輸入分別采用了函數來實現,在函數中完成輸入數據任務,并對數據進行條件判斷,直到滿足條件為止,這樣一來,大大減少了代碼的重復和冗余,符合模塊化程序設計的特點。 還書模塊還書模塊主要實現了在單鏈表中按讀者和圖書的編號查找滿足相關條件的借書記錄。在用戶選擇4,調用查詢函數search()中,為指向保存了讀者信息的單鏈表的首地址的指針變量。為了遵循模塊化編程的原則,我們將在單鏈表中進行的指針定位操作,設計一個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 圖書維護模塊此模塊主要實現了對圖書記錄的新增、更改、刪除、查找和顯示操作。因為圖書記錄是以單鏈表的結構形式存儲的,所以這些操作都在單鏈表中完成。下面分別介紹著4個功能模塊。新增記錄。該操作需要對單鏈表中目標節點的數據域中的值進行追加新增要輸入圖書的編號和書名,int addbook(int n,char *na) Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na); return 1; return 0; 更改系統。該操作可以將原本錯誤的圖書記錄更改,將之改為正確的

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

9、以顯示出圖書現在的信息。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、系統實現31 編碼3.1.2 主函數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; /圖書庫類,實現對圖書的維護,查找,刪除等 class BDatabase private: /圖書記錄指針 int top; /圖書記錄 Book bookMaxb; public: /構造函數,將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、庫維護 void bookdata(); void disp() for (int i=0;i<=top;i+) if (booki.gettag()=0) booki.disp(); /析構函數,將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圖 書 維 護 "<<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() 函數的實現,程序的主界面的引導 int main() char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') cout <<endl<<endl<<"ttt 圖 書 管 理 系 統nnn" cout <<"ttt1 借 書nnttt2 還 書 nnttt3 圖 書

27、維 護nnttt4 讀 者 維 護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、系統維護經測試與調試確認軟件無錯時,開發就告一段落,這時可以交付軟件供用戶使用,但是在軟件的使用過程中還會面臨更加漫長的工作,即軟件維護。一般維護的工作有:更改使用中發現的錯誤;為適應實際環境而對程序進行修改;為滿足新的需求而對程序作必要的改進等等。5、歸納總結51 開發經驗通過對本題目的開發,體會到要掌握以下幾點內容。l 大程序的設計風格。按“自頂向下,逐步細化,模塊化”的方法進行程序設計。l 編寫主函數,并進行測試與調試。當被調函數又需要調用其他函數時,也要遵循逐步細化的原則。C語言提供豐富的庫函數,編程序時要善于使用庫函數,避免不必要的勞動。l 定義函數時,

溫馨提示

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

評論

0/150

提交評論