數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-圖書(shū)管理系統(tǒng)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-圖書(shū)管理系統(tǒng)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-圖書(shū)管理系統(tǒng)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-圖書(shū)管理系統(tǒng)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-圖書(shū)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一、需求分析1.1系統(tǒng)開(kāi)發(fā)背景和意義圖書(shū)管理作為計(jì)算機(jī)應(yīng)用的一個(gè)分支,有著手工管理無(wú)法比擬的優(yōu)點(diǎn),如檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好、壽命長(zhǎng)、成本低等。這些優(yōu)點(diǎn)能夠極大地提高圖書(shū)管理的效率。因此,開(kāi)發(fā)一套能夠?yàn)橛脩籼峁┏渥愕男畔⒑涂旖莸牟樵兪侄蔚膱D書(shū)管理系統(tǒng),將是非常必要的,也是十分及時(shí)的。圖書(shū)管理系統(tǒng)需要滿足來(lái)自圖書(shū)館工作人員、普通用戶和借閱者三方面人員的需求。圖書(shū)館工作人員對(duì)圖書(shū)借閱者的借閱及還書(shū)要求進(jìn)行操作,同時(shí)還可通過(guò)圖書(shū)編號(hào)等查詢相應(yīng)的借閱情況;普通用戶的需求是查詢圖書(shū)館所存的圖書(shū)的相關(guān)情況;圖書(shū)借閱者的需求是查看自己的相關(guān)信息及查詢自己的借閱情況。1.2設(shè)計(jì)題目與要求【問(wèn)題描述】設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng)完成圖書(shū)管理基本業(yè)務(wù)?!净疽蟆?) 每種書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、著作者、現(xiàn)存量和庫(kù)存量;2) 對(duì)書(shū)號(hào)建立索引表(線性表)以提高查找效率;3) 系統(tǒng)主要功能如下:*采編入庫(kù):新購(gòu)一種書(shū),確定書(shū)號(hào)后,登記到圖書(shū)帳目表中,如果表中已有,則只將庫(kù)存量增加;*借閱:如果一種書(shū)的現(xiàn)存量大于0,則借出一本,登記借閱者的書(shū)證號(hào)和歸還期限,改變現(xiàn)存量;*歸還:注銷對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。二、總體結(jié)構(gòu)設(shè)計(jì)有八個(gè)模塊1) 圖書(shū)初始化輸入圖書(shū)的一些信息,編號(hào)、作者、書(shū)名、數(shù)量,使有一定的庫(kù)存。2) 新書(shū)入庫(kù)新書(shū)采編入庫(kù),輸入編號(hào)后如果有次數(shù)只需輸入數(shù)量,沒(méi)有則繼續(xù)輸入書(shū)名、作者、數(shù)量。3) 添加讀者信息讀者信息初始化,輸入讀書(shū)證號(hào)和姓名,只有輸入書(shū)證號(hào)和姓名才能進(jìn)行借書(shū)還書(shū)4) 借書(shū)模塊讀者輸入讀書(shū)證號(hào),證號(hào)存在輸入要借的圖書(shū)編號(hào),不能借同一本書(shū),如果借書(shū)數(shù)量以達(dá)到最大也不能借書(shū)。5) 還書(shū)模塊歸還已借的圖書(shū),要先輸入讀者書(shū)證號(hào),書(shū)證號(hào)存在繼續(xù)輸入要還的圖書(shū)編號(hào),圖書(shū)編號(hào)存在并且借來(lái)此書(shū),歸還成功。6) 查詢圖書(shū)信息7) 查詢讀者信息可查詢讀者姓名書(shū)證號(hào),借了幾本書(shū),都是什么書(shū)和還書(shū)日期,還可以借幾本書(shū)。8) 退出退出讀書(shū)管理系統(tǒng)并保存讀者和圖書(shū)信息。圖書(shū)管理系統(tǒng)圖書(shū)管理系統(tǒng)查詢操作模塊讀者管理模塊借閱操作模塊圖書(shū)管理模塊查詢操作模塊讀者管理模塊借閱操作模塊圖書(shū)管理模塊理退出退出圖書(shū)信息查詢讀者信息查詢還書(shū)系統(tǒng)借書(shū)系統(tǒng)輸入讀者信息采編入庫(kù)初始化圖書(shū)信息圖書(shū)信息查詢讀者信息查詢還書(shū)系統(tǒng)借書(shū)系統(tǒng)輸入讀者信息采編入庫(kù)初始化圖書(shū)信息圖2-1主控模塊三、各子模塊設(shè)計(jì)3.1初始化圖書(shū)信息進(jìn)入系統(tǒng)后首先進(jìn)行圖書(shū)初始化,輸入圖書(shū)的信息。開(kāi)始開(kāi)始輸入圖書(shū)編號(hào)、名稱、作者和圖書(shū)數(shù)量輸入圖書(shū)編號(hào)、名稱、作者和圖書(shū)數(shù)量進(jìn)入系統(tǒng)進(jìn)入系統(tǒng)圖3-1初始化圖書(shū)信息流程圖3.2系統(tǒng)主界面初始化之后,進(jìn)入系統(tǒng),顯示功能列表,可選擇任意系統(tǒng),但在借書(shū)之前先要輸入讀者信息。開(kāi)始開(kāi)始輸入功能所對(duì)應(yīng)的數(shù)字輸入功能所對(duì)應(yīng)的數(shù)字輸入的數(shù)字小于0大于6輸入的數(shù)字小于0大于6否錯(cuò)誤!請(qǐng)重新輸入是錯(cuò)誤!請(qǐng)重新輸入執(zhí)行所選功能執(zhí)行所選功能圖3-2系統(tǒng)主界面流程圖3.3采編入庫(kù)選擇采編入庫(kù)的功能后,先輸入圖書(shū)編號(hào)判斷是否存在,若存在,則在原有記錄上加上添加的圖書(shū)數(shù)量;若不存在,則加入新的記錄。錄入圖書(shū)信息錄入圖書(shū)信息判斷是否有此圖書(shū)判斷是否有此圖書(shū) 是在原有的紀(jì)錄上加上現(xiàn)有的圖書(shū)數(shù)量 否在原有的紀(jì)錄上加上現(xiàn)有的圖書(shū)數(shù)量向系統(tǒng)中加入新紀(jì)錄向系統(tǒng)中加入新紀(jì)錄圖3-3采編入庫(kù)流程圖3.4輸入讀者信息選擇讀者登記后,輸入讀者編號(hào)跟姓名。開(kāi)始開(kāi)始輸入讀者信息:讀者書(shū)證號(hào)、姓名輸入讀者信息:讀者書(shū)證號(hào)、姓名結(jié)束結(jié)束圖3-4輸入讀者信息流程圖3.5借閱圖書(shū)選擇借閱圖書(shū)功能后,輸入讀者證號(hào),判斷該讀者是否存在,若存在則輸入借閱圖書(shū)的編號(hào),判斷該圖書(shū)編號(hào)是否存在,若存在,則判斷讀者借閱的圖書(shū)數(shù)量是否滿了和是否借閱了相同的書(shū)籍,判斷成功后,則輸入歸還該圖書(shū)的日期,該圖書(shū)現(xiàn)有量減一,借閱成功;若讀者不存在則返回。輸入讀者書(shū)證號(hào)輸入讀者書(shū)證號(hào)判斷讀者是否存在判斷讀者是否存在 否輸出次讀者編號(hào)不存在!按任意鍵返回 輸出次讀者編號(hào)不存在!按任意鍵返回 是輸入要借的圖書(shū)編號(hào)輸入要借的圖書(shū)編號(hào)判斷圖書(shū)編號(hào)是否存在判斷圖書(shū)編號(hào)是否存在 否輸出此圖書(shū)編號(hào)不存在!按任意鍵返回輸出此圖書(shū)編號(hào)不存在!按任意鍵返回 是看是否還有此圖書(shū)看是否還有此圖書(shū) 否輸出此書(shū)已借完,按任意鍵返回 是輸出此書(shū)已借完,按任意鍵返回看讀者的借書(shū)數(shù)目是否滿了看讀者的借書(shū)數(shù)目是否滿了 是輸出借書(shū)數(shù)目已滿不能借書(shū),按任意鍵返回 否輸出借書(shū)數(shù)目已滿不能借書(shū),按任意鍵返回看讀者是否借了相同的書(shū)看讀者是否借了相同的書(shū) 是輸出同一讀者不能借相同的兩本書(shū) 否輸出同一讀者不能借相同的兩本書(shū)輸入歸還圖書(shū)的日期輸入歸還圖書(shū)的日期圖書(shū)現(xiàn)有數(shù)量減1圖書(shū)現(xiàn)有數(shù)量減1輸出讀者結(jié)束成功,按任意鍵返回輸出讀者結(jié)束成功,按任意鍵返回結(jié)束結(jié)束圖3-5借閱圖書(shū)流程圖3.6歸還圖書(shū)實(shí)現(xiàn)歸還圖書(shū)功能時(shí),首先輸入讀者編號(hào),并判斷是否存在,若不存在就按任意鍵返回,;若存在輸入歸還的圖書(shū)編號(hào)并判斷是否存在,若歸還圖書(shū)編號(hào)不存在,則返回。存在后,將讀者借閱該圖書(shū)的信息清空,該圖書(shū)的現(xiàn)有量加一。最后按任意鍵返回輸入要還書(shū)的讀者編號(hào)輸入要還書(shū)的讀者編號(hào)判斷讀者編號(hào)是否存在 判斷讀者編號(hào)是否存在 否輸出讀者編號(hào)不存在按任意鍵返回輸出讀者編號(hào)不存在按任意鍵返回是輸入讀者還書(shū)編號(hào)輸入讀者還書(shū)編號(hào)判斷圖書(shū)編號(hào)是否存在 判斷圖書(shū)編號(hào)是否存在否輸出此圖書(shū)編號(hào)不存在按任意鍵返回輸出此圖書(shū)編號(hào)不存在按任意鍵返回是此圖書(shū)編號(hào)和還書(shū)日期等于0此圖書(shū)編號(hào)和還書(shū)日期等于0現(xiàn)有圖書(shū)數(shù)量加1現(xiàn)有圖書(shū)數(shù)量加1輸出讀者還書(shū)完畢,按任意鍵返回輸出讀者還書(shū)完畢,按任意鍵返回結(jié)束結(jié)束圖3-6歸還圖書(shū)流程圖3.7查詢圖書(shū)信息查詢圖書(shū)信息時(shí),輸入圖書(shū)的編號(hào),判斷是否存在。不存在則返回;存在則輸出圖書(shū)的編號(hào),書(shū)名,作者,現(xiàn)有量,跟庫(kù)存量。判斷圖書(shū)信息是否為空判斷圖書(shū)信息是否為空 是輸出此圖書(shū)編號(hào)不存在按任意鍵返回輸出此圖書(shū)編號(hào)不存在按任意鍵返回否輸出圖書(shū)信息:編號(hào)、名稱、作者、現(xiàn)有和庫(kù)存輸出圖書(shū)信息:編號(hào)、名稱、作者、現(xiàn)有和庫(kù)存結(jié)束結(jié)束圖3-7查詢圖書(shū)信息流程圖3.8查詢讀者信息查詢讀者信息時(shí),首先判斷讀者的編號(hào)是否存在,不存在就按任意鍵返回。若存在,則輸出讀者的證號(hào),姓名,和借閱的圖書(shū)編碼及其還書(shū)日期。判斷讀者信息是否為空判斷讀者信息是否為空是輸出此讀者編號(hào)不存在按任意鍵返回否輸出此讀者編號(hào)不存在按任意鍵返回輸出讀者書(shū)證號(hào)、姓名、圖書(shū)編碼和還書(shū)日期輸出讀者書(shū)證號(hào)、姓名、圖書(shū)編碼和還書(shū)日期輸出讀者信息打印完畢輸出讀者信息打印完畢結(jié)束結(jié)束圖3-8查詢讀者信息流程圖四、程序設(shè)計(jì)調(diào)試情況分析在整個(gè)課程設(shè)計(jì)中,我們遇到了許多的問(wèn)題。有些問(wèn)題吧,我們?cè)诳嗨稼は氲臅r(shí)候,突然我們的編譯器顯示出了正確的結(jié)果,當(dāng)我們欣喜若狂的在運(yùn)行下一次的時(shí)候又會(huì)出現(xiàn)相同的問(wèn)題,在借閱的過(guò)程中,在一個(gè)讀者借閱了兩本書(shū)以上的時(shí)候,上一本書(shū)的歸還日期上還有下一本書(shū)上的編號(hào),最后一本書(shū)輸出的才是正確的結(jié)果。下圖是借閱了兩本書(shū)的截圖:圖4-1看到這里我們也知道是第一本書(shū)的還書(shū)日期的地址空間跟第二本書(shū)的編號(hào)連接在了一起導(dǎo)致輸出的時(shí)候一直到第二本書(shū)編號(hào)的的字符串后面的‘/0’結(jié)束。最后發(fā)現(xiàn)是我們?cè)诙x還書(shū)日期這個(gè)字符串的時(shí)候開(kāi)辟的空間太小。我們把 charlimit_date[8];改為charlimit_date[10]就好了。圖4-2 五、測(cè)試結(jié)果5.1歡迎界面程序運(yùn)行顯示“歡迎使用圖書(shū)管理系統(tǒng)”,按任意鍵進(jìn)入到主菜單如圖5-1所示。圖5-1歡迎界面5.2初始化圖書(shū)信息在沒(méi)有文件的時(shí)候會(huì)進(jìn)入到初始化界面,需要輸入一本圖書(shū)的相關(guān)信息,如圖5-2所示。圖5-2初始化圖書(shū)信息5.3系統(tǒng)主界面接著進(jìn)入的系統(tǒng)的主菜單,如圖5-3所示。圖5-3系統(tǒng)主界面5.4采編入庫(kù)實(shí)現(xiàn)采編入庫(kù)功能按照系統(tǒng)提示輸入信息。如圖5-4。如果該圖書(shū)已存在,則直接輸入圖書(shū)的數(shù)量如圖5-5所示。圖5-4采編入庫(kù)(書(shū)不存在)圖5-5采編入庫(kù)(書(shū)已存在)5.5輸入讀者信息按照要求輸入讀者信息,如圖5-6所示。圖5-6輸入讀者信息5.6借閱圖書(shū)按照要求先輸入讀者證號(hào),在輸入借閱的圖書(shū)編號(hào)如圖5-7所示。如果讀者已經(jīng)借閱了一本書(shū)之后不能借閱同一本圖書(shū)如圖5-8所示。圖5-7借閱圖書(shū)圖5-8同一個(gè)讀者不能借閱同一本圖書(shū)5.7歸還圖書(shū)歸還圖書(shū)的要求按著圖5-9輸入即可。圖5-9歸還圖書(shū)5.8查詢圖書(shū)信息圖5-10是沒(méi)有借閱之前的圖書(shū)的相關(guān)信息,圖5-11是讀者借閱了圖書(shū)之后的信息,只改變了現(xiàn)有量。圖5-10借閱登記后圖5-11歸還圖書(shū)后5.9查詢讀者信息查詢讀者的信息時(shí),會(huì)輸出相關(guān)借閱的圖書(shū)編號(hào)以及還書(shū)日期如圖5-12,5-13所示。圖5-12查詢讀者信息(一)圖5-13查詢讀者信息(二)5.10保存文件,退出在系統(tǒng)的主菜單后,按‘0’功能保存并退出系統(tǒng)。圖5-14文件保存六、總結(jié)個(gè)人覺(jué)得課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)學(xué)生實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.在生活中可以說(shuō)得是無(wú)處不在。因此作為新世紀(jì)的大學(xué)來(lái)說(shuō)能夠分析,并解決程序中出現(xiàn)的問(wèn)題是十分重要的。課程設(shè)計(jì)就能體現(xiàn)到這一方面。能夠?qū)⒛闼鶎W(xué)到的理論跟實(shí)際結(jié)合在一起。通過(guò)本次課程設(shè)計(jì)感慨良多。從課堂上聽(tīng)到的到課后應(yīng)用到的根本就不是一回事。課堂上,老師在上面說(shuō),自己在下面聽(tīng),到也能聽(tīng)懂??墒堑搅藨?yīng)用上,自己倒也是知道要用到哪方面的內(nèi)容,但是偏偏不知道從何處下手;好不容易寫(xiě)好的一小段代碼,還要跟其他功能不相沖突,這又需要我們自己去想辦法去兼容好他們。通過(guò)本次課程設(shè)計(jì)試我懂得理論要跟實(shí)踐相結(jié)合。正所謂“臺(tái)上十分鐘,臺(tái)下十年功”,別人在臺(tái)上表演了十分鐘,你覺(jué)得很容易,可那里知道別人在下面做的努力呢。同樣的,我們?cè)谡n堂上聽(tīng)老師講確實(shí)覺(jué)得是那么回事,但是真正做下去,也只有自己知道是何種滋味。理論始終是理論,不能都熟練應(yīng)用自己所學(xué)到的知識(shí),到頭來(lái)也是一場(chǎng)空。在這次的課程設(shè)計(jì)過(guò)程中,我們也遇到了不能解決的難題,比如說(shuō)在讀者查詢的時(shí)候,第二個(gè)讀者始終會(huì)覆蓋第一個(gè)讀者的數(shù)據(jù)。我們始終沒(méi)有搞明白問(wèn)題的所在,只知道不是在輸出讀者信息的問(wèn)題,應(yīng)該是添加讀者過(guò)程中指針始終指在第一個(gè)地址,沒(méi)有移動(dòng)。我們按照查詢圖書(shū)的函數(shù)重新編寫(xiě)了一次還是同樣問(wèn)題。一直到答辯前一天晚上還沒(méi)有解決,之后只能放棄。還有在最開(kāi)始的時(shí)候我們的程序功能并沒(méi)有清屏功能,整個(gè)界面看起來(lái)并不是那么整潔。于是我用用getch();system(“cls”);來(lái)進(jìn)行清屏,最后會(huì)出先一個(gè)小問(wèn)題,在我們查詢了一些資料后,又再次基礎(chǔ)上加上了gotoend;這個(gè)函數(shù)來(lái)加以完善。這次課程設(shè)計(jì),我們也遇到了很多問(wèn)題,比如說(shuō),我們?cè)佥斎氲诙€(gè)讀者的信息后會(huì)覆蓋第一個(gè)讀者的信息,想了半天沒(méi)有弄懂是哪里錯(cuò)了,最后才看出來(lái)我們定義的結(jié)構(gòu)體指針沒(méi)有移動(dòng),導(dǎo)致我們輸入的讀者信息一直存放在同一個(gè)地址中。也有些不懂需要在網(wǎng)上查詢的代碼,組員之間相互配合,不懂就詢問(wèn)其他同學(xué)或者查詢資料亦或者自己去弄懂問(wèn)題的根結(jié),團(tuán)結(jié)協(xié)作的精神在這次課程設(shè)計(jì)中表現(xiàn)的淋漓盡致。我們不僅將以前的知識(shí)復(fù)習(xí)一遍;同時(shí)也弄懂了一些平常自己似懂非懂的;最后同學(xué)之間的友誼也慢慢變的深厚起來(lái)小組分工:孫澤銘:采編入庫(kù)、查詢圖書(shū)信息、查詢讀者信息黃響:添加讀者、借閱圖書(shū)、歸還圖書(shū)七、參考文獻(xiàn)嚴(yán)蔚敏吳偉民編著《數(shù)據(jù)結(jié)構(gòu)》清華大學(xué)出版社,2000黃國(guó)瑜葉乃菁編著《數(shù)據(jù)結(jié)構(gòu)》清華大學(xué)出版社,2001胡學(xué)鋼編著《數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)指導(dǎo)》清華大學(xué)出版社,1999王士元編著《數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)庫(kù)系統(tǒng)》南開(kāi)大學(xué)出版社,2000李強(qiáng)根主編《數(shù)據(jù)結(jié)構(gòu)(C++描述)》中國(guó)水利水電出版社,2001楊正宏編著《數(shù)據(jù)結(jié)構(gòu)》中國(guó)鐵道出版社,2002胡學(xué)鋼編著《數(shù)據(jù)結(jié)構(gòu)算法設(shè)計(jì)指導(dǎo)》清華大學(xué)出版社,1999殷人昆徐孝凱編著《數(shù)據(jù)結(jié)構(gòu)習(xí)題解析》清華大學(xué)出版社,2002李春葆編著《數(shù)據(jù)結(jié)構(gòu)習(xí)題與解析》清華大學(xué)出版社,2001[10]咨訊教育小組編著《數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)版》中國(guó)鐵道出版社,2002八、附錄(源代碼)#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#defineMax4typedefstructbook{ charbook_num[10]; charbook_name[20]; charbook_writer[10]; intbook_xy; intbook_kc; intn; structbook*next;}BK;typedefstructborrow{ charborrow_book_num[10]; charlimit_date[10]; }BO; typedefstructreader{ charreader_num[10]; charreader_name[10]; intright; intm; BOborrow[Max]; structreader*next;}RD;BK*h_book;RD*h_reader;intn=0;intm=0;voidLogin();intMenu();voidInit();voidMenu_select();voidInsert_New_Book();voidadd_reader();voidPrint_reader();voidPrint_book();voidBorrow_Book();voidReturn_Book();voidSave();voidSave_Book();voidSave_Reader();voidLoad();voidLoad_Reader();voidLoad_Book();voidLogin(){ system("cls"); printf("\n\n\n\t\t***************************************\n"); printf("\n\n\n\t\t**歡迎使用圖書(shū)管理系統(tǒng)**\n"); printf("\n\n\n\t\t***************************************\n"); printf("\n\n\n\t\t按任意鍵進(jìn)入系統(tǒng)..."); getch(); system("cls");}intMenu()/*主菜單*/{ intdm; printf("\n\t\t圖書(shū)管理系統(tǒng)主菜單\n"); printf("=================================================\n"); printf("*\t1采編入庫(kù)\n"); printf("*\t2登記讀者\(yùn)n"); printf("*\t3借閱登記\n"); printf("*\t4還書(shū)管理\n"); printf("*\t5查詢圖書(shū)信息\n"); printf("*\t6查詢讀者信息\n"); printf("*\t0退出系統(tǒng)\n"); printf("=================================================\n"); printf("請(qǐng)選擇相應(yīng)的代碼:"); for(;;) { scanf("%d",&dm);//dm輸入的數(shù)字 if(dm<0||dm>6) printf("\n錯(cuò)誤!請(qǐng)重新輸入:"); else break; } returndm;}voidMenu_select()/*主菜單選擇函數(shù)*/{ for(;;) { switch(Menu())/*功能選擇*/ { case0: system("cls"); Save(); printf("\n\n\t文件保存成功!\n"); printf("\n\n\t歡迎下次使用本系統(tǒng)!\n"); getch(); exit(0); case1:Insert_New_Book();break; case2:add_reader();break; case3:Borrow_Book();break; case4:Return_Book();break; case5:Print_book();break; case6:Print_reader();break; default:printf("\n錯(cuò)誤!"); exit(0); } }}voidInit()/*初始化*/{ BK*p0; printf("\n圖書(shū)初始化開(kāi)始,請(qǐng)輸入圖書(shū)信息..\n包括編號(hào).書(shū)名.數(shù)量..\n"); p0=(BK*)malloc(sizeof(BK)); h_book=p0; printf("\n請(qǐng)輸入圖書(shū)信息:\n"); printf("圖書(shū)編號(hào):");/*輸入圖書(shū)編號(hào)(唯一)*/ scanf("%s",p0->book_num); printf("圖書(shū)名稱:");/*輸入圖書(shū)名稱*/ scanf("%s",p0->book_name); printf("圖書(shū)作者:");/*輸入圖書(shū)作者*/ scanf("%s",p0->book_writer); printf("圖書(shū)數(shù)量:");/*輸入圖書(shū)數(shù)量*/ scanf("%d",&p0->book_kc); p0->book_xy=p0->book_kc;/*開(kāi)始時(shí)圖書(shū)現(xiàn)有量和庫(kù)存量相等*/ p0->next=NULL; p0->n=++n; printf("\n圖書(shū)信息初始化完畢!按任意鍵繼續(xù)下一步操作..\n"); getch(); system("cls");}voidInsert_New_Book()/*新書(shū)入庫(kù)*/{ BK*p,*p0,*p1; p=p1=h_book; printf("\n新書(shū)入庫(kù)模塊...\n"); printf("\n請(qǐng)輸入新書(shū)信息..\n包括書(shū)號(hào).書(shū)名.數(shù)量..\n"); p0=(BK*)malloc(sizeof(BK)); printf("圖書(shū)編號(hào):"); scanf("%s",p0->book_num); while(strcmp(p0->book_num,p1->book_num)!=0&&p1->next!=NULL) p1=p1->next; if(strcmp(p0->book_num,p1->book_num)==0)/*此處分兩種情況,若圖書(shū)編號(hào)存在,則直接進(jìn)庫(kù),只須輸入書(shū)的數(shù)量*/ { printf("\n此編號(hào)圖書(shū)已存在!!直接入庫(kù)!\n"); printf("圖書(shū)數(shù)量:"); scanf("%d",&p0->book_kc); p1->book_kc+=p0->book_kc; p1->book_xy+=p0->book_kc; } else/*若不存在,則需要輸入其他的信息,然后在進(jìn)行插入操作*/ { printf("圖書(shū)名稱:"); scanf("%s",p0->book_name); printf("圖書(shū)作者:"); scanf("%s",p0->book_writer); printf("圖書(shū)數(shù)量:"); scanf("%d",&p0->book_kc);//庫(kù)存數(shù)量 while(p->next) p=p->next; if(h_book==NULL) h_book=p0;/*此處分兩種情況,鏈表中沒(méi)有數(shù)據(jù),head直接指向p0處*/ else p->next=p0;/*此處分兩種情況,鏈表中有數(shù)據(jù),鏈表中最后元素的next指向p0處*/ p0->next=NULL; p0->book_xy=p0->book_kc; p0->n=++n; } printf("\n新書(shū)入庫(kù)完畢!按任意鍵繼續(xù)下一步操作..\n"); getch(); system("cls");}voidadd_reader()/*添加讀者*/{ RD*p0;inti;printf("\n讀者初始化開(kāi)始,請(qǐng)輸入讀者信息..\n包括書(shū)證號(hào).姓名..\n"); p0=(RD*)malloc(sizeof(RD));/*申請(qǐng)新結(jié)點(diǎn)存儲(chǔ)空間*/ h_reader=p0; printf("\n請(qǐng)輸入讀者的信息:\n");printf("讀者書(shū)證號(hào):");scanf("%s",p0->reader_num);printf("讀者姓名:"); scanf("%s",p0->reader_name);p0->right=0;for(i=0;i<Max;i++){ strcpy(p0->borrow[i].borrow_book_num,"0");/*所借圖書(shū)直接置為(即沒(méi)有借書(shū))*/ strcpy(p0->borrow[i].limit_date,"0"); } p0->next=NULL; p0->m=++m; printf("\n讀者信息初始化完畢!按任意鍵繼續(xù)下一步操作..\n"); getch(); system("cls");}voidBorrow_Book()/*借書(shū)模塊*/{ BK*p0;RD*p1; charbo_num[10],rea_num[10],lim_date[8]; inti; p0=h_book;p1=h_reader; printf("\n借書(shū)模塊...\n"); printf("\n請(qǐng)輸入借書(shū)的讀者書(shū)證號(hào):"); scanf("%s",rea_num); while(p1->next!=NULL&&strcmp(rea_num,p1->reader_num)!=0) p1=p1->next; if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!=0) { printf("\n此讀者編號(hào)不存在!按任意鍵返回..\n"); gotoEND; } printf("\n請(qǐng)輸入你要借的書(shū)的編號(hào):"); scanf("%s",bo_num); while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL) p0=p0->next; if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!=0) { printf("\n此圖書(shū)編號(hào)不存在!按任意鍵返回..\n"); gotoEND; } elseif(p0->book_xy<=0) { printf("\n抱歉,此書(shū)已借完!請(qǐng)等待新書(shū)的到來(lái)!!\n按任意鍵返回"); gotoEND; } elseif(p1->right>Max||p1->right==Max) { printf("\n不好意思,借書(shū)數(shù)目已滿!不能借書(shū)!\n按任意鍵返回"); gotoEND; } elseif(strcmp(p1->borrow[0].borrow_book_num,"0")!=0) { for(i=0;i<Max;i++) { if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0) { printf("\n抱歉!同一個(gè)讀者不能同借兩本相同的書(shū)!\n按任意鍵返回"); gotoEND; } elseif(strcmp(p1->borrow[i].borrow_book_num,"0")==0) { printf("\n請(qǐng)輸入你要?dú)w還圖書(shū)的日期:"); scanf("%s",lim_date); strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num); strcpy(p1->borrow[p1->right-1].limit_date,lim_date); p0->book_xy--; printf("\n讀者編號(hào)%s借書(shū)完畢!按任意鍵繼續(xù)下步操作..",p1->reader_num); gotoEND; } } } else { printf("\n請(qǐng)輸入你要?dú)w還圖書(shū)的日期:"); scanf("%s",lim_date); strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num); strcpy(p1->borrow[p1->right-1].limit_date,lim_date); p0->book_xy--; p0->book_kc--; printf("\n讀者編號(hào)%s借書(shū)完畢!按任意鍵繼續(xù)下步操作..",p1->reader_num); gotoEND; } END:getch();system("cls");}voidReturn_Book()/*還書(shū)模塊*/{ BK*p;RD*q; inti,j,find=0; charreturn_book_num[10],return_reader_num[10]; p=h_book;q=h_reader; printf("\n還書(shū)模塊...\n"); printf("\n請(qǐng)輸入要還書(shū)的讀者編號(hào):"); scanf("%s",return_reader_num); while(q->next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0) q=q->next; if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!=0) { find=2; printf("\n此讀者編號(hào)不存在!按任意鍵返回..\n"); gotoend; } printf("\n請(qǐng)輸入讀者還書(shū)的編號(hào):"); scanf("%s",return_book_num); while(p->next!=NULL&&strcmp(return_book_num,p->book_num)!=0) p=p->next; if(p->next==NULL&&strcmp(return_book_num,p->book_num)!=0) { find=2; printf("\n錯(cuò)誤!此圖書(shū)編號(hào)不存在!按任意鍵返回..\n"); gotoend; } for(i=0;i<Max;i++) if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0)/*如果此讀者借了此書(shū)*/ { find=1; for(j=i;j<Max-1;j++) { strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num); strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date); } strcpy(q->borrow[Max-1].borrow_book_num,"0"); strcpy(q->borrow[Max-1].limit_date,"0"); p->book_xy++; q->right--; printf("\n編號(hào)%s的讀者還書(shū)完畢!按任意鍵繼續(xù)下步操作..",return_reader_num); gotoend; } if(find==0) printf("\n錯(cuò)誤!此讀者未借此書(shū)!按任意鍵返回..\n"); end:getch();system("cls");}voidPrint_book()/*查詢圖書(shū)信息*/{ BK*p; inti; chare[10]; p=h_book; printf("輸入查詢的圖書(shū)編號(hào):"); scanf("%s",e); for(i=0;i<n;i++) { if(strcmp(p->book_num,e)==0) { printf("\n圖書(shū)信息如下:\n\n"); printf("圖書(shū)編號(hào)\t圖書(shū)名稱\t圖書(shū)作者\(yùn)t現(xiàn)有\(zhòng)t庫(kù)存\n"); printf("%s\t\t%s\t\t%s\t\t%d\t%d\n",p->book_num,p->book_name,p->book_writer,p->book_xy,p->book_kc); break; } else p=p->next; } printf("\n圖書(shū)信息打印完畢!按任意鍵繼續(xù)下一步操作.."); getch(); system("cls");}voidPrint_reader()/*查詢讀者信息*/{ RD*p; inti,j; chare[10]; p=h_reader; printf("輸入查詢的讀者編號(hào):"); scanf("%s",e); for(j=0;j<m;j++) { if(strcmp(p->reader_num,e)==0) { printf("\n讀者信息如下:\n\n"); printf("讀者書(shū)證號(hào)\t讀者姓名\n"); printf("%s\t\t%s",p->reader_num,p->reader_name); for(i=0;i<Max;i++) { printf("\n"); printf("圖書(shū)編號(hào)",i+1); printf("\t還書(shū)日期",i+1); printf("\n"); printf("\t%s",p->borrow[i].borrow_book_num); printf("\t\t%s",p->borrow[i].limit_date); } printf("\n"); break; } else p=p->next; } printf("\n讀者信息打印完畢!按任意鍵繼續(xù)下一步操作.."); getch(); system("cls");}voidSave()/*保存信息*/{ Save_Reader(); Save_Book();}voidSave_Reader()/*保存讀者信息*/{ FILE*fp_reader; RD*p,*p0; p=h_reader; if((fp_reader=fopen("Reader.txt","wb"))==NULL)/*創(chuàng)建文件,進(jìn)行保存*/ { printf("\n文件保存失敗!\n請(qǐng)重新啟動(dòng)本系統(tǒng)...\n"); exit(0); } while(p!=NULL) { if(fwrite(p,sizeof(RD),1,fp_reader)!=1)/*將鏈表中的信息寫(xiě)入文

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論