版權(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(<ime); ltime += 60 * 60 * 24 * 30; today = localtime(<ime); 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育用電協(xié)議規(guī)定
- 增強(qiáng)現(xiàn)實設(shè)備維修保養(yǎng)管理辦法
- 臨時建筑安裝合同模板
- 《保險典故》課件
- 項目團(tuán)隊激勵策略
- 租賃合同范本:包裝機(jī)械
- 林業(yè)工程招投標(biāo)代理合同樣本
- 古建筑修復(fù)工程合同條款
- 2025深圳珠江廣場皇冠假日酒店活動家俱招標(biāo)合同
- 游艇碼頭建造師聘用協(xié)議
- 三年員工幸福計劃書
- 公路瀝青路面設(shè)計標(biāo)準(zhǔn)規(guī)范
- 機(jī)動車檢測站全套管理制度(全套)
- 2024年湖北交投智能檢測股份有限公司招聘筆試參考題庫含答案解析
- 2023年銀行安全保衛(wèi)知識考試題庫(含答案)
- 文言文二則書戴嵩畫牛
- 血栓風(fēng)險評估及個體化干預(yù)(遺傳性易栓癥風(fēng)險基因檢測)
- 手術(shù)室預(yù)防墜床課件
- 算法競賽入門經(jīng)典(訓(xùn)練指南)
- 生產(chǎn)工藝驗證方案(藥品)
- 水庫白蟻防治標(biāo)書
評論
0/150
提交評論