數(shù)據(jù)結構課程設計圖書管理系統(tǒng)實驗報告(共33頁)
《數(shù)據(jù)結構課程設計圖書管理系統(tǒng)實驗報告(共33頁)》由會員分享,可在線閱讀,更多相關《數(shù)據(jù)結構課程設計圖書管理系統(tǒng)實驗報告(共33頁)(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、精選優(yōu)質文檔-----傾情為你奉上 Beijing Institute of Petrochemical Technology 數(shù)據(jù)結構課程設計 課程設計實驗報告 院(系、部): 信息工程學院 姓 名: 計141范文虎 指導教師簽名: 2016年 6月29日·北京 目錄 一. 設計題目··············&
2、#183;····················· 二. 設計目的··························
3、3;········· 三. 實驗分工···································· 四. 算法思想分析·
4、183;······························ 五. 算法描述實現(xiàn)·················
5、83;·············· 1.數(shù)據(jù)結構類型定義 2.算法流程圖 3.程序代碼 六. 運行結果·····························
6、;······· 七.結論········································ 一
7、. 設計題目 圖書管理基本業(yè)務模擬 圖書管理一般包括圖書采編、圖書編目、圖書查詢及圖書流通(借、還書)等基本業(yè)務。要求設計一個圖書管理信息系統(tǒng),用計算機模擬實現(xiàn)上述系統(tǒng)功能。 (1)書的登記內容包括書號、書名、著作者、現(xiàn)存量和庫存量等;學生信息包括借書證號、借閱信息等; (2)以書號建立索引表(線性表)以提高查找效率; (3)主要功能如下: a) 采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加; b) 借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書號和歸還期限,改變現(xiàn)存量; c) 歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。
8、(4)輸出形式: 能按書號、書名、著作者查找?guī)齑娴臅畔? 能按學生的借書證號顯示學生信息和借閱信息 書籍入庫 借書功能實現(xiàn) 還書功能實現(xiàn) 二. 設計目的 1. 了解并掌握數(shù)據(jù)結構與算法的設計方法,具備初步的獨立分析和設計能力; 2.初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設計、程序編碼、測試等基本方法和技能; 3.提高綜合運用所學的理論知識和方法獨立分析和解決問題的能力; 4.訓練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應具備的科學的工作方法和作風。 2. 開發(fā)環(huán)境:VC6.0
9、或者DEV C++. 三. 實驗分工 范文虎:總體程序框架構思,算法分析,主程序編寫,子函數(shù)調用,圖書信息記錄存儲子函數(shù)編寫,結合,主控制面板編寫,哈希函數(shù),結構體定義。 算法實現(xiàn),添加圖書信息子函數(shù)編寫,借閱圖書字函數(shù)編寫,查詢子函數(shù)設計編寫,還書子函數(shù)設計編寫,最終程序調試,寫報告。 算法實現(xiàn),刪除圖書子函數(shù)設計編寫,查找圖書信息子函數(shù)編寫,測試整體程序,程序缺陷糾正,最終修改后程序綜合。 算法實現(xiàn),查詢圖書信息子函數(shù)設計編寫,程序缺陷修改和測試。 四. 算法思想分析 用線性表進行存儲,充分利用它易添加、易刪除、查找方便的特點,進行程序的編寫,符合題目的需求。 而線性表
10、是最基本、最簡單、也是最常用的一種數(shù)據(jù)結構。 五. 算法描述實現(xiàn) 1. 數(shù)據(jù)結構類型定義 typedefstruct { int year; int month; int day; }data; typedefstruct { char num[5]; //讀者編號記錄 data bro; data back; }ReaderNode; typedefstruct { char title[15]; char writer[15]; int curre
11、nt; int total; int key; //書的編號 ReaderNode reader[10]; //記錄借讀該書的讀者記錄 }BookNode; typedefstruct { BookNode *elem; int count; //記錄節(jié)點中的總數(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};//存儲容量 int m=0;//表長 typedef struct { int year; int month; int day; }data; typedef struct { char num[5]; //讀者編號記錄 data bro; data back; }ReaderNode; typedef struct
14、{ char title[15]; char writer[15]; int current; int total; int key; int more;//書的編號 ReaderNode reader[10]; //記錄借讀該書的讀者記錄 }BookNode; typedef struct { BookNode *elem; int count; //記錄節(jié)點中的總數(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ù),自己設定 { 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 請輸入書的編號(形如: 1***): "); scanf("%d",&e.key); getchar(); printf("\n\t 請輸入書名: "); gets(e.title); printf("\n\t 請輸入該書作者: "); gets(e.writer); pr
21、intf("\n\t 請輸入該書現(xiàn)庫存量: "); scanf("%d",&e.current); printf("\n\t 請輸入該書總庫存量: "); scanf("%d%*c",&e.total); for(i=0;i<10;i++) (e.reader[i]).num[0]='\0'; //用'\0'來初始化借該書的讀者證號,表示一開始時沒人借書 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("圖書編號:%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你能在此目錄下按借書證號查找圖書信息"); printf("\n**************************************************\n"); printf("\n\t 請輸入你的借書證號: "); scanf("%d%*c&qu
26、ot;,&e); if(SearchHash(*H,e,&r,&t)) { printf("借書證編號: %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你能在此目錄下按編號查找圖書信息"); printf("\n**************************************************\n"); printf("\n\t 請輸入你想查找的書的編號: "); scanf("%d%*c",&x); if(SearchHash(*H,x,&p,&c)) { printf(&qu
29、ot;圖書編號:%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("對不起,不存在該書!\n"); } void BorrowBook(HashTable *H) { int i,k, x, f,t; system("CLS"); printf("\n\n**************************************************\n"); printf("\t你能在此目錄下按編號借閱圖書"); printf("\n**
31、************************************************\n"); printf("\n\t 請輸入你想借的書編號: "); 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對不起,這本書已經(jīng)被借光了..."); else { for(i=0;i<10;i++) if( ((*H).elem[k].reader[i]).num[0]=='\0') break; printf("\n\t 請輸入你的借書證號: ");
34、 scanf("%s",((*H).elem[k].reader[i]).num); printf("\n\t 請輸入借書日期: "); //輸入借書日期 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 輸入應還書日期: ");
36、//輸入應還書日期 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你能在此目錄下按編號歸還圖書"); print
39、f("\n**************************************************\n"); printf("\n\t 請輸入你還的書: "); 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 請輸入你的借書證號: "); 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;} //該借書證號的人沒借書 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 你應該在 %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 你應該被罰款 %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,"圖書編號:%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成功儲存!你能在C:/record.txt找到相應紀錄\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你能在此目錄下按編號修改圖書信息"); printf("\n**************************************************\n"); printf("\n\t 輸入你想增加的圖書量:"); scanf("%d",&e.more); printf("\n\t 請輸入你要修改的書的編號: "); 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你能在此目錄下按編號刪除圖書信息"); printf("\n**************************************************\n"); printf("\n\t 請輸入你想刪除的書的編號: "); scanf("%d%*c",&am
56、p;x); if(SearchHash(H,x,&p,&c)) { printf("\n\t 你想刪除這本書嗎 ?(y/n)\n"); printf("圖書編號: %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("對不起,不存在該書!\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)無記錄,請先添加信息)\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ù)結構 *********************************\n")
64、; printf("********************************* 范文虎小組 *********************************\n"); printf("********************************* 計算機科學與技術1班*********************************\n"); printf("\n\n\t\t\t\t歡迎您?。?!\n"); printf("請按ENTER進入
65、主菜單\n"); getchar(); InitHashTable(&H); while(1) { menu(); printf("選擇你需要操作的功能號碼:"); 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("請按ENTER返回主菜單\n"); getchar(); system("CLS"); } } 六. 運行結果 七. 結論 通過此次課設小組的密切配合,小組成員每個人在編程上都有了長足的進步。 專心---專注---專業(yè)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結+在機關“弘揚憲法精神推動發(fā)改工作高質量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結
- 2024-2025年秋季第一學期初中歷史上冊教研組工作總結
- 2024年小學高級教師年終工作總結匯報
- 2024-2025年秋季第一學期初中物理上冊教研組工作總結
- 2024年xx鎮(zhèn)交通年度總結
- 2024-2025年秋季第一學期小學語文教師工作總結
- 2024年XX村陳規(guī)陋習整治報告
- 2025年學校元旦迎新盛典活動策劃方案
- 2024年學校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告