實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告_第1頁(yè)
實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告_第2頁(yè)
實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告_第3頁(yè)
實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告_第4頁(yè)
實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)四實(shí)驗(yàn)報(bào)告1120131317 周任然1.圖書管理(1)問題描述有一個(gè)小型書庫(kù)保管了大量圖書,關(guān)于圖書有大量信息需要處理,這些信息包括圖書的分類、書名、作者名、購(gòu)買日期、價(jià)格等。現(xiàn)要求編寫一個(gè)程序以便于對(duì)圖書的管理。(2)基本要求:a建立圖書信息。b提供想找功能,按照多種關(guān)鍵字查找需要的書籍。例如按書名查找,輸入書名后,將顯示出該圖書的所有信息,或顯示指定信息。c提供排序功能,按照多種關(guān)鍵字對(duì)所有的書籍進(jìn)行排序,例如按出版日期進(jìn)行排序。d提供維護(hù)功能,可以對(duì)圖書信息進(jìn)行添加、修改、刪除等功能。(3)數(shù)據(jù)結(jié)構(gòu)與算法分析數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)可根據(jù)需要自選。如:順序表、單鏈表、雙鏈表、棧等。算法主要要求

2、用到對(duì)數(shù)據(jù)的查詢與排序算法。二、概要設(shè)計(jì)有八個(gè)模塊(1)圖書初始化輸入圖書的一些信息,編號(hào)、作者、書名、數(shù)量,使有一定的庫(kù)存。新書入庫(kù)新書采編入庫(kù),輸入編號(hào)后如果有次數(shù)只需輸入數(shù)量,沒有則繼續(xù)輸入書名、作者、數(shù)量。添加讀者信息讀者信息初始化,輸入讀書證號(hào)和姓名,只有輸入書證號(hào)和姓名才能進(jìn)行借書還書借書模塊讀者輸入讀書證號(hào),證號(hào)存在輸入要借的圖書編號(hào),不能借同一本書,如果借書數(shù)量以達(dá)到最大也不能借書。還書模塊歸還已借的圖書,要先輸入讀者書證號(hào),書證號(hào)存在繼續(xù)輸入要還的圖書編號(hào),圖書編號(hào)存在并且借來此書,歸還成功。查詢圖書信息查詢讀者信息可查詢讀者姓名書證號(hào),借了幾本書,都是什么書和還書日期,還可

3、以借幾本書。退出退出讀書管理系統(tǒng)并保存讀者和圖書信息。三、算法設(shè)計(jì)進(jìn)入系統(tǒng)后首先進(jìn)行圖書初始化,輸入圖書的信息。初始化之后,進(jìn)入系統(tǒng),顯示功能列表,可選擇任意系統(tǒng),但在借書之前先要輸入讀者信息。1)采編入庫(kù)錄入圖書信息判斷是否有此圖書是在原有的紀(jì)錄上加上現(xiàn)有的圖書數(shù)量否向系統(tǒng)中加入新紀(jì)錄2)輸入讀者信息開始輸入讀者信息:讀者書證號(hào)結(jié)束3)借閱圖書輸入讀者書證號(hào)判斷讀者是否存在否輸出次讀者編號(hào)不存在!按任意鍵返回是輸入要借的圖書編號(hào)判斷圖書編號(hào)是否存在否輸出此圖書編號(hào)不存在!按任意鍵返回是看是否還有此圖書否輸出此書已借完,按任意鍵返回是看讀者的借書數(shù)目是否滿了是輸出借書數(shù)目已滿不能借書,按任意鍵

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

5、分析圖書信息初始化同一本新書入庫(kù)的運(yùn)行結(jié)果圖不同的新書采編入庫(kù)采編入庫(kù)后查詢圖書信息的運(yùn)行結(jié)果圖登記讀者信息借書借書后查詢圖書信息的運(yùn)行結(jié)果圖借同一本書的運(yùn)行結(jié)果圖借不同的書借兩本書后查詢讀者信息的運(yùn)行結(jié)果圖還書運(yùn)行結(jié)果圖還書之后再查詢讀者信息的運(yùn)行結(jié)果圖還書后查詢圖書信息退出五、總結(jié)體會(huì)雖然這次的程序是通過上網(wǎng)查出來的,但是通過這次的實(shí)驗(yàn)使我知道了圖書管理系統(tǒng)的流程,知道了一些以前不知道的知識(shí),在運(yùn)行程序時(shí)也遇到了一些問題,借書時(shí)只能借一本書,再借書就不能顯示是借了還是不能借,把最多能借書的數(shù)量改了一下還是不行,最后在每一個(gè)判斷輸出之后都加了goto END借書,就能正常借書了。程序有點(diǎn)長(zhǎng),

6、本來一個(gè)函數(shù)就能完成一個(gè)功能,他用了兩個(gè)函數(shù)就我把自己能改成一個(gè)的改了。借書系統(tǒng)比較復(fù)雜,不容易懂,和同學(xué)交流了一下自己看了看才明白。這次的實(shí)驗(yàn)還讓我復(fù)習(xí)了數(shù)據(jù)結(jié)構(gòu)的一些知識(shí),如數(shù)組,while語(yǔ)句,switch語(yǔ)句,鏈表,還知道了如何使用system("cls")清屏,還知道了strcmp是用來比較字符串s1和s2大小的,strcpy使用來把字符串s2的值賦給s1的。這次的實(shí)驗(yàn)增加了我們自己動(dòng)手動(dòng)腦的能力,希望多做一些這樣的實(shí)驗(yàn),很有意義,和現(xiàn)實(shí)生活結(jié)合的程序增加了我的興趣。源代碼#include<stdio.h>#include <string.h&g

7、t;#include <stdlib.h>#include<conio.h>#define Max 4 typedef struct bookchar book_num10;char book_name20;char book_writer10;int 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_name1

8、0;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(); void Find_Book(); void add_reader();void Print_reader(); void Print_book(); void Borrow_Book(); void Return_Book(); void Save()

9、; 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");printf("nntt本程序制作人 學(xué)號(hào):nnnnnnn");printf("nnntt 按任意鍵進(jìn)入系統(tǒng).");ge

10、tch(); system("cls");int Menu() /*主菜單*/ int dm;printf("ntt圖書管理系統(tǒng)主菜單n");printf("=n");printf("*t0-退出系統(tǒng) n");printf("*t1-采編入庫(kù) n");printf("*t2-登記讀者 n"); printf("*t3-借閱登記 n");printf("*t4-還書管理 n");printf("*t5-查詢圖書信息 n"

11、;);printf("*t6-查詢讀者信息 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;return dm; void Menu_select()/*主菜單選擇函數(shù)*/for(;) switch(Menu() /*功能選擇*/ case 0: system("cls"

12、); 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:Borrow_Book();break; case 4:Return_Book();break; case 5:Print_book();break; case 6:Print_reader();break; default:printf("n錯(cuò)誤!")

13、; exit(0);void Init() /*初始化*/ BK *p0;printf("n圖書初始化開始,請(qǐng)輸入圖書信息.n包括編號(hào).書名.數(shù)量.n");p0=(BK*)malloc(sizeof(BK);h_book=p0; printf("n請(qǐng)輸入圖書信息:n"); printf("圖書編號(hào):"); /*輸入圖書編號(hào)(唯一)*/ scanf("%s",p0->book_num); printf("圖書名稱:"); /*輸入圖書名稱*/ scanf("%s",p0-

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

15、ystem("cls");void Insert_New_Book()/*新書入庫(kù)*/BK *p,*p0,*p1; p=p1=h_book;printf("n新書入庫(kù)模塊.n");printf("n請(qǐng)輸入新書信息.n包括書號(hào).書名.數(shù)量.n");p0=(BK *)malloc(sizeof(BK); printf("圖書編號(hào):"); scanf("%s",p0->book_num); while(strcmp(p0->book_num,p1->book_num)!=0&

16、&p1->next!=NULL) p1=p1->next; if(strcmp(p0->book_num,p1->book_num)=0) /*此處分兩種情況,若圖書編號(hào)存在,則直接進(jìn)庫(kù),只須輸入書的數(shù)量*/ printf("n此編號(hào)圖書已存在!直接入庫(kù)!n"); printf("圖書數(shù)量:"); scanf("%d",&p0->book_kc); p1->book_kc+=p0->book_kc; p1->book_xy+=p0->book_kc; else/*若

17、不存在,則需要輸入其他的信息,然后在進(jìn)行插入操作*/ printf("圖書名稱:"); scanf("%s",p0->book_name);printf("圖書作者:"); scanf("%s",p0->book_writer); printf("圖書數(shù)量:"); scanf("%d",&p0->book_kc);/庫(kù)存數(shù)量while(p->next) p=p->next; if(h_book=NULL) h_book=p0; /*此處分

18、兩種情況,鏈表中沒有數(shù)據(jù),head直接指向p0處*/ else p->next=p0; /*此處分兩種情況,鏈表中有數(shù)據(jù),鏈表中最后元素的next指向p0處*/ p0->next=NULL; p0->book_xy=p0->book_kc; printf("n新書入庫(kù)完畢!按任意鍵繼續(xù)下一步操作.n"); getch(); system("cls");void add_reader()/*添加讀者*/ RD *p0; int i; printf("n讀者初始化開始,請(qǐng)輸入讀者信息.n包括書證號(hào).姓名.n");p

19、0=(RD*)malloc(sizeof(RD); /*申請(qǐng)新結(jié)點(diǎn)存儲(chǔ)空間*/h_reader=p0;printf("n請(qǐng)輸入讀者的信息:n"); printf("讀者書證號(hào):"); 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,&qu

20、ot;0"); /*所借圖書直接置為(即沒有借書)*/ strcpy(p0->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借書

21、模塊.n");printf("n請(qǐng)輸入借書的讀者書證號(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"); goto END; printf("n請(qǐng)輸入你要

22、借的書的編號(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此圖書編號(hào)不存在!按任意鍵返回.n"); goto END; else if(p0->book_xy<=0) printf("n抱歉,此書已借完!請(qǐng)等待

23、新書的到來!n按任意鍵返回."); goto END; else if(p1->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抱歉!同一個(gè)讀者不能同

24、借兩本相同的書!n按任意鍵返回."); goto END; else if(strcmp(p1->borrowi.borrow_book_num,"0")=0) printf("n請(qǐng)輸入你要?dú)w還圖書的日期:"); 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-;

25、p0->book_kc-; printf("n讀者編號(hào)%s借書完畢!按任意鍵繼續(xù)下步操作.",p1->reader_num); goto END; else printf("n請(qǐng)輸入你要?dú)w還圖書的日期:"); 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

26、->book_kc-; printf("n讀者編號(hào)%s借書完畢!按任意鍵繼續(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請(qǐng)輸入要還書的讀者編號(hào):"); sc

27、anf("%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"); goto end; printf("n請(qǐng)輸入讀者還書的編號(hào):"); sc

28、anf("%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ò)誤!此圖書編號(hào)不存在!按任意鍵返回.n"); goto end; for(i=0;i<Max;i+) if(strcmp(return_book

29、_num,q->borrowi.borrow_book_num)=0) /*如果此讀者借了此書*/ 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.li

30、mit_date,"0"); p->book_xy+; p->book_kc+; q->right-; printf("n編號(hào)%s的讀者還書完畢!按任意鍵繼續(xù)下步操作.",return_reader_num); if(find=0) printf("n錯(cuò)誤!此讀者未借此書!按任意鍵返回.n"); end: getch(); system("cls");void Print_book() /*查詢圖書信息*/BK *p;p=h_book;printf("n圖書信息如下:nn");

31、printf("圖書編號(hào)t圖書名稱t圖書作者t現(xiàn)有tt庫(kù)存n");while(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;

32、int i;p=h_reader;printf("n讀者信息如下:nn");printf("讀者書證號(hào)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("圖書編號(hào)",i+1); printf("t還書日期",i+1); printf("

33、;n"); printf("t%s",p->borrowi.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() /*保存讀者信

34、息*/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) /*將鏈表中的信息寫入文件中*/ printf("n寫入文件失敗!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() /*保存圖書信息*/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!

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論