圖書館管理系統(tǒng)程序_第1頁
圖書館管理系統(tǒng)程序_第2頁
圖書館管理系統(tǒng)程序_第3頁
圖書館管理系統(tǒng)程序_第4頁
圖書館管理系統(tǒng)程序_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、N程序設(shè)計實踐報告學(xué)號;題目來源及序號難度等級 一、題目說明:由教師給出題目13、圖書管理系統(tǒng)(查找應(yīng)用)問題描述圖書管理基本業(yè)務(wù)活動包括:對一本書的采編入庫、清除庫存、借閱和歸還等等。試設(shè)計一個圖書管理系統(tǒng),將上述業(yè)務(wù)活動借助于計算機(jī)系統(tǒng)完成。實現(xiàn)提示1、每種書的登記內(nèi)容至少包括書號、書名、著者、現(xiàn)存量和總庫存量等五項。2、由于圖書管理的基本業(yè)務(wù)活動都是通過書號(即關(guān)鍵字)進(jìn)行的,所以要用對書號 索引,以獲得高效率。3、系統(tǒng)應(yīng)實現(xiàn)的基本功能有:4采編入庫:新購入一種書,經(jīng)分類和確定書號之后登記到圖書帳目中去。如果這兩種書在帳中已有,則只將總庫存量增加。5清除庫存:某種書已無保留價值,將它從圖

2、書帳目中注銷。6借閱:如果一種書的現(xiàn)存量大于零,則借出一本,登記借閱者的圖書證號和歸還期限。7歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。8顯示:以凹入表的形式顯示B樹。這個操作是為了調(diào)試和維護(hù)的目的而設(shè)置的。二、問題分析及求解基本思路說明:給出題目的分析及初步的解題思路。要求簡潔、易懂1、 概要設(shè)計主要實現(xiàn)系統(tǒng)的功能:a.圖書初始化: 輸入圖書的一些信息,編號、作者、書名、數(shù)量,有一定的庫存。b.新書入庫: 新書采編入庫,輸入編號后有次數(shù)只需輸入數(shù)量,沒有則繼續(xù)輸入c.添加讀者信息: 讀者信息初始化,輸入讀書證號和姓名后才能進(jìn)行借書還書d.借書模塊: 讀者輸入讀書證號,證號存在輸入要借的圖書

3、編號,不能借同一本書,如果借書數(shù)量以達(dá)到最大也不能借書。e.還書模塊: 歸還已借的圖書,要先輸入讀者書證號,書證號存在繼續(xù)輸入要還的圖書編號,圖書編號存在并且借來此書,歸還成功。f.查詢圖書信息g.查詢讀者信息: 可查詢讀者姓名書證號,借了幾本書,都是什么書和還書日期, 還可以借幾本書。 h.退出: 退出讀書管理系統(tǒng)并保存讀者和圖書信息。 設(shè)計的的初步思路:主要采取定義結(jié)構(gòu)體,定義兩個結(jié)構(gòu)體分別為圖書結(jié)構(gòu)體和閱讀者的結(jié)構(gòu)體,將其數(shù)據(jù)存儲到字符串中,然后逐個構(gòu)建單鏈表,將其數(shù)據(jù)存儲到單鏈表結(jié)點的數(shù)據(jù)域中,然后進(jìn)行圖書文件的讀取或者可以選擇圖書的初始化,輸入圖書的編號,作者,書名,數(shù)量和一定的庫存

4、和現(xiàn)存量。新書入庫創(chuàng)造新結(jié)點,定義指針,此處分兩種情況,若圖書編號存在,則直接進(jìn)庫,只須輸入書的數(shù)量,通過字符串的比較來判定,同理閱讀者的添加是增加閱讀者的單鏈表的結(jié)點,同時一個讀者規(guī)定只能借閱5本書存儲到數(shù)據(jù)域的字符串中。分別定義還書和借書的函數(shù),用字符串的比較功能判斷讀者借書不能同一種書借兩次,同時采編新書要求如果書號相同只需要直接輸入采編的本數(shù)和如果沒有書時會返回等待新書到來,包括索書號以及讀者的學(xué)號輸入出現(xiàn)不存在會返回錯誤,還書函數(shù)也是通過字符串中存儲的庫存量和現(xiàn)存量增加,同時讀者借書數(shù)量right減少。最后將圖書的單鏈表和閱讀者的單鏈表讀寫到文件中。三、問題求解的整體框架結(jié)構(gòu)說明:圍

5、繞求解目標(biāo)給出具體的模塊。要求簡潔、易懂首先定義圖書,閱讀者,借書結(jié)構(gòu)體;typedef struct book;typedef struct borrow;typedef struct reader;定義菜單函數(shù),包括圖書借閱的各種功能,包括:1采編入庫圖書 void Init_book(); 2登記讀者 void add_reader(); 3借閱登記圖書 void Borrow_Book(); 4還書管理 void Return_Book(); 5查詢讀者信息 void Print_reader();通過讀者文件讀取讀者信息單鏈表 6查詢圖書信息 void Print_book(); 通

6、過 圖書文件讀取圖書單鏈表的信息 0退出系統(tǒng) void Print_book(); 讀入讀者文件數(shù)據(jù)輸入讀者信息,將圖書信息存儲到字符串中,并且標(biāo)記讀者借書情況建立讀者單鏈表,輸入數(shù)據(jù)文件關(guān)閉數(shù)據(jù)文件,保存是否完成讀入圖書文件數(shù)據(jù)輸入圖書信息,將圖書信息存儲到字符串中建立圖書單鏈表,輸入數(shù)據(jù)文件關(guān)閉數(shù)據(jù)文件,保存是否完成1圖書錄入流程圖: 2登記讀者程圖: NN Y Y3增添圖書錄入流程圖: 輸入查詢條件如果存在,直接輸入書本數(shù)是否存在 繼續(xù)? 返 回N Y執(zhí)行錄入流程圖,錄入圖書 Y N 4還書管理流程圖:輸入借閱者信息while(p1->next!=NULL&&str

7、cmp(rea_num,p1->reader_num)!=0) ,讀者是否存在? p1=p1->next; if(p1->next=NULL&&strcmp(rea_num,p1->reader_num)!=0) N Y輸入所要借閱的圖書信息while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL),圖書是否存在? p0=p0->next;N Y讀者借書數(shù)目是否已滿?圖書是否為空?采用strcmp判斷strcpy(p1->borrowp1->right+.bor

8、row_book_num,bo_num);strcpy(p1->borrowp1->right-1.limit_date,lim_date); p0->book_xy-;p0->book_kc-;通過讀者結(jié)點存儲借書結(jié)構(gòu)體信息。請輸入正確細(xì)信息,或圖書已滿或已空借閱完成打印讀者圖書信息:通過單鏈表結(jié)點的訪問,將圖書單鏈表的每個結(jié)點的信息都訪問,p=p->next,p->book_num;p->book_name; p->book_writer,p->book_xy,p->book_kc;打印訪問閱讀者單鏈表結(jié)點的訪問,p->re

9、ader_num,p->reader_name,以及借書數(shù)量p->borrowi.borrow_book_num,還書日期:p->borrowi.limit_dateSave();保存文件打印結(jié)束四、 主要算法說明:要求用自然語言描述算法。要求簡潔、易懂(1)首先首先定義圖書,閱讀者,借書結(jié)構(gòu)體;typedef struct book;typedef struct borrow;typedef struct reader;定義好各種說需要的數(shù)據(jù):typedef struct book char book_num10;/圖書編號 char book_name20;/圖書名稱 c

10、har book_writer10;/圖書的作者 int book_xy;/現(xiàn)有量 int book_kc;/庫存 struct book *next;BK;typedef struct borrowchar borrow_book_num10;/借書的總數(shù)char limit_date8;/還書日期BO;typedef struct readerchar reader_num10;char reader_name10;int right;/讀者所借的書的本數(shù)BO borrowMax;struct reader *next;RD;(1) 定義實現(xiàn)功能所需要的函數(shù),包括圖書的登記,讀者的登記,圖

11、書的錄用,以及讀者的借閱,圖書,讀者信息的保存和讀音等功能。int Menu(); void Init();void Login(); void Init_book();void Insert_New_Book(); void Menu_select(); 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

12、 Load();void Load_Reader(); void Load_Book();void Login()(3)通過字符串存儲讀者和圖書的信息,然后進(jìn)行圖書文件的讀取或者可以選擇圖書的初始化,輸入圖書的編號,作者,書名,數(shù)量和一定的庫存和現(xiàn)存量。新書入庫創(chuàng)造新結(jié)點,定義指針,此處分兩種情況,若圖書編號存在,則直接進(jìn)庫,只須輸入書的數(shù)量,通過字符串的比較來判定,同理閱讀者的添加是增加閱讀者的單鏈表的結(jié)點,同時一個讀者規(guī)定只能借閱5本書存儲到數(shù)據(jù)域的字符串中。分別定義還書和借書的函數(shù),用字符串的比較功能判斷讀者借書不能同一種書借兩次,同時采編新書要求如果書號相同只需要直接輸入采編的本數(shù)和如

13、果沒有書時會返回等待新書到來,包括索書號以及讀者的學(xué)號輸入出現(xiàn)不存在會返回錯誤,還書函數(shù)也是通過字符串中存儲的庫存量和現(xiàn)存量增加,同時讀者借書數(shù)量right減少。最后將圖書的單鏈表和閱讀者的單鏈表讀寫到文件中。void Insert_New_Book()/*新書入庫*/ BK *p,*p0,*p1; p=p1=h_book;printf("n新書入庫模塊.n");printf("n請輸入圖書信息.n包括書號.書名.數(shù)量.n");p0=(BK *)malloc(sizeof(BK); printf("圖書編號:"); scanf(&qu

14、ot;%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) /*此處分兩種情況,若圖書編號存在,則直接進(jìn)庫,只須輸入書的數(shù)量*/ printf("n此編號圖書已存在!直接入庫!n"); printf("圖書數(shù)量:"); scanf("%d",&p0-&g

15、t;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-&

16、gt;next) p=p->next; if(h_book=NULL) h_book=p0; else p->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

17、(sizeof(RD); h_reader=p0;printf("n請輸入讀者的信息:n"); printf("讀者書證號:"); scanf("%s",p0->reader_num); printf("讀者姓名:"); scanf("%s",p0->reader_name); p0->right=0; for(i=0;i<Max;i+) strcpy(p0->borrowi.borrow_book_num,"0"); strcpy(p0->

18、;borrowi.limit_date,"0"); p0->next=NULL; printf("n讀者信息初始化完畢!按任意鍵繼續(xù)下一步操作.n"); getch(); system("cls"); void Borrow_Book() /*借書模塊*/ BK *p0; RD *p1;char bo_num10,rea_num10,lim_date8;int i;p0=h_book; p1=h_reader;printf("n借書模塊.n");printf("n請輸入借書的讀者書證號:"

19、); 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("n請輸入你要借的書的編號:"); scanf("%s",bo_num)

20、; 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_xy<=0) printf("n抱歉,此書已借完!請等待新書的到來!n按任意鍵返回."); goto END; else if(p1-

21、>right>Max|p1->right=Max) printf("n不好意思,借書數(shù)目已滿!不能借書!n按任意鍵返回."); goto END; else if(strcmp(p1->borrow0.borrow_book_num,"0")!=0) for(i=0;i<Max;i+) if(strcmp(p1->borrowi.borrow_book_num,bo_num)=0) printf("n抱歉!同一讀者不能同借兩本相同的書!n按任意鍵返回."); goto END; else if(st

22、rcmp(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); p0->book_xy-; p0->book_kc-; printf("n讀者編號%s借書完畢!按任意

23、鍵繼續(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借書完畢!按任意鍵繼

24、續(xù)下步操作.",p1->reader_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

25、(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此讀者編號不存在!按任意鍵返回.n"); goto end; printf("n請輸入讀者還書的編號:"); scanf("%s",return_book_num); while(p

26、->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錯誤!此圖書編號不存在!按任意鍵返回.n"); goto end; for(i=0;i<Max;i+) if(strcmp(return_book_num,q->borrowi.borrow_book_num)=0) /*如果此

27、讀者借了此書*/ find=1; for(j=i;j<Max-1;j+) strcpy(q->borrowj.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-&

28、gt;book_kc+; q->right-; 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"); w

29、hile(p!=NULL) printf("%stt%stt%stt%dtt%dn",p->book_num,p->book_name,p->book_writer,p->book_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&quo

30、t;);printf("讀者書證號tt讀者姓名n"); printf("n");while(p!=NULL) printf("t%stt%s",p->reader_num,p->reader_name); for(i=0;i<Max;i+) printf("n"); printf("圖書編號",i+1); printf("t還書日期",i+1); printf("n"); printf("t%s",p->borr

31、owi.borrow_book_num); printf("tt%s",p->borrowi.limit_date); printf("n"); p=p->next;printf("n讀者信息打印完畢!按任意鍵繼續(xù)下一步操作.");getch();system("cls");void Save() /*保存信息*/Save_Reader();Save_Book();void Save_Reader() /*保存讀者信息*/(2) 通過創(chuàng)建文件將圖書和讀者的單鏈表和圖書的單鏈表輸入到文件里,再讀取文件,關(guān)

32、閉文件。FILE *fp_reader; RD *p,*p0;p=h_reader;if(fp_reader=fopen("Reader.txt","wb")=NULL) /*創(chuàng)建文件,進(jìn)行保存*/ printf("n文件保存失敗!n請重新啟動本系統(tǒng).n"); exit(0);while(p!=NULL) if(fwrite(p,sizeof(RD),1,fp_reader)!=1) /*將鏈表中的信息寫入文件中*/ printf("n寫入文件失敗!n請重新啟動本系統(tǒng)!n"); p0=p; p=p->next

33、; free(p0); /*釋放所有結(jié)點*/h_reader=NULL;fclose(fp_reader); void Save_Book() /*保存圖書信息*/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請重新啟動本系統(tǒng).n"); exit(0);while(p!=NULL) if(fwrite(p,sizeof(BK),1,fp_book)!=

34、1) /*將鏈表中的信息寫入文件中*/ printf("n寫入文件失敗!n請重新啟動本系統(tǒng)!n"); p0=p; p=p->next; free(p0); h_book=NULL;fclose(fp_book); void Load() /*加載信息*/Load_Reader();Load_Book();void Load_Reader() /*加載讀者信息*/ RD *p1,*p2,*p3; FILE *fp; /*創(chuàng)建文件型指針*/ fp=fopen("book.txt","rb"); /*打開文件*/ p1=(RD *)malloc(sizeof(RD); fread(p1,sizeof(RD),1,fp); h_rea

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論