《大数据结构课程设计图书管理系统报告材料书.doc》由会员分享,可在线阅读,更多相关《大数据结构课程设计图书管理系统报告材料书.doc(27页珍藏版)》请在三一办公上搜索。
1、课题描述:本次数据结构课程设计内容是:设计一个计算机管理系统完成图书管理根本业务。随着社会的开展,技术的进步,各种管理业务越来越趋于自动化。而图书馆在日常运营中,面对大量书籍,读者信息以与两者间相互联系产生的借书还书信息,而人工记录的方法不仅效率低而且极容易出现错误,大大影响了图书馆的日常管理工作。图书管理系统就是为了解决人工管理图书的问题,实现图书馆图书自动化的管理。本系统需要实现图书根本信息管理的功能,具体涉与到新进图书根本信息的录入,图书根本信息的查询,借书人的根本信息的注册以与借书,还书等几项根本功能。一、 需求分析:图书管理系统将实现以下几个根本功能,根本要求为:1. 新进图书根本信
2、息的录入:当图书馆新引进一批新书时,图书管理员需要将这些图书的根本信息录入管理系统中,具体包括图书书号,书名,著作者,现存量和库存量。2. 图书根本信息的查询:读者可以根据自己的情况在本系统中查询图书的根本信息,从而便于自己借阅图书。3. 借阅图书:在借阅图书之前没有在本图书馆进展注册的读者,是不能够借阅图书的,因而在读者在借阅图书之前需要登记借阅者的书证号,以与归还日期,然后系统再进展改变现存量等相关操作。4. 归还图书:根据读者归还图书的日期,本系统会注销对借阅者的登记,然后进展改变该书的现存量操作。5. 退出:当读者在图书馆中完毕其业务时,如此会在系统的提示下退出操作。二、 总体结构设计
3、:1. 系统设计功能模块图2. 系统模块说明:图书入库模块:图书名称,作者,入库数量;查询库存模块:显示当前库存书的编号,书名与作者;借阅图书模块:输入所借阅图书的编号,如果存在如此会提示读者输入借书证号,提示借阅成功,如果图书不存在或者已借出,如此提示借阅失败;查询借阅模块:显示所借书人的借书证号,借阅书的书名,编号以与归还日期; 归还图书模块:输入借书证号和图书编号,进展还书操作。三、 各子模块设计:1. 定义main函数,并使图书馆存书初始化为空,建立主菜单栏,显示业务信息 定义图书结构#include#ifndef _DATA_STRUCT_H_#define _DATA_STRUCT
4、_H_ struct Book unsigned long BookID; /*图书编号*/ char BookName512; /*书名*/ char Writer512; /*作者*/ int CurrentNumber; /*现存量*/ Book *pNext; /*下一个图书信息*/;图3.1 main()函数流程图2定义GetInput函数,使得读者所输入数据的X围符合程序所定义的。开始Multiplex完毕图3.2 GetInput()函数流程图3定义ShowMainMenu()函数,进入图书管理系统,并显示主菜单界面图3.3 ShowMainMenu()函数流程图4定义putBo
5、okInLib函数,其功能为图书入库,输入图书信息,包括图书名称,图书作者与入库数量。图3.4 PutBookInLib()函数流程图5.定义QueryLib()函数,其功能为查询图书馆库存信息,查询图书编号,书名,作者以与当前库存数量。开始完毕图3.5 QueryBookLib()函数流程图6.定义BorrowBook()函数,实现读者借阅图书的功能,输入所借阅图书的编号,如果存在如此会提示读者输入借书证号,提示借阅成功,如果图书不存在或者已借出,如此提示借阅失败。开始MultiplexMultiplexMultiplexMultiplex完毕图3.6 BorrowBook()函数流程图7.
6、定义QueryBorrow()函数,实现读者查询自己的借阅情况功能,读者可清晰的看到自己所借阅的图书信息以与归还日期等。开始完毕图3.7 QueryBorrow()函数流程图8.定义ReturnBook函数,实现读者归还图书的功能。开始MultiplexMultiplexMultiplexMultiplex完毕图3.8 ReturnBook()函数流程图四、 编程实现:#include#ifndef _DATA_STRUCT_H_#define _DATA_STRUCT_H_/*图书结构*/struct Book unsigned long BookID;/*图书编号*/ char BookN
7、ame512;/*书名*/ char Writer512;/*作者*/ int CurrentNumber;/*现存量*/ Book *pNext;/*下一个图书信息*/;/*图书索引结构*/struct Index unsigned long BookID;/*图书编号*/ Index *pNext;/*下一个索引指针*/;/*借阅信息结构*/struct Borrow unsigned long BookID;/*借阅图书编号*/ char BookName512;/*书名*/ unsigned long StuID;/*图书证号*/ char ReturnTime512;/*归还日期*/
8、 Borrow *pNext;/*下一个借阅信息*/;#endif/*_DATA_STRUCT_H_*/ BookManage.cpp : 定义控制台应用程序的入口点。/#include #include #include #include void GetInput(char *pInOutStr,int StrLen,bool OnlyGetNumber = false);/*显示主菜单 并返回选择*/int ShowMainMenu();/*图书入库操作,传入参数为图书列表头指针的指针和索引信息的头指针的指针,因为在此函数内部可能会改变头指针的值*/void PutBookInLib(B
9、ook *pHead,Index *pIndex);/*查询图书馆库存,查询不改变数据,故传入指针即可*/void QueryBookLib(Book *pHead);/*借阅图书*/void BorrowBook(Borrow *pBorrow,Book *pHead);/*查询借阅*/void QueryBorrow(Borrow *pBorrow);/*归还图书*/void ReturnBook(Borrow *pBorrow,Book *pHead);/*释放图书链表与索引链表与借阅信息链表*/void DeleteBookList(Book *pHead);void DeleteIn
10、dexList(Index *pIndex);void DeleteBorrowList(Borrow *pBorrow);int main() /*图书列表头指针*/ Book *pBookHead = NULL; /*图书索引头指针*/ Index *pIndexHead = NULL; /*借阅信息头指针*/ Borrow *pBorrowHead = NULL; /*用来保存当前用户的输入*/ int ChoosedNum = -1; while ( true ) ChoosedNum = ShowMainMenu(); switch(ChoosedNum) case 0 :/*退出*
11、/ return 0; break; case 1:/*图书入库*/ PutBookInLib(&pBookHead,&pIndexHead); break; case 2:/*查询库存*/ QueryBookLib(pBookHead); printf(按回车键继续.); fflush(stdin); getchar(); system(cls); break; case 3:/*借阅图书*/ QueryBookLib(pBookHead); BorrowBook(&pBorrowHead,pBookHead); break; case 4:/*查询借阅*/ QueryBorrow(pBor
12、rowHead); printf(按回车键继续.); fflush(stdin); getchar(); system(cls); break; case 5:/*归还图书*/ QueryBorrow(pBorrowHead); ReturnBook(&pBorrowHead,pBookHead); break; DeleteBookList(&pBookHead); DeleteIndexList(&pIndexHead); DeleteBorrowList(&pBorrowHead); fflush(stdin); getchar(); return 0;/*获取输入字符串*/void G
13、etInput(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 & TmpC = 0 & TmpC = 9 ) pInOutStrCount = TmpC; Count+; else pInOutStrCount = TmpC; Count
14、+; /*显示主菜单 并返回选择*/int ShowMainMenu() char InPutStr1024;NO_INPUT: printf(nnn); printf(*n); printf(* 图书管理系统 *n); printf(*n); printf(n); printf(请选择:n); printf(t1.图书入库n); printf(t2.查询库存n); printf(t3.借阅图书n); printf(t4.查询借阅n); printf(t5.归还图书n); printf(t0.退出n); printf(n); printf(t输入 : ); GetInput(InPutStr,
15、1024,true); if ( strlen(InPutStr) pNext != NULL ) pWork = pWork-pNext; BookID = pWork-BookID + 1; Book *pTmpNewBook = (Book *)(malloc(sizeof(Book); memset(pTmpNewBook,0x0,sizeof(Book); Index *pTmpIndex = (Index *)(malloc(sizeof(Index); memset(pTmpIndex,0x0,sizeof(Index); pTmpNewBook-BookID = BookID;
16、 pTmpIndex-BookID = BookID; system(cls); printf(输入图书名称 : ); GetInput(InPutStr,1024); strcpy(pTmpNewBook-BookName,InPutStr); system(cls); printf(n,pTmpNewBook-BookName); printf(图书作者 : ); GetInput(InPutStr,1024); strcpy(pTmpNewBook-Writer,InPutStr); system(cls); printf(n,pTmpNewBook-BookName); printf(
17、%sn,pTmpNewBook-Writer); printf(入库数量 : ); GetInput(InPutStr,1024,true); pTmpNewBook-CurrentNumber = atoi(InPutStr); if ( pTmpNewBook-CurrentNumber BookName,pTmpNewBook-BookName) = 0 & strcmp(pWork-Writer,pTmpNewBook-Writer) = 0 ) pWork-CurrentNumber += pTmpNewBook-CurrentNumber; return; pWork = pWor
18、k-pNext; pWork = *pHead; while ( pWork-pNext != NULL ) pWork = pWork-pNext; pWork-pNext = pTmpNewBook; Index *pWork2 = *pIndex; while ( pWork2-pNext != NULL ) pWork2 = pWork2-pNext; pWork2-pNext = pTmpIndex; system(cls); printf(图书:n%sn入库数:%dnn入库操作成功!(按回车键继续.),pTmpNewBook-BookName,pTmpNewBook-Writer,
19、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 *pWork = *pIndex; Index *pNe
20、xt = 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; /*查询图书馆库存,查询不改变数据,故传入指针即可*/void QueryBookLib(Book *pHe
21、ad) Book *pWork = pHead; int TotalCount = 0; while ( NULL != pWork ) TotalCount+; pWork = pWork-pNext; system(cls); printf(当前库存共%d种图书,列表如下:n=n,TotalCount); pWork = pHead; while ( NULL != pWork ) printf(编号:%d 书名: %s 当前库存:%dn,pWork-BookID,pWork-BookName,pWork-Writer,pWork-CurrentNumber); pWork = pWork
22、-pNext; printf(=n,TotalCount);/*借阅图书*/void BorrowBook(Borrow *pBorrow,Book *pHead) char InPutStr1024; bool HadTheBook = false; Borrow *pTmpBorrow = (Borrow *)(malloc(sizeof(Borrow); memset(pTmpBorrow,0x0,sizeof(Borrow); printf(请输入你想借书的编号 : ); GetInput(InPutStr,1024,true); pTmpBorrow-BookID = atoi(In
23、PutStr); Book *pWorkBook = pHead; while ( pWorkBook != NULL ) if ( pWorkBook-BookID = pTmpBorrow-BookID ) HadTheBook = true; break; pWorkBook = pWorkBook-pNext; if ( HadTheBook ) if ( pWorkBook-CurrentNumber 1 ) system(cls); printf(图书当前无库存,无法借阅!n(按回车键继续.),pWorkBook-BookName); fflush(stdin); getchar(
24、); system(cls); free(pTmpBorrow); return; else system(cls); printf(图书编号%d不存在!n(按回车键继续.),pTmpBorrow-BookID); fflush(stdin); getchar(); system(cls); free(pTmpBorrow); return; strcpy(pTmpBorrow-BookName,pWorkBook-BookName); printf(请输入借书证号 : ); GetInput(InPutStr,1024,true); pTmpBorrow-StuID = atoi(InPut
25、Str); if ( 0 = pTmpBorrow-StuID ) system(cls); printf(借书证号不存在(借书证号输入整数)!n(按回车键继续.); 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,%d年%d月%d日, today-tm_
26、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); printf(借书证号:%dn借阅图书:nn操作成功!(按回车键继续.),pTmpBorrow-StuID,pTmpBorrow
27、-BookName); fflush(stdin); getchar(); system(cls);/*查询借阅*/void QueryBorrow(Borrow *pBorrow) Borrow *pWork = pBorrow; int TotalCount = 0; while ( NULL != pWork ) TotalCount+; pWork = pWork-pNext; system(cls); printf(当前借阅信息共%d条,列表如下:n=n,TotalCount); pWork = pBorrow; while ( NULL != pWork ) printf(借书证号
28、:%d 借书名: 图书编号:%d 归还日期:%sn,pWork-StuID,pWork-BookName,pWork-BookID,pWork-ReturnTime); pWork = pWork-pNext; printf(=n,TotalCount);/*归还图书*/void ReturnBook(Borrow *pBorrow,Book *pHead) char InPutStr1024; Borrow TmpBorrow; bool HasFindBorrwo = false; memset(&TmpBorrow,0x0,sizeof(TmpBorrow); printf(请输入借书证
29、号 : ); GetInput(InPutStr,1024,true); TmpBorrow.StuID = atoi(InPutStr); printf(请输入所还图书编号 : ); GetInput(InPutStr,1024,true); TmpBorrow.BookID = atoi(InPutStr); Borrow *pWorkBorrow = *pBorrow; Borrow *pDeletePre = NULL; while ( NULL != pWorkBorrow ) if ( pWorkBorrow-BookID = TmpBorrow.BookID & pWorkBor
30、row-StuID = TmpBorrow.StuID ) HasFindBorrwo = true; break; pDeletePre = pWorkBorrow; pWorkBorrow = pWorkBorrow-pNext; if ( ! HasFindBorrwo ) system(cls); printf(你输入的借书信息不存在!n(按回车键继续.); fflush(stdin); getchar(); system(cls); return; if ( NULL = pDeletePre ) *pBorrow = pWorkBorrow-pNext; else pDeleteP
31、re-pNext = pWorkBorrow-pNext; Book *pWorkBook = pHead; while ( NULL != pWorkBook ) if ( pWorkBook-BookID = pWorkBorrow-BookID ) pWorkBook-CurrentNumber +; pWorkBook = pWorkBook-pNext; system(cls); printf(借书证号:%dn归还图书:nn操作成功!(按回车键继续.),pWorkBorrow-StuID,pWorkBorrow-BookName); fflush(stdin); getchar();
32、 system(cls); free(pWorkBorrow);五、 测试结果:1. 图书管理系统菜单界面2. 图书入库操作界面3. 查询库存操作界面4. 借阅图书操作界面5. 查询借阅操作界面6. 借阅图书成功后,查询当前图书库存操作界面7. 归还图书操作界面8.归还图书操作成功后,查询当前图书库存操作界面六、 总结:本次课程设计的内容是图书管理系统:设计一个计算机管理系统完成图书管理根本业务。经过一个周,我完成了本次课程设计,过程可谓曲折。在此过程中,构思,编写程序代码的过程是最花费时间的,对于我而言,编写一个图书管理系统程序有些困难,每天对着电脑,查阅各种资料。在程序的调试中,经常会遇到
33、这样那样的错误,有的是因为对根本知识点不熟悉,造成的语法错误,有的是由于粗心,造成的错误,所以导致了程序的不能正常运行。每个实验通常都要花很长时间才能够理清一个程序的思路,而且要不断地调试程序,同时还要做到界面的美化。在此期间,整个课程设计的过程中让我严肃认真的对待本次课程设计,所以让我很回味这整个过程,最终,在我和担当的共同努力下,教师与同学的帮助下,我们最终完成了本次课程设计的任务。在这次课程设计中,使我懂得了理论与实际相结合是非常重要的。只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的思考和解决问题以与实际动手能力。同时也巩固和加深了我对数
34、据结构的进一步掌握,提高综合运用本课程所学知识的能力,培养了我运用参考书,查阅手册与文献资料的能力,培养独立思考,深入研究,分析问题,解决问题的能力。通过实际对编译系统的分析设计,编程调试,掌握应用软件的分析方法和设计方法。而且,在做课程设计的同时也是对课本知识的巩固和加强,平时看课本时,有些问题就不是很理解,做完课程设计,这些问题就迎刃而解了,还可以记住很多东西。根据在课程设计中遇到的问题,我将在以后的学习过程中注意以下几点:1.认真上好专业实验课,多在实践中锻炼自己;2.编写程序的时候要考虑周到严密;3.在做设计的时候要有信心,有耐心;4.认真学习课本的知识,并以此为根底学会灵活应用。认识来源于实践,实践是认识的最终目的,所以这个学期期末的数据结构课程设计对我来所作用非常大,让我更加了解数据结构的重要性,它将会在我的专业开展中发挥重要的作用。有了这次课程设计,我相信在以后的课程设计制作中,能够轻松并高质量的完成。七、 参考文献1. 实用数据结构根底第二版陈元春等 中国铁道2C程序设计第四版谭浩强著清华大学