圖書管理系統(tǒng) c++ 數(shù)據(jù)結(jié)構(gòu)實驗報告_第1頁
圖書管理系統(tǒng) c++ 數(shù)據(jù)結(jié)構(gòu)實驗報告_第2頁
圖書管理系統(tǒng) c++ 數(shù)據(jù)結(jié)構(gòu)實驗報告_第3頁
圖書管理系統(tǒng) c++ 數(shù)據(jù)結(jié)構(gòu)實驗報告_第4頁
圖書管理系統(tǒng) c++ 數(shù)據(jù)結(jié)構(gòu)實驗報告_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計 說 明 書   學(xué)生姓名:學(xué) 院:軟件學(xué)院專 業(yè):信息管理與信息系統(tǒng)題 目:圖書管理系統(tǒng)成績指導(dǎo)教師    2011年1月6日1設(shè)計目的(小標(biāo)題黑體五號字)數(shù)據(jù)結(jié)構(gòu)課程主要介紹最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計算機(jī)中的存儲表示,以及在其上進(jìn)行各種運算時的實現(xiàn)算法,并對算法的效率進(jìn)行簡單的分析和討論。進(jìn)行數(shù)據(jù)結(jié)構(gòu)課程設(shè)計要達(dá)到以下目的:n 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力;n 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方

2、法和技能;n 提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。2設(shè)計內(nèi)容和要求1)每種書的登記內(nèi)容包括書號、書名、著作者、現(xiàn)存量和庫存量;2)對書號建立索引表(線性表)以提高查找效率;3)系統(tǒng)主要功能如下:*采編入庫:新購一種書,確定書號后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加; *借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書證號和歸還期限,改變現(xiàn)存量; *歸還:注銷對借閱者的登記,改變該書的現(xiàn)存量。3本設(shè)計所采用的數(shù)據(jù)結(jié)構(gòu)定義圖書鏈表和圖書索引結(jié)構(gòu)struct

3、Book char BookID10;/*圖書編號*/ char BookName512;/*書名*/ char Writer512;/*作者*/ int CurrentNumber;/*現(xiàn)存量*/ Book *pNext;/*下一個圖書信息*/;struct Index char BookID10;/*圖書編號*/ Index *pNext;/*下一個索引指針*/;/*借閱信息結(jié)構(gòu)*/struct Borrow char BookID10;/*借閱圖書編號*/ char BookName512; /*書名*/ unsigned long StuID; /*圖書證號*/ char Return

4、Time512;/*歸還日期*/ Borrow *pNext; /*下一個借閱信息*/;4功能模塊詳細(xì)設(shè)計4.1 詳細(xì)設(shè)計思想主函數(shù)main()主函數(shù)通過一個switch語句實現(xiàn)對系統(tǒng)功能的選擇。主菜單選擇函數(shù)ShowMainMenu()此函數(shù)包括退出系統(tǒng),圖書入庫,查詢庫存,查詢借閱和歸還圖書五個函數(shù),通過調(diào)用主菜單函數(shù)判斷用戶做出的選擇,從而進(jìn)行相應(yīng)的操作。圖書入庫函數(shù)PutBookInLib()此函數(shù)通過的創(chuàng)建一個圖書鏈表,達(dá)到對新進(jìn)書判斷,若在現(xiàn)有的圖書中找到該書,則直接進(jìn)行入庫,并記錄下圖書的數(shù)量,若找完整個圖書量表也沒找到該書,則要記錄下新進(jìn)圖書的名稱,作者,數(shù)量,并把該書插入到已

5、有數(shù)中,方便下次對新書的判斷。查詢圖書館庫存函數(shù)QueryBookLib()查詢圖書館庫存,查詢不改變數(shù)據(jù),故傳入指針即可。顯示圖書的編號、名稱、作者、現(xiàn)有量以及庫存量借閱圖書函數(shù)BorrowBook()此函數(shù)通過讀者的圖書證號對讀者鏈表從頭至尾進(jìn)行查找,若找到讀者,則顯示讀者圖書證號以及姓名,然后利用for循環(huán)和指針,對讀者所借圖書進(jìn)行查找并顯示。若找不到讀者,顯示讀者標(biāo)號不存在,按任意鍵回到查找菜單選擇函數(shù)界面。借閱圖書函數(shù)BorrowBook()此函數(shù)需要讀者輸入的圖書證號,根據(jù)讀者輸入的要借的圖書編號,再利用while循環(huán)遍歷是否存在該書,若該書不存在,則顯示此書不存在,若該書存在,再

6、利用if判斷是否還有現(xiàn)存,若無現(xiàn)存,在提示此書已借完,若還有現(xiàn)存,提示借書成功,根據(jù)庫函數(shù) time.h自動登記歸還日期。查詢借閱函數(shù)QueryBorrow()此函數(shù)通過while循環(huán)實現(xiàn)對所有已借出圖書的遍歷,并輸出所有已借出圖書的信息。歸還圖書函數(shù)ReturnBook()此函數(shù)也是以用圖書鏈表和讀者鏈表對讀者還書進(jìn)行操作,根據(jù)讀者輸入的圖書證號,利用while循環(huán)對讀者鏈表進(jìn)行遍歷,查找是否存在該讀者,若讀者不存在,則提示該讀者的圖書證號不存在,若讀者存在,根據(jù)讀者輸入的要還的圖書編號,再利用while循環(huán)遍歷是否存在該書,若該書不存在,則顯示此書編號不存在,若該書存在,則利用for循環(huán)把

7、讀者的圖書鏈表中要還書后面的書向前移一個單位,覆蓋掉鏈表中該書的信息,并把讀者的借書量減一,把圖書的現(xiàn)存量加一。4.2 核心代碼#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#ifndef _DATA_STRUCT_H_#define _DATA_STRUCT_H_#endif/*_DATA_STRUCT_H_*/*圖書結(jié)構(gòu)*/struct Book char BookID10;/*圖書編號*/ char BookName512;/*書名*/ ch

8、ar Writer512;/*作者*/ int CurrentNumber;/*現(xiàn)存量*/ Book *pNext;/*下一個圖書信息*/;/*圖書索引結(jié)構(gòu)*/struct Index char BookID10;/*圖書編號*/ Index *pNext;/*下一個索引指針*/;/*借閱信息結(jié)構(gòu)*/struct Borrow char BookID10; /*借閱圖書編號*/ char BookName512; /*書名*/ unsigned long StuID; /*圖書證號*/ char ReturnTime512;/*歸還日期*/ Borrow *pNext; /*下一個借閱信息*/

9、;/*獲取輸入字符串*/void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);/*顯示主菜單 并返回選擇*/int ShowMainMenu();/*圖書入庫操作,傳入?yún)?shù)為圖書列表頭指針的指針和索引信息的頭指針的指針,因為在此函數(shù)內(nèi)部可能會改變頭指針的值*/void PutBookInLib(Book *pHead,Index *pIndex);/*查詢圖書館庫存,查詢不改變數(shù)據(jù),故傳入指針即可*/void QueryBookLib(Book *pHead);/*借閱圖書*/void BorrowBook(B

10、orrow *pBorrow,Book *pHead);/*查詢借閱*/void QueryBorrow(Borrow *pBorrow);/*歸還圖書*/void ReturnBook(Borrow *pBorrow,Book *pHead);/*釋放圖書鏈表及索引鏈表及借閱信息鏈表*/void DeleteBookList(Book *pHead);void DeleteIndexList(Index *pIndex);void DeleteBorrowList(Borrow *pBorrow);int main() /*圖書列表頭指針*/ Book *pBookHead = NULL;

11、/*圖書索引頭指針*/ Index *pIndexHead = NULL; /*借閱信息頭指針*/ Borrow *pBorrowHead = NULL; /*用來保存當(dāng)前用戶的輸入*/ int ChoosedNum = -1; while ( true ) ChoosedNum = ShowMainMenu(); switch(ChoosedNum) case 0 :/*退出*/ return 0; break; case 1:/*圖書入庫*/ PutBookInLib(&pBookHead,&pIndexHead); break; case 2:/*查詢庫存*/ Query

12、BookLib(pBookHead); printf("按回車鍵繼續(xù)."); fflush(stdin); getchar(); system("cls"); break; case 3:/*借閱圖書*/ QueryBookLib(pBookHead); BorrowBook(&pBorrowHead,pBookHead); break; case 4:/*查詢借閱*/ QueryBorrow(pBorrowHead); printf("按回車鍵繼續(xù)."); fflush(stdin); getchar(); system(&

13、quot;cls"); break; case 5:/*歸還圖書*/ QueryBorrow(pBorrowHead); ReturnBook(&pBorrowHead,pBookHead); break; DeleteBookList(&pBookHead); DeleteIndexList(&pIndexHead); DeleteBorrowList(&pBorrowHead); fflush(stdin); getchar(); return 0;/*獲取輸入字符串*/void GetInput(char *pInOutStr,int StrLe

14、n,bool OnlyGetNumber) memset(pInOutStr,0x0,StrLen); fflush(stdin); int Count = 0; while ( true ) char TmpC = 0; fread(&TmpC,1,1,stdin); if ( 10 = TmpC ) break; if ( OnlyGetNumber && TmpC >= '0' && TmpC <= '9' ) pInOutStrCount = TmpC; Count+; else pInOutStrCo

15、unt = TmpC; Count+; /*顯示主菜單 并返回選擇*/int ShowMainMenu() char InPutStr1024; NO_INPUT: printf("nnn"); printf("*n"); printf("* 圖書管理系統(tǒng) *n"); printf("*n"); printf("n"); printf("請選擇:n"); printf("t1.圖書入庫n"); printf("t2.查詢庫存n"); p

16、rintf("t3.借閱圖書n"); printf("t4.查詢借閱n"); printf("t5.歸還圖書n"); printf("t0.退出n"); printf("n"); printf("t輸入 : "); GetInput(InPutStr,1024,true); if ( strlen(InPutStr) < 1 ) system("cls"); goto NO_INPUT; return atoi(InPutStr);/*圖書入庫操作*

17、/void PutBookInLib(Book *pHead,Index *pIndex) Book *pWork = *pHead; char InPutStr1024; Book *pTmpNewBook = (Book *)(malloc(sizeof(Book); memset(pTmpNewBook,0x0,sizeof(Book); Index *pTmpIndex = (Index *)(malloc(sizeof(Index); memset(pTmpIndex,0x0,sizeof(Index); system("cls"); printf("輸

18、入圖書編號:");GetInput(InPutStr,1024); strcpy(pTmpNewBook->BookID,InPutStr);system("cls"); printf("輸入圖書名稱 : "); GetInput(InPutStr,1024); strcpy(pTmpNewBook->BookName,InPutStr); system("cls"); printf("<<%s>>n",pTmpNewBook->BookName); printf

19、("圖書作者 : "); GetInput(InPutStr,1024); strcpy(pTmpNewBook->Writer,InPutStr); system("cls"); printf("<<%s>>n",pTmpNewBook->BookName); printf("作者:%sn",pTmpNewBook->Writer); printf("入庫數(shù)量 : "); GetInput(InPutStr,1024,true); pTmpNewBoo

20、k->CurrentNumber = atoi(InPutStr); if ( pTmpNewBook->CurrentNumber < 1 ) system("cls"); printf("入庫數(shù)量錯誤!(按回車鍵繼續(xù).)"); fflush(stdin); getchar(); system("cls"); return; if ( NULL = *pHead ) *pHead = pTmpNewBook; *pIndex = pTmpIndex; else Book *pWork = *pHead; while

21、 ( pWork != NULL ) if ( strcmp(pWork->BookName,pTmpNewBook->BookName) = 0 && strcmp(pWork->Writer,pTmpNewBook->Writer) = 0 ) pWork->CurrentNumber += pTmpNewBook->CurrentNumber; return; pWork = pWork->pNext; pWork = *pHead; while ( pWork->pNext != NULL ) pWork = pWork-

22、>pNext; pWork->pNext = pTmpNewBook; Index *pWork2 = *pIndex; while ( pWork2->pNext != NULL ) pWork2 = pWork2->pNext; pWork2->pNext = pTmpIndex; system("cls"); printf("圖書:<<%s>>n作者:%sn入庫數(shù):%dnn入庫操作成功!(按回車鍵繼續(xù).)",pTmpNewBook->BookName,pTmpNewBook->Wri

23、ter,pTmpNewBook->CurrentNumber); fflush(stdin); getchar(); system("cls");/*釋放圖書鏈表及索引鏈表*/void DeleteBookList(Book *pHead) Book *pWork = *pHead; Book *pNext = pWork; while ( NULL != pWork ) pNext = pWork->pNext; free(pWork); pWork = pNext; void DeleteIndexList(Index *pIndex) Index *pWo

24、rk = *pIndex; Index *pNext = pWork; while ( NULL != pWork ) pNext = pWork->pNext; free(pWork); pWork = pNext; void DeleteBorrowList(Borrow *pBorrow) Borrow *pWork = *pBorrow; Borrow *pNext = pWork; while ( NULL != pWork ) pNext = pWork->pNext; free(pWork); pWork = pNext; /*查詢圖書館庫存,查詢不改變數(shù)據(jù),故傳入指

25、針即可*/void QueryBookLib(Book *pHead) Book *pWork = pHead; int TotalCount = 0; while ( NULL != pWork ) TotalCount+; pWork = pWork->pNext; system("cls"); printf("當(dāng)前庫存共%d種圖書,列表如下:n=n",TotalCount); pWork = pHead; while ( NULL != pWork ) printf(" 書名:<<%s>> 作者:%s 當(dāng)前庫

26、存:%dn",pWork->BookName,pWork->Writer,pWork->CurrentNumber); pWork = pWork->pNext; printf("=n",TotalCount);/*借閱圖書*/void BorrowBook(Borrow *pBorrow,Book *pHead) char InPutStr1024; bool HadTheBook = false; Borrow *pTmpBorrow = (Borrow *)(malloc(sizeof(Borrow); memset(pTmpBorr

27、ow,0x0,sizeof(Borrow); printf("請輸入你想借書的編號 : "); GetInput(InPutStr,1024); strcpy(pTmpBorrow->BookID,InPutStr); Book *pWorkBook = pHead; while ( pWorkBook != NULL ) if ( strcmp(pWorkBook->BookID,pTmpBorrow->BookID)=0) HadTheBook = true; break; pWorkBook = pWorkBook->pNext; if ( H

28、adTheBook ) if ( pWorkBook->CurrentNumber < 1 ) system("cls"); printf("圖書<<%s>>當(dāng)前無庫存,無法借閱!n(按回車鍵繼續(xù).)",pWorkBook->BookName); fflush(stdin); getchar(); system("cls"); free(pTmpBorrow); return; else system("cls"); printf("圖書編號%s不存在!n(按回車

29、鍵繼續(xù).)",pTmpBorrow->BookID); fflush(stdin); getchar(); system("cls"); free(pTmpBorrow); return; strcpy(pTmpBorrow->BookName,pWorkBook->BookName); printf("請輸入借書證號 : "); GetInput(InPutStr,1024,true); pTmpBorrow->StuID = atoi(InPutStr); if ( 0 = pTmpBorrow->StuID

30、) system("cls"); printf("借書證號不存在(借書證號輸入整數(shù))!n(按回車鍵繼續(xù).)"); fflush(stdin); getchar(); system("cls"); free(pTmpBorrow); return; time_t ltime; struct tm *today; time(&ltime); ltime += 60 * 60 * 24 * 30; today = localtime(&ltime); sprintf(pTmpBorrow->ReturnTime,&qu

31、ot;%d年%d月%d日", today->tm_year+1900, today->tm_mon+1, today->tm_mday); if ( *pBorrow = NULL ) *pBorrow = pTmpBorrow; else Borrow *pWork = *pBorrow; while ( NULL != pWork->pNext ) pWork = pWork->pNext; pWork->pNext = pTmpBorrow; pWorkBook->CurrentNumber-; system("cls&quo

32、t;); printf("借書證號:%dn借閱圖書:<<%s>>nn操作成功!(按回車鍵繼續(xù).)",pTmpBorrow->StuID,pTmpBorrow->BookName); fflush(stdin); getchar(); system("cls");/*查詢借閱*/void QueryBorrow(Borrow *pBorrow) Borrow *pWork = pBorrow; int TotalCount = 0; while ( NULL != pWork ) TotalCount+; pWork =

33、 pWork->pNext; system("cls"); printf("當(dāng)前借閱信息共%d條,列表如下:n=n",TotalCount); pWork = pBorrow; while ( NULL != pWork ) printf("借數(shù)證號:%d 借書名:<<%s>> 歸還日期:%sn",pWork->StuID,pWork->BookName,pWork->ReturnTime); pWork = pWork->pNext; printf("=n",

34、TotalCount);/*歸還圖書*/void ReturnBook(Borrow *pBorrow,Book *pHead) char InPutStr1024; Borrow TmpBorrow; bool HasFindBorrwo = false; memset(&TmpBorrow,0x0,sizeof(TmpBorrow); printf("請輸入借書證號 : "); GetInput(InPutStr,1024,true); TmpBorrow.StuID = atoi(InPutStr); printf("請輸入所還圖書編號 : "); GetInput(InPutStr,1024); strcpy(TmpBorrow.BookID,InPutStr); Borrow *pWorkBorrow = *pBorrow; Borrow *pDeletePre = NUL

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論