
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、.Beijing Institute of Petrochemical Technology數(shù)據(jù)結(jié)構(gòu)課程設(shè)計課程設(shè)計實驗報告院(系、部):信息工程學(xué)院姓名:計141范文虎指導(dǎo)教師簽名:2016年 6月29日目錄一. 設(shè)計題目二. 設(shè)計目的三. 實驗分工四. 算法思想分析五. 算法描述實現(xiàn)1.數(shù)據(jù)結(jié)構(gòu)類型定義 2.算法流程圖 3.程序代碼六. 運(yùn)行結(jié)果七.結(jié)論一. 設(shè)計題目圖書管理基本業(yè)務(wù)模擬圖書管理一般包括圖書采編、圖書編目、圖書查詢及圖書流通(借、還書)等基本業(yè)務(wù)。要求設(shè)計一個圖書管理信息系統(tǒng),用計算機(jī)模擬實現(xiàn)上述系統(tǒng)功能。(1)書的登記內(nèi)容包括書號、書名、著作者、現(xiàn)存量和庫存量等;學(xué)生信息
2、包括借書證號、借閱信息等;(2)以書號建立索引表(線性表)以提高查找效率;(3)主要功能如下:a) 采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加;b) 借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書號和歸還期限,改變現(xiàn)存量;c) 歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。(4)輸出形式:能按書號、書名、著作者查找?guī)齑娴臅畔⒛馨磳W(xué)生的借書證號顯示學(xué)生信息和借閱信息書籍入庫借書功能實現(xiàn)還書功能實現(xiàn)二. 設(shè)計目的1 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;2初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基
3、本方法和技能;3提高綜合運(yùn)用所學(xué)的理論知識和方法獨立分析和解決問題的能力;4訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。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ù)編寫,測試整體程序,程序缺陷糾正,最終修改后程序綜合。算法實現(xiàn),查詢圖書信
4、息子函數(shù)設(shè)計編寫,程序缺陷修改和測試。四. 算法思想分析用線性表進(jìn)行存儲,充分利用它易添加、易刪除、查找方便的特點,進(jìn)行程序的編寫,符合題目的需求。而線性表是最基本、最簡單、也是最常用的一種數(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 current; int total; i
5、nt key; /書的編號ReaderNode reader10; /記錄借讀該書的讀者記錄BookNode;typedefstructBookNode *elem; int count; /記錄節(jié)點中的總數(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;/存儲容量int m=0;/表長typedef struct int year; int month; int day; data;typedef struct char num5; /讀者編號記錄 data bro; data back; ReaderNode;typedef struct char title15; char writer15; int current; int total; int key; int more;/書的編號 ReaderNode re
7、ader10; /記錄借讀該書的讀者記錄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*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 請輸入書的編號(形如: 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來初始化借該書的讀者證號,表示一開始時沒人借書 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你能在此目錄下按借書證號查找圖書信息); printf(n*n);
13、printf(nt 請輸入你的借書證號: ); 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你能在此目錄下按編號查找圖書信息); printf(n*n); printf(nt 請輸入你想查找的書的編號: ); 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(對不起,不存在該書!n); void BorrowBook(HashTable *H) int i,k, x, f,t; system(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); 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對不起,這本書已經(jīng)被借光了.); else for(i=0;i10;i+) if( (*H).elemk.readeri).num0=0) break; printf(nt 請輸入你的借書證號: ); 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、號歸還圖書); 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、借書證號: ); 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; /該借書證號的人沒借書 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,圖書編號:%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成功儲存!你能在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你能在此目錄下按編號修改圖書信息); printf(n*n); printf(nt 輸入你想增加的圖書量:); scanf(%d,&e.more);printf(nt 請輸入你要修改的書的編號: ); 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你能在此目錄下按編號刪除圖書信息); 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); printf(作者: %sn,(H).elemp.writer); printf(圖書現(xiàn)存量: %dn,(
28、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(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年導(dǎo)游資格證考試筆試模擬試卷:旅游政策法規(guī)解讀解析題
- 環(huán)保事件背后的思考議論文(11篇)
- 2025年西式烹調(diào)師職業(yè)技能鑒定模擬試卷(中級實操篇)
- 10-17翼神用戶手冊(含保養(yǎng))
- 文化遺產(chǎn)數(shù)字化展示與傳播:2025年文化遺產(chǎn)數(shù)字化資源整合策略報告
- 生物飼料添加劑研發(fā)成果鑒定報告:2025年行業(yè)競爭格局分析
- 汽車維修技術(shù)服務(wù)合同書
- 話劇劇本《瞎了一只眼》作者:丁西林
- 完成某行業(yè)市場調(diào)查問卷分析市場趨勢
- 2025年中國教育行業(yè)市場增長動力與競爭格局研究報告
- 2025年新疆維吾爾自治區(qū)中考?xì)v史真題(解析版)
- 空壓機(jī)考試題及答案
- 荊州中學(xué)2024-2025學(xué)年高二下學(xué)期6月月考?xì)v史試卷
- 2025-2030年中國婚慶產(chǎn)業(yè)行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2024-2025學(xué)年蘇教版四年級下學(xué)期期末測試數(shù)學(xué)試卷(含答案)
- 2025年新高考2卷(新課標(biāo)Ⅱ卷)英語試卷
- 2025年中考化學(xué)必考要點知識歸納
- 三年級語文下冊全冊重點知識點歸納
- 公路養(yǎng)護(hù)材料管理制度
- JG/T 521-2017輕質(zhì)砂漿
- JG/T 330-2011建筑工程用索
評論
0/150
提交評論