大数据结构课程设计图书管理系统报告材料书.docx
《大数据结构课程设计图书管理系统报告材料书.docx》由会员分享,可在线阅读,更多相关《大数据结构课程设计图书管理系统报告材料书.docx(30页珍藏版)》请在冰豆网上搜索。
大数据结构课程设计图书管理系统报告材料书
数据结构
课程设计报告书
班级
学号
专业
姓名
课题描述:
本次数据结构课程设计内容是:
设计一个计算机管理系统完成图书管理基本业务。
随着社会的发展,技术的进步,各种管理业务越来越趋于自动化。
而图书馆在日常运营中,面对大量书籍,读者信息以及两者间相互联系产生的借书还书信息,而人工记录的方法不仅效率低而且极容易出现错误,大大影响了图书馆的日常管理工作。
图书管理系统就是为了解决人工管理图书的问题,实现图书馆图书自动化的管理。
本系统需要实现图书基本信息管理的功能,具体涉及到新进图书基本信息的录入,图书基本信息的查询,借书人的基本信息的注册以及借书,还书等几项基本功能。
一、需求分析:
图书管理系统将实现以下几个基本功能,基本要求为:
1.新进图书基本信息的录入:
当图书馆新引进一批新书时,图书管理员需要将这些图书的基本信息录入管理系统中,具体包括图书书号,书名,著作者,现存量和库存量。
2.图书基本信息的查询:
读者可以根据自己的情况在本系统中查询图书的基本信息,从而便于自己借阅图书。
3.借阅图书:
在借阅图书之前没有在本图书馆进行注册的读者,是不能够借阅图书的,因而在读者在借阅图书之前需要登记借阅者的书证号,以及归还日期,然后系统再进行改变现存量等相关操作。
4.归还图书:
根据读者归还图书的日期,本系统会注销对借阅者的登记,然后进行改变该书的现存量操作。
5.退出:
当读者在图书馆中结束其业务时,则会在系统的提示下退出操作。
二、总体结构设计:
1.系统设计功能模块图
图2.1系统设计功能模块图
2.系统模块说明:
图书入库模块:
图书名称,作者,入库数量;
查询库存模块:
显示当前库存书的编号,书名及作者;
借阅图书模块:
输入所借阅图书的编号,如果存在则会提示读者输入借书证号,提示借阅成功,如果图书不存在或者已借出,则提示借阅失败;
查询借阅模块:
显示所借书人的借书证号,借阅书的书名,编号以及归还日期;
归还图书模块:
输入借书证号和图书编号,进行还书操作。
三、各子模块设计:
1.定义main()函数,并使图书馆存书初始化为空,建立主菜单栏,显示业务信息
定义图书结构
#include
#ifndef_DATA_STRUCT_H_
#define_DATA_STRUCT_H_
structBook
{
unsignedlongBookID;/*图书编号*/
charBookName[512];/*书名*/
charWriter[512];/*作者*/
intCurrentNumber;/*现存量*/
Book*pNext;/*下一个图书信息*/
};
图3.1main()函数流程图
2.定义GetInput()函数,使得读者所输入数据的范围符合程序所定义的。
图3.2GetInput()函数流程图
3.定义ShowMainMenu()函数,进入图书管理系统,并显示主菜单界面
图3.3ShowMainMenu()函数流程图
4.定义putBookInLib()函数,其功能为图书入库,输入图书信息,包括图书名称,图书作者及入库数量。
图3.4PutBookInLib()函数流程图
5.定义QueryLib()函数,其功能为查询图书馆库存信息,查询图书编号,书名,作者以及当前库存数量。
图3.5QueryBookLib()函数流程图
6.定义BorrowBook()函数,实现读者借阅图书的功能,输入所借阅图书的编号,如果存在则会提示读者输入借书证号,提示借阅成功,如果图书不存在或者已借出,则提示借阅失败。
图3.6BorrowBook()函数流程图
7.定义QueryBorrow()函数,实现读者查询自己的借阅情况功能,读者可清晰的看到自己所借阅的图书信息以及归还日期等。
图3.7QueryBorrow()函数流程图
8.定义ReturnBook()函数,实现读者归还图书的功能。
图3.8ReturnBook()函数流程图
四、编程实现:
#include
#ifndef_DATA_STRUCT_H_
#define_DATA_STRUCT_H_
/*图书结构*/
structBook
{
unsignedlongBookID;/*图书编号*/
charBookName[512];/*书名*/
charWriter[512];/*作者*/
intCurrentNumber;/*现存量*/
Book*pNext;/*下一个图书信息*/
};
/*图书索引结构*/
structIndex
{
unsignedlongBookID;/*图书编号*/
Index*pNext;/*下一个索引指针*/
};
/*借阅信息结构*/
structBorrow
{
unsignedlongBookID;/*借阅图书编号*/
charBookName[512];/*书名*/
unsignedlongStuID;/*图书证号*/
charReturnTime[512];/*归还日期*/
Borrow*pNext;/*下一个借阅信息*/
};
#endif/*_DATA_STRUCT_H_*/
//BookManage.cpp:
定义控制台应用程序的入口点。
//
#include
#include
#include
#include
voidGetInput(char*pInOutStr,intStrLen,boolOnlyGetNumber=false);
/*显示主菜单并返回选择*/
intShowMainMenu();
/*图书入库操作,传入参数为图书列表头指针的指针和索引信息的头指针的指针,因为在此函数内部可能会改变头指针的值*/
voidPutBookInLib(Book**pHead,Index**pIndex);
/*查询图书馆库存,查询不改变数据,故传入指针即可*/
voidQueryBookLib(Book*pHead);
/*借阅图书*/
voidBorrowBook(Borrow**pBorrow,Book*pHead);
/*查询借阅*/
voidQueryBorrow(Borrow*pBorrow);
/*归还图书*/
voidReturnBook(Borrow**pBorrow,Book*pHead);
/*释放图书链表及索引链表及借阅信息链表*/
voidDeleteBookList(Book**pHead);
voidDeleteIndexList(Index**pIndex);
voidDeleteBorrowList(Borrow**pBorrow);
intmain()
{
/*图书列表头指针*/
Book*pBookHead=NULL;
/*图书索引头指针*/
Index*pIndexHead=NULL;
/*借阅信息头指针*/
Borrow*pBorrowHead=NULL;
/*用来保存当前用户的输入*/
intChoosedNum=-1;
while(true)
{
ChoosedNum=ShowMainMenu();
switch(ChoosedNum)
{
case0:
/*退出*/
{
return0;
break;
}
case1:
/*图书入库*/
{
PutBookInLib(&pBookHead,&pIndexHead);
break;
}
case2:
/*查询库存*/
{
QueryBookLib(pBookHead);
printf("按回车键继续...");
fflush(stdin);
getchar();
system("cls");
break;
}
case3:
/*借阅图书*/
{
QueryBookLib(pBookHead);
BorrowBook(&pBorrowHead,pBookHead);
break;
}
case4:
/*查询借阅*/
{
QueryBorrow(pBorrowHead);
printf("按回车键继续...");
fflush(stdin);
getchar();
system("cls");
break;
}
case5:
/*归还图书*/
{
QueryBorrow(pBorrowHead);
ReturnBook(&pBorrowHead,pBookHead);
break;
}
}
}
DeleteBookList(&pBookHead);
DeleteIndexList(&pIndexHead);
DeleteBorrowList(&pBorrowHead);
fflush(stdin);
getchar();
return0;
}
/*获取输入字符串*/
voidGetInput(char*pInOutStr,intStrLen,boolOnlyGetNumber)
{
memset(pInOutStr,0x0,StrLen);
fflush(stdin);
intCount=0;
while(true)
{
charTmpC=0;
fread(&TmpC,1,1,stdin);
if(10==TmpC)
{
break;
}
if(OnlyGetNumber&&TmpC>='0'&&TmpC<='9')
{
pInOutStr[Count]=TmpC;
Count++;
}
else
{
pInOutStr[Count]=TmpC;
Count++;
}
}
}
/*显示主菜单并返回选择*/
intShowMainMenu()
{
charInPutStr[1024];
NO_INPUT:
printf("\n\n\n");
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,1024,true);
if(strlen(InPutStr)<1)
{
system("cls");
gotoNO_INPUT;
}
returnatoi(InPutStr);
}
/*图书入库操作*/
voidPutBookInLib(Book**pHead,Index**pIndex)
{
Book*pWork=*pHead;
unsignedlongBookID=1;
charInPutStr[1024];
/*先计算处当前入库图书的ID号*/
if(NULL==pWork)
{
BookID=1;
}
else
{
while(pWork->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;
pTmpIndex->BookID=BookID;
system("cls");
printf("输入图书名称:
");
GetInput(InPutStr,1024);
strcpy(pTmpNewBook->BookName,InPutStr);
system("cls");
printf("<<%s>>\n",pTmpNewBook->BookName);
printf("图书作者:
");
GetInput(InPutStr,1024);
strcpy(pTmpNewBook->Writer,InPutStr);
system("cls");
printf("<<%s>>\n",pTmpNewBook->BookName);
printf("作者:
%s\n",pTmpNewBook->Writer);
printf("入库数量:
");
GetInput(InPutStr,1024,true);
pTmpNewBook->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(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->pNext;
}
pWork->pNext=pTmpNewBook;
Index*pWork2=*pIndex;
while(pWork2->pNext!
=NULL)
{
pWork2=pWork2->pNext;
}
pWork2->pNext=pTmpIndex;
}
system("cls");
printf("图书:
<<%s>>\n作者:
%s\n入库数:
%d\n\n入库操作成功!
(按回车键继续...)",pTmpNewBook->BookName,pTmpNewBook->Writer,pTmpNewBook->CurrentNumber);
fflush(stdin);
getchar();
system("cls");
}
/*释放图书链表及索引链表*/
voidDeleteBookList(Book**pHead)
{
Book*pWork=*pHead;
Book*pNext=pWork;
while(NULL!
=pWork)
{
pNext=pWork->pNext;
free(pWork);
pWork=pNext;
}
}
voidDeleteIndexList(Index**pIndex)
{
Index*pWork=*pIndex;
Index*pNext=pWork;
while(NULL!
=pWork)
{
pNext=pWork->pNext;
free(pWork);
pWork=pNext;
}
}
voidDeleteBorrowList(Borrow**pBorrow)
{
Borrow*pWork=*pBorrow;
Borrow*pNext=pWork;
while(NULL!
=pWork)
{
pNext=pWork->pNext;
free(pWork);
pWork=pNext;
}
}
/*查询图书馆库存,查询不改变数据,故传入指针即可*/
voidQueryBookLib(Book*pHead)
{
Book*pWork=pHead;
intTotalCount=0;
while(NULL!
=pWork)
{
TotalCount++;
pWork=pWork->pNext;
}
system("cls");
printf("当前库存共%d种图书,列表如下:
\n=====================================================\n",TotalCount);
pWork=pHead;
while(NULL!
=pWork)
{
printf("编号:
[%d]书名:
<<%s>>作者:
%s当前库存:
%d\n",pWork->BookID,pWork->BookName,pWork->Writer,pWork->CurrentNumber);
pWork=pWork->pNext;
}
printf("=====================================================\n",TotalCount);
}
/*借阅图书*/
voidBorrowBook(Borrow**pBorrow,Book*pHead)
{
charInPutStr[1024];
boolHadTheBook=false;
Borrow*pTmpBorrow=(Borrow*)(malloc(sizeof(Borrow)));
memset(pTmpBorrow,0x0,sizeof(Borrow));
printf("请输入你想借书的编号:
");
GetInput(InPutStr,1024,true);
pTmpBorrow->BookID=atoi(InPutStr);
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("图书<<%s>>当前无库存,无法借阅!
\n(按回车键继续...)",pWorkBook->BookName);
fflush(stdin);
getchar();
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(InPutStr);
if(0==pTmpBorrow->StuID)
{
system("cls");
printf("借书证号不存在(借书证号输入整数)!
\n(按回车键继续...)");
fflush(stdin);
getchar();
system("cls");
free(pTmpBorrow);
return;
}
time_tltime;
structtm*today;
time(<ime);
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;
}
pWorkBook->CurrentNumber--;
system("cls");
printf("借书证号:
%d\n借阅图书:
<<%s>>\n\n操作成功!
(按回车键继续...)",pTmpBorrow->StuID,pT