數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告圖書管理系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁
免費(fèi)預(yù)覽已結(jié)束,剩余20頁可下載查看

下載本文檔

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

文檔簡介

1、.Beijing Institute of Petrochemical Technology數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告院(系、部):信息工程學(xué)院姓名:計(jì)141范文虎指導(dǎo)教師簽名:2016年 6月29日目錄一. 設(shè)計(jì)題目二. 設(shè)計(jì)目的三. 實(shí)驗(yàn)分工四. 算法思想分析五. 算法描述實(shí)現(xiàn)1.數(shù)據(jù)結(jié)構(gòu)類型定義 2.算法流程圖 3.程序代碼六. 運(yùn)行結(jié)果七.結(jié)論一. 設(shè)計(jì)題目圖書管理基本業(yè)務(wù)模擬圖書管理一般包括圖書采編、圖書編目、圖書查詢及圖書流通(借、還書)等基本業(yè)務(wù)。要求設(shè)計(jì)一個(gè)圖書管理信息系統(tǒng),用計(jì)算機(jī)模擬實(shí)現(xiàn)上述系統(tǒng)功能。(1)書的登記內(nèi)容包括書號(hào)、書名、著作者、現(xiàn)存量和庫存量等;學(xué)生信息

2、包括借書證號(hào)、借閱信息等;(2)以書號(hào)建立索引表(線性表)以提高查找效率;(3)主要功能如下:a) 采編入庫:新購一種書,確定書號(hào)后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;b) 借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書號(hào)和歸還期限,改變現(xiàn)存量;c) 歸還:注銷對(duì)借閱者的登記,改變該書的現(xiàn)存量。(4)輸出形式:能按書號(hào)、書名、著作者查找?guī)齑娴臅畔⒛馨磳W(xué)生的借書證號(hào)顯示學(xué)生信息和借閱信息書籍入庫借書功能實(shí)現(xiàn)還書功能實(shí)現(xiàn)二. 設(shè)計(jì)目的1 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;2初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測試等基

3、本方法和技能;3提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問題的能力;4訓(xùn)練用系統(tǒng)的觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。2 開發(fā)環(huán)境:VC6.0或者DEV C+.三. 實(shí)驗(yàn)分工范文虎:總體程序框架構(gòu)思,算法分析,主程序編寫,子函數(shù)調(diào)用,圖書信息記錄存儲(chǔ)子函數(shù)編寫,結(jié)合,主控制面板編寫,哈希函數(shù),結(jié)構(gòu)體定義。算法實(shí)現(xiàn),添加圖書信息子函數(shù)編寫,借閱圖書字函數(shù)編寫,查詢子函數(shù)設(shè)計(jì)編寫,還書子函數(shù)設(shè)計(jì)編寫,最終程序調(diào)試,寫報(bào)告。算法實(shí)現(xiàn),刪除圖書子函數(shù)設(shè)計(jì)編寫,查找圖書信息子函數(shù)編寫,測試整體程序,程序缺陷糾正,最終修改后程序綜合。算法實(shí)現(xiàn),查詢圖書信

4、息子函數(shù)設(shè)計(jì)編寫,程序缺陷修改和測試。四. 算法思想分析用線性表進(jìn)行存儲(chǔ),充分利用它易添加、易刪除、查找方便的特點(diǎn),進(jìn)行程序的編寫,符合題目的需求。而線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。五. 算法描述實(shí)現(xiàn)1. 數(shù)據(jù)結(jié)構(gòu)類型定義typedefstruct int year; int month; int day; data;typedefstruct char num5; /讀者編號(hào)記錄data bro; data back; ReaderNode;typedefstructchar title15; char writer15; int current; int total; i

5、nt key; /書的編號(hào)ReaderNode reader10; /記錄借讀該書的讀者記錄BookNode;typedefstructBookNode *elem; int count; /記錄節(jié)點(diǎn)中的總數(shù)HashTable;2. 算法流程圖建立哈希表刪除函數(shù)添加函數(shù)查找函數(shù)添加圖書增量子函數(shù)借閱書子函數(shù)添加書子函數(shù)查看已添加書子函數(shù)歸還書子函數(shù)查看已借閱書子函數(shù)查找書子函數(shù)主函數(shù)完成3. 程序代碼*includestdafx.h*include*include*include*include*include*define SUCCESS 1*define UNSUCCESS 0*defin

6、e DUPLICATE -1*define NULL_KEY 0/無記錄元素int hashsize=17,19,23,29;/存儲(chǔ)容量int m=0;/表長typedef struct int year; int month; int day; data;typedef struct char num5; /讀者編號(hào)記錄 data bro; data back; ReaderNode;typedef struct char title15; char writer15; int current; int total; int key; int more;/書的編號(hào) ReaderNode re

7、ader10; /記錄借讀該書的讀者記錄BookNode;typedef struct BookNode *elem; int count; /記錄節(jié)點(diǎn)中的總數(shù)HashTable;void InitHashTable(HashTable *H) int i; (*H).count=0; m=hashsize0; (*H).elem=(BookNode *)malloc(m*sizeof(BookNode); for(i=0;im;i+) (*H).elemi.key=NULL_KEY; unsigned Hash(int K)/哈希函數(shù),自己設(shè)定 return K%m; void collis

8、ion(int *p,int d) / 開放定址法處理沖突 *p=(*p+d)%m; int SearchHash(HashTable H,int K,int *p,int *c)/p為數(shù)據(jù)的地址位置,返回 *p=Hash(K); while(H.elem*p.key != NULL_KEY & (K != H.elem*p.key) (*c)+; if(*cm) collision(p,*c); /下一地址 else break; if (K = H.elem*p.key) return SUCCESS; else return UNSUCCESS; int InsertHash(HashT

9、able *H,BookNode e) int c,p; c=0; if(SearchHash(*H,e.key,&p,&c) return DUPLICATE; else if(chashsize0/2) (*H).elemp=e; +(*H).count; return 1; return 0;int DeleteHash(HashTable *H,BookNode e) int c,p; c=0; if(SearchHash(*H,e.key,&p,&c) (*H).elemp.key=NULL_KEY; -(*H).count; return 1; else printf(不好意思,不

10、存在n); return 0;void AddBook(HashTable *H) BookNode e; int i; system(CLS); printf(nn*n); printf(t你能在此目錄下添加圖書信息); printf(n*n); printf(nt 請輸入書的編號(hào)(形如: 1*): ); scanf(%d,&e.key); getchar(); printf(nt 請輸入書名: ); gets(e.title); printf(nt 請輸入該書作者: ); gets(e.writer); printf(nt 請輸入該書現(xiàn)庫存量: ); scanf(%d,&e.current

11、); printf(nt 請輸入該書總庫存量: ); scanf(%d%*c,&e.total); for(i=0;i10;i+) (e.readeri).num0=0; /用0來初始化借該書的讀者證號(hào),表示一開始時(shí)沒人借書 if(InsertHash(&(*H),e) printf(圖書添加成功!n); (*H).count+; void ShowBook(HashTable H) int i; system(CLS); printf(nn*n); printf(t你能在此目錄查看圖書信息); printf(n*n); for(i=0;im;i+) if(H.elemi.key != NUL

12、L_KEY) /* 有數(shù)據(jù) */ printf(圖書%dn,H.elemi.key); printf(書名:%sn,H.elemi.title); printf(作者: %sn,H.elemi.writer); printf(圖書現(xiàn)存量: %dn,H.elemi.current); printf(圖書總量: %dn,H.elemi.total); printf(*n); void BoSearch(HashTable *H)/借閱查詢 int e,r,t; system(CLS); printf(nn*n); printf(t你能在此目錄下按借書證號(hào)查找圖書信息); printf(n*n);

13、printf(nt 請輸入你的借書證號(hào): ); scanf(%d%*c,&e); if(SearchHash(*H,e,&r,&t) printf(借書證 %dn,(*H).eleme.key); printf(書名:%sn,(*H).eleme.title); printf(作者: %sn,(*H).eleme.writer); printf(圖書現(xiàn)存量:%dn,(*H).eleme.current); printf(圖書總量:%dn,(*H).eleme.total); else printf(您沒有借過書!);void Find(HashTable *H) int x,p,c; syst

14、em(CLS); printf(nn*n); printf(t你能在此目錄下按編號(hào)查找圖書信息); printf(n*n); printf(nt 請輸入你想查找的書的編號(hào): ); scanf(%d%*c,&x); if(SearchHash(*H,x,&p,&c) printf(圖書%dn,(*H).elemp.key); printf(書名:%sn,(*H).elemp.title); printf(作者:%sn,(*H).elemp.writer); printf(圖書現(xiàn)存量: %dn,(*H).elemp.current); printf(圖書總量: %dn,(*H).elemp.tot

15、al); else printf(對(duì)不起,不存在該書!n); void BorrowBook(HashTable *H) int i,k, x, f,t; system(CLS); printf(nn*n); printf(t你能在此目錄下按編號(hào)借閱圖書); printf(n*n); printf(nt 請輸入你想借的書編號(hào): ); scanf(%d%*c,&x); if(SearchHash(*H,x,&k,&f) printf(nt 你想借這本書嗎 (y/n); printf(nt 書名: %s,(*H).elemk.title); printf(nt 作者: %s,(*H).elemk.

16、writer); printf(nt 現(xiàn)庫存量: %d,(*H).elemk.current); printf(nt 總庫存量: %d,(*H).elemk.total); t=getch(); if(t=y|t=Y) if( (*H).elemk.current)=0) printf(nt對(duì)不起,這本書已經(jīng)被借光了.); else for(i=0;i10;i+) if( (*H).elemk.readeri).num0=0) break; printf(nt 請輸入你的借書證號(hào): ); scanf(%s,(*H).elemk.readeri).num); printf(nt 請輸入借書日期:

17、 ); /輸入借書日期 printf(nt 年: ); scanf(%d,&(*H).elemk.readeri).bro.year); printf(t 月: ); scanf(%d,&(*H).elemk.readeri).bro.month); printf(t 日: ); scanf(%d,&(*H).elemk.readeri).bro.day); printf(nt 輸入應(yīng)還書日期: ); /輸入應(yīng)還書日期 printf(nt 年: ); scanf(%d,&(*H).elemk.readeri).back.year); printf(t 月: ); scanf(%d,&(*H).

18、elemk.readeri).back.month); printf(t 日: ); scanf(%d%*c,&(*H).elemk.readeri).back.day); (*H).elemk.current-; /現(xiàn)存書量減1printf(nt 你已借了該書.); else printf(nt 這本書不存在!n); void ReturnBook(HashTable *H) int i,k, x, f,t,j; int year,month,day,d; float pay; char temp20; system(CLS); printf(nn*n); printf(t你能在此目錄下按編

19、號(hào)歸還圖書); printf(n*n); printf(nt 請輸入你還的書: ); scanf(%d%*c,&x); if(SearchHash(*H,x,&k,&f) printf(nt 你想還這本書嗎 (y/n); printf(nt 書名: %s,(*H).elemk.title); printf(nt 作者: %s,(*H).elemk.writer); printf(nt 現(xiàn)庫存量: %d,(*H).elemk.current); printf(nt 總庫存量: %d,(*H).elemk.total); t=getch(); if(t=y|t=Y) printf(nt 請輸入你的

20、借書證號(hào): ); scanf(%s,temp); j=0; for(i=0;i5;i+) if(!(strcmp(temp,(*H).elemk.readeri).num) j=1;break; /查看是否有借書 if(j=0) printf(nt 你沒有借書.);return; /該借書證號(hào)的人沒借書 printf(nt 今天是:); printf(nt 年: ); scanf(%d,&year); printf(t 月: ); scanf(%d,&month); printf(t 日: ); scanf(%d%*c,&day); d=0; if(year(*H).elemk.readeri

21、).back.year) d=1; /判斷是否已過了還書日期,d=1還沒過期,d=0過期 if(year=(*H).elemk.readeri).back.year & month(*H).elemk.readeri).back.month) d=1; if(year=(*H).elemk.readeri).back.year & month=(*H).elemk.readeri).back.month & day(*H).elemk.readeri).back.day) d=1; if(d=0) pay=(year-(*H).elemk.readeri).back.year)*365+(mo

22、nth-(*H).elemk.readeri).back.month)*30+(day-(*H).elemk.readeri).back.day); printf(nt 你在 %d-%d-%d 借了這本書,(*H).elemk.readeri).bro.year,(*H).elemk.readeri).bro.month,(*H).elemk.readeri).bro.day); printf(nt 你應(yīng)該在 %d-%d-%d 還這本書,(*H).elemk.readeri).back.year,(*H).elemk.readeri).back.month,(*H).elemk.readeri

23、).back.day); printf(nt 今天是 %d-%d-%d,year,month,day); printf(nnt 所以你超出了還書日期); printf(nt 你應(yīng)該被罰款 %2.1f 元.,0.1*pay); /過期一天還1角錢 (*H).elemk.readeri).num0=0; /已還,清除該讀者借書記錄 (*H).elemk.current+; /現(xiàn)存書量加1 printf(nt 你已經(jīng)還了這本書.n); else printf(nt 你要還一本沒庫存的書 n); void SaveBook(HashTable H) FILE *fp1; int i; fp1=fope

24、n(C:/record.txt,w); fprintf(fp1,= 圖書信息記錄表 =n); for(i=0;im;i+) if(H.elemi.key != NULL_KEY) fprintf(fp1,=n); fprintf(fp1,圖書編號(hào):%dn,H.elemi.key); fprintf(fp1,書名:%sn,H.elemi.title); fprintf(fp1,作者:%sn,H.elemi.writer); fprintf(fp1,現(xiàn)庫存量:%dn,H.elemi.current); fprintf(fp1,總庫存量:%dn,H.elemi.total); fprintf(fp1

25、,*n); fclose(fp1); printf(nn成功儲(chǔ)存!你能在C:/record.txt找到相應(yīng)紀(jì)錄n); printf(*n);void AddTatol(HashTable *H)BookNode e; int k, x, f,t; int m; int r,i; system(CLS); printf(nn*n); printf(t你能在此目錄下按編號(hào)修改圖書信息); printf(n*n); printf(nt 輸入你想增加的圖書量:); scanf(%d,&e.more);printf(nt 請輸入你要修改的書的編號(hào): ); scanf(%d%*c,&x); if(Sear

26、chHash(*H,x,&k,&f) printf(nt 書名: %s,(*H).elemk.title); printf(nt 作者: %s,(*H).elemk.writer); printf(nt 現(xiàn)庫存量: %d,(*H).elemk.current); printf(nt 總庫存量: %d,(*H).elemk.total); printf(nt 增加圖書量成功!); for(i=0;i=(e.more);i+) (*H).elemk.total+; /(*H).elemk.total=r; else printf(nt 這本書不存在!n);void DeleteBook(HashT

27、able H) int x,p,c,t; system(CLS); printf(nn*n); printf(t你能在此目錄下按編號(hào)刪除圖書信息); printf(n*n); printf(nt 請輸入你想刪除的書的編號(hào): ); scanf(%d%*c,&x); if(SearchHash(H,x,&p,&c) printf(nt 你想刪除這本書嗎 (y/n)n); printf(圖書 %dn,(H).elemp.key); printf(書名:%sn,(H).elemp.title); printf(作者: %sn,(H).elemp.writer); printf(圖書現(xiàn)存量: %dn,(

28、H).elemp.current); printf(圖書總量: %dn,(H).elemp.total); else printf(對(duì)不起,不存在該書!n); t=getch(); if(t=y|t=Y) (H).elemp.key=NULL_KEY; printf(刪除成功!n); void menu(void) system(cls); system(color 3f);/改變顏色 system(cls); printf(*n); printf(*n); printf(* 圖書管理系統(tǒng) *n); printf(*n); printf(*n); printf(nnt選擇你需要操作的功能:(現(xiàn)無記錄,請先添加信息)n); printf(n); prin

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論