1. 程式人生 > >圖書管理系統設計報告

圖書管理系統設計報告

原始碼:https://blog.csdn.net/k_young1997/article/details/73480766

XXXX大學

C語言課程設計報告

題    目            圖書管理系統設計         

專業班級     XXXX級電腦科學與技術本科X班

組    別            計科第29組               

學生姓名          XXX、XXX、XXX           

(系)           資訊工程系               

指導教師(職稱)       XXX(教授)          

完成時間            xxxx年x月xx日          

XXX大學

課程設計任務書

題目              圖書管理系統設計                  

班級             xxxx級電腦科學與技術本科x班     

學號 xxxxxxxxxxxx         姓名xxx      

學號 xxxxxxxxxxxx         姓名xxx      

學號 xxxxxxxxxxxx         姓名xxx      

一、主要內容:

本課程設計結合本學期所學C語言知識,陣列、函式、結構體、指標、連結串列、檔案讀取操作等等,準備設計開發一個簡單的圖書管理系統。設計開發這個系統需要用到連結串列、檔案讀取操作、結構體、函式、指標、等C語言知識。本課程設計將會實現對圖書資訊的賬號登入、註冊賬號、密碼修改、密碼查詢、查詢、輸出、排序、備份、恢復、圖書借閱和歸還功能。本著簡單、易用的設計原則,本課程設計在儘量優化介面在保證輸入輸出美觀的同時又不失友好的互動介面。

本次設計主要學習內容包括:

(一)進一步學習並熟練掌握C語言語法和程式設計思想。

(二)學習C語言提供的庫函式,熟悉CodeBlocks的開發工具。

(三)學習C語言函式、連結串列、結構體、檔案讀取、指標等知識。

(四)學習軟體的設計與開發過程中所需要思想和細節。

二、基本要求:

(一)質量要求

(1)圖書管理系統的基本功能模組的設計應包括:賬號登入和修改、圖書資訊的瀏覽和儲存、圖書的借閱和歸還。

(2)對圖書管理系統設計並進行除錯、修復、完善、測試。測試圖書資訊的輸入輸出是否正確、測試檔案的讀取與儲存是否正常、測試賬號切換後是否各項功能是否正常執行、測試評估介面是否合理,友好。

(3)定期主動向指導教師彙報任務進度,認真填寫相關報告文件。

(4)按時完成各階段工作,不突擊,不抄襲。

(二)進度要求

(2)明確課程設計任務,蒐集資料:xxxx年x月xx日—x月xx日。

(3)完成程式的設計與實現,撰寫課程設計論文初稿:xxxx年x月xx日—x月xx日。

(4)與指導教師溝通,完成課程設計論文定稿:xxxx年x月xx日—xxxx年x月xx日。

(5)進入課程設計論文審閱階段,準備答辯:xxxx年x月xx日—x月xx日。

三、主要參考資料:

[1] 甘勇,李曄,盧冰.中國鐵道出版.《C語言程式設計(第二版) 》 

[2] 河南工業大學同學的圖書管理系統的功能的借鑑。

[3] 啊哈磊.人民郵電出版社.《啊哈!演算法》

[4] 程傑,清華大學出版社.《大話資料結構》

 完 成 期 限:xxxx年x月xx日

指導教師簽名:

年   月   日


目   錄

1概述.1

附錄.19


1概述

1.1設計思想

(1)該系統的設計分成幾個相對獨立的模組,這些模組都進行集中式管理。

(2)分層的模組化程式設計思想,整個系統採用模組化結構設計作為應用程式,有較強的可操作性和擴充套件性。

(3)合理的資料設計,在應用系統設計中,相對獨立的模組間以資料相互連線,使各模組間的耦合性較低,方便系統執行,提高系統安全性 。     

1.2設計原則

為了使本系統功能齊全完備,操作簡便,最大限度的提高使用者的使用的體驗,從而滿足使用者的實際需要,在設計開發過程中遵循瞭如下原則:

(1)合法性原則:規範錄入各種圖書資訊和各種資料,對使用者的賬號資訊進行規範儲存。

(2)實用性原則:根據使用者對圖書資訊瀏覽和借閱的基本需求設計各種功能,並能夠處理一些特殊情況的要求,此外,儘可能預留空間,以便擴充功能。

(3)易操作原則:要求設計的系統功能齊全,介面友好,操作方便,必要的地方進行提示。

(4)源程式可讀性原則:為了便於其他設計,維護人員讀懂程式碼或以後的程式碼修改,軟體升級維護,即可能做好程式碼註釋工作。

1.3 課程設計報告內容及分工情況

1.3.1課程設計報告內容

(1)系統功能模組結構圖和程式流程圖

(2)資料結構設計及用法說明

(3)程式結構(畫功能模組圖或流程圖)

(4)各模組的功能

(5).實驗結果(包括輸入資料和輸出結果)

(6)設計體會

(7)參考文獻

1.3.2 課程設計分工情況

本組共有3人,具體分工情況如下:

(1)學號:xxxxxxxxxxx,姓名:xxx,具體負責xxxxxx。

(2)學號:xxxxxxxxxxx,姓名:xxx,具體負責xxxxxx。

(3)學號:xxxxxxxxxxx,姓名:xxx,具體負責xxxxxx。

2總體設計

2.1功能模組圖

       本圖書管理系統分為三個功能模組,分別是賬號管理功能、圖書資訊管理功能、圖書借還管理功能。賬號管理功能可以進行賬號登入、註冊賬號、找回密碼、修改密碼:圖書資訊管理功能可以對圖書資訊進行查詢、排序、修改、恢復、和備份功能:圖書借還管理功能可以查詢使用者的借書記錄、借書、還書功能。功能模組圖如圖2-1所示。

圖2-1圖書管理系統模組圖

2.2主函式 main()                                        

函式的功能:用於聯絡各個功能函式模組,以及退出程式時的退出畫面提示。

函式的入口:整個程式是從主函式開始的。

函式的出口:當從main()的ove函式開始中進入,即顯示出歡迎使用介面;跳出while迴圈,然後退出main()函式,即:退出整個程式。

函式呼叫關係:該函式不被其它函式呼叫。

2.3程式流程圖

       本圖書管理系統在啟動後會先進入登入介面進行登入或各種賬號操作,然後進入圖書資訊管理、圖書借還管理等實用性功能的操作。程式流程圖如圖2-2所示。


圖2-2圖書管理系統流程圖

3       詳細設計

3.1      函式

(1)功能函式ling()

函式的功能:登入賬號

函式的入口:從main()中進入。

函式呼叫關係:被主函式呼叫。

函式的出口:當賬號登入成功返回1然後結束該函式,或輸入密碼錯誤超過三次結束結束整個程式。

(2)功能函式FindByNum()

函式的功能:按書號對圖書進行查詢並輸出。

函式的入口:程式從Find()的switch()開關結構中進入,即sclele的值為1時,開始進入該函式,進入函式後,在儲存圖書資訊的stu結構陣列中進行查詢,找到後進行輸出,若沒找到則輸出“未找到該數”。

函式呼叫關係:被Find()函式呼叫。由switch()開關結構中進入,並在文中無返回值的空值void函式。

函式的出口:當輸出結果資訊用printf()標準輸出到螢幕上,然後結束該函式,而執行Find()函式中“break;”跳出switch()開關函式,繼續執行while迴圈結構。

(3)功能函式SortByScore()

函式的功能:對所有圖書資訊按書名的首字母進行排序,並儲存到檔案“快取區”中。

函式的入口:從Sort()的switch()開關結構中進入,即sexh的值為1的時侯,進入該函式,開始對圖書資訊按書名的首字母進行排序,然後將排序結果儲存到檔案“快取區”中。

函式呼叫關係:被Sort()函式呼叫。由switch()開關結構中進入,並在文中無返回值的空值void函式。

函式的出口:把“排序完成”用printf()標準輸出到螢幕上,然後結束該函式,而執行Sort()函式中“break;”跳出switch()開關函式,繼續執行while迴圈結構。

(4)功能函式output()

函式的功能:輸出所有圖書資訊

函式的入口:從Find()的switch()開關結構中進入,即sclele的值為4時,進入該函式。並呼叫PrintRecord()函式對每一條圖書資訊進行輸出。

函式呼叫關係:被Find()函式呼叫。由switch()開關結構中進入,並在文中無返回值的空值void函式。

函式的出口:將所有圖書資訊都輸入到螢幕上後,執行Find()函式中“break;”跳出switch()開關函式,繼續執行while迴圈結構。

(5)功能函式Huifu ()

函式的功能:將所有圖書的資訊恢復至備份時的狀態

函式的入口:從Menu()的switch()開關結構中進入,即select的值為4時,進入該函式。用freopen("圖書資訊庫.txt","r",stdin)將裡邊的所有圖書資訊都存入記憶體,然後再呼叫save()將所有圖書資訊都存入到“快取區”中。

函式呼叫關係:被Menu()函式呼叫。由switch()開關結構中進入,並在文中無返回值的空值void函式。

函式的出口:將所有圖書資訊都存入到“快取區”中後,執行Menu()函式中“break;”跳出switch()開關函式,繼續執行while迴圈結構。

(6)功能函式BorrowBook()

函式的功能:借閱圖書

函式的入口:從Borrow()的switch()開關結構中進入,即shl的值為2時,進入該函式。之後對使用者的信譽值進行判斷,若低於60將無法借書。然後呼叫FindByName()函式對所借圖書進行搜尋,若存在則輸入借書時間,否則借書失敗。

函式呼叫關係:被Borrow()函式呼叫。由switch()開關結構中進入,並在文中無返回值的空值void函式。

函式的出口: 將借書結果輸入到螢幕上後,執行Borrow ()函式中“break;”跳出switch()開關函式,繼續執行while迴圈結構。

(7)功能函式SendBook ()

函式的功能:歸還圖書     

函式的入口:從Borrow ()的switch()開關結構中進入,即shl的值為3時,進入該函式。之後先判斷該使用者是否有借書記錄,並呼叫FindByName()函式找到還的圖書並對其數量進行修改,最後判斷是否按期歸還圖書和圖書有無破損。

函式呼叫關係:被Borrow ()函式呼叫。由switch()開關結構中進入,並在文中無返回值的空值void函式。

函式的出口: 還書完成後後,執行Borrow()函式中“break;”跳出switch()開關函式,繼續執行while迴圈結構。

(1)賬號登入流程如圖3-1所示。


圖3-1 賬號登入流程圖

(2)按書號查詢圖書流程如圖3-2所示。


 圖3-2按書號查詢流程圖

(3)按書名首字母排序流程圖如圖3-3所示 。


圖3-3按書名首字母排序流程圖

(4)輸出所有圖書資訊流程如圖3-4所示。


圖3-4輸出所有圖書資訊流程圖

(5)恢復備份功能流程如圖3-5所示。


圖3-5恢復備份流程圖

(6)借閱圖書流程如圖3-6所示。

 

       圖3-6借閱圖書流程圖

(7)歸還圖書流程如圖3-7所示。


        圖3-7歸還圖書流程圖

 4、執行結果與除錯

4.1執行結果

(1)在程式開始是進入登入介面進行登入介面或選擇切換賬號時輸出登入介面。該介面可以進行登入操作、註冊新賬號、找回賬號密碼、修改密碼和退出系統。

賬號登入介面如圖4-1所示。

    
     

圖4-1 賬號登陸介面

(2)該介面為主介面,在登入完成後或者從下一級介面返回後輸出該介面。該主介面可以選擇圖書資訊管理功能、圖書借還功能、檢視系統功能介紹、開發人員資訊和退出系統的操作。主介面如圖4-2所示。

  
   

圖4-2 主介面

(3)該介面為圖書管理功能的主介面,可以選擇執行查詢、排序、修改、恢復圖書資訊、備份圖書資訊的操作、返回上一級選單的功能。圖書資訊管理功能介面如圖4-3所示。

 
     

圖4-3圖書資訊管理功能介面

(4)該介面可以實現圖書資訊查詢功能,可以按書號查詢、按書名查詢、按作者查詢、檢視全部圖書資訊、返回上一級選單的功能。查詢功能介面如圖4-4所示。

            

      圖4-4 查詢功能介面

(5)該介面可以進行排序的操作。可以進行按書名首字母排序、按圖書單價升序排序、按圖書單價降序排序,還可以返回上一級選單。排序功能是在記憶體中進行,所以不進行輸出。排序功能介面如圖4-5所示。

             

    圖4-5排序功能介面

(6)該介面可以實現新增圖書、刪除圖書、刪除全部圖書資訊、返回上一級選單的功能。修改功能介面如圖4-6所示。

          

圖4-6修改功能介面

(7)該介面可以實現對使用者借書記錄查詢、圖書借閱、圖書歸還、返回上一級選單的功能。圖書借還管理功能介面如圖4-7所示。

            

圖4-7圖書借還管理功能介面

4軟體除錯

(1)每個選擇介面之後,前一螢幕的內容依舊存在,影響介面的美觀;經過老會長的幫助及上網搜尋,發現利用“system(“cls”);”可以消去前一螢幕的內容;然而接下來又出現新的問題:每次在執行完講資料儲存到檔案的函式後都會輸出紊亂。經過多次除錯和修改後,發現把是因為freopen(”CON”,stdout)執行不穩定導致,在更換了儲存資料的方法後結決了此問題。

(2)在增加了切換賬號功能後,在建立新賬號後儲存到檔案的使用者借還書記錄總是出錯但記憶體中沒錯,經過除錯發現是因為在新增賬號時用於儲存新賬號借還書記錄的指標名與一個變數名相同造成每次都判斷錯誤。最後更換了變數名,並使該指標每次使用前都指向NULL。

(3)在借書時不能判斷是因為圖書數量不足導致不能借閱還是因為沒用該圖書導致的不能借閱,最後給每種情況標記變數都設定了一不同的值來區分兩種不同的情況。

(4)最開始在每次關閉程式後在下次使用前需要手動恢復檔案中的資料,不能連續的使用資料,最後加了一個檔案來儲存各類資料的數量以使資料能夠連續自主的呼叫,不需要再人工修改。

結束語

本系統包含51個函式,實現了圖書管理系統所需的基本功能。系統功能大致分為三個模組,分別是登入模組、圖書資訊管理模組和圖書借還模組。啟動程式後首先執行的是登入功能。在此功能中可以實現賬號登入、註冊賬號、找回賬號密碼、修改賬號密碼功能。登入時,若輸入密碼錯誤次數達到三次系統將自動關閉。在註冊賬號時若註冊的賬號已存在則不能再進行註冊。修改密碼時增加了驗證碼功能。在圖書資訊管理模組中可以進行圖書的查詢、排序、新增、刪除、備份圖書資訊、恢復圖書資訊和切換賬號功能。在圖書借還功能模組可以進行圖書的借閱、歸還、借書記錄查詢功能。本系統在資訊儲存時採用了兩種方式。在儲存圖書資訊和賬號資訊時用的是結構陣列,在儲存使用者借書記錄時用的是連結串列。通過此次圖書管理系統的設計熟練了結構陣列、連結串列、檔案的操作,同時對編寫小型的系統有了一定的瞭解,對於細節方面考慮的比以前有很大提升。

xxx:在該設計中主要完成了所有程式碼的實現,並最終除錯實現了該圖書管理系統的全部功能並完成了大部分的設計報告。在設計的過程中熟練了對檔案的各種操作,連結串列和結構陣列的使用,清屏函式和暫停函式的使用,對做一個專案的過程有了一個大概的認識,知道了大致的規劃。在設計過程中發現一些檔案的操作和清屏函式會有衝突,通過改變對檔案的操作解決了此問題;

xxx:除了xxx設計的這個圖書管理系統,我自己也嘗試著設計了一個圖書管理系統的功能,因此也發現了很多問題,比如說:在用add()函式新增新增圖書資訊時,我就忘了字元型資料本身會吃掉回車的這一特點,忘了在%c前面加上空格,導致程式在迴圈的過程中一直無法正常顯示結果。但是,通過仔細耐心的檢查與對錯誤的分析,又在課本的相關章節進行了查閱,最終發現了這一問題。同時,我更加熟悉了結構體的使用,對函式的呼叫方式更加清楚。還有就是初步瞭解了函式指標的概念,能夠使用基礎的函式指標。同時,這也是我第一次嘗試畫各種各樣的流程圖,雖然畫的不好,但這確實是我的第一次嘗試,也覺得充滿了樂趣。

xxx:在本系統的設計中我參加設計了少量函式語句以及製作流程圖等任務,在這次的設計前我原本對函式和結構體等了解並不太清楚,通過這次的設計我清楚了這些語句的運用,並且我學會了檔案的操作,在檔案的修改等地方出現了問題,後來通過查閱資料和討論解決了這個問題。

參考資料

[1] 《C語言程式設計(第二版)》,甘勇等編著,中國鐵道出版社,2015年9月

[2] 《C語言程式設計》,蘇小紅等主編,高等教育出版社,2011年

[3] 《C和指標》,徐波譯,人民郵電出版社,2008年

[4] 《C Primer Plus第6版 中文版》,姜佑 譯,人民郵電出版社,2016年

[5] 《大話資料結構》,程傑,清華大學出版社,2011年6月

[6] 《啊哈!演算法》,啊哈磊,人民郵電出版社

附錄

原始碼