數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書管理系統(tǒng)實(shí)驗(yàn)報(bào)告(共33頁)
《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書管理系統(tǒng)實(shí)驗(yàn)報(bào)告(共33頁)》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)圖書管理系統(tǒng)實(shí)驗(yàn)報(bào)告(共33頁)(33頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、精選優(yōu)質(zhì)文檔-----傾情為你奉上 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ì)題目··············&
2、#183;····················· 二. 設(shè)計(jì)目的··························
3、3;········· 三. 實(shí)驗(yàn)分工···································· 四. 算法思想分析·
4、183;······························ 五. 算法描述實(shí)現(xiàn)·················
5、83;·············· 1.數(shù)據(jù)結(jié)構(gòu)類型定義 2.算法流程圖 3.程序代碼 六. 運(yùn)行結(jié)果·····························
6、;······· 七.結(jié)論········································ 一
7、. 設(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é)生信息包括借書證號(hào)、借閱信息等; (2)以書號(hào)建立索引表(線性表)以提高查找效率; (3)主要功能如下: a) 采編入庫:新購一種書,確定書號(hào)后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加; b) 借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書號(hào)和歸還期限,改變現(xiàn)存量; c) 歸還:注銷對(duì)借閱者的登記,改變?cè)摃默F(xiàn)存量。
8、(4)輸出形式: 能按書號(hào)、書名、著作者查找?guī)齑娴臅畔? 能按學(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ì)、程序編碼、測(cè)試等基本方法和技能; 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
9、或者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ù)編寫,測(cè)試整體程序,程序缺陷糾正,最終修改后程序綜合。 算法實(shí)現(xiàn),查詢圖書信息子函數(shù)設(shè)計(jì)編寫,程序缺陷修改和測(cè)試。 四. 算法思想分析 用線性表進(jìn)行存儲(chǔ),充分利用它易添加、易刪除、查找方便的特點(diǎn),進(jìn)行程序的編寫,符合題目的需求。 而線性表
10、是最基本、最簡單、也是最常用的一種數(shù)據(jù)結(jié)構(gòu)。 五. 算法描述實(shí)現(xiàn) 1. 數(shù)據(jù)結(jié)構(gòu)類型定義 typedefstruct { int year; int month; int day; }data; typedefstruct { char num[5]; //讀者編號(hào)記錄 data bro; data back; }ReaderNode; typedefstruct { char title[15]; char writer[15]; int curre
11、nt; int total; int key; //書的編號(hào) ReaderNode reader[10]; //記錄借讀該書的讀者記錄 }BookNode; typedefstruct { BookNode *elem; int count; //記錄節(jié)點(diǎn)中的總數(shù) }HashTable; 2. 算法流程圖 建立哈希表 刪除函數(shù) 添加函數(shù) 查找函數(shù) 添加圖書增量子函數(shù) 借閱書子函數(shù) 添加書子函數(shù) 查看已添加書子函數(shù)
12、 歸還書子函數(shù) 查看已借閱書子函數(shù) 查找書子函數(shù) 主函數(shù) 完成 3. 程序代碼 #include"stdafx.h" #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include<string.h> #include<conio.h> #define SUCCESS 1 #define UNSUCCESS 0 #define DUPLICATE -1 #define N
13、ULL_KEY 0//無記錄元素 int hashsize[]={17,19,23,29};//存儲(chǔ)容量 int m=0;//表長 typedef struct { int year; int month; int day; }data; typedef struct { char num[5]; //讀者編號(hào)記錄 data bro; data back; }ReaderNode; typedef struct
14、{ char title[15]; char writer[15]; int current; int total; int key; int more;//書的編號(hào) ReaderNode reader[10]; //記錄借讀該書的讀者記錄 }BookNode; typedef struct { BookNode *elem; int count; //記錄節(jié)點(diǎn)中的總數(shù) }HashTable; void InitHashTable(
15、HashTable *H) { int i; (*H).count=0; m=hashsize[0]; (*H).elem=(BookNode *)malloc(m*sizeof(BookNode)); for(i=0;i<m;i++) (*H).elem[i].key=NULL_KEY; } unsigned Hash(int K)//哈希函數(shù),自己設(shè)定 { return K%m; } void collision(int *p,int d) // 開放定址法處理沖突 { *p=(*
16、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(*c<m) collision(p,*c); //下一地址 else break; } if (K == H.elem[*p].k
17、ey) 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<hashsize[0]/2) { (*H).elem[p]=e; ++(*H).count; return 1;
18、} return 0; } int DeleteHash(HashTable *H,BookNode e) { int c,p; c=0; if(SearchHash(*H,e.key,&p,&c)) { (*H).elem[p].key=NULL_KEY; --(*H).count; return 1; } else { printf("不好意思,不存在\n&qu
19、ot;); } return 0; } void AddBook(HashTable *H) { BookNode e; int i; system("CLS"); printf("\n\n**************************************************\n"); printf("\t你能在此目錄下添加圖書信息"); printf("\n************************
20、**************************\n"); printf("\n\t 請(qǐng)輸入書的編號(hào)(形如: 1***): "); scanf("%d",&e.key); getchar(); printf("\n\t 請(qǐng)輸入書名: "); gets(e.title); printf("\n\t 請(qǐng)輸入該書作者: "); gets(e.writer); pr
21、intf("\n\t 請(qǐng)輸入該書現(xiàn)庫存量: "); scanf("%d",&e.current); printf("\n\t 請(qǐng)輸入該書總庫存量: "); scanf("%d%*c",&e.total); for(i=0;i<10;i++) (e.reader[i]).num[0]='\0'; //用'\0'來初始化借該書的讀者證號(hào),表示一開始時(shí)沒人借書 if(I
22、nsertHash(&(*H),e)) printf("圖書添加成功!\n"); (*H).count++; } void ShowBook(HashTable H) { int i; system("CLS"); printf("\n\n**************************************************\n"); printf("\t你能在此目錄查看圖書信息"); printf("\n
23、**************************************************\n"); for(i=0;i<m;i++) if(H.elem[i].key != NULL_KEY) /* 有數(shù)據(jù) */ { printf("圖書編號(hào):%d\n",H.elem[i].key); printf("書名: 《%s》\n",H.elem[i].title); printf("作者: %s\n",H.elem
24、[i].writer); printf("圖書現(xiàn)存量: %d\n",H.elem[i].current); printf("圖書總量 : %d\n",H.elem[i].total); printf("***************************************************\n"); } } void BoSearch(HashTable *H)//借閱查詢 { int e,r,t; system("C
25、LS"); printf("\n\n**************************************************\n"); printf("\t你能在此目錄下按借書證號(hào)查找圖書信息"); printf("\n**************************************************\n"); printf("\n\t 請(qǐng)輸入你的借書證號(hào): "); scanf("%d%*c&qu
26、ot;,&e); if(SearchHash(*H,e,&r,&t)) { printf("借書證編號(hào): %d\n",(*H).elem[e].key); printf("書名: 《%s》\n",(*H).elem[e].title); printf("作者: %s\n",(*H).elem[e].writer); printf("圖書現(xiàn)存量:%d\n",(*H
27、).elem[e].current); printf("圖書總量 :%d\n",(*H).elem[e].total); } else printf("您沒有借過書!!!"); } void Find(HashTable *H) { int x,p,c; system("CLS"); printf("\n\n**************************************************\n&q
28、uot;); printf("\t你能在此目錄下按編號(hào)查找圖書信息"); printf("\n**************************************************\n"); printf("\n\t 請(qǐng)輸入你想查找的書的編號(hào): "); scanf("%d%*c",&x); if(SearchHash(*H,x,&p,&c)) { printf(&qu
29、ot;圖書編號(hào):%d\n",(*H).elem[p].key); printf("書名: 《%s》\n",(*H).elem[p].title); printf("作者: %s\n",(*H).elem[p].writer); printf("圖書現(xiàn)存量: %d\n",(*H).elem[p].current); printf("圖書總量 : %d\n",(*H).elem[p].total);
30、 } else printf("對(duì)不起,不存在該書!\n"); } void BorrowBook(HashTable *H) { int i,k, x, f,t; system("CLS"); printf("\n\n**************************************************\n"); printf("\t你能在此目錄下按編號(hào)借閱圖書"); printf("\n**
31、************************************************\n"); printf("\n\t 請(qǐng)輸入你想借的書編號(hào): "); scanf("%d%*c",&x); if(SearchHash(*H,x,&k,&f)) { printf("\n\t 你想借這本書嗎 ?(y/n)"); printf("\n\t 書名: 《%s》",(*H).elem[k].ti
32、tle); printf("\n\t 作者: %s",(*H).elem[k].writer); printf("\n\t 現(xiàn)庫存量: %d",(*H).elem[k].current); printf("\n\t 總庫存量: %d",(*H).elem[k].total); t=getch(); if(t=='y'||t=='Y') { if
33、( ((*H).elem[k].current)==0) printf("\n\t對(duì)不起,這本書已經(jīng)被借光了..."); else { for(i=0;i<10;i++) if( ((*H).elem[k].reader[i]).num[0]=='\0') break; printf("\n\t 請(qǐng)輸入你的借書證號(hào): ");
34、 scanf("%s",((*H).elem[k].reader[i]).num); printf("\n\t 請(qǐng)輸入借書日期: "); //輸入借書日期 printf("\n\t 年: "); scanf("%d",&(((*H).elem[k].reader[i]).bro.year)); printf("
35、;\t 月: "); scanf("%d",&(((*H).elem[k].reader[i]).bro.month)); printf("\t 日: "); scanf("%d",&(((*H).elem[k].reader[i]).bro.day)); printf("\n\t 輸入應(yīng)還書日期: ");
36、//輸入應(yīng)還書日期 printf("\n\t 年: "); scanf("%d",&(((*H).elem[k].reader[i]).back.year)); printf("\t 月: "); scanf("%d",&(((*H).elem[k].reader[i]).back.month));
37、 printf("\t 日: "); scanf("%d%*c",&(((*H).elem[k].reader[i]).back.day)); (*H).elem[k].current--; //現(xiàn)存書量減1 printf("\n\t 你已借了該書."); } } } else printf("\n\t
38、 這本書不存在!\n"); } void ReturnBook(HashTable *H) { int i,k, x, f,t,j; int year,month,day,d; float pay; char temp[20]; system("CLS"); printf("\n\n**************************************************\n"); printf("\t你能在此目錄下按編號(hào)歸還圖書"); print
39、f("\n**************************************************\n"); printf("\n\t 請(qǐng)輸入你還的書: "); scanf("%d%*c",&x); if(SearchHash(*H,x,&k,&f)) { printf("\n\t 你想還這本書嗎 ?(y/n)"); printf("\n\t 書名: 《%s》",(*H).elem[k
40、].title); printf("\n\t 作者: %s",(*H).elem[k].writer); printf("\n\t 現(xiàn)庫存量: %d",(*H).elem[k].current); printf("\n\t 總庫存量: %d",(*H).elem[k].total); t=getch(); if(t=='y'||t=='Y') { printf(&quo
41、t;\n\t 請(qǐng)輸入你的借書證號(hào): "); scanf("%s",temp); j=0; for(i=0;i<5;i++) { if(!(strcmp(temp,((*H).elem[k].reader[i]).num))) {j=1;break;} //查看是否有借書 } if(j==0) { printf("\n\t 你沒有借書.");retur
42、n;} //該借書證號(hào)的人沒借書 printf("\n\t 今天是:"); printf("\n\t 年: "); scanf("%d",&year); printf("\t 月: "); scanf("%d",&month); printf("\t 日: ");
43、 scanf("%d%*c",&day); d=0; if(year<((*H).elem[k].reader[i]).back.year) d=1; //判斷是否已過了還書日期,d=1還沒過期,d=0過期 if(year<=((*H).elem[k].reader[i]).back.year && month<((*H).elem[k].reader[i]).back.month) d=1; if(year<=((*H).elem[k].
44、reader[i]).back.year && month<=((*H).elem[k].reader[i]).back.month && day<((*H).elem[k].reader[i]).back.day) d=1; if(d==0) { pay=(year-((*H).elem[k].reader[i]).back.year)*365+(month-((*H).elem[k].reader[i]).back.month)*30+(day-((*H).elem[k].re
45、ader[i]).back.day); printf("\n\t 你在 %d-%d-%d 借了這本書",((*H).elem[k].reader[i]).bro.year,((*H).elem[k].reader[i]).bro.month,((*H).elem[k].reader[i]).bro.day); printf("\n\t 你應(yīng)該在 %d-%d-%d 還這本書",((*H).elem[k].reader[i]).back.year,((*H).elem[k].reader
46、[i]).back.month,((*H).elem[k].reader[i]).back.day); printf("\n\t 今天是 %d-%d-%d",year,month,day); printf("\n\n\t 所以你超出了還書日期"); printf("\n\t 你應(yīng)該被罰款 %2.1f 元.",0.1*pay); //過期一天還1角錢 } ((*H).elem[k].rea
47、der[i]).num[0]='\0'; //已還,清除該讀者借書記錄 (*H).elem[k].current++; //現(xiàn)存書量加1 printf("\n\t 你已經(jīng)還了這本書.\n"); } } else printf("\n\t 你要還一本沒庫存的書 ???\n"); } void SaveBook(HashTable H){ FILE *fp1; int i; fp1=fope
48、n("C:/record.txt","w"); fprintf(fp1,"=============== 圖書信息記錄表 =================\n"); for(i=0;i<m;i++) { if(H.elem[i].key != NULL_KEY) { fprintf(fp1,"=====================
49、=======================\n"); fprintf(fp1,"圖書編號(hào):%d\n",H.elem[i].key); fprintf(fp1,"書名:%s\n",H.elem[i].title); fprintf(fp1,"作者:%s\n",H.elem[i].writer);
50、 fprintf(fp1,"現(xiàn)庫存量:%d\n",H.elem[i].current); fprintf(fp1,"總庫存量:%d\n",H.elem[i].total); } } fprintf(fp1,"**************************************************\n"); fclose(fp1); printf("\
51、n\n成功儲(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("\n\n***************************************
52、***********\n"); printf("\t你能在此目錄下按編號(hào)修改圖書信息"); printf("\n**************************************************\n"); printf("\n\t 輸入你想增加的圖書量:"); scanf("%d",&e.more); printf("\n\t 請(qǐng)輸入你要修改的書的編號(hào): "); scanf("%d%*c",&a
53、mp;x); if(SearchHash(*H,x,&k,&f)) { printf("\n\t 書名: 《%s》",(*H).elem[k].title); printf("\n\t 作者: %s",(*H).elem[k].writer); printf("\n\t 現(xiàn)庫存量: %d",(*H).elem[k].current); printf("\n\t 總庫存量: %d",((*H)
54、.elem[k].total)); printf("\n\t 增加圖書量成功?。?!"); for(i=0;i<=(e.more);i++) { (*H).elem[k].total++; } //(*H).elem[k].total=r; } else printf("\n\t 這本書不存在!??!\n"); } void DeleteBook(HashTable H) { int x,p,c,t; system("CLS");
55、 printf("\n\n**************************************************\n"); printf("\t你能在此目錄下按編號(hào)刪除圖書信息"); printf("\n**************************************************\n"); printf("\n\t 請(qǐng)輸入你想刪除的書的編號(hào): "); scanf("%d%*c",&am
56、p;x); if(SearchHash(H,x,&p,&c)) { printf("\n\t 你想刪除這本書嗎 ?(y/n)\n"); printf("圖書編號(hào): %d\n",(H).elem[p].key); printf("書名: 《%s》\n",(H).elem[p].title); printf("作者: %s\n",(H).elem[p].writ
57、er); printf("圖書現(xiàn)存量: %d\n",(H).elem[p].current); printf("圖書總量 : %d\n",(H).elem[p].total); } else printf("對(duì)不起,不存在該書!\n"); t=getch(); if(t=='y'||t=='Y') { (H).elem[
58、p].key=NULL_KEY; printf("刪除成功!\n"); } } void menu(void) { system("cls"); system("color 3f");//改變顏色 system("cls"); printf("************************************************
59、*****************************\n"); printf("*****************************************************************************\n"); printf("************ 圖書管理系統(tǒng) ************************\n"); printf("************************
60、*****************************************************\n"); printf("*****************************************************************************\n"); printf("\n\n\t選擇你需要操作的功能:(現(xiàn)無記錄,請(qǐng)先添加信息)\n"); printf("\n"); printf("\t\t1.添加
61、圖書信息\n"); printf("\t\t2.顯示圖書信息\n"); printf("\t\t3.查找圖書信息\n"); printf("\t\t4.刪除圖書\n"); printf("\t\t5.借閱圖書\n"); printf("\t\t6.借閱信息并歸還圖書\n"); printf("\t\t7.保存圖書信息到指定文件中\(zhòng)n"); printf(
62、"\t\t8.借閱查詢\n"); printf("\t\t9.添加圖書增量\n"); printf("\n**************************************************\n"); } int main() { int n,i,c; int year,month,day; BookNode book; HashTable H; system("cls
63、"); system("color 1c");//改變顏色 system("cls"); printf("********************************* 圖書管理系統(tǒng) *********************************\n"); printf("********************************* 數(shù)據(jù)結(jié)構(gòu) *********************************\n")
64、; printf("********************************* 范文虎小組 *********************************\n"); printf("********************************* 計(jì)算機(jī)科學(xué)與技術(shù)1班*********************************\n"); printf("\n\n\t\t\t\t歡迎您?。。n"); printf("請(qǐng)按ENTER進(jìn)入
65、主菜單\n"); getchar(); InitHashTable(&H); while(1) { menu(); printf("選擇你需要操作的功能號(hào)碼:"); scanf("%d",&c); getchar(); switch(c)
66、{ case 1: AddBook(&(H));break; case 2: ShowBook((H));break; case 3: Find(&(H));break; case 4:
67、 DeleteBook(H);break; case 5: BorrowBook(&(H));break; case 6: ReturnBook(&(H));break; case 7:
68、 SaveBook((H));break; case 8: BoSearch((&H));break; case 9: AddTatol(&(H));break; default : printf("Enter error!!\n"); } printf("請(qǐng)按ENTER返回主菜單\n"); getchar(); system("CLS"); } } 六. 運(yùn)行結(jié)果 七. 結(jié)論 通過此次課設(shè)小組的密切配合,小組成員每個(gè)人在編程上都有了長足的進(jìn)步。 專心---專注---專業(yè)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《筍芽兒》課件
- 高速鐵路同相供電
- 二年級(jí)語文下冊(cè)-第4單元-13《激光的話》課件4-語文S版
- 《一枚金幣》課件
- 1441單項(xiàng)式乘以多項(xiàng)式(課件)PPT
- 12分式的乘法和除法
- 常見蔬菜分類
- 保險(xiǎn)客戶經(jīng)營1361法則
- 現(xiàn)場(chǎng)目視管理與看板管理
- 高中政治-4.2文化在繼承中發(fā)展課件1-新人教版必修3PPT文檔
- 八年級(jí)生物上冊(cè) 181 微生物在生物圈中的作用(第2課時(shí))課件(2)(新版)北師大版
- 人生的夢(mèng)想
- 動(dòng)物生理學(xué)-第六章課件
- IE經(jīng)典管理基礎(chǔ)
- AfternoonandEvening課件