圖書管理系統_第1頁
圖書管理系統_第2頁
圖書管理系統_第3頁
圖書管理系統_第4頁
圖書管理系統_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、學號2014-2015學年 第一學期1208210105數據結構課程設計報告題目:圖書管理系統專業:計算機科學與技術班級:12級(3)班姓名:陳珂指導教師:陳廣宏成績:計算機與信息工程系2014年 12月15 日目錄1. 設計題目與要求11.1問題描述11.2 基本要求11.3 進一步完成內容12. 概要設計22.1 圖書初始化22.2 新書入庫22.3 添加讀者信息22.4 借書模塊22.5 還書模塊32.6 查詢圖書信息32.7 查詢讀者信息32.8 退出33. 算法設計43.1 圖書管理系統概括圖43.2 線性表的兩種存儲方式的優缺點44. 運行結果和調試分析55. 總結體會及源代碼11

2、6. 參考文獻271. 設計題目與要求1.1問題描述 設計一個計算機管理系統完成圖書管理基本業務。基本業務包括:圖書管理、讀者管理、借書管理、還書管理及查詢信息等。1.2 基本要求1) 每種書的登記內容包括書號、書名、著作者、現存量和庫存量;2) 對書號建立索引表(線性表)以提高查找效率;3) 系統主要功能如下:*采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;*借閱:如果一種書的現存量大于0,則借出一本,登記借閱者的書證號和歸還期限,改變現存量;*歸還:注銷對借閱者的登記,改變該書的現存量。1.3 進一步完成內容1) 系統功能的進一步完善2) 索引表采用

3、樹表3) 設計內容4) 程序流程圖5) 源程序6) 軟件測試報告(包括所用到的數據及結果)2. 概要設計2.1 圖書初始化 輸入圖書的一些信息,書的編號、圖書的作者、圖書名稱、庫存數量等,使有一定的庫存。圖書信息管理包括圖書借還、查詢等操作,系統用戶管理包括系統用戶類別和用戶數據管理,讀者數據管理包括讀者類別管理和個人數據的錄入、修改和刪除。作為信息存儲的主要媒體之一圖書,數量、規模比以往任何時候都大的多,不論個人還是圖書管理部門都需要使用方便而有效的方式來管理自己的書籍。圖書管理系統的核心是對圖書信息與管理,是以數據為中心的體系結構,依靠數據聯通各個部分并使之協調工作。2.2 新書入庫 新書

4、采編入庫,輸入編號后如果有次數只需輸入數量,沒有則繼續輸入書名、作者、數量。目錄信息包括圖書編號、圖書類別、書名、作者、出版社、定價、出版日期、數量等。2.3 添加讀者信息 讀者信息初始化,輸入讀書證號和姓名,只有輸入書證號和姓名才能進行借書還書管理。2.4 借書模塊 讀者輸入讀書證號,證號存在輸入要借的圖書編號,不能借同一本書,如果借書數量以達到最大也不能借書。圖書借閱者的需求是查詢圖書室所存的圖書;圖書館工作人員對圖書借閱者的借閱及還書要求進行操作,形成借書或還書報表。2.5 還書模塊 歸還已借的圖書,要先輸入讀者書證號,書證號存在繼續輸入要還的圖書編號,圖書編號存在并且借過此書,歸還成功

5、,并修改該書在系統中的庫存數量。如果有超期借閱或丟失情況,先轉入過期罰款或圖書丟失處理。2.6 查詢圖書信息 可以查詢圖書證號,查看該書被借了幾本,借的都是什么書,還書日期是什么時候,庫存還有多少。圖書管理員或讀者可以對圖書的基本信息進行查詢。根據借閱人編碼,獲得該人員的全部借閱信息。可以獲得所有已到期但尚未歸還的催還書目信息。2.7 查詢讀者信息 可以查詢讀者姓名和證號,查看該讀者借了幾本書,都是什么書和還書日期,還可以借幾本書。此模塊對應完成用戶或管理員對館藏讀者信息的查詢。2.8 退出 退出讀書管理系統并保存讀者和圖書信息。以便圖書基于圖書管理者再次對圖書的管理。 3. 算法設計3.1

6、圖書管理系統概括圖圖 1 圖書管理系統概括圖3.2 線性表的兩種存儲方式的優缺點1、 順序方式 順序存儲結構優點是可以實現隨機讀取,時間復雜度為O(1),空間利用率高;缺點是進行查找操作時比較麻煩,時間復雜度為O(n),同時容量受限制,需要事先確定容量大小,容量過大浪費空間資源,過小不能滿足使用要求,會產生溢出問題,雖然可以擴容,但是需要耗時間的。2、 鏈式方式 鏈式存儲結構優點,查找操作非常簡單,前提條件是知道操作位置,時間復雜度是O(1),但如果不知道操作位置則要定位元素,時間復雜度也是O(n),還有一個很大的優點是沒有容量的限制,可以在使用過程中動態的分配內存空間,不用擔心溢出的問題;缺

7、點是它不能實現隨機讀取,同時空間利用率不高.這兩個結構各有優缺點,不同的地方選擇不同的結構.盡量利用其優點,避免其缺點。 本程序選擇的是線性表的鏈式存儲。 4. 運行結果和調試分析圖2 進入界面圖3 圖書信息初始化圖4 采編入庫后查詢圖書信息的運行結果圖圖5 登記讀者信息圖6 借書圖7 借書后查詢圖書信息的運行結果圖圖8借同一本書的運行結果圖圖9 借不同的書圖10 借兩本書后查詢讀者信息的運行結果圖圖11 還書運行結果圖圖12 還書后查詢圖書信息圖13 退出5. 總結體會及源代碼雖然這次的程序是通過上網查出來的,但是通過這次的實驗使我知道了圖書管理系統的流程,知道了一些以前不知道的知識,在運行

8、程序時也遇到了一些問題,借書時只能借一本書,再借書就不能顯示是借了還是不能借,把最多能借書的數量改了一下還是不行,最后在每一個判斷輸出之后都加了goto END借書,就能正常借書了。程序有點長,本來一個函數就能完成一個功能,他用了兩個函數就我把自己能改成一個的改了。借書系統比較復雜,不容易懂,和同學交流了一下自己看了看才明白。這次的實驗還讓我復習了數據結構的一些知識,如數組,while語句,switch語句,鏈表,還知道了如何使用system("cls")清屏,還知道了strcmp是用來比較字符串s1和s2大小的,strcpy使用來把字符串s2的值賦給s1的。這次的實驗增加

9、了我們自己動手動腦的能力,希望多做一些這樣的實驗,很有意義,和現實生活結合的程序增加了我的興趣。源代碼#include<stdio.h>#include <string.h>#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 str

10、uct 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(); void Find_Book();

11、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歡迎使用圖書管理系統n")

12、;printf("nnntt*n");printf("nnntt 按任意鍵進入系統.");getch(); system("cls");int Menu() /*主菜單*/ int dm;printf("ntt圖書管理系統主菜單n");printf("=n");printf("*t0-退出系統 n");printf("*t1-采編入庫 n");printf("*t2-登記讀者 n"); printf("*t3-借閱登記 n&q

13、uot;);printf("*t4-還書管理 n");printf("*t5-查詢圖書信息 n");printf("*t6-查詢讀者信息 n");printf("=n");printf("請選擇相應的代碼:"); for(;) scanf("%d",&dm); /dm輸入的數字 if(dm<0|dm>6) printf("n錯誤!請重新輸入:"); else break;return dm; void Menu_select()/*主菜

14、單選擇函數*/for(;) switch(Menu() /*功能選擇*/ case 0: system("cls"); Save();printf("nnt文件保存成功!n"); printf("nnt歡迎下次使用本系統!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();b

15、reak; case 6:Print_reader();break; default:printf("n錯誤!"); exit(0);void Init() /*初始化*/ BK *p0;printf("n圖書初始化開始,請輸入圖書信息.n包括編號.書名.數量.n");p0=(BK*)malloc(sizeof(BK);h_book=p0; printf("n請輸入圖書信息:n"); printf("圖書編號:"); /*輸入圖書編號(唯一)*/ scanf("%s",p0->book_n

16、um); printf("圖書名稱:"); /*輸入圖書名稱*/ scanf("%s",p0->book_name);printf("圖書作者:"); /*輸入圖書作者*/ scanf("%s",p0->book_writer); printf("圖書數量:"); /*輸入圖書數量*/ scanf("%d",&p0->book_kc); p0->book_xy=p0->book_kc; /*開始時圖書現有量和庫存量相等*/ p0->

17、next=NULL; printf("n圖書信息初始化完畢!按任意鍵繼續下一步操作.n");void Insert_New_Book()/*新書入庫*/BK *p,*p0,*p1; p=p1=h_book;printf("n新書入庫模塊.n");printf("n請輸入新書信息.n包括書號.書名.數量.n");p0=(BK *)malloc(sizeof(BK); printf("圖書編號:"); scanf("%s",p0->book_num); while(strcmp(p0->

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

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

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

21、=(RD*)malloc(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,&quo

22、t;0"); /*所借圖書直接置為(即沒有借書)*/ strcpy(p0->borrowi.limit_date,"0"); p0->next=NULL; printf("n讀者信息初始化完畢!按任意鍵繼續下一步操作.n"); 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請輸入借書的讀者

23、書證號:"); 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&quo

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

25、lse if(p1->right>Max|p1->right=Max) printf("n不好意思,借書數目已滿!不能借書!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;

26、 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); p0->book_xy-; p0->book_kc-; printf("n讀者編

27、號%s借書完畢!按任意鍵繼續下步操作.",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讀者編號%

28、s借書完畢!按任意鍵繼續下步操作.",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_n

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

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

31、)=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.limit_date,"0"); p->book

32、_xy+; p->book_kc+; q->right-; printf("n編號%s的讀者還書完畢!按任意鍵繼續下步操作.",return_reader_num); if(find=0) printf("n錯誤!此讀者未借此書!按任意鍵返回.n"); end:;void Print_book() /*查詢圖書信息*/BK *p;p=h_book;printf("n圖書信息如下:nn");printf("圖書編號t圖書名稱t圖書作者t現有tt庫存n");while(p!=NULL)printf(&quo

33、t;%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圖書信息打印完畢!按任意鍵繼續下一步操作.");void Print_reader() /*查詢讀者信息*/RD *p;int i;p=h_reader;printf("n讀者信息如下:nn");printf("讀者書證號tt讀者姓名n"); printf("n"

34、;);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->borrowi.borrow_book_num); printf("tt%s",p->borro

35、wi.limit_date); printf("n"); p=p->next;printf("n讀者信息打印完畢!按任意鍵繼續下一步操作.");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) /*創建文件,進行保存*/ printf("n

36、文件保存失敗!n請重新啟動本系統.n"); exit(0);while(p!=NULL) if(fwrite(p,sizeof(RD),1,fp_reader)!=1/*將鏈表中的信息寫入文件中*/ printf("n寫入文件失敗!n請重新啟動本系統!n"); p0=p; p=p->next; free(p0); /*釋放所有結點*/h_reader=NULL;fclose(fp_reader); /*關閉文件*/void Save_Book() /*保存圖書信息*/FILE *fp_book; /*創建文件型指針*/BK *p,*p0;p=h_book;i

37、f(fp_book=fopen("Book.txt","wb")=NULL) /*創建文件,進行保存*/ printf("n文件保存失敗!n請重新啟動本系統.n"); exit(0);while(p!=NULL) if(fwrite(p,sizeof(BK),1,fp_book)!=1) /*將鏈表中的信息寫入文件中*/ printf("n寫入文件失敗!n請重新啟動本系統!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;

溫馨提示

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

評論

0/150

提交評論