數(shù)據(jù)結(jié)構(gòu)-圖書管理系統(tǒng)_第1頁
數(shù)據(jù)結(jié)構(gòu)-圖書管理系統(tǒng)_第2頁
數(shù)據(jù)結(jié)構(gòu)-圖書管理系統(tǒng)_第3頁
數(shù)據(jù)結(jié)構(gòu)-圖書管理系統(tǒng)_第4頁
數(shù)據(jù)結(jié)構(gòu)-圖書管理系統(tǒng)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計說明書 課程名稱: 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 班級: 11-電科1班 姓 名: 張海琴 學(xué)號: 設(shè)計題目: 圖書管理系統(tǒng) 一、設(shè)計題目與要求 【問題描述】設(shè)計一個計算機管理系統(tǒng)完成圖書管理基本業(yè)務(wù)?!净疽蟆?) 每種書的登記內(nèi)容包括書號、書名、著作者、現(xiàn)存量和庫存量;2) 對書號建立索引表(線性表)以提高查找效率;3) 系統(tǒng)主要功能如下:*采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;*借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書證號和歸還期限,改變現(xiàn)存量;*歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量?!具M一步完成內(nèi)容】1) 系統(tǒng)功能的

2、進一步完善;2) 索引表采用樹表。3) 設(shè)計內(nèi)容4) 程序流程圖5) 源程序6) 軟件測試報告(包括所用到的數(shù)據(jù)及結(jié)果)二、概要設(shè)計有八個模塊1) 圖書初始化輸入圖書的一些信息,編號、作者、書名、數(shù)量,使有一定的庫存。2) 新書入庫新書采編入庫,輸入編號后如果有次數(shù)只需輸入數(shù)量,沒有則繼續(xù)輸入書名、作者、數(shù)量。3) 添加讀者信息讀者信息初始化,輸入讀書證號和姓名,只有輸入書證號和姓名才能進行借書還書4) 借書模塊讀者輸入讀書證號,證號存在輸入要借的圖書編號,不能借同一本書,如果借書數(shù)量以達到最大也不能借書。5) 還書模塊歸還已借的圖書,要先輸入讀者書證號,書證號存在繼續(xù)輸入要還的圖書編號,圖書

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

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

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

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

7、switch語句,鏈表,還知道了如何使用system(cls)清屏,還知道了strcmp是用來比較字符串s1和s2大小的,strcpy使用來把字符串s2的值賦給s1的。這次的實驗增加了我們自己動手動腦的能力,希望多做一些這樣的實驗,很有意義,和現(xiàn)實生活結(jié)合的程序增加了我的興趣。源代碼#include#include #include #include#define Max 4 typedef struct bookchar book_num10;char book_name20;char book_writer10;int book_xy;int book_kc;struct book *ne

8、xt;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_select(); void Insert_New_Book(); v

9、oid 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);printf(nnnttt歡迎使用圖書管理系統(tǒng)n);printf(nnntt*n);pr

10、intf(nntt本程序制作人 學(xué)號:nnnnnnn);printf(nnntt 按任意鍵進入系統(tǒng).);getch(); system(cls);int Menu() /*主菜單*/ int dm;printf(ntt圖書管理系統(tǒng)主菜單n);printf(=n);printf(*t0-退出系統(tǒng) n);printf(*t1-采編入庫 n);printf(*t2-登記讀者 n); printf(*t3-借閱登記 n);printf(*t4-還書管理 n);printf(*t5-查詢圖書信息 n);printf(*t6-查詢讀者信息 n);printf(=n);printf(請選擇相應(yīng)的代碼:);

11、for(;) scanf(%d,&dm); /dm輸入的數(shù)字 if(dm6) printf(n錯誤!請重新輸入:); else break;return dm; void Menu_select()/*主菜單選擇函數(shù)*/for(;) switch(Menu() /*功能選擇*/ case 0: system(cls); Save();printf(nnt文件保存成功!n); printf(nnt歡迎下次使用本系統(tǒng)!n); getch(); exit(0); case 1:Insert_New_Book();break; case 2:add_reader();break; case 3:Bor

12、row_Book();break; case 4:Return_Book();break; case 5:Print_book();break; case 6:Print_reader();break; default:printf(n錯誤!); exit(0);void Init() /*初始化*/ BK *p0;printf(n圖書初始化開始,請輸入圖書信息.n包括編號.書名.數(shù)量.n);p0=(BK*)malloc(sizeof(BK);h_book=p0; printf(n請輸入圖書信息:n); printf(圖書編號:); /*輸入圖書編號(唯一)*/ scanf(%s,p0-boo

13、k_num); printf(圖書名稱:); /*輸入圖書名稱*/ scanf(%s,p0-book_name);printf(圖書作者:); /*輸入圖書作者*/ scanf(%s,p0-book_writer); printf(圖書數(shù)量:); /*輸入圖書數(shù)量*/ scanf(%d,&p0-book_kc); p0-book_xy=p0-book_kc; /*開始時圖書現(xiàn)有量和庫存量相等*/ p0-next=NULL; printf(n圖書信息初始化完畢!按任意鍵繼續(xù)下一步操作.n); getch(); system(cls);void Insert_New_Book()/*新書入庫*/B

14、K *p,*p0,*p1; p=p1=h_book;printf(n新書入庫模塊.n);printf(n請輸入新書信息.n包括書號.書名.數(shù)量.n);p0=(BK *)malloc(sizeof(BK); printf(圖書編號:); 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ù)量*/ printf(n此編號圖書已存在!直

15、接入庫!n); printf(圖書數(shù)量:); scanf(%d,&p0-book_kc); p1-book_kc+=p0-book_kc; p1-book_xy+=p0-book_kc; else/*若不存在,則需要輸入其他的信息,然后在進行插入操作*/ printf(圖書名稱:); scanf(%s,p0-book_name);printf(圖書作者:); scanf(%s,p0-book_writer); printf(圖書數(shù)量:); scanf(%d,&p0-book_kc);/庫存數(shù)量while(p-next) p=p-next; if(h_book=NULL) h_book=p0;

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

17、=p0;printf(n請輸入讀者的信息:n); printf(讀者書證號:); scanf(%s,p0-reader_num); printf(讀者姓名:); scanf(%s,p0-reader_name); p0-right=0; for(i=0;iborrowi.borrow_book_num,0); /*所借圖書直接置為(即沒有借書)*/ strcpy(p0-borrowi.limit_date,0); p0-next=NULL; printf(n讀者信息初始化完畢!按任意鍵繼續(xù)下一步操作.n); getch(); system(cls);void Borrow_Book() /*借

18、書模塊*/BK *p0; RD *p1;char bo_num10,rea_num10,lim_date8;int i;p0=h_book; p1=h_reader;printf(n借書模塊.n);printf(n請輸入借書的讀者書證號:); 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此讀者編號不存在!按任意鍵返回.n); goto END; printf

19、(n請輸入你要借的書的編號:); 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此圖書編號不存在!按任意鍵返回.n); goto END; else if(p0-book_xyrightMax|p1-right=Max) printf(n不好意思,借書數(shù)目已滿!不能借書!n按任意鍵返回.); goto END; else if(strcmp(p1-borrow0.borr

20、ow_book_num,0)!=0) for(i=0;iborrowi.borrow_book_num,bo_num)=0) printf(n抱歉!同一個讀者不能同借兩本相同的書!n按任意鍵返回.); goto END; else if(strcmp(p1-borrowi.borrow_book_num,0)=0) printf(n請輸入你要歸還圖書的日期:); scanf(%s,lim_date); strcpy(p1-borrowp1-right+.borrow_book_num,bo_num); strcpy(p1-borrowp1-right-1.limit_date,lim_date

21、); p0-book_xy-; p0-book_kc-; printf(n讀者編號%s借書完畢!按任意鍵繼續(xù)下步操作.,p1-reader_num); goto END; else printf(n請輸入你要歸還圖書的日期:); scanf(%s,lim_date); strcpy(p1-borrowp1-right+.borrow_book_num,bo_num); strcpy(p1-borrowp1-right-1.limit_date ,lim_date ); p0-book_xy-; p0-book_kc-; printf(n讀者編號%s借書完畢!按任意鍵繼續(xù)下步操作.,p1-rea

22、der_num); END:getch(); system(cls); void Return_Book() /*還書模塊*/BK *p; RD *q;int i,j,find=0;char return_book_num10,return_reader_num10;p=h_book; q=h_reader;printf(n還書模塊.n);printf(n請輸入要還書的讀者編號:); scanf(%s,return_reader_num); while(q-next!=NULL&strcmp(return_reader_num,q-reader_num)!=0) q=q-next;if(q-n

23、ext=NULL&strcmp(return_reader_num,q-reader_num)!=0) find=2; printf(n此讀者編號不存在!按任意鍵返回.n); goto end; printf(n請輸入讀者還書的編號:); 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錯誤!此圖書編號不存在!按任意

24、鍵返回.n); goto end; for(i=0;iborrowi.borrow_book_num)=0) /*如果此讀者借了此書*/ find=1; for(j=i;jborrowj.borrow_book_num,q-borrowj+1.borrow_book_num); strcpy(q-borrowj.limit_date,q-borrowj+1.limit_date); strcpy(q-borrowMax-1.borrow_book_num,0); strcpy(q-borrowMax-1.limit_date,0); p-book_xy+; p-book_kc+; q-righ

25、t-; printf(n編號%s的讀者還書完畢!按任意鍵繼續(xù)下步操作.,return_reader_num); if(find=0) printf(n錯誤!此讀者未借此書!按任意鍵返回.n); end: getch(); system(cls);void Print_book() /*查詢圖書信息*/BK *p;p=h_book;printf(n圖書信息如下:nn);printf(圖書編號t圖書名稱t圖書作者t現(xiàn)有tt庫存n);while(p!=NULL) printf(%stt%stt%stt%dtt%dn,p-book_num,p-book_name,p-book_writer,p-boo

26、k_xy,p-book_kc); p=p-next;printf(n圖書信息打印完畢!按任意鍵繼續(xù)下一步操作.);getch();system(cls);void Print_reader() /*查詢讀者信息*/RD *p;int i;p=h_reader;printf(n讀者信息如下:nn);printf(讀者書證號tt讀者姓名n); printf(n);while(p!=NULL) printf(t%stt%s,p-reader_num,p-reader_name); for(i=0;iborrowi.borrow_book_num); printf(tt%s,p-borrowi.lim

27、it_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)建文件,進行保存*/ printf(n文件保存失敗!n請重新啟動本系統(tǒng).n); exit(0);while(p!=NULL)

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

溫馨提示

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

評論

0/150

提交評論