數(shù)據(jù)結(jié)構(gòu)-圖書(shū)管理系統(tǒng)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)-圖書(shū)管理系統(tǒng)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)-圖書(shū)管理系統(tǒng)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)-圖書(shū)管理系統(tǒng)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)-圖書(shū)管理系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(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、課程設(shè)計(jì)說(shuō)明書(shū)課程名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)班級(jí):11電科1班姓名:張海琴學(xué)號(hào):1111121132設(shè)計(jì)題目: 圖書(shū)管理系統(tǒng) 一、設(shè)計(jì)題目與要求【問(wèn)題描述】設(shè)計(jì)一個(gè)計(jì)算機(jī)管理系統(tǒng)完成圖書(shū)管理基本業(yè)務(wù)。【基本要求】1) 每種書(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)存量?!具M(jìn)一步完成內(nèi)容】1) 系統(tǒng)功能的進(jìn)一步

2、完善;2) 索引表采用樹(shù)表。3) 設(shè)計(jì)內(nèi)容4) 程序流程圖5) 源程序6) 軟件測(cè)試報(bào)告(包括所用到的數(shù)據(jù)及結(jié)果)二、概要設(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)存

3、在并且借來(lái)此書(shū),歸還成功。6) 查詢圖書(shū)信息7) 查詢讀者信息可查詢讀者姓名書(shū)證號(hào),借了幾本書(shū),都是什么書(shū)和還書(shū)日期,還可以借幾本書(shū)。8) 退出退出讀書(shū)管理系統(tǒng)并保存讀者和圖書(shū)信息。圖書(shū)管理系統(tǒng)圖書(shū)管理模塊理讀者管理模塊借閱操作模塊查詢操作模塊借書(shū)系統(tǒng)讀者信息查詢圖書(shū)信息查詢輸入讀者信息還書(shū)系統(tǒng)采編入庫(kù)初始化圖書(shū)信息三、算法設(shè)計(jì)進(jìn)入系統(tǒng)后首先進(jìn)行圖書(shū)初始化,輸入圖書(shū)的信息。開(kāi)始開(kāi)始開(kāi)始輸入圖書(shū)編號(hào)、名稱、作者和圖書(shū)數(shù)量進(jìn)入系統(tǒng)初始化之后,進(jìn)入系統(tǒng),顯示功能列表,可選擇任意系統(tǒng),但在借書(shū)之前先要輸入讀者信息。開(kāi)始輸入功能所對(duì)應(yīng)的數(shù)字輸入的數(shù)字小于0大于6錯(cuò)誤!請(qǐng)重新輸入執(zhí)行所選功能1)采編入庫(kù)錄

4、入圖書(shū)信息判斷是否有此圖書(shū)是在原有的紀(jì)錄上加上現(xiàn)有的圖書(shū)數(shù)量否向系統(tǒng)中加入新紀(jì)錄2)輸入讀者信息開(kāi)始輸入讀者信息:讀者書(shū)證號(hào)結(jié)束3)借閱圖書(shū)輸入讀者書(shū)證號(hào)判斷讀者是否存在否輸出次讀者編號(hào)不存在!按任意鍵返回是輸入要借的圖書(shū)編號(hào)判斷圖書(shū)編號(hào)是否存在否輸出此圖書(shū)編號(hào)不存在!按任意鍵返回是看是否還有此圖書(shū)否輸出此書(shū)已借完,按任意鍵返回是看讀者的借書(shū)數(shù)目是否滿了是輸出借書(shū)數(shù)目已滿不能借書(shū),按任意鍵返回否看讀者是否借了相同的書(shū)是輸出同一讀者不能借相同的兩本書(shū)否輸入歸還圖書(shū)的日期圖書(shū)現(xiàn)有數(shù)量和庫(kù)存數(shù)量都減1輸出讀者結(jié)束成功,按任意鍵返回結(jié)束4)歸還圖書(shū)輸入要還書(shū)的讀者編號(hào)判斷讀者編號(hào)是否存在否輸出讀者編號(hào)

5、不存在按任意鍵返回是輸入讀者還書(shū)編號(hào)判斷圖書(shū)編號(hào)是否存在否輸出此圖書(shū)編號(hào)不存在按任意鍵返回是此圖書(shū)編號(hào)和還書(shū)日期等于0庫(kù)存和現(xiàn)有圖書(shū)數(shù)量加1,借書(shū)數(shù)量減1輸出讀者還書(shū)完畢,按任意鍵返回結(jié)束5)查詢圖書(shū)信息判斷圖書(shū)信息是否為空否輸出圖書(shū)信息:編號(hào)、名稱、作者、現(xiàn)有和庫(kù)存結(jié)束6)查詢讀者信息判斷讀者信息是否為空否輸出讀者書(shū)證號(hào)、姓名、圖書(shū)編碼和還書(shū)日期輸出讀者信息打印完畢結(jié)束四、運(yùn)行結(jié)果和調(diào)試分析圖書(shū)信息初始化同一本新書(shū)入庫(kù)的運(yùn)行結(jié)果圖不同的新書(shū)采編入庫(kù)采編入庫(kù)后查詢圖書(shū)信息的運(yùn)行結(jié)果圖登記讀者信息借書(shū)借書(shū)后查詢圖書(shū)信息的運(yùn)行結(jié)果圖借同一本書(shū)的運(yùn)行結(jié)果圖借不同的書(shū)借兩本書(shū)后查詢讀者信息的運(yùn)行結(jié)果圖

6、還書(shū)運(yùn)行結(jié)果圖還書(shū)之后再查詢讀者信息的運(yùn)行結(jié)果圖還書(shū)后查詢圖書(shū)信息退出五、總結(jié)體會(huì)雖然這次的程序是通過(guò)上網(wǎng)查出來(lái)的,但是通過(guò)這次的實(shí)驗(yàn)使我知道了圖書(shū)管理系統(tǒng)的流程,知道了一些以前不知道的知識(shí),在運(yùn)行程序時(shí)也遇到了一些問(wèn)題,借書(shū)時(shí)只能借一本書(shū),再借書(shū)就不能顯示是借了還是不能借,把最多能借書(shū)的數(shù)量改了一下還是不行,最后在每一個(gè)判斷輸出之后都加了goto END借書(shū),就能正常借書(shū)了。程序有點(diǎn)長(zhǎng),本來(lái)一個(gè)函數(shù)就能完成一個(gè)功能,他用了兩個(gè)函數(shù)就我把自己能改成一個(gè)的改了。借書(shū)系統(tǒng)比較復(fù)雜,不容易懂,和同學(xué)交流了一下自己看了看才明白。這次的實(shí)驗(yàn)還讓我復(fù)習(xí)了數(shù)據(jù)結(jié)構(gòu)的一些知識(shí),如數(shù)組,while語(yǔ)句,swit

7、ch語(yǔ)句,鏈表,還知道了如何使用system("cls”)清屏,還知道了strcmp是用來(lái)比較字符串s1和s2大小的,strcpy使用來(lái)把字符串s2的值賦給s1的。這次的實(shí)驗(yàn)增加了我們自己動(dòng)手動(dòng)腦的能力,希望多做一些這樣的實(shí)驗(yàn),很有意義,和現(xiàn)實(shí)生活結(jié)合的程序增加了我的興趣。源代碼#includestdio。hinclude string。h#include stdlib.hinclude<conio。h#define Max 4 typedef struct bookchar book_num10;char book_name20;char book_writer10;int

8、book_xy;int book_kc;struct book next;BK;typedef struct borrowchar borrow_book_num10;char limit_date8;BO;typedef struct readerchar reader_num10;char reader_name10;int right;BO borrowMax;struct reader next;RD;BK *h_book;RD h_reader;void Login(); int Menu(); void Init(); void Init_book(); void Menu_sel

9、ect(); void Insert_New_Book(); void Find_Book(); void add_reader();void Print_reader(); void Print_book(); void Borrow_Book(); void Return_Book(); void Save(); void Save_Book(); void Save_Reader(); void Load();void Load_Reader(); void Load_Book(); void Login()system(”cls");printf("nnntt*n&

10、quot;);printf(”nnnttt歡迎使用圖書(shū)管理系統(tǒng)n");printf(”nnntt*n”);printf(”nntt本程序制作人 學(xué)號(hào):nnnnnnn");printf(”nnntt 按任意鍵進(jìn)入系統(tǒng)。.”);getch(); system(”cls”);int Menu() /主菜單/ int dm;printf(”ntt圖書(shū)管理系統(tǒng)主菜單n”);printf(”=n”);printf(”t0-退出系統(tǒng) n”);printf(”t1-采編入庫(kù) n”);printf(”t2-登記讀者 n”); printf(”t3-借閱登記 n”);printf(”*t4-還

11、書(shū)管理 n”);printf("*t5-查詢圖書(shū)信息 n”);printf("t6-查詢讀者信息 n");printf(”=n");printf(”請(qǐng)選擇相應(yīng)的代碼:"); for(;) scanf(”d",&dm); /dm輸入的數(shù)字 if(dm0|dm6) printf(”n錯(cuò)誤!請(qǐng)重新輸入:”); else break;return dm; void Menu_select()/主菜單選擇函數(shù)/for(;) switch(Menu()) /功能選擇*/ case 0: system("cls"); S

12、ave();printf(”nnt文件保存成功!n”); printf(”nnt歡迎下次使用本系統(tǒng)!n”); getch(); exit(0); case 1:Insert_New_Book();break; case 2:add_reader();break; case 3:Borrow_Book();break; case 4:Return_Book();break; case 5:Print_book();break; case 6:Print_reader();break; default:printf("n錯(cuò)誤!”); exit(0);void Init() /初始化/BK

13、 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”,p0book_num); printf("圖書(shū)名稱:"); /*輸入圖書(shū)名稱/ scanf("%s”,p0-book_name);printf("圖書(shū)作者:”); /輸入圖書(shū)作者/ scanf("s”,p0book_writer); printf(

14、"圖書(shū)數(shù)量:”); /輸入圖書(shū)數(shù)量*/ scanf("%d",&p0book_kc); p0>book_xy=p0-book_kc; /開(kāi)始時(shí)圖書(shū)現(xiàn)有量和庫(kù)存量相等*/ p0>next=NULL; printf("n圖書(shū)信息初始化完畢!按任意鍵繼續(xù)下一步操作.。n”); getch(); system(”cls");void Insert_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”)

15、;p0=(BK *)malloc(sizeof(BK); printf(”圖書(shū)編號(hào):”); scanf("%s”,p0book_num); while(strcmp(p0->book_num,p1>book_num)!=0p1next!=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”,p

16、0>book_kc); p1->book_kc+=p0book_kc; p1>book_xy+=p0>book_kc; else/若不存在,則需要輸入其他的信息,然后在進(jìn)行插入操作/ printf(”圖書(shū)名稱:"); scanf(”s",p0book_name);printf(”圖書(shū)作者:”); scanf(”s”,p0book_writer); printf(”圖書(shū)數(shù)量:”); scanf(”d",p0-book_kc);/庫(kù)存數(shù)量while(p>next) p=pnext; if(h_book=NULL) h_book=p0; /

17、此處分兩種情況,鏈表中沒(méi)有數(shù)據(jù),head直接指向p0處/ else p-next=p0; /此處分兩種情況,鏈表中有數(shù)據(jù),鏈表中最后元素的next指向p0處*/ p0>next=NULL; p0book_xy=p0book_kc; printf(”n新書(shū)入庫(kù)完畢!按任意鍵繼續(xù)下一步操作。.n”); getch(); system("cls”);void add_reader()/添加讀者/ RD *p0; int i; printf(”n讀者初始化開(kāi)始,請(qǐng)輸入讀者信息。.n包括書(shū)證號(hào)。姓名。.n”);p0=(RD)malloc(sizeof(RD)); /申請(qǐng)新結(jié)點(diǎn)存儲(chǔ)空間/h

18、_reader=p0;printf(”n請(qǐng)輸入讀者的信息:n"); printf(”讀者書(shū)證號(hào):”); scanf("%s”,p0-reader_num); printf(”讀者姓名:”); scanf(”%s”,p0reader_name); p0right=0; for(i=0;iMax;i+) strcpy(p0>borrowi.borrow_book_num,”0”); /所借圖書(shū)直接置為(即沒(méi)有借書(shū))/ strcpy(p0>borrowi。limit_date,”0"); p0->next=NULL; printf(”n讀者信息初始化完

19、畢!按任意鍵繼續(xù)下一步操作.。n”); getch(); system(”cls”);void Borrow_Book() /借書(shū)模塊/BK p0; RD p1;char bo_num10,rea_num10,lim_date8;int i;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!=NULLstrcmp(rea_num,p1>reader_num)!=0) p1=p1&

20、gt;next; if(p1next=NULL&strcmp(rea_num,p1>reader_num)!=0) printf(”n此讀者編號(hào)不存在!按任意鍵返回。.n”); goto END; printf(”n請(qǐng)輸入你要借的書(shū)的編號(hào):”); scanf(”%s”,bo_num); while(strcmp(bo_num,p0>book_num)!=0&p0next!=NULL) p0=p0next; if(p0next=NULL&&strcmp(bo_num,p0book_num)!=0) printf(”n此圖書(shū)編號(hào)不存在!按任意鍵返回。n”

21、); goto END; else if(p0->book_xy<=0) printf(”n抱歉,此書(shū)已借完!請(qǐng)等待新書(shū)的到來(lái)!n按任意鍵返回.?!保? goto END; else if(p1->right>Maxp1right=Max) printf(”n不好意思,借書(shū)數(shù)目已滿!不能借書(shū)!n按任意鍵返回。.。"); goto END; else if(strcmp(p1borrow0.borrow_book_num,”0")!=0) for(i=0;i<Max;i+) if(strcmp(p1>borrowi。borrow_book_

22、num,bo_num)=0) printf(”n抱歉!同一個(gè)讀者不能同借兩本相同的書(shū)!n按任意鍵返回。.”); goto END; else if(strcmp(p1-borrowi.borrow_book_num,”0”)=0) printf(”n請(qǐng)輸入你要?dú)w還圖書(shū)的日期:”); scanf(”s",lim_date); strcpy(p1>borrowp1right+。borrow_book_num,bo_num); strcpy(p1borrowp1right1。limit_date,lim_date); p0->book_xy-; p0book_kc-; prin

23、tf("n讀者編號(hào)%s借書(shū)完畢!按任意鍵繼續(xù)下步操作。",p1reader_num); goto END; else printf(”n請(qǐng)輸入你要?dú)w還圖書(shū)的日期:”); scanf(”%s”,lim_date); strcpy(p1>borrowp1->right+。borrow_book_num,bo_num); strcpy(p1->borrowp1>right1。limit_date ,lim_date ); p0-book_xy-; p0->book_kc; printf(”n讀者編號(hào)%s借書(shū)完畢!按任意鍵繼續(xù)下步操作.?!?,p1rea

24、der_num); END:getch(); system("cls”); void Return_Book() /還書(shū)模塊/BK *p; RD q;int i,j,find=0;char return_book_num10,return_reader_num10;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!=NULLstrcmp(return_reader_num,q-re

25、ader_num)!=0) q=q->next;if(q-next=NULLstrcmp(return_reader_num,qreader_num)!=0) find=2; printf("n此讀者編號(hào)不存在!按任意鍵返回。.n”); goto end; 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=pnext; if(pnext=NULLstrcmp(re

26、turn_book_num,pbook_num)!=0) find=2; printf(”n錯(cuò)誤!此圖書(shū)編號(hào)不存在!按任意鍵返回.。n”); goto end; for(i=0;i<Max;i+) if(strcmp(return_book_num,q->borrowi.borrow_book_num)=0) /如果此讀者借了此書(shū)*/ find=1; for(j=i;j<Max1;j+) strcpy(q-borrowj。borrow_book_num,q-borrowj+1.borrow_book_num); strcpy(q>borrowj。limit_date,q

27、-borrowj+1.limit_date); strcpy(q>borrowMax1.borrow_book_num,”0”); strcpy(q->borrowMax-1.limit_date,"0”); p->book_xy+; p>book_kc+; qright; printf(”n編號(hào)s的讀者還書(shū)完畢!按任意鍵繼續(xù)下步操作?!?,return_reader_num); if(find=0) printf("n錯(cuò)誤!此讀者未借此書(shū)!按任意鍵返回。n”); end: getch(); system(”cls”);void Print_book(

28、) /*查詢圖書(shū)信息/BK *p;p=h_book;printf(”n圖書(shū)信息如下:nn");printf("圖書(shū)編號(hào)t圖書(shū)名稱t圖書(shū)作者t現(xiàn)有tt庫(kù)存n”);while(p!=NULL) printf(”stt%sttsttdttdn”,pbook_num,pbook_name,pbook_writer,p>book_xy,pbook_kc); p=p->next;printf(”n圖書(shū)信息打印完畢!按任意鍵繼續(xù)下一步操作。.”);getch();system(”cls");void Print_reader() /查詢讀者信息/RD p;int i

29、;p=h_reader;printf("n讀者信息如下:nn”);printf("讀者書(shū)證號(hào)tt讀者姓名n"); printf(”n”);while(p!=NULL) printf("tstts”,p>reader_num,p>reader_name); for(i=0;iMax;i+) printf(”n”); printf(”圖書(shū)編號(hào)”,i+1); printf(”t還書(shū)日期”,i+1); printf(”n”); printf("ts”,p>borrowi.borrow_book_num); printf("t

30、ts”,p>borrowi。limit_date); printf(”n”); p=p->next;printf("n讀者信息打印完畢!按任意鍵繼續(xù)下一步操作。");getch();system(”cls");void Save() /*保存信息/Save_Reader();Save_Book();void Save_Reader() /*保存讀者信息/FILE fp_reader; RD p,p0;p=h_reader;if(fp_reader=fopen(”Reader.txt”,"wb”)=NULL) /*創(chuàng)建文件,進(jìn)行保存/ prin

31、tf(”n文件保存失??!n請(qǐng)重新啟動(dòng)本系統(tǒng).。.n"); exit(0);while(p!=NULL) if(fwrite(p,sizeof(RD),1,fp_reader)!=1) /將鏈表中的信息寫(xiě)入文件中*/ printf(”n寫(xiě)入文件失??!n請(qǐng)重新啟動(dòng)本系統(tǒng)!n"); p0=p; p=p-next; free(p0); /釋放所有結(jié)點(diǎn)*/h_reader=NULL;fclose(fp_reader); /關(guān)閉文件/void Save_Book() /保存圖書(shū)信息/FILE fp_book; /*創(chuàng)建文件型指針/BK p,p0;p=h_book;if((fp_book=fopen(”Book.txt”,”wb"))=NULL) /*創(chuàng)建文件,進(jìn)行保存*/ printf("n文件保存失??!n請(qǐng)重新啟動(dòng)本系統(tǒng)。.。n"); exit(0);while(p!=NULL

溫馨提示

  • 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)論