版權(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ì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è)計、程序編碼、測試等基本方法和技能;n 提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力;訓(xùn)練用系統(tǒng)的
2、觀點和軟件開發(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 Book char BookID10;/*圖書編號*/ char BookName5
3、12;/*書名*/ 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 ReturnTime512;/*歸還日期*/ Borrow *pNext; /*下一個借閱信息*
4、/;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ù)量,并把該書插入到已有數(shù)中,方便下次對新書的判斷。查詢圖書館庫存函數(shù)QueryBookLib()查詢圖書
5、館庫存,查詢不改變數(shù)據(jù),故傳入指針即可。顯示圖書的編號、名稱、作者、現(xiàn)有量以及庫存量借閱圖書函數(shù)BorrowBook()此函數(shù)通過讀者的圖書證號對讀者鏈表從頭至尾進(jìn)行查找,若找到讀者,則顯示讀者圖書證號以及姓名,然后利用for循環(huán)和指針,對讀者所借圖書進(jìn)行查找并顯示。若找不到讀者,顯示讀者標(biāo)號不存在,按任意鍵回到查找菜單選擇函數(shù)界面。借閱圖書函數(shù)BorrowBook()此函數(shù)需要讀者輸入的圖書證號,根據(jù)讀者輸入的要借的圖書編號,再利用while循環(huán)遍歷是否存在該書,若該書不存在,則顯示此書不存在,若該書存在,再利用if判斷是否還有現(xiàn)存,若無現(xiàn)存,在提示此書已借完,若還有現(xiàn)存,提示借書成功,根據(jù)
6、庫函數(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 #include #include #include #ifndef _DATA_STRUCT_H_#define _DATA_STRUCT_H_#endif/*_DATA_STRUCT_H_*/*圖書結(jié)構(gòu)*/struct Book char BookID10;/*圖書編號*/ char BookName512;/*書名*/ char Writer512;/*作者*/ int CurrentNumber;/*現(xiàn)存量*/ Book *pNext;/*下一個圖書信息*/;/*圖書索引結(jié)構(gòu)*/struct Index char BookI
8、D10;/*圖書編號*/ Index *pNext;/*下一個索引指針*/;/*借閱信息結(jié)構(gòu)*/struct Borrow char BookID10; /*借閱圖書編號*/ char BookName512; /*書名*/ unsigned long StuID; /*圖書證號*/ char ReturnTime512;/*歸還日期*/ Borrow *pNext; /*下一個借閱信息*/;/*獲取輸入字符串*/void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);/*顯示主菜單 并返回選擇*/int Sho
9、wMainMenu();/*圖書入庫操作,傳入?yún)?shù)為圖書列表頭指針的指針和索引信息的頭指針的指針,因為在此函數(shù)內(nèi)部可能會改變頭指針的值*/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(請選擇: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(請輸入你想借書的編號 : ); 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(圖書編號%s不存在!n(按回車鍵繼續(xù).),pTmpBorrow-BookID); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; strcpy(pTmpBorrow-Book
24、Name,pWorkBook-BookName); printf(請輸入借書證號 : ); GetInput(InPutStr,1024,true); pTmpBorrow-StuID = atoi(InPutStr); if ( 0 = pTmpBorrow-StuID ) system(cls); printf(借書證號不存在(借書證號輸入整數(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(借書證號:%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ù)證號:%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(請輸入借書證號 : ); GetInput(InPutStr,1024,true); TmpBorrow.StuID = atoi(InPutStr); printf(請輸入所還圖書編號 : ); 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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026春招:揚子江藥業(yè)題庫及答案
- 2026年橋梁工程市場與智能城市建設(shè)的關(guān)系
- 2026春招:信達(dá)資產(chǎn)試題及答案
- 賀新郎劉克莊課件
- 2026春招:濰柴動力題庫及答案
- 醫(yī)療保險支付方式改革
- 2026年海南體育職業(yè)技術(shù)學(xué)院單招職業(yè)技能筆試備考題庫帶答案解析
- 兒科護(hù)理工作要點及實踐案例
- 醫(yī)療人工智能在醫(yī)療影像診斷中的應(yīng)用
- 醫(yī)療檢驗質(zhì)量管理規(guī)范與禮儀
- 2024福建省福州市高三下學(xué)期4月末質(zhì)量檢測歷史試題及答案
- 西安研學(xué)旅行活動方案
- 變頻器硬件設(shè)計方案
- 高考語文課件:語言文字運用
- 個人簡歷標(biāo)準(zhǔn)版樣本
- 資料3b SIG康美包無菌灌裝流程及特征分段介紹
- 鉗工技能訓(xùn)練(第4版)PPT完整全套教學(xué)課件
- 國家開放大學(xué)一網(wǎng)一平臺電大《建筑測量》實驗報告1-5題庫
- 2023-2024學(xué)年四川省自貢市小學(xué)語文五年級期末高分測試題詳細(xì)參考答案解析
- 電力工程課程設(shè)計-某機床廠變電所設(shè)計
- Unit 2 Reading and Thinking教學(xué)課件(英語選擇性必修第一冊人教版)
評論
0/150
提交評論