課程設(shè)計(jì)-基于C語(yǔ)言的圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
課程設(shè)計(jì)-基于C語(yǔ)言的圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
課程設(shè)計(jì)-基于C語(yǔ)言的圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
課程設(shè)計(jì)-基于C語(yǔ)言的圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
課程設(shè)計(jì)-基于C語(yǔ)言的圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩26頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

摘要圖書(shū)管理系統(tǒng)的設(shè)計(jì)主要運(yùn)用了二叉樹(shù)的相關(guān)知識(shí),一方面采用二叉樹(shù)排序作為索引表的主要原因是為了方便用書(shū)序列號(hào)為關(guān)鍵字進(jìn)行查閱,根據(jù)日常我們的借書(shū)經(jīng)驗(yàn)來(lái)看,到圖書(shū)館借書(shū)的人或者到書(shū)店買(mǎi)書(shū)的人,都可以通過(guò)多種查詢(xún)方式來(lái)獲取所需要的書(shū)的信息,通過(guò)數(shù)的序列號(hào)能進(jìn)行更加精確的查找,對(duì)于一個(gè)實(shí)用的管理系統(tǒng)來(lái)說(shuō)缺省查找是必不可少的;采用二分查找實(shí)現(xiàn)精確查找;書(shū)籍入庫(kù)操作應(yīng)由系統(tǒng)管理員進(jìn)行,假設(shè)此書(shū)已有收藏那么只增加庫(kù)存量即可,而否那么要按系統(tǒng)設(shè)計(jì)要求添加相應(yīng)的節(jié)點(diǎn)數(shù)據(jù);書(shū)籍銷(xiāo)毀的操作同樣應(yīng)由系統(tǒng)管理員進(jìn)行,只能銷(xiāo)毀已存在的、且未出借的書(shū),只需在索引表中將該節(jié)點(diǎn)刪除即可完成書(shū)籍的銷(xiāo)毀工作;本系統(tǒng)中采用字符串的模式匹配算法來(lái)實(shí)現(xiàn)信息的缺省檢索結(jié)點(diǎn)的設(shè)計(jì)采用標(biāo)準(zhǔn)c語(yǔ)言提供的一種叫做結(jié)構(gòu)體的復(fù)合數(shù)據(jù)類(lèi)型存儲(chǔ)書(shū)的信息,然后再采用二杈樹(shù)的二杈鏈表存儲(chǔ)結(jié)構(gòu)把單本的書(shū)關(guān)聯(lián)起來(lái)。這樣就可對(duì)館藏的所有書(shū)進(jìn)行統(tǒng)一的管理了。關(guān)鍵字:圖書(shū)借閱,圖書(shū)管理,二叉樹(shù)

目錄1前言 61.1課程設(shè)計(jì)的目的 61.2圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的根本要求 61.3數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)的闡述 62功能描述 73系統(tǒng)設(shè)計(jì) 73.1設(shè)計(jì)思路 73.2系統(tǒng)功能模塊圖 8系統(tǒng)構(gòu)成 8管理員 83.3管理員功能模塊 94算法設(shè)計(jì) 114.1節(jié)點(diǎn)數(shù)據(jù)的設(shè)計(jì) 114.1.1圖書(shū)的存儲(chǔ)結(jié)構(gòu)模型 114.1.1管理員存儲(chǔ)模型 114.2公共參變量說(shuō)明 124.2.1administer*admins,*current_admin=NULL 124.2.2libcard*clients,*current_client=NULL; 124.3二叉排序樹(shù)的插入模塊的設(shè)計(jì) 124.4二叉排序樹(shù)的創(chuàng)立模塊的設(shè)計(jì) 134.5二叉排序樹(shù)的查找模塊設(shè)計(jì) 144.6二叉排序樹(shù)的刪除模塊設(shè)計(jì) 154.7主函數(shù)的設(shè)計(jì) 175詳細(xì)設(shè)計(jì) 185.1采用排序二叉樹(shù)作為存儲(chǔ)結(jié)構(gòu) 185.2創(chuàng)立鏈表的二叉樹(shù) 185.3二叉排序樹(shù)的插入模塊,采用遞歸算法實(shí)現(xiàn) 195.4本模塊實(shí)現(xiàn)二叉排序樹(shù)的建立 205.5二叉排序樹(shù)的查找算法 215.6二叉排序樹(shù)的刪除算法 225.7顯示管理員信息 236調(diào)試分析 306.1進(jìn)入系統(tǒng) 306.2成進(jìn)入系統(tǒng)之后你就可以進(jìn)行相關(guān)操作了 317課程設(shè)計(jì)總結(jié) 358參考文獻(xiàn) 351前言1.1課程設(shè)計(jì)的目的通過(guò)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)能更加熟練的掌握C語(yǔ)言以及數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),能宏觀(guān)的把握數(shù)據(jù)結(jié)構(gòu)的各個(gè)相關(guān)局部的知識(shí),深入的理解各個(gè)分支結(jié)構(gòu)的作用和運(yùn)用,特別是通過(guò)本此課程設(shè)計(jì)更能熟練的掌握和運(yùn)用二叉樹(shù)的相關(guān)知識(shí),如通過(guò)二叉樹(shù)能實(shí)現(xiàn)查找、刪除、排序等從而實(shí)現(xiàn)對(duì)圖書(shū)借閱管理。因而課程設(shè)計(jì)的主要目的就是使同學(xué)們能熟練的運(yùn)用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí)實(shí)現(xiàn)各種功能。1.2圖書(shū)借閱管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的根本要求對(duì)每種書(shū)登記內(nèi)容包括書(shū)號(hào)、書(shū)名、作者、現(xiàn)存量和庫(kù)存量;對(duì)所有藏書(shū)以書(shū)號(hào)為關(guān)鍵字建立索引表——排序二杈樹(shù),用以方便進(jìn)行二分查找;采編入庫(kù):新購(gòu)一種書(shū),確定書(shū)號(hào)后,登記到圖書(shū)帳目表中,如果表中已有,那么只將庫(kù)存量增加;借閱:如果一種書(shū)的現(xiàn)存量大于0,那么借出一本,登記借閱者的書(shū)證號(hào)和歸還期限,改變現(xiàn)存量;歸還:注銷(xiāo)對(duì)借閱者的登記,改變?cè)摃?shū)的現(xiàn)存量。系統(tǒng)主要功能如下:輸出形式:能按書(shū)號(hào)、書(shū)名、著作者查找?guī)齑娴臅?shū)籍信息;能按學(xué)生的借書(shū)證號(hào)顯示學(xué)生信息和借閱信息;書(shū)籍入庫(kù);借書(shū)功能實(shí)現(xiàn);還書(shū)功能實(shí)現(xiàn)。

1.3數(shù)據(jù)結(jié)構(gòu)相關(guān)知識(shí)的闡述本課程設(shè)計(jì)運(yùn)用到得數(shù)據(jù)結(jié)構(gòu)局部主要在于二叉樹(shù)的運(yùn)用,采用二杈樹(shù)的二杈鏈表存儲(chǔ)結(jié)構(gòu)把單本的書(shū)關(guān)聯(lián)起來(lái),這樣就可對(duì)館藏的所有書(shū)進(jìn)行統(tǒng)一的管理;采用排序二叉樹(shù)作為索引表的優(yōu)點(diǎn)是方便按索書(shū)號(hào)為關(guān)鍵字進(jìn)行查詢(xún);對(duì)于一個(gè)實(shí)用的管理系統(tǒng)來(lái)說(shuō)缺省查找是必不可少的,本系統(tǒng)中采用字符串的模式匹配算法來(lái)實(shí)現(xiàn)信息的缺省檢索。采用二分查找實(shí)現(xiàn)精確查找;運(yùn)用二叉樹(shù)的插入、刪除、排序來(lái)實(shí)現(xiàn)對(duì)圖書(shū)的添加、刪除、排列。2功能描述二叉樹(shù)的排序主要用于對(duì)圖書(shū)管理系統(tǒng)的圖書(shū)進(jìn)行排序,采用二杈樹(shù)的二杈鏈表存儲(chǔ)結(jié)構(gòu)把單本的書(shū)關(guān)聯(lián)起來(lái)。這樣就可對(duì)館藏的所有書(shū)進(jìn)行統(tǒng)一的管理了。二叉樹(shù)的插入用于實(shí)現(xiàn)對(duì)圖書(shū)管理系統(tǒng)的圖書(shū)進(jìn)行添加,對(duì)二叉樹(shù)的節(jié)點(diǎn)插入新節(jié)點(diǎn),然后從新排列新序列來(lái)實(shí)現(xiàn)圖書(shū)的插入。二叉樹(shù)的刪除主要用來(lái)對(duì)圖書(shū)管理系統(tǒng)的圖書(shū)進(jìn)行銷(xiāo)毀,對(duì)二叉樹(shù)節(jié)點(diǎn)的刪除,節(jié)點(diǎn)表示一本圖書(shū),刪除節(jié)點(diǎn)就表示銷(xiāo)毀不需要的圖書(shū)信息。3系統(tǒng)設(shè)計(jì)3.1設(shè)計(jì)思路由于課程設(shè)計(jì)的要求是用純的c語(yǔ)言實(shí)現(xiàn),不能采用數(shù)據(jù)庫(kù)等操作數(shù)據(jù),故節(jié)點(diǎn)的設(shè)計(jì)采用標(biāo)準(zhǔn)c語(yǔ)言提供的一種叫做結(jié)構(gòu)體的復(fù)合數(shù)據(jù)類(lèi)型存儲(chǔ)書(shū)的信息,然后再采用二杈樹(shù)的二杈鏈表存儲(chǔ)結(jié)構(gòu)把單本的書(shū)關(guān)聯(lián)起來(lái)。這樣就可對(duì)館藏的所有書(shū)進(jìn)行統(tǒng)一的管理了。根據(jù)我們?nèi)粘探?jīng)驗(yàn),客戶(hù)到圖書(shū)館借書(shū)或者到書(shū)店買(mǎi)書(shū),客戶(hù)可以通過(guò)多種查詢(xún)方式獲得所需要的書(shū),通過(guò)索書(shū)號(hào)只能進(jìn)行精確查找,對(duì)于一個(gè)實(shí)用的管理系統(tǒng)來(lái)說(shuō)缺省查找是必不可少的,本系統(tǒng)中采用字符串的模式匹配算法來(lái)實(shí)現(xiàn)信息的缺省檢索。采用二分查找實(shí)現(xiàn)精確查找。書(shū)籍入庫(kù)操作應(yīng)由系統(tǒng)管理員進(jìn)行,假設(shè)此書(shū)已有收藏那么只增加庫(kù)存量即可,而否那么要按系統(tǒng)設(shè)計(jì)要求添加相應(yīng)的節(jié)點(diǎn)數(shù)據(jù)。書(shū)籍銷(xiāo)毀的操作同樣應(yīng)由系統(tǒng)管理員進(jìn)行,只能銷(xiāo)毀已存在的、且未出借的書(shū)。只需在索引表中將該節(jié)點(diǎn)刪除即可完成書(shū)籍的銷(xiāo)毀工作。根據(jù)業(yè)務(wù)實(shí)際,客戶(hù)借書(shū)、還書(shū)的操作都需得管理員上班〔即本系統(tǒng)中的登錄〕,而在每一個(gè)單位時(shí)間內(nèi)每個(gè)管理員只能受理一個(gè)客戶(hù)??蛻?hù)有權(quán)提出借/還書(shū)但是對(duì)借/還書(shū)的操作那么是由系統(tǒng)管理員完成的。借書(shū)功能顯然是針對(duì)具體客戶(hù)而言的,所以不管你是誰(shuí),要借書(shū)就得說(shuō)明你是誰(shuí)〔即先登錄在借書(shū)〕。客戶(hù)每借一本書(shū)都應(yīng)該對(duì)客戶(hù)的借書(shū)信息有個(gè)詳細(xì)的說(shuō)明,根據(jù)業(yè)務(wù)實(shí)際對(duì)于客戶(hù)應(yīng)該還有借書(shū)數(shù)目的限制條件。還書(shū)功能與借數(shù)功能相似,但業(yè)務(wù)邏輯是相反的。根據(jù)業(yè)務(wù)邏輯實(shí)際當(dāng)借書(shū)超過(guò)一定時(shí)間還會(huì)對(duì)違例客戶(hù)進(jìn)行一定的懲罰〔通常為罰款〕。3.2系統(tǒng)功能模塊圖3.2.1系統(tǒng)構(gòu)成功能說(shuō)明:描述圖書(shū)管理系統(tǒng)的主體局部。3.2.2管理員功能說(shuō)明:描述圖書(shū)管理員的管理局部。3.3管理員功能模塊功能說(shuō)明:描述圖書(shū)管理系統(tǒng)管理員的全部功能系統(tǒng)局部。4算法設(shè)計(jì)4.1節(jié)點(diǎn)數(shù)據(jù)的設(shè)計(jì)4.1.1圖書(shū)的存儲(chǔ)結(jié)構(gòu)模型typedefstructbook{ longintstarting;//借書(shū)日期 longintending;//應(yīng)還日期 charbookinform[120];//這里面存儲(chǔ)書(shū)籍的描述信息 longintcallnum;//索書(shū)號(hào) charbookname[30]; charwriter[20]; inttotalstorage,nowstorage;//書(shū)本的館藏量,現(xiàn)有量}book;/*本結(jié)構(gòu)體用于創(chuàng)立二叉樹(shù)*/typedefstructvolume{ bookbooks;structvolume*lchild; structvolume*rchild;}volume,*Btvolume; 說(shuō)明:采用二叉樹(shù)而非鏈表進(jìn)行圖書(shū)的管理4.1.1管理員存儲(chǔ)模型typedefstructadminister{ charadminID[12]; charpassword[12];charadminname[20];//管理員名字... charadminmessage[150]; structadminister*next;}administer;說(shuō)明:采用二叉樹(shù)而非鏈表進(jìn)行圖書(shū)的管理4.2公共參變量說(shuō)明4.2.1administer*admins,*current_admin=NULL;說(shuō)明:admins作為鏈接所有管理員的頭指針 current_admin用于管理當(dāng)前登陸的管理員用戶(hù) 同一時(shí)刻只允許最多一名管理員登錄4.2.2libcard*clients,*current_client=NULL;說(shuō)明:clients作為鏈接所有客戶(hù)的頭指針 current_client用于管理當(dāng)前登陸的客戶(hù) 同一時(shí)刻最多只允許一名客戶(hù)登錄4.3二叉排序樹(shù)的插入模塊的設(shè)計(jì)——voidinsertBST(Btvolume*bst,book*key)功能說(shuō)明:利用二叉樹(shù)的結(jié)點(diǎn)插入方法對(duì)結(jié)點(diǎn)進(jìn)行插入設(shè)置,從而來(lái)實(shí)現(xiàn)對(duì)圖書(shū)信息進(jìn)行插入。如下列圖:4.4二叉排序樹(shù)的創(chuàng)立模塊的設(shè)計(jì)——voidcreateBST(Btvolume*bst,intmanner)功能說(shuō)明:在二叉樹(shù)的根節(jié)進(jìn)行創(chuàng)立,通過(guò)文件和鍵盤(pán)的信息輸入方法來(lái)添加相關(guān)結(jié)點(diǎn)及相關(guān)圖書(shū)信息。如下列圖:4.5二叉排序樹(shù)的查找模塊設(shè)計(jì)——BtvolumesearchBST(Btvolumebst,longintkey)功能說(shuō)明:利用二叉樹(shù)的結(jié)點(diǎn)查找方法對(duì)結(jié)點(diǎn)進(jìn)行查找設(shè)置,從而來(lái)實(shí)現(xiàn)對(duì)圖書(shū)信息進(jìn)行查找。如下列圖:4.6二叉排序樹(shù)的刪除模塊設(shè)計(jì)——intdelBST(Btvolumebst,intkey)功能說(shuō)明:利用二叉樹(shù)的結(jié)點(diǎn)刪除方法對(duì)結(jié)點(diǎn)進(jìn)行刪除設(shè)置,然后從新排列,從而來(lái)實(shí)現(xiàn)對(duì)圖書(shū)信息進(jìn)行刪除,如下列圖:4.7主函數(shù)的設(shè)計(jì)功能說(shuō)明:主要目的是對(duì)圖書(shū)管理的實(shí)現(xiàn),通過(guò)對(duì)算法設(shè)計(jì)和組織,利用圖形化界面來(lái)實(shí)現(xiàn)用戶(hù)和管理員對(duì)圖書(shū)系統(tǒng)的訪(fǎng)問(wèn)。如下列圖:5詳細(xì)設(shè)計(jì)5.1采用排序二叉樹(shù)作為存儲(chǔ)結(jié)構(gòu)#include<stdlib.h>#include<stdio.h>#include<math.h>#include<string.h>#include<time.h>//函數(shù)結(jié)構(gòu)體#defineMAXNUM10typedefstructbook{ longintstarting;//借書(shū)日期 longintending;//應(yīng)還日期 charbookinform[120];//這里面存儲(chǔ)書(shū)籍的描述信息 longintcallnum;//索書(shū)號(hào) charbookname[30]; charwriter[20]; inttotalstorage,nowstorage;//書(shū)本的館藏量,現(xiàn)有量}book;5.2創(chuàng)立鏈表的二叉樹(shù)功能:本結(jié)構(gòu)體用于創(chuàng)立鏈表的二叉樹(shù),通過(guò)對(duì)結(jié)點(diǎn)的生成來(lái)創(chuàng)立新的二叉樹(shù),最終生成圖書(shū)管理系統(tǒng)。typedefstructvolume{ bookbooks; structvolume*lchild;//左孩子局部 structvolume*rchild;//右孩子局部}volume,*Btvolume;typedefstructlibcard{ charuserID[12]; charpassword[12];//用戶(hù)的密碼 charclientname[20];//用戶(hù)的名字 charusermessage[150];//用戶(hù)信息 bookborrow[10];//每本借書(shū)證限借書(shū)十本 structlibcard*next;}libcard;typedefstructadminister{ charadminID[12]; charpassword[12]; charadminname[20];//管理員的名字... charadminmessage[150]; structadminister*next;}administer;administer*admins,*current_admin=NULL;libcard*clients,*current_client=NULL;5.3二叉排序樹(shù)的插入模塊,采用遞歸算法實(shí)現(xiàn)功能:本結(jié)構(gòu)體用于二叉排序樹(shù)的插入模塊,采用遞歸算法實(shí)現(xiàn),通過(guò)對(duì)結(jié)點(diǎn)的插入來(lái)創(chuàng)立新的二叉樹(shù),最終生成圖書(shū)管理系統(tǒng)。voidinsertBST(Btvolume*bst,book*key){ Btvolumes; if(*bst==NULL)//遞歸結(jié)束條件 { s=(Btvolume)malloc(sizeof(volume)); s->books.callnum=key->callnum; s->books.nowstorage=key->nowstorage; s->books.totalstorage=key->totalstorage; s->books.starting=key->starting; s->books.ending=key->ending; strcpy(&(s->books.bookinform),&(key->bookinform)); strcpy(&(s->books.bookname),&(key->bookname)); strcpy(&(s->books.writer),&(key->writer));s->lchild=NULL; s->rchild=NULL; *bst=s; }//遞歸結(jié)束條件 elseif(key->callnum<(*bst)->books.callnum) { insertBST(&((*bst)->lchild),key); } elseif(key->callnum>(*bst)->books.callnum) { insertBST(&((*bst)->rchild),key); } else { (*bst)->books.nowstorage+=key->nowstorage; (*bst)->books.totalstorage+=key->totalstorage; }}5.4本模塊實(shí)現(xiàn)二叉排序樹(shù)的建立功能說(shuō)明:1、參數(shù)Btvolume*bst為待創(chuàng)立樹(shù)的根節(jié)點(diǎn) 2、只有庫(kù)存量為空的時(shí)候才能調(diào)用本模塊 3、只有管理員才能調(diào)用本模塊 4、參數(shù)manner用于指定從文件創(chuàng)立還是從鍵盤(pán)創(chuàng)立 manner=1:鍵盤(pán)、manner=2:從文件 5、只有在系統(tǒng)初始化是才允許從鍵盤(pán)創(chuàng)立voidcreateBST(Btvolume*bst,intmanner){ book*key; FILE*f_book_store=NULL; f_book_store=fopen("book_store.txt","r"); *bst=NULL; while(1){ key=(book*)malloc(sizeof(book));// if(manner==1) { /*輸入書(shū)本信息*/ key->starting=0; key->ending=0; printf("輸入索書(shū)號(hào):"); scanf("%ld",&(key->callnum)); if(key->callnum==0){ free(key); break; }/*輸入書(shū)本信息*/printf("輸入入庫(kù)量:"); scanf("%d",&(key->totalstorage)); key->nowstorage=key->totalstorage; printf("輸入書(shū)本名:"); scanf("%s",&(key->bookname)); printf("輸入著"); scanf("%s",&(key->writer)); printf("輸入書(shū)描述:"); scanf("%s",&(key->bookinform)); } else { if(!feof(f_book_store))//判斷文件是否結(jié)束 { key=read_book_file(f_book_store); if(key->callnum<-1) { free(key); key=NULL; } } else { free(key); break; } } if(key!=NULL) insertBST(bst,key);//調(diào)用插入操作實(shí)現(xiàn)新書(shū)入庫(kù) } fclose(f_book_store);/////////////////////////////////////////////////////////////////////// f_book_store=fopen("book_store.txt","w"); write_book_file(f_book_store,*bst); fclose(f_book_store);///////////////////////////////////////////////////////////////////////}5.5二叉排序樹(shù)的查找算法功能:按索書(shū)號(hào)為關(guān)鍵字進(jìn)行二分查找,采用遞歸算法實(shí)現(xiàn),通過(guò)對(duì)結(jié)點(diǎn)的查找來(lái)創(chuàng)立新的二叉樹(shù),最終生成圖書(shū)管理系統(tǒng)。BtvolumesearchBST(Btvolumebst,longintkey){ if(bst==NULL) returnNULL; if(bst->books.callnum==key) returnbst; if(bst->books.callnum<key) returnsearchBST(bst->rchild,key); returnsearchBST(bst->lchild,key);}5.6二叉排序樹(shù)的刪除算法功能:實(shí)現(xiàn)對(duì)館藏的書(shū)籍進(jìn)行銷(xiāo)毀,返回是否成功intdelBST(Btvolumebst,intkey){ intsuccess=0; Btvolumep,f,s,q; p=bst; f=NULL;//實(shí)現(xiàn)對(duì)圖書(shū)管理 while(p) { if(p->books.callnum==key) break; f=p; if(p->books.callnum>key) p=p->lchild; else p=p->rchild; }//選擇對(duì)左節(jié)點(diǎn)還是右結(jié)點(diǎn)進(jìn)行訪(fǎng)問(wèn) if(p==NULL) { success=1; returnsuccess;//結(jié)點(diǎn)為空,對(duì)結(jié)點(diǎn)訪(fǎng)問(wèn)成功 } if(p->lchild==NULL) { if(f==NULL) bst=p->rchild; elseif(f->lchild==p) f->lchild=p->rchild; else f->rchild=p->rchild; free(p); success=1; }//訪(fǎng)問(wèn)結(jié)點(diǎn)的左孩子和右孩子成功 else { q=p; s=p->lchild; while(s->rchild) { q=s; s=s->rchild; } if(q==p) q->lchild=s->lchild; else q->rchild=s->lchild; p->books.callnum=s->books.callnum;//對(duì)左右孩子進(jìn)行設(shè)置 free(s); success=1; } returnsuccess;}5.7顯示管理員信息功能:本結(jié)構(gòu)體重要用于對(duì)管理員信息進(jìn)行管理,顯示管理員的信息。voiddisplay_admins(administer*head){ inti=0; administer*temp=head; if(head==NULL) { printf("您好,當(dāng)前無(wú)管理員!\n"); return; } while(temp!=NULL) { printf("\n"); printf("管理員ID:%s\n",temp->adminID); printf("管理員姓名:%s\n",temp->adminname); printf("管理員信息:%s\n",temp->adminmessage); printf("\n"); temp=temp->next; }}voiddisplay(volume*key){ time_tt; if(key==NULL) { printf("對(duì)不起,本館目前無(wú)此藏書(shū)!\n"); return; } printf("\n"); printf("索書(shū)號(hào):%d\n",key->books.callnum); printf("書(shū)名:%s\n",key->books.bookname); printf("作者:%s\n",key->books.writer); printf("描述:%s\n",key->books.bookinform); printf("館藏量:%d\n",key->books.totalstorage); printf("可借量:%d\n",key->books.nowstorage); printf("\n");}/* 登錄模塊 返回登錄的用戶(hù)類(lèi)型 用戶(hù)必須先登錄才能對(duì)圖書(shū)進(jìn)行操作*/intlogin(){ administer*temp_admin=NULL; libcard*temp_client=NULL; inttype,temp; view_01(); scanf("%d",&type); while(1) { switch(type) { case1: if(current_admin!=NULL) { printf("對(duì)不起,登錄人數(shù)已滿(mǎn),您目前還不能登陸!\n"); break; } temp_admin=(administer*)malloc(sizeof(administer)); printf("請(qǐng)輸入管理員ID:"); scanf("%s",&temp_admin->adminID); printf("請(qǐng)輸入登錄密碼:"); GetPassword(&temp_admin->password,12); //scanf("%s",&temp_admin->password); if(check_admin(&temp_admin))//調(diào)用函數(shù)檢查 { current_admin=temp_admin; returntype; } else { printf("對(duì)不起,密碼錯(cuò)誤!\n"); free(temp_admin);//如果登錄失敗那么不能進(jìn)行更多的操作 current_admin=NULL; break; } case2: if(current_client!=NULL) { printf("對(duì)不起,登錄人數(shù)已滿(mǎn),您目前還不能登陸!\n"); break; } temp_client=(libcard*)malloc(sizeof(libcard)); printf("請(qǐng)輸入借閱證號(hào):"); scanf("%s",&temp_client->userID); printf("請(qǐng)輸入密碼:"); GetPassword(&temp_client->password,12); //scanf("%s",&temp_client->password); if(check_client(&temp_client))//調(diào)用函數(shù)檢查 { current_client=temp_client; returntype; } else { printf("對(duì)不起,密碼錯(cuò)誤!\n"); free(temp_client); current_client=NULL; break; } } printf("(0、退出)\n"); scanf("%d",&temp); if(!temp)return0; }} 讀取管理員用戶(hù)信息文件 administer*read_admin_file(FILE*filepoint){administerwz;administer*head=NULL;administer*p1=NULL;administer*p2=NULL;//對(duì)管理員進(jìn)行訪(fǎng)問(wèn)while(1) { fread(&wz,sizeof(administer),1,filepoint); p1=(administer*)malloc(sizeof(administer));//設(shè)置管理員權(quán)限 if(feof(filepoint)) { free(p1); break; } strcpy(p1->adminID,wz.adminID); strcpy(p1->adminname,wz.adminname); strcpy(p1->adminmessage,wz.adminmessage); strcpy(p1->password,wz.password); p1->next=p2; p2=p1; } head=p2;return(head);}讀取管理員用戶(hù)信息文件/* 寫(xiě)入管理員用戶(hù)的信息*/intwrite_admin_file(FILE*filepoint,administer*head){while(head!=NULL)//把鏈表中的數(shù)據(jù)存入文件{ fwrite(head,sizeof(administer),1,filepoint); head=head->next;}return0;}/* /* 管理員 管理員能進(jìn)行圖書(shū)的購(gòu)入或者銷(xiāo)毀,還能對(duì)圖書(shū)進(jìn)行查詢(xún)操作以及瀏覽客戶(hù)資料 但是管理員自己不能借書(shū)*/voidadmin(volume**Btroot){ inta,b,oper; volume*temp; libcard*head; FILE*filepoint=NULL; system("cls");////////////清屏 if(current_admin==NULL) { printf("您還未登錄!\n"); login(); system("cls");////////////清屏 return;//不管登錄是否成功都將回到原處 } while(1) { system("cls");////////////清屏 view_02(); scanf("%d",&oper); switch(oper) { case1: in_stor(Btroot); break; case2: printf("輸入索書(shū)號(hào)進(jìn)行銷(xiāo)毀:"); scanf("%d",&a); if(!out_stor(Btroot,a)) printf("對(duì)不起,本館并未藏有此書(shū)!\n"); break; case3: search(*Btroot); break; case4: preorder(*Btroot); break; case5: display_clients(clients); break; case6: display_admins(admins); break; case7: clientsev(Btroot); if(current_admin==NULL) return; break; case8: logout(1); if(current_client!=NULL)//假設(shè)此時(shí)管理員有登陸者轉(zhuǎn)到管理員界面 clientsev(Btroot); return; default:return; } system("pause"); }}intmain(){ inta=0,b; intcases=0,goornot; FILE*f_book_store=NULL,*f_admin=NULL,*f_client=NULL; bookbooker; volumeroot,*Btroot; /* 讀取所有管理員和客戶(hù) */ f_admin=fopen("user_admin.txt","r"); admins=read_admin_file(f_admin); fclose(f_admin); f_client=fopen("user_client.txt","r"); clients=re

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論