數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書(shū)管理系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書(shū)管理系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書(shū)管理系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書(shū)管理系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書(shū)管理系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、Beijing Institute of PetrochemicalTechnology數(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)類(lèi)型定義2.算法流程圖3.程序代碼六 .運(yùn)行結(jié)果七 .結(jié)論一 .設(shè)計(jì)題目圖書(shū)管理基本業(yè)務(wù)模擬圖書(shū)管理一般包括圖書(shū)采編、圖書(shū)編目、圖書(shū)查詢及圖書(shū)流通(借、還書(shū))等基本業(yè)務(wù)。要求設(shè)計(jì)一個(gè)圖書(shū)管理信息系統(tǒng),用計(jì)算機(jī)模擬實(shí)現(xiàn)上述系統(tǒng)功能。( 1) 書(shū)的登記內(nèi)容包括書(shū)號(hào)、書(shū)名、 著作者、現(xiàn)存量和庫(kù)存

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

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

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

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

6、ESS 0 #define DUPLICATE -1#define NULL_KEY 0/ 無(wú)記錄元素int hashsize=17,19,23,29;/ 存儲(chǔ)容量int m=0;/ 表長(zhǎng)typedef struct int year; int month; int day;data;typedef structchar num5;databro;databack;/ 讀者編號(hào)記錄ReaderNode;typedef structchar title15;char writer15;int current;int total;int key;int more;/ 書(shū)的編號(hào)ReaderNode

7、reader10;/記錄借讀該書(shū)的讀者記錄BookNode;typedef structBookNode *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 collision(int

8、 *p,int d) /開(kāi)放定址法處理沖突*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); / 下一地址elsebreak;if (K=H.elem*p.key)return SUCCESS;elsereturn UNSUCCESS;int InsertHash(HashTable *H,BookNode e)int

9、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;elseprintf( 不好意思,不存在n);return 0;void AddBook(HashTable *H

10、)BookNode e;int i;system(CLS);printf(nn*n);printf(t你能在此目錄下添加圖書(shū)信息);printf(n*n);printf(nt請(qǐng)輸入書(shū)的編號(hào)(形如 : 1*): );scanf(%d,&e.key);getchar();printf(nt請(qǐng)輸入書(shū)名 : );gets(e.title);printf(nt請(qǐng)輸入該書(shū)作者: );gets(e.writer);printf(nt請(qǐng)輸入該書(shū)現(xiàn)庫(kù)存量: );scanf(%d,&e.current);printf(nt請(qǐng)輸入該書(shū)總庫(kù)存量: );scanf(%d%*c,&e.total);for(i=0;i10

11、;i+)(e.readeri).num0=0;/ 用 0來(lái)初始化借該書(shū)的讀者證號(hào),表示一開(kāi)始時(shí)沒(méi)人借書(shū)if(InsertHash(&(*H),e)printf( 圖書(shū)添加成功!n);(*H).count+;void ShowBook(HashTable H)int i;system(CLS);printf(nn*n);printf(t你能在此目錄查看圖書(shū)信息);printf(n*n);for(i=0;im;i+)if(H.elemi.key != NULL_KEY) /*有數(shù)據(jù)*/printf( 圖書(shū)編號(hào): %dn,H.elemi.key);printf( 書(shū)名: %s n,H.elemi.t

12、itle);printf( 作者:%sn,H.elemi.writer);printf( 圖書(shū)現(xiàn)存量:%dn,H.elemi.current);printf( 圖書(shū)總量: %dn,H.elemi.total);printf(*n);void BoSearch(HashTable *H)/ 借閱查詢int e,r,t;system(CLS);printf(nn*n);printf(t 你能在此目錄下按借書(shū)證號(hào)查找圖書(shū)信息);printf(n*n);printf(nt請(qǐng)輸入你的借書(shū)證號(hào): );scanf(%d%*c,&e);if(SearchHash(*H,e,&r,&t)printf(借書(shū)證編號(hào)

13、:%dn,(*H).eleme.key);printf(書(shū)名:%s n,(*H).eleme.title);printf(作者:%sn,(*H).eleme.writer);printf( 圖書(shū)現(xiàn)存量: %dn,(*H).eleme.current);printf( 圖書(shū)總量:%dn,(*H).eleme.total);elseprintf( 您沒(méi)有借過(guò)書(shū)! ! );void Find(HashTable *H)int x,p,c;system(CLS);printf(nn*n);printf(t 你能在此目錄下按編號(hào)查找圖書(shū)信息);printf(n*n);printf(nt請(qǐng)輸入你想查找的書(shū)

14、的編號(hào): );scanf(%d%*c,&x);if(SearchHash(*H,x,&p,&c)printf( 圖書(shū)編號(hào): %dn,(*H).elemp.key);printf( 書(shū)名: %s n,(*H).elemp.title);printf( 作者:%sn,(*H).elemp.writer);printf( 圖書(shū)現(xiàn)存量:%dn,(*H).elemp.current);printf( 圖書(shū)總量: %dn,(*H).elemp.total);elseprintf( 對(duì)不起,不存在該書(shū)!n);void BorrowBook(HashTable *H)int i,k, x, f,t;syste

15、m(CLS);printf(nn*n);printf(t 你能在此目錄下按編號(hào)借閱圖書(shū));printf(n*n);printf(nt請(qǐng)輸入你想借的書(shū)編號(hào): );scanf(%d%*c,&x);if(SearchHash(*H,x,&k,&f)printf(nt你想借這本書(shū)嗎?(y/n);printf(nt書(shū)名 :%s ,(*H).elemk.title);printf(nt作者 :%s,(*H).elemk.writer);printf(nt現(xiàn)庫(kù)存量 :%d,(*H).elemk.current);printf(nt總庫(kù)存量 :%d,(*H).elemk.total);t=getch();if

16、(t=y|t=Y)if(*H).elemk.current)=0)printf(nt對(duì)不起,這本書(shū)已經(jīng)被借光了 .);elsefor(i=0;i10;i+)if( (*H).elemk.readeri).num0=0) break;printf(nt請(qǐng)輸入你的借書(shū)證號(hào): );scanf(%s,(*H).elemk.readeri).num);printf(nt請(qǐng)輸入借書(shū)日期: ); /輸入借書(shū)日期printf(nt年 :);scanf(%d,&(*H).elemk.readeri).bro.year);printf(t月: );scanf(%d,&(*H).elemk.readeri).bro

17、.month);printf(t日:);scanf(%d,&(*H).elemk.readeri).bro.day);printf(nt輸入應(yīng)還書(shū)日期: ); /輸入應(yīng)還書(shū)日期printf(nt年 :);scanf(%d,&(*H).elemk.readeri).back.year);printf(t月: );scanf(%d,&(*H).elemk.readeri).back.month);printf(t日:);scanf(%d%*c,&(*H).elemk.readeri).back.day);(*H).elemk.current-;/現(xiàn)存書(shū)量減1printf(nt你已借了該書(shū).);el

18、se printf(nt這本書(shū)不存在!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 你能在此目錄下按編號(hào)歸還圖書(shū));printf(n*n);printf(nt請(qǐng)輸入你還的書(shū): );scanf(%d%*c,&x);if(SearchHash(*H,x,&k,&f)printf(nt你想還這本書(shū)嗎?(y/n);printf(nt書(shū)名 :%s ,(*H).elemk.title);printf(

19、nt作者 :%s,(*H).elemk.writer);printf(nt現(xiàn)庫(kù)存量 :%d,(*H).elemk.current);printf(nt總庫(kù)存量 :%d,(*H).elemk.total);t=getch();if(t=y|t=Y)printf(nt請(qǐng)輸入你的借書(shū)證號(hào): );scanf(%s,temp);j=0;for(i=0;i5;i+)if(!(strcmp(temp,(*H).elemk.readeri).num)j=1;break;/查看是否有借書(shū)if(j=0) printf(nt你沒(méi)有借書(shū) .);return;/該借書(shū)證號(hào)的人沒(méi)借書(shū)printf(nt今天是 :);pri

20、ntf(nt年:);scanf(%d,&year);printf(t月: );scanf(%d,&month);printf(t日:);scanf(%d%*c,&day);d=0;if(year(*H).elemk.readeri).back.year)d=1; /判斷是否已過(guò)了還書(shū)日期 ,d=1 還沒(méi)過(guò)期, d=0 過(guò)期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.read

21、eri).back.month & day(*H).elemk.readeri).back.day)d=1;if(d=0)pay=(year-(*H).elemk.readeri).back.year)*365+(month-(*H).elemk.readeri).bac k.month)*30+(day-(*H).elemk.readeri).back.day);printf(nt你在%d-%d-%d借了這本書(shū),(*H).elemk.readeri).bro.year,(*H).elemk.readeri).bro.month,(*H).elemk.readeri).bro.day);pri

22、ntf(nt你 應(yīng) 該 在%d-%d-%d還 這 本 書(shū),(*H).elemk.readeri).back.year,(*H).elemk.readeri).back.month,(*H).elemk.r eaderi).back.day);printf(nt今天是%d-%d-%d,year,month,day);printf(nnt所以你超出了還書(shū)日期);printf(nt你應(yīng)該被罰款%2.1f元 .,0.1*pay); / 過(guò)期一天還 1角錢(qián)(*H).elemk.readeri).num0=0; /已還,清除該讀者借書(shū)記錄(*H).elemk.current+;/現(xiàn)存書(shū)量加1printf(

23、nt你已經(jīng)還了這本書(shū).n);else printf(nt你要還一本沒(méi)庫(kù)存的書(shū)?n);void SaveBook(HashTable H)FILE *fp1;int i;fp1=fopen(C:/record.txt,w);fprintf(fp1,=圖書(shū)信息記錄表=n);for(i=0;im;i+)if(H.elemi.key != NULL_KEY)fprintf(fp1,=n);fprintf(fp1, 圖書(shū)編號(hào) :%dn,H.elemi.key);fprintf(fp1, 書(shū)名 :%sn,H.elemi.title);fprintf(fp1, 作者 :%sn,H.elemi.writer)

24、;fprintf(fp1,現(xiàn)庫(kù)存量 :%dn,H.elemi.current);fprintf(fp1, 總庫(kù)存量 :%dn,H.elemi.total);fprintf(fp1,*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)修改圖書(shū)信息);printf(n*n);printf(nt輸

25、入你想增加的圖書(shū)量:);scanf(%d,&e.more);printf(nt請(qǐng)輸入你要修改的書(shū)的編號(hào): );scanf(%d%*c,&x);if(SearchHash(*H,x,&k,&f)printf(nt書(shū)名 :%s ,(*H).elemk.title);printf(nt作者 :%s,(*H).elemk.writer);printf(nt現(xiàn)庫(kù)存量 :%d,(*H).elemk.current);printf(nt總庫(kù)存量 :%d,(*H).elemk.total);printf(nt增加圖書(shū)量成功! ! );for(i=0;i=(e.more);i+)(*H).elemk.total

26、+;/(*H).elemk.total=r;else printf(nt這本書(shū)不存在! ! n);void DeleteBook(HashTable H)int x,p,c,t;system(CLS);printf(nn*n);printf(t 你能在此目錄下按編號(hào)刪除圖書(shū)信息);printf(n*n);printf(nt請(qǐng)輸入你想刪除的書(shū)的編號(hào): );scanf(%d%*c,&x);if(SearchHash(H,x,&p,&c)printf(nt你想刪除這本書(shū)嗎?(y/n)n);printf(圖書(shū)編號(hào):%dn,(H).elemp.key);printf(書(shū)名: %sn,(H).elemp.

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

溫馨提示

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