




版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 計(jì)算機(jī)二級(jí)C語(yǔ)言考試應(yīng)試技巧試題及答案
- 軟件缺陷分類(lèi)方法試題及答案
- VFP編程重點(diǎn)知識(shí)復(fù)習(xí)策略試題及答案
- 了解Access的動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)試題及答案
- 計(jì)算機(jī)二級(jí)JAVA字符串處理試題及答案
- 2025年Web考試探究精神試題及答案
- 合同到期寫(xiě)了協(xié)議書(shū)
- 計(jì)算機(jī)二級(jí)各題型分析試題及答案
- 貼牌生產(chǎn)合同協(xié)議書(shū)
- 突破重圍VFP考試試題及答案預(yù)測(cè)
- 技術(shù)保障管理制度
- 【MOOC】中西醫(yī)結(jié)合兒科學(xué)-河南中醫(yī)藥大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 2023年駕駛臺(tái)資源管理真題模擬匯編(共873題)
- 2025中考英語(yǔ)作文預(yù)測(cè):19個(gè)熱點(diǎn)話題及范文
- 黑龍江省龍東地區(qū)2024-2025學(xué)年高二上學(xué)期階段測(cè)試(二)(期中)英語(yǔ)試卷(含答案)
- 2024秋期國(guó)家開(kāi)放大學(xué)本科《經(jīng)濟(jì)學(xué)(本)》一平臺(tái)在線形考(形考任務(wù)1至6)試題及答案
- 2025年中考?xì)v史復(fù)習(xí)專(zhuān)項(xiàng)訓(xùn)練:中國(guó)近代史材料題40題(原卷版)
- 升職晉級(jí)與薪資調(diào)整管理制度
- 安徽省2024年中考數(shù)學(xué)試卷【附真題答案】
- 基層社區(qū)治理困境及化解路徑研究分析-以XXX社區(qū)為例 行政管理專(zhuān)業(yè)開(kāi)題報(bào)告
- 2024年甘肅省天水市中考地理試題卷(含答案)
評(píng)論
0/150
提交評(píng)論