




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計(jì) 說 明 書學(xué)生姓名:學(xué) 院:軟件學(xué)院專 業(yè):信息管理與信息系統(tǒng)題 目:圖書管理系統(tǒng)成績(jī)指導(dǎo)教師2011年1月6日1設(shè)計(jì)目的(小標(biāo)題黑體五號(hào)字)數(shù)據(jù)結(jié)構(gòu)課程主要介紹最常用的數(shù)據(jù)結(jié)構(gòu),闡明各種數(shù)據(jù)結(jié)構(gòu)內(nèi)在的邏輯關(guān)系,討論其在計(jì)算機(jī)中的存儲(chǔ)表示,以及在其上進(jìn)行各種運(yùn)算時(shí)的實(shí)現(xiàn)算法,并對(duì)算法的效率進(jìn)行簡(jiǎn)單的分析和討論。進(jìn)行數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)要達(dá)到以下目的:n 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計(jì)方法,具備初步的獨(dú)立分析和設(shè)計(jì)能力;n 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計(jì)、程序編碼、測(cè)試等基本方法和技能;n 提高綜合運(yùn)用所學(xué)的理論知識(shí)和方法獨(dú)立分析和解決問題的能力;訓(xùn)練用系統(tǒng)的
2、觀點(diǎn)和軟件開發(fā)一般規(guī)范進(jìn)行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。2設(shè)計(jì)內(nèi)容和要求1)每種書的登記內(nèi)容包括書號(hào)、書名、著作者、現(xiàn)存量和庫存量;2)對(duì)書號(hào)建立索引表(線性表)以提高查找效率;3)系統(tǒng)主要功能如下:*采編入庫:新購(gòu)一種書,確定書號(hào)后,登記到圖書帳目表中,如果表中已有,則只將庫存量增加; *借閱:如果一種書的現(xiàn)存量大于0,則借出一本,登記借閱者的書證號(hào)和歸還期限,改變現(xiàn)存量; *歸還:注銷對(duì)借閱者的登記,改變?cè)摃默F(xiàn)存量。3本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)定義圖書鏈表和圖書索引結(jié)構(gòu)struct Book char BookID10;/*圖書編號(hào)*/ char BookName5
3、12;/*書名*/ char Writer512;/*作者*/ int CurrentNumber;/*現(xiàn)存量*/ Book *pNext;/*下一個(gè)圖書信息*/;struct Index char BookID10;/*圖書編號(hào)*/ Index *pNext;/*下一個(gè)索引指針*/;/*借閱信息結(jié)構(gòu)*/struct Borrow char BookID10;/*借閱圖書編號(hào)*/ char BookName512; /*書名*/ unsigned long StuID; /*圖書證號(hào)*/ char ReturnTime512;/*歸還日期*/ Borrow *pNext; /*下一個(gè)借閱信息*
4、/;4功能模塊詳細(xì)設(shè)計(jì)4.1 詳細(xì)設(shè)計(jì)思想主函數(shù)main()主函數(shù)通過一個(gè)switch語句實(shí)現(xiàn)對(duì)系統(tǒng)功能的選擇。主菜單選擇函數(shù)ShowMainMenu()此函數(shù)包括退出系統(tǒng),圖書入庫,查詢庫存,查詢借閱和歸還圖書五個(gè)函數(shù),通過調(diào)用主菜單函數(shù)判斷用戶做出的選擇,從而進(jìn)行相應(yīng)的操作。圖書入庫函數(shù)PutBookInLib()此函數(shù)通過的創(chuàng)建一個(gè)圖書鏈表,達(dá)到對(duì)新進(jìn)書判斷,若在現(xiàn)有的圖書中找到該書,則直接進(jìn)行入庫,并記錄下圖書的數(shù)量,若找完整個(gè)圖書量表也沒找到該書,則要記錄下新進(jìn)圖書的名稱,作者,數(shù)量,并把該書插入到已有數(shù)中,方便下次對(duì)新書的判斷。查詢圖書館庫存函數(shù)QueryBookLib()查詢圖書
5、館庫存,查詢不改變數(shù)據(jù),故傳入指針即可。顯示圖書的編號(hào)、名稱、作者、現(xiàn)有量以及庫存量借閱圖書函數(shù)BorrowBook()此函數(shù)通過讀者的圖書證號(hào)對(duì)讀者鏈表從頭至尾進(jìn)行查找,若找到讀者,則顯示讀者圖書證號(hào)以及姓名,然后利用for循環(huán)和指針,對(duì)讀者所借圖書進(jìn)行查找并顯示。若找不到讀者,顯示讀者標(biāo)號(hào)不存在,按任意鍵回到查找菜單選擇函數(shù)界面。借閱圖書函數(shù)BorrowBook()此函數(shù)需要讀者輸入的圖書證號(hào),根據(jù)讀者輸入的要借的圖書編號(hào),再利用while循環(huán)遍歷是否存在該書,若該書不存在,則顯示此書不存在,若該書存在,再利用if判斷是否還有現(xiàn)存,若無現(xiàn)存,在提示此書已借完,若還有現(xiàn)存,提示借書成功,根據(jù)
6、庫函數(shù) time.h自動(dòng)登記歸還日期。查詢借閱函數(shù)QueryBorrow()此函數(shù)通過while循環(huán)實(shí)現(xiàn)對(duì)所有已借出圖書的遍歷,并輸出所有已借出圖書的信息。歸還圖書函數(shù)ReturnBook()此函數(shù)也是以用圖書鏈表和讀者鏈表對(duì)讀者還書進(jìn)行操作,根據(jù)讀者輸入的圖書證號(hào),利用while循環(huán)對(duì)讀者鏈表進(jìn)行遍歷,查找是否存在該讀者,若讀者不存在,則提示該讀者的圖書證號(hào)不存在,若讀者存在,根據(jù)讀者輸入的要還的圖書編號(hào),再利用while循環(huán)遍歷是否存在該書,若該書不存在,則顯示此書編號(hào)不存在,若該書存在,則利用for循環(huán)把讀者的圖書鏈表中要還書后面的書向前移一個(gè)單位,覆蓋掉鏈表中該書的信息,并把讀者的借書
7、量減一,把圖書的現(xiàn)存量加一。4.2 核心代碼#include #include #include #include #ifndef _DATA_STRUCT_H_#define _DATA_STRUCT_H_#endif/*_DATA_STRUCT_H_*/*圖書結(jié)構(gòu)*/struct Book char BookID10;/*圖書編號(hào)*/ char BookName512;/*書名*/ char Writer512;/*作者*/ int CurrentNumber;/*現(xiàn)存量*/ Book *pNext;/*下一個(gè)圖書信息*/;/*圖書索引結(jié)構(gòu)*/struct Index char BookI
8、D10;/*圖書編號(hào)*/ Index *pNext;/*下一個(gè)索引指針*/;/*借閱信息結(jié)構(gòu)*/struct Borrow char BookID10; /*借閱圖書編號(hào)*/ char BookName512; /*書名*/ unsigned long StuID; /*圖書證號(hào)*/ char ReturnTime512;/*歸還日期*/ Borrow *pNext; /*下一個(gè)借閱信息*/;/*獲取輸入字符串*/void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);/*顯示主菜單 并返回選擇*/int Sho
9、wMainMenu();/*圖書入庫操作,傳入?yún)?shù)為圖書列表頭指針的指針和索引信息的頭指針的指針,因?yàn)樵诖撕瘮?shù)內(nèi)部可能會(huì)改變頭指針的值*/void PutBookInLib(Book *pHead,Index *pIndex);/*查詢圖書館庫存,查詢不改變數(shù)據(jù),故傳入指針即可*/void QueryBookLib(Book *pHead);/*借閱圖書*/void BorrowBook(Borrow *pBorrow,Book *pHead);/*查詢借閱*/void QueryBorrow(Borrow *pBorrow);/*歸還圖書*/void ReturnBook(Borrow *p
10、Borrow,Book *pHead);/*釋放圖書鏈表及索引鏈表及借閱信息鏈表*/void DeleteBookList(Book *pHead);void DeleteIndexList(Index *pIndex);void DeleteBorrowList(Borrow *pBorrow);int main() /*圖書列表頭指針*/ Book *pBookHead = NULL; /*圖書索引頭指針*/ Index *pIndexHead = NULL; /*借閱信息頭指針*/ Borrow *pBorrowHead = NULL; /*用來保存當(dāng)前用戶的輸入*/ int Choos
11、edNum = -1; while ( true ) ChoosedNum = ShowMainMenu(); switch(ChoosedNum) case 0 :/*退出*/ return 0; break; case 1:/*圖書入庫*/ PutBookInLib(&pBookHead,&pIndexHead); break; case 2:/*查詢庫存*/ QueryBookLib(pBookHead); printf(按回車鍵繼續(xù).); fflush(stdin); getchar(); system(cls); break; case 3:/*借閱圖書*/ QueryBookLib
12、(pBookHead); BorrowBook(&pBorrowHead,pBookHead); break; case 4:/*查詢借閱*/ QueryBorrow(pBorrowHead); printf(按回車鍵繼續(xù).); fflush(stdin); getchar(); system(cls); break; case 5:/*歸還圖書*/ QueryBorrow(pBorrowHead); ReturnBook(&pBorrowHead,pBookHead); break; DeleteBookList(&pBookHead); DeleteIndexList(&pIndexHea
13、d); DeleteBorrowList(&pBorrowHead); fflush(stdin); getchar(); return 0;/*獲取輸入字符串*/void GetInput(char *pInOutStr,int StrLen,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
14、& TmpC = 0 & TmpC = 9 ) pInOutStrCount = TmpC; Count+; else pInOutStrCount = TmpC; Count+; /*顯示主菜單 并返回選擇*/int ShowMainMenu() char InPutStr1024; NO_INPUT: printf(nnn); printf(*n); printf(* 圖書管理系統(tǒng) *n); printf(*n); printf(n); printf(請(qǐng)選擇:n); printf(t1.圖書入庫n); printf(t2.查詢庫存n); printf(t3.借閱圖書n); printf(t
15、4.查詢借閱n); printf(t5.歸還圖書n); printf(t0.退出n); printf(n); printf(t輸入 : ); GetInput(InPutStr,1024,true); if ( strlen(InPutStr) BookID,InPutStr);system(cls); printf(輸入圖書名稱 : ); GetInput(InPutStr,1024); strcpy(pTmpNewBook-BookName,InPutStr); system(cls); printf(n,pTmpNewBook-BookName); printf(圖書作者 : ); Ge
16、tInput(InPutStr,1024); strcpy(pTmpNewBook-Writer,InPutStr); system(cls); printf(n,pTmpNewBook-BookName); printf(作者:%sn,pTmpNewBook-Writer); printf(入庫數(shù)量 : ); GetInput(InPutStr,1024,true); pTmpNewBook-CurrentNumber = atoi(InPutStr); if ( pTmpNewBook-CurrentNumber BookName,pTmpNewBook-BookName) = 0 & s
17、trcmp(pWork-Writer,pTmpNewBook-Writer) = 0 ) pWork-CurrentNumber += pTmpNewBook-CurrentNumber; return; pWork = pWork-pNext; pWork = *pHead; while ( pWork-pNext != NULL ) pWork = pWork-pNext; pWork-pNext = pTmpNewBook; Index *pWork2 = *pIndex; while ( pWork2-pNext != NULL ) pWork2 = pWork2-pNext; pWo
18、rk2-pNext = pTmpIndex; system(cls); printf(圖書:n作者:%sn入庫數(shù):%dnn入庫操作成功!(按回車鍵繼續(xù).),pTmpNewBook-BookName,pTmpNewBook-Writer,pTmpNewBook-CurrentNumber); fflush(stdin); getchar(); system(cls);/*釋放圖書鏈表及索引鏈表*/void DeleteBookList(Book *pHead) Book *pWork = *pHead; Book *pNext = pWork; while ( NULL != pWork ) p
19、Next = pWork-pNext; free(pWork); pWork = pNext; void DeleteIndexList(Index *pIndex) Index *pWork = *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 ( N
20、ULL != pWork ) pNext = pWork-pNext; free(pWork); pWork = pNext; /*查詢圖書館庫存,查詢不改變數(shù)據(jù),故傳入指針即可*/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 ( NUL
21、L != pWork ) printf( 書名: 作者:%s 當(dāng)前庫存:%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
22、ow,0x0,sizeof(Borrow); printf(請(qǐng)輸入你想借書的編號(hào) : ); 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 ( HadTheBook ) if ( pWorkBook-C
23、urrentNumber 1 ) system(cls); printf(圖書當(dāng)前無庫存,無法借閱!n(按回車鍵繼續(xù).),pWorkBook-BookName); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; else system(cls); printf(圖書編號(hào)%s不存在!n(按回車鍵繼續(xù).),pTmpBorrow-BookID); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; strcpy(pTmpBorrow-Book
24、Name,pWorkBook-BookName); printf(請(qǐng)輸入借書證號(hào) : ); GetInput(InPutStr,1024,true); pTmpBorrow-StuID = atoi(InPutStr); if ( 0 = pTmpBorrow-StuID ) system(cls); printf(借書證號(hào)不存在(借書證號(hào)輸入整數(shù))!n(按回車鍵繼續(xù).); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; time_t ltime; struct tm *today; time(<ime);
25、ltime += 60 * 60 * 24 * 30; today = localtime(<ime); sprintf(pTmpBorrow-ReturnTime,%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
26、; pWorkBook-CurrentNumber-; system(cls); printf(借書證號(hào):%dn借閱圖書: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 = pWork-pNext;
27、system(cls); printf(當(dāng)前借閱信息共%d條,列表如下:n=n,TotalCount); pWork = pBorrow; while ( NULL != pWork ) printf(借數(shù)證號(hào):%d 借書名: 歸還日期:%sn,pWork-StuID,pWork-BookName,pWork-ReturnTime); pWork = pWork-pNext; printf(=n,TotalCount);/*歸還圖書*/void ReturnBook(Borrow *pBorrow,Book *pHead) char InPutStr1024; Borrow TmpBorrow
28、; bool HasFindBorrwo = false; memset(&TmpBorrow,0x0,sizeof(TmpBorrow); printf(請(qǐng)輸入借書證號(hào) : ); GetInput(InPutStr,1024,true); TmpBorrow.StuID = atoi(InPutStr); printf(請(qǐng)輸入所還圖書編號(hào) : ); GetInput(InPutStr,1024); strcpy(TmpBorrow.BookID,InPutStr); Borrow *pWorkBorrow = *pBorrow; Borrow *pDeletePre = NULL; while ( NULL != pWorkBorrow ) if (strcmp(pWorkBorrow-Bo
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國(guó)電熱毯行業(yè)發(fā)展研究與產(chǎn)業(yè)戰(zhàn)略規(guī)劃分析評(píng)估報(bào)告
- 2025至2030中國(guó)電子肺活量計(jì)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025年《護(hù)理交接班制度》考試試題(附答案)
- 教育領(lǐng)域下的電力革新-以AI輔助教學(xué)設(shè)備為例
- 教育心理學(xué)與德育在思政課程中的融合
- 教育信息化助力智慧課堂變革發(fā)展
- 智能教育新篇章綠色辦公從這里開始
- 教育技術(shù)助力特殊教育的全球化發(fā)展
- 商業(yè)教育中的心理學(xué)如何設(shè)計(jì)高效課程
- 創(chuàng)新教育心理學(xué)視角下的教室布局設(shè)計(jì)
- 肺曲霉菌病治療講課件
- 頂端分生組織穩(wěn)態(tài)調(diào)控-洞察闡釋
- 2025年農(nóng)業(yè)經(jīng)濟(jì)學(xué)考試試題及答案
- 2025至2030年中國(guó)硫化橡膠制避孕套行業(yè)供需態(tài)勢(shì)分析及投資機(jī)會(huì)分析報(bào)告
- 2025年時(shí)事政治考試題及答案(300題)
- 2025-2030年“一帶一路”背景下甘肅省區(qū)域經(jīng)濟(jì)發(fā)展分析及投資前景報(bào)告
- 云硫礦業(yè)招聘試題及答案
- 楊浦區(qū)“十五五”規(guī)劃綱要及專項(xiàng)規(guī)劃編制工作方案
- 2025至2030中國(guó)海洋涂料行業(yè)市場(chǎng)發(fā)展分析及發(fā)展前景與投融資報(bào)告
- 集中供熱工程項(xiàng)目可行性研究報(bào)告
- 浙江學(xué)考語文試題及答案
評(píng)論
0/150
提交評(píng)論