图书管理系统 c++ 数据结构实验报告_第1页
图书管理系统 c++ 数据结构实验报告_第2页
图书管理系统 c++ 数据结构实验报告_第3页
图书管理系统 c++ 数据结构实验报告_第4页
图书管理系统 c++ 数据结构实验报告_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数 据 结 构课 程 设 计 说 明 书   学生姓名:学 院:软件学院专 业:信息管理与信息系统题 目:图书管理系统成绩指导教师    2011年1月6日1设计目的(小标题黑体五号字)数据结构课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:n 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;n 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方

2、法和技能;n 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2设计内容和要求1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加; *借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量; *归还:注销对借阅者的登记,改变该书的现存量。3本设计所采用的数据结构定义图书链表和图书索引结构struct

3、Book char BookID10;/*图书编号*/ char BookName512;/*书名*/ char Writer512;/*作者*/ int CurrentNumber;/*现存量*/ Book *pNext;/*下一个图书信息*/;struct Index char BookID10;/*图书编号*/ Index *pNext;/*下一个索引指针*/;/*借阅信息结构*/struct Borrow char BookID10;/*借阅图书编号*/ char BookName512; /*书名*/ unsigned long StuID; /*图书证号*/ char Return

4、Time512;/*归还日期*/ Borrow *pNext; /*下一个借阅信息*/;4功能模块详细设计4.1 详细设计思想主函数main()主函数通过一个switch语句实现对系统功能的选择。主菜单选择函数ShowMainMenu()此函数包括退出系统,图书入库,查询库存,查询借阅和归还图书五个函数,通过调用主菜单函数判断用户做出的选择,从而进行相应的操作。图书入库函数PutBookInLib()此函数通过的创建一个图书链表,达到对新进书判断,若在现有的图书中找到该书,则直接进行入库,并记录下图书的数量,若找完整个图书量表也没找到该书,则要记录下新进图书的名称,作者,数量,并把该书插入到已

5、有数中,方便下次对新书的判断。查询图书馆库存函数QueryBookLib()查询图书馆库存,查询不改变数据,故传入指针即可。显示图书的编号、名称、作者、现有量以及库存量借阅图书函数BorrowBook()此函数通过读者的图书证号对读者链表从头至尾进行查找,若找到读者,则显示读者图书证号以及姓名,然后利用for循环和指针,对读者所借图书进行查找并显示。若找不到读者,显示读者标号不存在,按任意键回到查找菜单选择函数界面。借阅图书函数BorrowBook()此函数需要读者输入的图书证号,根据读者输入的要借的图书编号,再利用while循环遍历是否存在该书,若该书不存在,则显示此书不存在,若该书存在,再

6、利用if判断是否还有现存,若无现存,在提示此书已借完,若还有现存,提示借书成功,根据库函数 time.h自动登记归还日期。查询借阅函数QueryBorrow()此函数通过while循环实现对所有已借出图书的遍历,并输出所有已借出图书的信息。归还图书函数ReturnBook()此函数也是以用图书链表和读者链表对读者还书进行操作,根据读者输入的图书证号,利用while循环对读者链表进行遍历,查找是否存在该读者,若读者不存在,则提示该读者的图书证号不存在,若读者存在,根据读者输入的要还的图书编号,再利用while循环遍历是否存在该书,若该书不存在,则显示此书编号不存在,若该书存在,则利用for循环把

7、读者的图书链表中要还书后面的书向前移一个单位,覆盖掉链表中该书的信息,并把读者的借书量减一,把图书的现存量加一。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_*/*图书结构*/struct Book char BookID10;/*图书编号*/ char BookName512;/*书名*/ ch

8、ar Writer512;/*作者*/ int CurrentNumber;/*现存量*/ Book *pNext;/*下一个图书信息*/;/*图书索引结构*/struct Index char BookID10;/*图书编号*/ Index *pNext;/*下一个索引指针*/;/*借阅信息结构*/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();/*图书入库操作,传入参数为图书列表头指针的指针和索引信息的头指针的指针,因为在此函数内部可能会改变头指针的值*/void PutBookInLib(Book *pHead,Index *pIndex);/*查询图书馆库存,查询不改变数据,故传入指针即可*/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; /*用来保存当前用户的输入*/ 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("按回车键继续."); fflush(stdin); getchar(); system("cls"); break; case 3:/*借阅图书*/ QueryBookLib(pBookHead); BorrowBook(&pBorrowHead,pBookHead); break; case 4:/*查询借阅*/ QueryBorrow(pBorrowHead); printf("按回车键继续."); 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("* 图书管理系统 *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("入库数量 : "); GetInput(InPutStr,1024,true); pTmpNewBoo

20、k->CurrentNumber = atoi(InPutStr); if ( pTmpNewBook->CurrentNumber < 1 ) system("cls"); printf("入库数量错误!(按回车键继续.)"); 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入库数:%dnn入库操作成功!(按回车键继续.)",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; /*查询图书馆库存,查询不改变数据,故传入指

25、针即可*/void QueryBookLib(Book *pHead) 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(" 书名:<<%s>> 作者:%s 当前库

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>>当前无库存,无法借阅!n(按回车键继续.)",pWorkBook->BookName); fflush(stdin); getchar(); system("cls"); free(pTmpBorrow); return; else system("cls"); printf("图书编号%s不存在!n(按回车

29、键继续.)",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("借书证号不存在(借书证号输入整数)!n(按回车键继续.)"); 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操作成功!(按回车键继续.)",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条,列表如下:n=n",TotalCount); pWork = pBorrow; while ( NULL != pWork ) printf("借数证号:%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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论