c語言圖書管理系統(tǒng)課程設(shè)計(jì)分析報(bào)告_第1頁
c語言圖書管理系統(tǒng)課程設(shè)計(jì)分析報(bào)告_第2頁
c語言圖書管理系統(tǒng)課程設(shè)計(jì)分析報(bào)告_第3頁
c語言圖書管理系統(tǒng)課程設(shè)計(jì)分析報(bào)告_第4頁
c語言圖書管理系統(tǒng)課程設(shè)計(jì)分析報(bào)告_第5頁
已閱讀5頁,還剩44頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、C語言圖書管理系統(tǒng)課程設(shè)計(jì)報(bào) 告作者:日期:沈航北方科技學(xué)院課程設(shè)計(jì)說明書課程名稱C語言課程設(shè)計(jì)教學(xué)部專業(yè)數(shù)控班級(jí)B042111學(xué)號(hào)B04211123學(xué)生姓名 田文指導(dǎo)教師趙小磊72012年6月鏈表實(shí)現(xiàn)圖書信息操作田文目錄摘要51緒論52系統(tǒng)分析5.2.1功能需求5.22數(shù)據(jù)需求6.23性能需求6.3總體設(shè)計(jì)6.3.1 功能模塊設(shè)計(jì)6.3.2 系統(tǒng)設(shè)計(jì)方案 6.4詳細(xì)設(shè)計(jì)7.4.1登錄模塊742借書管理模塊8.4.3還書管理模塊9.5調(diào)試與測(cè)試-105.1調(diào)試1052測(cè)試1.16結(jié)論12結(jié)束語12參考文獻(xiàn)12附錄1用戶手冊(cè)(另起一頁).13附錄2 一源程序(另起一頁) 17經(jīng)過對(duì)程序設(shè)計(jì)題目的

2、分析可知,整個(gè)程序的設(shè)計(jì)實(shí)現(xiàn)大致分為五個(gè)模塊,其中每 一個(gè)模塊對(duì)應(yīng)一個(gè)函數(shù),他們的功能分別是:圖書信息輸入函數(shù)input。,借閱圖書函數(shù) (borrow),增力口刪除圖書函數(shù)(adddelet),圖書查詢函數(shù)(search),以及歸還圖書信息函 數(shù)(giveback)。在這些函數(shù)當(dāng)中,這四個(gè)函數(shù)的實(shí)現(xiàn)嚴(yán)格按照題目的要求。1、 圖書信息輸入函數(shù)主要功能是從鍵盤輸入圖書信息并將其寫入文件中作為圖書館的書庫(kù),以便對(duì)下面的函數(shù)進(jìn)行運(yùn)行,此函數(shù)是基礎(chǔ)2、 圖書借閱函數(shù)主要借閱圖書的功能和錄入學(xué)生應(yīng)該還書的時(shí)間;3、 圖書歸還函數(shù)主要實(shí)現(xiàn)借閱圖書后,歸還圖書的功能,并把應(yīng)該還書的時(shí)間和實(shí)際還書的時(shí)間進(jìn)行比

3、較過期時(shí)輸出學(xué)生的信息,也是該程序的的一個(gè)重點(diǎn)4、 增加刪除圖書函數(shù)實(shí)現(xiàn)的功能是實(shí)現(xiàn)對(duì)圖書的刪除;5、 圖書查詢函數(shù)允許按照?qǐng)D書編號(hào),書名,作者,出版社進(jìn)行查詢,并將查詢信息輸出;6、 退出函數(shù)該函數(shù)主要實(shí)現(xiàn)退出運(yùn)行界面的功能.除上面介紹的功能之外,程序還具有退出功能,可以在程序的一次運(yùn)行當(dāng)中循環(huán)執(zhí) 行所有的功能,并根據(jù)需要終止程序的執(zhí)行。每一個(gè)圖書記錄都包含:圖書編號(hào),名稱,出版社,作者,現(xiàn)有數(shù)量和總量在程序當(dāng)中,將圖書記錄類型定義為結(jié)構(gòu)體類型,并把它寫入d:Miuya n.txt 中,其他函數(shù)每次對(duì)圖書記錄的訪問,其數(shù)據(jù)來源都是d:liuya n. txt文件,這樣做不但可以保證圖書數(shù)據(jù)的

4、一致性,而且可以對(duì)圖書數(shù)據(jù)進(jìn)行永久保存,保證每次運(yùn)行程序都可以采用原來的數(shù)據(jù)。1緒論整個(gè)程序的設(shè)計(jì)實(shí)現(xiàn)大致分為五個(gè)模塊,其中每一個(gè)模塊對(duì)應(yīng)一個(gè)函數(shù),他們的功 能分別是:圖書信息輸入函數(shù)input。,借閱圖書函數(shù)(borrow),增加刪除圖書函數(shù)(adddelet),圖書查詢函數(shù)(search) 以及歸還圖書信息函數(shù)(giveback)。在 這些函數(shù)當(dāng)中,這四個(gè)函數(shù)的實(shí)現(xiàn)嚴(yán)格按照題目的要求。2系統(tǒng)分析2.1功能需求設(shè)計(jì)一個(gè)通過鏈表實(shí)現(xiàn)對(duì)圖書信息進(jìn)行管理的程序,要求完成以下功能:1 .建立一個(gè)鏈表,每個(gè)結(jié)點(diǎn)應(yīng)包含以下信息:圖書號(hào)'書名及出版社'價(jià)格'ISBN、作者、冊(cè)數(shù);2

5、將輸入信息按圖書號(hào)進(jìn)行從小到大的排序;3 .實(shí)現(xiàn)查詢功能一一輸入書名,查詢輸出相關(guān)信息;4 .實(shí)現(xiàn)插入功能一一輸入圖書信息并插入有序鏈表中;5 .實(shí)現(xiàn)刪除功能一一輸入書名或書號(hào),可將其信息從鏈表中刪除;6 .統(tǒng)計(jì)鏈表中圖書總價(jià)值,并在屏幕上輸出;7 .統(tǒng)計(jì)該鏈表中價(jià)值超過某一數(shù)目的圖書總數(shù),并在屏幕上輸出。8 .有界面友好易于使用的菜單。2.2 數(shù)據(jù)需求需要向系統(tǒng)輸入圖書號(hào)、書名及出版社、價(jià)格、ISBN作者、冊(cè)數(shù)2.3 性能需求在運(yùn)行本程序時(shí)只要按照正確的操作方法不會(huì)出現(xiàn)無法運(yùn)行的情況,系統(tǒng)穩(wěn)定性好,安全,可靠。3總體設(shè)計(jì)3.1 功能模塊設(shè)計(jì)根據(jù)分析整個(gè)系統(tǒng)主要?jiǎng)澐譃?個(gè)功能模塊,分別執(zhí)行要求

6、中的功能。該系統(tǒng)需要有添加,刪 除,查詢,修改,累加,循環(huán)顯示主菜單,保存信息功能,能將會(huì)員卡進(jìn)行注銷,利用顯示函數(shù)將會(huì) 員卡內(nèi)所有信息顯示。要求有循環(huán)顯示菜單工能。功能模塊圖如圖1所示。(1)輸入讀者輸入相關(guān)讀者信息至內(nèi)存中;(2)輸入書籍輸入書籍號(hào),對(duì)已存的書籍信息進(jìn)行查詢;(3)書籍管理模塊輸入相應(yīng)代碼,對(duì)相關(guān)信息進(jìn)行查詢;(4)退出管理模塊主菜單中輸入0退出系統(tǒng)登錄;11圖書管理系統(tǒng)圖1圖書管理系統(tǒng)流程圖管理員版圖書管理系統(tǒng)借書登記還書管理書籍信息修改書 籍 信 息 查 詢圖2管理員版圖書管理系統(tǒng)流程圖圖書查詢系統(tǒng)主界面圖3圖書查詢主界面流程圖3.2系統(tǒng)設(shè)計(jì)方案設(shè)計(jì)一個(gè)總菜單7登錄信息

7、,2查詢管理,3書籍管理系統(tǒng),4退出系統(tǒng)基本功能的實(shí)現(xiàn)都將體現(xiàn)在這幾個(gè)菜單選項(xiàng)中。struct reader *n ext;RD;BK *h_book;RD *h_reader; void Login(); in t Men u();/*登陸/void Menu _select(); void/*主菜單*/Ini t();void Ini t_reader(); void Ini t_book();void In sert_New_Book(); int Fin d();void Fi nd_Select(); void Fi nd_Reader(); void Fin d_Book(); v

8、oid Prin t_reader(); void Prin t_book(); void Borrow_Book(); void Return_Book(); void Save();void Save_Reader(); void Save_Book(); void Load();void Load_Reader();void Load_Book(); void/*主菜單選擇函數(shù)*/*初始化*/初始化讀者/*初始化圖書/*新書入庫(kù)*/*查找菜單*/*查找菜單選擇函數(shù)*/*查找讀者信息*/*查找圖書信息/*打印讀者信息*/打印圖書信息*/*借書函數(shù)*/*還書函數(shù)*/*保存信息*/*保存讀者信

9、息*/*保存圖書信息*/*加載信息/Login。/* 登陸 */ system(nclsH);printf("nnnttt 歡迎登陸本系統(tǒng) nn);printf("nntt系統(tǒng)版權(quán)所有 nnnnnnn")printf(”nnntt 按任意鍵進(jìn)入系統(tǒng)");getchar(); system(Hclsn);int Menu() /* 主菜單 */int sn;printf("ntt圖書管理系統(tǒng)主菜單n“);prin tf(H=nH); printftO-退出系統(tǒng) *nM);printf新書入庫(kù)printf ("*t2-查詢*n"

10、);*n");*n");*n");n"); printf4詳細(xì)設(shè)計(jì)4.1printf (“*t3借書登記 printf ("*t4-一還書管理 prin tf ("= (”請(qǐng)選擇相應(yīng)代碼:");13!lnsertLinklist(Linklist)L)printf("內(nèi)存已滿 nn);exit(OVERFLOW);圖5:輸入書籍信息4.2借書管理模塊主菜單中輸入讀者和書籍信息后,對(duì)已存的書籍進(jìn)行借閱,程序流程如圖4所示。10循環(huán)變量I輸入應(yīng)書日期關(guān)閉文件!圖6借書模塊流程圖4.3還書管理模塊對(duì)于已還書籍進(jìn)行管理,程

11、序流程如圖4所示。圖7還5模塊流程圖5調(diào)試與測(cè)試 5.1調(diào)試調(diào)試是軟件開發(fā)過程中的一個(gè)重要環(huán)節(jié),也是最復(fù)雜,對(duì)軟件開發(fā)者者來說也是最 艱巨的任務(wù)。調(diào)試的任務(wù)是及時(shí)改正測(cè)試過程中發(fā)現(xiàn)的軟件錯(cuò)誤。具體地說,調(diào)試過程 由兩個(gè)步驟組成,它從表示程序中存在錯(cuò)誤的某跡象開始,首先確定錯(cuò)誤的準(zhǔn)確位置, 也就是找出哪個(gè)模塊或哪個(gè)語句引起的錯(cuò)誤。然后仔細(xì)研究推斷代碼以確定問題的原 因,并設(shè)法改正。調(diào)試過程主要是運(yùn)行編制好的程序,然后遇到錯(cuò)誤后根據(jù)系統(tǒng)的提示,找到相關(guān)的 問題所在。本系統(tǒng)調(diào)試過程中遇到問題、原因和解決方法如下面介紹。(1)程序只能在當(dāng)前運(yùn)行時(shí)才能實(shí)現(xiàn)自動(dòng)生成書籍信息,而關(guān)閉系統(tǒng)再次打開添加新讀者又

12、從0開始與之前的讀者重復(fù),導(dǎo)致借還信息程序管理混亂,無法正確運(yùn)行原因:在執(zhí)行后系統(tǒng)沒有記錄當(dāng)前的讀者信息,因?yàn)樽x者信息自動(dòng)按1、2、3、4依次遞增生成系統(tǒng);應(yīng)該記錄最后所生成的讀者信息,在下次運(yùn)行程序時(shí)系統(tǒng)會(huì)接 著上次記錄的讀者信息自動(dòng)依次生成。(2)運(yùn)行完程序一次有錯(cuò)誤提醒原因:上次運(yùn)行程序后沒有關(guān)閉操作界面當(dāng)點(diǎn)擊編譯時(shí)會(huì)有一個(gè)錯(cuò)誤提 示,解決方法:將上一次運(yùn)行時(shí)的操作界面關(guān)閉。(3)設(shè)計(jì)過程中的想法與程序中的不足總的來說這個(gè)程序大致實(shí)現(xiàn)了題目的要求,但是這套程序仍然存在著很多的問題與 不足。比如,程序中主函數(shù)寫的有點(diǎn)繁瑣,有太多的嵌套,不是那么井然有序,條理清 晰,程序注釋也不是很完善,對(duì)

13、信息處理功能還有些不足之處,提示信息不明確。還有就 是沒能做到模糊查詢。這個(gè)系統(tǒng)主要是參照課本手機(jī)通訊錄模版編寫的,同時(shí)也得到了老師和同學(xué)的一些幫助。我在做系統(tǒng)的過程中也遇到了很多問題,有的是知識(shí)不足,有的是考慮不夠 周全。事實(shí)證明,只靠自己的知識(shí)面還是很窄,獨(dú)立處理問題能力不是很強(qiáng),以后還要 加強(qiáng)對(duì)c語言的學(xué)習(xí)。我認(rèn)為對(duì)于C語言編寫的程序來說,使用方法大致都是一樣的,所以如果要改 進(jìn)的話,就是要改進(jìn)一些算法,盡量把界面編寫清楚,提示信息全面,方便易 用。5.2測(cè)試軟件測(cè)試是軟件生存期中的一個(gè)重要階段,是軟件質(zhì)量保證的關(guān)鍵步驟從用戶的角 度來看,普遍希望通過軟件測(cè)試暴露軟件中隱藏的錯(cuò)誤和缺陷,

14、所以軟件測(cè)試應(yīng)該是“為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過程”?;蛘哒f,軟件測(cè)試應(yīng)該根據(jù)軟件開發(fā)各 階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)一批測(cè)試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測(cè)試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤或缺陷。過 度測(cè)試則會(huì)浪費(fèi)許多寶貴的資源。到測(cè)試后期,即使找到了錯(cuò)誤,然而付出了過高的代 價(jià)。測(cè)試數(shù)據(jù)過程如下。(1)登陸功能測(cè)試輸入數(shù)據(jù)1:讀者編號(hào):23,讀者姓名:tianwen,書籍編號(hào):01,書名:xyz作者:XXX,數(shù)量:10預(yù)期結(jié)果:數(shù)據(jù)輸入到系統(tǒng)中;41運(yùn)行結(jié)果:出現(xiàn)圖書管理系統(tǒng)主菜單說明:登陸功能實(shí)現(xiàn)(2)借書功能測(cè)試000(3)還書功能測(cè)試0006結(jié)論計(jì)算機(jī)綜合

15、訓(xùn)練順利完成,任務(wù)書中所提出的要求全部實(shí)現(xiàn), 可以對(duì)會(huì)員 信息進(jìn)行添加、修改、刪除以及按各種信息查找,可將會(huì)員本次消費(fèi)金額累加到會(huì)員卡 上,能夠自動(dòng)生成會(huì)員卡號(hào)并且將各種信息保存到文本文件中。不過這個(gè)程序還有些不夠完善,例如:在添加新會(huì)員時(shí)當(dāng)會(huì)員信息全部輸入之后系統(tǒng)中的全部會(huì)員 信息自動(dòng)顯示,這樣非常占用操作界面,使操作不是十分清晰;再一個(gè)就是系統(tǒng)無法正確識(shí)別身份證號(hào)和電話好碼只能靠會(huì)員卡管理員的認(rèn)真細(xì)心才能減少出 錯(cuò),改進(jìn)方式:調(diào)用一個(gè)可以判斷號(hào)碼位數(shù)的函數(shù),如果輸入位數(shù)不合 法則提出警告重 新輸入。結(jié)束語在這一個(gè)星期的實(shí)踐中,通過編寫這個(gè)圖書管理系統(tǒng),我體會(huì)到了 c語言學(xué)習(xí)的實(shí) 用性。將理

16、論和實(shí)踐結(jié)合在一起,用先進(jìn)的計(jì)算機(jī)工具方便人們的生活。C語言程序的編 寫首先要從大局考慮,把自己編寫整個(gè)程序的思想都寫在草稿上,這樣有助于自己編寫程 序,在編寫時(shí)要完善注釋,方便其他人理解程序。編寫的程序從理論上來說并沒有錯(cuò),但 一上機(jī)就問題不斷。甚至有些課本上的知識(shí)照搬不變,也不能得到正確的結(jié)果。有時(shí)一個(gè) 程序改了一遍又一遍,但就是不能成功,編程顯得枯燥乏味,看似簡(jiǎn)單的程序題,在調(diào)試 時(shí)卻屢屢出錯(cuò)。經(jīng)反復(fù)的修改后,結(jié)果正確了,這時(shí)所有的乏味都顯得那么無力,一切都 是值得的。我認(rèn)為,開發(fā)一套系統(tǒng),最重要的是細(xì)心,并且思考要全面,結(jié)合實(shí)際,充分 考慮到客戶的需求和現(xiàn)實(shí)意義。不管什么系統(tǒng),只用運(yùn)用

17、到實(shí)際應(yīng)用中,才具有 現(xiàn)實(shí)意義。所以c語言程序的實(shí)用性很強(qiáng),我們以后還要更加努力認(rèn)真地學(xué)習(xí) 編程語言。參考文獻(xiàn)附錄1-用戶手"/L點(diǎn)擊運(yùn)行,首先出現(xiàn)的是菜單界面,選擇菜單選項(xiàng)進(jìn)行操作,可進(jìn)行如圖8所示。系統(tǒng)主界面(選擇數(shù)字進(jìn)入,退出系統(tǒng))圖8菜單界面選擇1進(jìn)入系統(tǒng),然后出現(xiàn)功能菜單-aixl圖9登陸功能;輸入讀者和書籍,然后出現(xiàn)功能菜單;圖10圖書管理系統(tǒng)主菜單WD:Progra> FilesMicrosoft Visual StudiolrojectstwDebugt<. exe*附錄2 .源程序#in elude <stdio.h> #in elude &

18、lt;stri ng.h> #in elude <stdlib.h> #defi ne Max 3 typedef struct book(char book_ nu m10;char book_ name20; char book_writer10; int book_kc; int book_xy;struct book *n ext; BK;typedef struct borrow char borrow_book_ nu m10;char limit_date8;/*查找圖書信息*/BO;typedef struct reader/*打印讀者信息*/*打印圖書信息*

19、/*借書函數(shù)*/char reader_ nu m10;char reader_ name10;int right;BO borrowMax;struct reader *n ext;RD;BK *h_book;RD *h_reader;void Logi n();in t Men u();void Menu _select();void In it();void In it_reader();void Ini t_book();void In sert_New_Book();int Fin d();void Fi nd_Select();void Fi nd_Reader();void Fi

20、 nd_Book();void Prin t_reader();void Prin t_book();void Borrow_Book();/*登陸*/*主菜單*/*主菜單選擇函數(shù)*/*初始化*/*初始化讀者*/*初始化圖書*/*新書入庫(kù)*/*查找菜單*/*查找菜單選擇函數(shù)*/*查找讀者信息*/void Return_Book();void Save();void Savevoid SaveReader();Book();/*還書函數(shù)*/*保存信息*/*保存讀者信息*/void Load();void Load_Reader();void Load_Book();/*保存圖書信息/*加載信息*

21、/*加載讀者信息*/void Login()/*登陸*/*加載圖書信息*/system("cls");printf(Hnnnttt 歡迎登陸本系統(tǒng) n");printf(Hnntt系統(tǒng)片反權(quán)所有 nnnnnnn")printfC'nnntt按任意鍵進(jìn)入系統(tǒng)任getchar(); system("cls");)int Menu() /* 主菜單 */ int sn;printf(Hntt圖書管理系統(tǒng)主菜單n“);printf("=n");printf(”*tO -退出系統(tǒng)*nH);printf(”*t1 -新

22、書入庫(kù)*n“);printf("*t2-查詢*nn);printf(”*t3 -借書登記*nM);printf("*t4-還書管理*n");printf("=n");printf("請(qǐng)選擇相應(yīng)代碼:");for(;) sea nf("d”, &sn); fflush(stdi n); if(s n<0|s n>4) printf("n 錯(cuò)誤!請(qǐng)重新輸入:"); else break;return sn;void Menu_select()/*主菜單選擇函數(shù)*/ for(;)循

23、環(huán)調(diào)用模式,保證能進(jìn)行重復(fù)操作*/ switch(Menu() /* 功能選擇 */ case 0:systemic。);/*清楚屏幕先前的顯示內(nèi)容*/Save(); printf("nnt 文件保存成功!n“);printf('>nnt歡迎下次使用本系統(tǒng)! n*');getchar();exit(O);case 1:1 nsert_New_Book() ;break;case 2:Fin d_Select();break;case 3:Borrow_Book();break;case 4:Retur n_Book();break;default:printf(

24、"n 錯(cuò)誤!");exit(O);)void lnit() /* 初始化 7In it_reader();Ini t_book();)void lnit_reader() /*初始化讀者信息*/(RD *p0;inti;printf("n讀者初始化開始,請(qǐng)輸入讀者信息.n包括編號(hào)姓名.n"); pO=(RD*)malloc(sizeof(RD);h_reader=pO;printf('>n請(qǐng)輸入讀者的信息:n");printf(”ReaderNo.:");/*輸入讀者編號(hào)(唯一 )*/sea nf(n%sH,pO->

25、;reader_ nu m);printf("ReaderName:");/* 輸入讀者姓名(不唯一 )7sea nf(n%s",pO->reader_ name);pO->right=O;for(i=0;i<Max;i+)strcpy(pO->borrowi.borrow_book_num;'0"); /* 所借圖書直接置為0(即沒有借書)*/strcpy(pO->borrowi.limit_date,"0");)p0-> next=NULL;printf("n讀者信息初始化完畢

26、!按任意鍵繼續(xù)下一步操作. An”);getchar(); system("cls");)void lnit_book() /*初始化圖書信息*/BK*pO;printf("n圖書初始化開始,請(qǐng)輸入圖書信息.n包括編號(hào).書名.數(shù)量.n"); pO=(BK*)malloc(sizeof(BK); h_book=pO;printf(-n請(qǐng)輸入圖書信息:n");printfC'BookNo.:',);/*輸入圖書編號(hào)(唯一 )*/scan f("s”,pO->book_num);printfCBookName:'

27、;*);/* 輸入圖書名稱 */sea nf("%s",pO->book_ name);printfCBookWriter:*');/* 輸入圖書作者 */scan f("%s",pO->book_writer);printfCNumber:");/* 輸入圖書數(shù)量 */scan f(n%d",&pO->book_kc);pO->book_xy=pO->book_kc;/*開始時(shí)圖書現(xiàn)有量和庫(kù)存量相等7p0-> next=NULL;printf("n圖書信息初始化完畢!按任

28、意鍵繼續(xù)下一步操作.n“);getchar();system("cls");)void lnsert_New_Book()/* 新書入庫(kù) */(BK *p,*pO,*p1;p=p1=h_book;printf("n新書入庫(kù)模塊n“);printf(-n請(qǐng)輸入新書信息.n包括書號(hào).書名.數(shù)量.n“);pO=(BK *)malloc(sizeof(BK);printf("BookNo.:n);scan f("%s",pO->book_num);while(strcmp(pO->book_ num,p1->book_ nu

29、 m)!=0&&p1-> next!=NULL) p1=p1- >n ext;if(strcmp(pO->book_ nu m,p1 ->book_ num)=0) /*此處分兩種情況,若圖書編號(hào)存在,則直接進(jìn)庫(kù),只須輸入書的數(shù)量*/(printf("n此編號(hào)圖書已存在!直接入庫(kù)!n“); prin tf(HNumber:");scan f("%d", &pO->book_kc);p1 ->book_kc+=pO->book_kc;p1 ->book_xy+=pO->book_

30、kc;)else/*若不存在,則需要輸入其他的信息,然后在進(jìn)行插入操作*/(prin tfC'BookName:1');sea nf("%s",pO->book_ name);prin tf(HBookWriter:H);sea nf(H%sH,pO->book_writer);prin tfC'Number:");sea nf("%d",&pO->book_kc);while(p-> next)p=p->n ext;)if(h_book=NULL) h_book=pO;/*此處分兩

31、種情況,鏈表中沒有數(shù)據(jù),head直接指向pO處7else p->next=pO;/*此處分兩種情況,鏈表中有數(shù)據(jù),鏈表中最后元素的next指向P0處*/p0-> next=NULL;pO->book_xy=pO->book_kc;)printf("n新書入庫(kù)完畢!按任意鍵繼續(xù)下一步操作.n");getchar();system("cls");)int Find() /*查找菜單7 int sn;printf("ntt 信息查詢菜單 nn);prin tf("=n");printf("為to-

32、返回上級(jí)t*nM);prin tf(H*tt*nM);printf("*t1 查找圖書2-查找讀者t*n");prin tf(u*tt*n");printf("飛3-打印圖書4-打印讀者t*n");prin tf("=rT);printf("請(qǐng)選擇相應(yīng)代碼for(;)/*循環(huán)調(diào)用模式,保證能進(jìn)行重復(fù)操作*/sea nf("d”,&sn);fflush(stdi n);if(s n<0|s n>4)printf(”n錯(cuò)誤!請(qǐng)重新輸入:");else break;)return sn;)v

33、oid Find_Select() /*查找菜單選擇函數(shù)*/system("cls");/*循環(huán)調(diào)用模式,保證能進(jìn)行重復(fù)操作*/switch(Find() /* 功能選擇 7case O:system("cls"); Menu _select(); break;case 1 :Fin d_Book();break;case 2:Fin d_Reader();break;case 3:Pri nt_book();break;case 4:Pri nt_reader();break;default:printf("n 錯(cuò)誤!");exit

34、(O);)void Find_Reader() /* 查找讀者信息*/ (RD*p;inti;char fin d_reader1O;p=h_reader;printf('1n讀者信息查詢模塊W);printf("n請(qǐng)輸入你要查詢讀者編號(hào):”);sea nf("%s",fi nd_reader);while(strcmp(p->reader_ nu m,fi nd_reader)!=0&&p->n ext)p=p->n ext;if(strcmp(p->reader_ nu m,fi nd_reader)=O) (p

35、rintf("n 讀者編號(hào):s 的信息為:n”,find_reader);printf("ReaderNo.tReaderName");/*此處這樣處理,是為了能實(shí)現(xiàn)一個(gè)讀者能借多本書可以Max 改*/prin tf(“n");prin tf("t%stt%s",p->reader_ nu m,p->reader_ name);for(i=0;i<Max;i+) prin tf("n");prin tf("BorrowBookNum%d",i+1);prin tf("

36、tReturn%dLimitDate",i+1);prin tf("n");prin tf("t%sn,p->borrowi.borrow_book_ nu m);prin tf(Mtt%sH,p->borrowi.limit_date);)prin tf("nM);)elseprintf("n此讀者編號(hào)不存在,請(qǐng)核對(duì)!按任意鍵返回getchar();system(ucls");)void Find_Book()/* 查找圖書信息*/(BK*p;charfind_book10;/*功能很簡(jiǎn)單,讀者編號(hào)唯一,查找只

37、須一次遍歷*/p=h_book;printf("n圖書信息查詢模塊n)printf("n請(qǐng)輸入你要查詢圖書編號(hào):”);scan f("%s",fi nd_book);while(strcmp(p->book_ nu m,fi nd_book)!=0&&p->n ext)p=p->n ext;if(strcmp(p->book_ nu m,fi nd_book)=0)/*找到了就打印,否則提示不存在,或出錯(cuò)*/printf(-n 圖書編號(hào):s 的信息為:n”,find_book);prin tf("nBoo

38、kNo.ttBookNametBookWritertXia nYou tKuCu nnH);prin tf("%stt%stt%stt%dtt%dn",p->book_ num,p->book_ name,p->book_writer,p->book_xy,p->b ook_kc);)elseprintf("n此圖書編號(hào)不存在,請(qǐng)核對(duì)!按任意鍵返回getchar(); system(MclsH);)void Print_reader() /* 打印讀者信息*/RD*p;inti;p=h_reader;printf("n讀者信

39、息如下:nn”);prin tfC'ReaderNoAtReaderName");/*此處這樣處理,是為了能實(shí)現(xiàn)一個(gè)讀者能借多本書Max可以改*/prin tf("n");while(p!=NULL)/*遍歷鏈表一次就可以了*/prin tf(Ht%stt%sn,p->reader_ nu m3p->reader_ name);for(i=0;i<Max;i+)(prin tf(Hn");prin tf("BorrowBookNum%d',i+1);prin tf(HtReturn%dLimitDaten,i+

40、1); prin tf(Mn");prin tf(Ht%sM?p->borrowi.borrow_book_ nu m);prin tf(utt%s",p->borrowi.limit_date); )prin tf("nH);p=p->n ext;)printf("n讀者信息打印完畢!按任意鍵繼續(xù)下一步操作getchar();system("clsH);)void Print_book() /* 打印圖書信息*/BK*p;p=h_book;printf("n圖書信息如下:nn");printf("

41、;BookNo.ttBookNametBookWritertXianYou tKuCunn");/*直接打印所有圖書的信息,遍歷鏈表一次就可*/while(p!=NULL) prin tf("%stt%stt%stt%dtt%dn",p->book_ num,p->book_ name,p->book ook_kc); p=p->n ext;)printf("n圖書信息打印完畢!按任意鍵繼續(xù)下一步操作getchar();system("clsH);)void Borrow_Book() /* 借書模塊 7BK *p0;

42、RD *p1;char bo_nu m10,rea_num10,lim_date8;inti;pO=h_book; p1=h_reader;printf('>n 借書模塊n“);printf(”n請(qǐng)輸入借書的讀者編號(hào):”);/*先輸入借書的讀者信息*/ sea nf("%s",rea_ nu m);while(p1- >n ext!=NULL&&strcmp(rea_ nu m,p1->reader_ nu m)!=0)讀者是否存在*/p1=p1- >n ext;if(p1- >n ext=NULL&&s

43、trcmp(rea_ nu m,p1->reader_ nu m)!=0)在就、則提示錯(cuò)誤!*/printf("n此讀者編號(hào)不存在!按任意鍵返回.n”);writer,p_>book_xy,p_>b/*遍歷一次讀者鏈表,判斷/*如果存在,則繼續(xù),不存goto END;)printf("n請(qǐng)輸入你要借的書的編號(hào):”);sea nf("%sn,bo_ nu m);while(strcmp(bo_ num,pO->book_ nu m)!=0&&p0-> next!=NULL) /* 遍歷一次圖書鏈表,判 斷此圖書是否存在*

44、/pO=pO _>n ext;if(pO->next=NULL&&strcmp(bo_num,pO->book_num)!=0)/* 如果存在,則繼續(xù),不存 在就、則提示錯(cuò)誤!*/(printf('>n此圖書編號(hào)不存在!按任意鍵返回)elseH(p0->book_xyv=0)/*判斷此圖書現(xiàn)在是否還有庫(kù)存7( print(n抱歉,此書已借完!請(qǐng)等待新書的到來!n按任意鍵返回.”);)else if(p1 >right>=Max) /*判斷此讀者借書權(quán)限是否已達(dá)最大*/(printf("n不好意思,借書數(shù)目已滿!不能借書

45、M按任意鍵返回else if(strcmp(p1 ->borrow0.borrow_book_num,"0n)!=0)/*此讀者若已經(jīng)借書,再判斷此讀者是否要借兩本一樣的書*/(for(i=0;ivMax;i+)/*遍歷一次讀者所借的書,如果發(fā)現(xiàn)有重復(fù),則結(jié)束*/ (if(strcmp(p1 ->borrowi.borrow_book_ nu m5bo _nu m)=0) printf(”n抱歉!同一個(gè)讀者不能同借兩本相同的書片”);)else if(strcmp(p1->borrowi.borrow_book_num,'0,)=0)/* 如果沒有重復(fù) 7

46、printf(An請(qǐng)輸入你要?dú)w還圖書的日期 :”);scan f("%s",lim_date);strcpy(p1 ->borrowp1 ->right+.borrow_book_ nu m,bo_ nu m);/* 記錄所借書號(hào)并且借書數(shù)目加一,現(xiàn)存量減一 */strcpy(p1->borrowp1->right-1.limit_date,lim_date);pO_>book_xy_;printf(”n讀者編號(hào)$借書完畢!按任意鍵繼續(xù)下步操作.二p1 ->reader_num);) )else/此讀者從未借過書*/printf(An請(qǐng)輸

47、入你要?dú)w還圖書的日期 :”);scan f(fl%snJim_date);strcpy(p1 ->borrowp1 ->right+.borrow_book_num,bo_num);/* 記錄所借書號(hào),并且借書數(shù)目加一,現(xiàn)存量減一 */strcpy(p1->borrowp1->right-1dimit_datejim_date);pO_>book_xy_;printf("n讀者編號(hào)$借書完畢!按任意鍵繼續(xù)下步操作;p1 ->reader_num);)END:getchar(); system(nclsH);)void Return_Book() /

48、* 還書模塊 */BK*p; RD*q;int i,j,find=O;char return_book_ nu m10,return_reader_ nu m10;p=h_book; q=h_reader;printf(An還書模塊n“);printf('>n請(qǐng)輸入要還書的讀者編號(hào):”);/*基本同上*/scan f(n%s",return_reader_ nu m);/* 注意:數(shù)組的輸入沒有 &7while(q-> next!=NULL&&strcmp(return_reader_ nu m,q->reader_ nu m)!=0

49、)q=q_>n ext;if(q->n ext=NULL&&strcmp(retur n_reader_ num,q->reader_ nu m)!=0)(find=2;/*設(shè)置標(biāo)志,用于判斷讀者是否借了此書或是否出錯(cuò)提前結(jié)束 ,若提前出錯(cuò),則find=2,若借 了 廁find=1,若沒借為find=O7printf('>n此讀者編號(hào)不存在!按任意鍵返回.門);goto end;)printf("n請(qǐng)輸入讀者還書的編號(hào):”);sea nf(,f%sM,retur n_book_ nu m);while(p-> next!=NULL

50、&&strcmp(return_book_ nu m3p->book_ nu m)!=0)p=p->n ext;if(p->n ext=NULL&&strcmp(retur n_book_ nu m5p->book_ nu m)!=0)(find=2;/*設(shè)置標(biāo)志,用于判斷讀者是否借了此書或是否出錯(cuò)提前結(jié)束,若提前出錯(cuò)貝Ufind=2,若借了,則find=1,若沒借為find=O7printf(”n錯(cuò)誤!此圖書編號(hào)不存在!按任意鍵返回.3”);goto end;)for(i=0;i<Max;i+)if(strcmp(retum_bo

51、ok_ nu m,q->borrowi.borrow_book_ nu m)=0)/*如果小匕i賣者借了itb書*/,若提前出錯(cuò)find=1;/*設(shè)置標(biāo)志,用于判斷讀者是否借了此書或是否出錯(cuò)提前結(jié)束則find=2,若借了,則find=1,若沒借為find=07for(j=i;j<Max-1 ;j+)strcpy(q->borrowj.borrow_book_ nu m,q->borrowj+1 .borrow_book_ nu m);strcpy(q->borrowj.limit_date5q->borrowj+1.limit_date);)strcpy(q

52、->borrowMax-1.borrow_book_ nu mJO”);strcpy(q->borrowMax-1.limit_date,"0M);p->book_xy+;q_>right_;printf("n編號(hào)s的讀者還書完畢!按任意鍵繼續(xù)下步操作.”,retumeader_num);)if(find=O)/*為什么有個(gè)find=O,因?yàn)楸闅v時(shí)循環(huán)Max次,如循環(huán)完畢還沒有找到,則說明讀者沒有借此書,find用來保證只打印一次結(jié)果,否則每循環(huán)一次就會(huì)打印一個(gè)結(jié)果*/printf("n錯(cuò)誤!此讀者未借此書!按任意鍵返回/*如果遍歷讀者所借的書號(hào)發(fā)現(xiàn)讀者未借此書,則提示錯(cuò)誤!*/end: getchar(); system(HclsH);)void Save() /* 保

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論