大数据结构课程设计图书管理系统报告材料书.docx

上传人:b****3 文档编号:4835964 上传时间:2022-12-10 格式:DOCX 页数:30 大小:244.52KB
下载 相关 举报
大数据结构课程设计图书管理系统报告材料书.docx_第1页
第1页 / 共30页
大数据结构课程设计图书管理系统报告材料书.docx_第2页
第2页 / 共30页
大数据结构课程设计图书管理系统报告材料书.docx_第3页
第3页 / 共30页
大数据结构课程设计图书管理系统报告材料书.docx_第4页
第4页 / 共30页
大数据结构课程设计图书管理系统报告材料书.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

大数据结构课程设计图书管理系统报告材料书.docx

《大数据结构课程设计图书管理系统报告材料书.docx》由会员分享,可在线阅读,更多相关《大数据结构课程设计图书管理系统报告材料书.docx(30页珍藏版)》请在冰豆网上搜索。

大数据结构课程设计图书管理系统报告材料书.docx

大数据结构课程设计图书管理系统报告材料书

数据结构

课程设计报告书

 

班级

学号

专业

姓名

 

课题描述:

本次数据结构课程设计内容是:

设计一个计算机管理系统完成图书管理基本业务。

随着社会的发展,技术的进步,各种管理业务越来越趋于自动化。

而图书馆在日常运营中,面对大量书籍,读者信息以及两者间相互联系产生的借书还书信息,而人工记录的方法不仅效率低而且极容易出现错误,大大影响了图书馆的日常管理工作。

图书管理系统就是为了解决人工管理图书的问题,实现图书馆图书自动化的管理。

本系统需要实现图书基本信息管理的功能,具体涉及到新进图书基本信息的录入,图书基本信息的查询,借书人的基本信息的注册以及借书,还书等几项基本功能。

一、需求分析:

图书管理系统将实现以下几个基本功能,基本要求为:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1