數(shù)據(jù)結(jié)構(gòu)課程設(shè)計圖書管理系統(tǒng)實驗報告(共33頁)

上傳人:6**** 文檔編號:46403224 上傳時間:2021-12-13 格式:DOC 頁數(shù):33 大小:181.50KB
收藏 版權(quán)申訴 舉報 下載
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計圖書管理系統(tǒng)實驗報告(共33頁)_第1頁
第1頁 / 共33頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計圖書管理系統(tǒng)實驗報告(共33頁)_第2頁
第2頁 / 共33頁
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計圖書管理系統(tǒng)實驗報告(共33頁)_第3頁
第3頁 / 共33頁

下載文檔到電腦,查找使用更方便

20 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計圖書管理系統(tǒng)實驗報告(共33頁)》由會員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計圖書管理系統(tǒng)實驗報告(共33頁)(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、精選優(yōu)質(zhì)文檔-傾情為你奉上Beijing Institute of Petrochemical Technology數(shù)據(jù)結(jié)構(gòu)課程設(shè)計課程設(shè)計實驗報告 院(系、部):信息工程學(xué)院 姓 名:計141范文虎 指導(dǎo)教師簽名:2016年 6月29日·北京目錄一. 設(shè)計題目···························&#

2、183;········二. 設(shè)計目的····································三. 實驗分工···

3、·································四. 算法思想分析···············

4、83;················五. 算法描述實現(xiàn)································

5、1.數(shù)據(jù)結(jié)構(gòu)類型定義 2.算法流程圖 3.程序代碼六. 運行結(jié)果····································七.結(jié)論········

6、································一. 設(shè)計題目圖書管理基本業(yè)務(wù)模擬圖書管理一般包括圖書采編、圖書編目、圖書查詢及圖書流通(借、還書)等基本業(yè)務(wù)。要求設(shè)計一個圖書管理信息系統(tǒng),用計算機模擬實現(xiàn)上述系統(tǒng)功能。(1)書的登記內(nèi)容包括書號、書名、著作者、現(xiàn)

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

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

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

10、nt; int total; int key; /書的編號ReaderNode reader10; /記錄借讀該書的讀者記錄BookNode;typedefstructBookNode *elem; int count; /記錄節(jié)點中的總數(shù)HashTable;2. 算法流程圖建立哈希表刪除函數(shù)添加函數(shù)查找函數(shù)添加圖書增量子函數(shù)借閱書子函數(shù)添加書子函數(shù)查看已添加書子函數(shù)歸還書子函數(shù)查看已借閱書子函數(shù)查找書子函數(shù)主函數(shù)完成3. 程序代碼#include"stdafx.h"#include<stdio.h>#include<stdlib.h>#includ

11、e<malloc.h>#include<string.h>#include<conio.h>#define SUCCESS 1#define UNSUCCESS 0#define DUPLICATE -1#define NULL_KEY 0/無記錄元素 int hashsize=17,19,23,29;/存儲容量 int m=0;/表長 typedef struct int year; int month; int day; data;typedef struct char num5; /讀者編號記錄 data bro; data back; ReaderN

12、ode;typedef struct char title15; char writer15; int current; int total; int key; int more;/書的編號 ReaderNode reader10; /記錄借讀該書的讀者記錄 BookNode;typedef struct BookNode *elem; int count; /記錄節(jié)點中的總數(shù) HashTable;void InitHashTable(HashTable *H) int i; (*H).count=0; m=hashsize0; (*H).elem=(BookNode *)malloc(m*s

13、izeof(BookNode); for(i=0;i<m;i+) (*H).elemi.key=NULL_KEY; unsigned Hash(int K)/哈希函數(shù),自己設(shè)定 return K%m; void collision(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)+;

14、if(*c<m) collision(p,*c); /下一地址 else break; if (K = H.elem*p.key) return SUCCESS; else return UNSUCCESS; int InsertHash(HashTable *H,BookNode e) int c,p; c=0; if(SearchHash(*H,e.key,&p,&c) return DUPLICATE; else if(c<hashsize0/2) (*H).elemp=e; +(*H).count; return 1; return 0;int Delete

15、Hash(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("不好意思,不存在n"); return 0;void AddBook(HashTable *H) BookNode e; int i; system("CLS"); printf("nn*n"); printf("t你能在此目錄下添加圖書信息&

16、quot;); printf("n*n"); printf("nt 請輸入書的編號(形如: 1*): "); scanf("%d",&e.key); getchar(); printf("nt 請輸入書名: "); gets(e.title); printf("nt 請輸入該書作者: "); gets(e.writer); printf("nt 請輸入該書現(xiàn)庫存量: "); scanf("%d",&e.current); printf(&q

17、uot;nt 請輸入該書總庫存量: "); scanf("%d%*c",&e.total); for(i=0;i<10;i+) (e.readeri).num0='0' /用'0'來初始化借該書的讀者證號,表示一開始時沒人借書 if(InsertHash(&(*H),e) printf("圖書添加成功!n"); (*H).count+; void ShowBook(HashTable H) int i; system("CLS"); printf("nn*n&q

18、uot;); printf("t你能在此目錄查看圖書信息"); printf("n*n"); for(i=0;i<m;i+) if(H.elemi.key != NULL_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);

19、 printf("圖書總量 : %dn",H.elemi.total); printf("*n"); void BoSearch(HashTable *H)/借閱查詢 int e,r,t; system("CLS"); printf("nn*n"); printf("t你能在此目錄下按借書證號查找圖書信息"); printf("n*n"); printf("nt 請輸入你的借書證號: "); scanf("%d%*c",&e);

20、 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("您沒有借過書!&q

21、uot;);void Find(HashTable *H) int x,p,c; system("CLS"); printf("nn*n"); printf("t你能在此目錄下按編號查找圖書信息"); printf("n*n"); printf("nt 請輸入你想查找的書的編號: "); scanf("%d%*c",&x); if(SearchHash(*H,x,&p,&c) printf("圖書編號:%dn",(*H).elemp

22、.key); printf("書名: %sn",(*H).elemp.title); printf("作者: %sn",(*H).elemp.writer); printf("圖書現(xiàn)存量: %dn",(*H).elemp.current); printf("圖書總量 : %dn",(*H).elemp.total); else printf("對不起,不存在該書!n"); void BorrowBook(HashTable *H) int i,k, x, f,t; system("CL

23、S"); printf("nn*n"); printf("t你能在此目錄下按編號借閱圖書"); 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(&quo

24、t;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') if( (*H).elemk.current)=0) printf("nt對不起,這本書已經(jīng)被借光了."); else for(i=0;i<10;i+) if( (*H).elemk.readeri).num

25、0='0') break; printf("nt 請輸入你的借書證號: "); scanf("%s",(*H).elemk.readeri).num); printf("nt 請輸入借書日期: "); /輸入借書日期 printf("nt 年: "); scanf("%d",&(*H).elemk.readeri).bro.year); printf("t 月: "); scanf("%d",&(*H).elemk.read

26、eri).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).elemk.readeri

27、).back.month); printf("t 日: "); scanf("%d%*c",&(*H).elemk.readeri).back.day); (*H).elemk.current-; /現(xiàn)存書量減1 printf("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; syst

28、em("CLS"); printf("nn*n"); printf("t你能在此目錄下按編號歸還圖書"); 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); pri

29、ntf("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 請輸入你的借書證號: "); scanf("%s",temp); j=0; for(i=0;i<5;i+) if(!(strcmp(temp,(*H)

30、.elemk.readeri).num) j=1;break; /查看是否有借書 if(j=0) printf("nt 你沒有借書.");return; /該借書證號的人沒借書 printf("nt 今天是:"); printf("nt 年: "); scanf("%d",&year); printf("t 月: "); scanf("%d",&month); printf("t 日: "); scanf("%d%*c"

31、,&day); d=0; if(year<(*H).elemk.readeri).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&l

32、t;(*H).elemk.readeri).back.day) d=1; if(d=0) pay=(year-(*H).elemk.readeri).back.year)*365+(month-(*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); pri

33、ntf("nt 你應(yīng)該在 %d-%d-%d 還這本書",(*H).elemk.readeri).back.year,(*H).elemk.readeri).back.month,(*H).elemk.readeri).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

34、='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=fopen("C:/record.txt","w"); fprintf(fp1,"= 圖書信息記錄表 =n"); for(i=0;i<m;i+) if(H.elemi.

35、key != NULL_KEY) fprintf(fp1,"=n"); fprintf(fp1,"圖書編號:%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,

36、"*n"); fclose(fp1); printf("nn成功儲存!你能在C:/record.txt找到相應(yīng)紀錄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你能在此目錄下按編號修改圖書信息"); printf("n*n"); printf(&qu

37、ot;nt 輸入你想增加的圖書量:"); scanf("%d",&e.more);printf("nt 請輸入你要修改的書的編號: "); scanf("%d%*c",&x); if(SearchHash(*H,x,&k,&f) printf("nt 書名: %s",(*H).elemk.title); printf("nt 作者: %s",(*H).elemk.writer); printf("nt 現(xiàn)庫存量: %d",(*H).e

38、lemk.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(HashTable H) int x,p,c,t; system("CLS"); printf("nn*n"); print

39、f("t你能在此目錄下按編號刪除圖書信息"); printf("n*n"); printf("nt 請輸入你想刪除的書的編號: "); 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); print

40、f("作者: %sn",(H).elemp.writer); printf("圖書現(xiàn)存量: %dn",(H).elemp.current); printf("圖書總量 : %dn",(H).elemp.total); else printf("對不起,不存在該書!n"); t=getch(); if(t='y'|t='Y') (H).elemp.key=NULL_KEY; printf("刪除成功!n"); void menu(void) system("

41、;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"); printf("tt1.添加圖書信息n&

42、quot;); printf("tt2.顯示圖書信息n"); printf("tt3.查找圖書信息n"); printf("tt4.刪除圖書n"); printf("tt5.借閱圖書n"); printf("tt6.借閱信息并歸還圖書n"); printf("tt7.保存圖書信息到指定文件中n");printf("tt8.借閱查詢n"); printf("tt9.添加圖書增量n"); printf("n*n"); i

43、nt main() int n,i,c; int year,month,day; BookNode book; HashTable H; system("cls"); system("color 1c");/改變顏色 system("cls"); printf("* 圖書管理系統(tǒng) *n"); printf("* 數(shù)據(jù)結(jié)構(gòu) *n"); printf("* 范文虎小組 *n"); printf("* 計算機科學(xué)與技術(shù)1班*n"); printf("n

44、ntttt歡迎您!n"); printf("請按ENTER進入主菜單n"); getchar(); InitHashTable(&H); while(1) menu(); printf("選擇你需要操作的功能號碼:"); scanf("%d",&c); getchar(); switch(c) case 1: AddBook(&(H);break; case 2: ShowBook(H);break; case 3: Find(&(H);break; case 4: DeleteBook(H)

45、;break; case 5: BorrowBook(&(H);break; case 6: ReturnBook(&(H);break; case 7: SaveBook(H);break; case 8: BoSearch(&H);break; case 9: AddTatol(&(H);break; default : printf("Enter error!n"); printf("請按ENTER返回主菜單n"); getchar(); system("CLS"); 六. 運行結(jié)果七. 結(jié)論通過此次課設(shè)小組的密切配合,小組成員每個人在編程上都有了長足的進步。專心-專注-專業(yè)

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!