数据结构课程设计图书管理系统.docx

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

数据结构课程设计图书管理系统.docx

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

数据结构课程设计图书管理系统.docx

数据结构课程设计图书管理系统

数据结构课程设计图书管理系统

一需求分析

该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。

此程序规定:

(1)管理员能够向系统中输入每种书的基本信息,包括书号、书名、作者、现存量和库存量、借阅记录,并保存记录;

(2)用户(读者)能够按书号、书名、作者查询图书信息;

(3)管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目中去。

如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记,改变该书的现存量)、销毁(将图书从账目中删除)等操作。

二概要设计

●系统用到的抽象数据类型定义:

1、ADTLinearList{

数据元素:

D={ai|ai∈D0,i=1,2,…,n,n≥0,D0为某一数据对象}

关系:

S={|ai,ai+1∈D0,i=1,2,…,n-1}

基本操作:

(1)InitList(L)

(2)DestroyList(L)

(3)ClearList(L)

(4)EmptyList(L)

(5)ListLength(L)

(6)Locate(L,e)

(7)GetData(L,i)

(8)InsList(L,i,e)

(9)DelList(L,i,&e)

}ADTLinearList

2、ADTString{

数据对象:

D={ai|ai∈CharacterSet,i=1,2,…,n;n≧0}

数据关系:

R={|ai-1,ai∈D,i=2,…,n;n≧0}

基本操作:

(1)StrAsign(S,chars)

(2)StrInsert(S,pos,T)

(3)StrDelete(S,pos,len)

(4)StrCopy(S,T)

(5)StrEmpty(S)

(6)StrCompare(S,T)

(7)StrLength(S)

(8)StrClear(S)

(9)StrCat(S,T)

(10)SubString(Sub,S,pos,len)

(11)StrIndex(S,pos,T)

(12)StrReplace(S,T,V)

(13)StrDestroy(S)

}ADTString

●系统中的子程序和功能说明:

InitBo(Book&boo);初始化图书信息

InitRe(lend&Lin);初始化借阅者信息

BinarySearch(Bookboo,charSearchNum[]);二分法查找比较书号

Buy(Book&boo,charBuyNum[]);新书采编入库系统

Delete(Book&boo,charDeleteNum[]);清除图书信息系统

Borrow(Book&boo,lend&Lin,charBorrowNum[],charCaNum[]);借阅图书处理系统

Return(Book&boo,lend&Lin,charReturnNum[],charBorrowerNum[]);归还图书系统

SearchByNum(Book&boo,charSeaNum[]);按书号查找系统

SearchByName(Book&boo);按书名查找系统

SearchByAuth(Book&boo);按作者查询系统

Menu();主菜单显示系统

Search();查询系统子菜单

main();主函数

●系统程序功能结构图

三详细设计

●功能实现过程

boolBinarySearch(Bookboo,charSearchNum[])//二分法查找比较书号

{

while(low<=high)

{

计算中间点;

if(查找到书号相同的)

{

返回值true;

}

if(查找书号不相同)

用二分法进一步进行查找;

}

if(库中没有所要查找的书)

返回值false;

}

voidBuy(Book&boo,charBuyNum[])/*采编入库*/

{

if(书库中有此书)

{

总库存加1;

现库存加1;

}

if(书库中无此书)

{

for(i=total;i>mid&&total;i--)/*将新采购的书插在适合位置,保持有序*/

空出插入位置;

输入新购书籍的相关信息:

书号、书名、作者、出版社;

boo[i].next=NULL;

total++;/*总量加1*/

}

}

voidDelete(Book&boo,charDeleteNum[])/*清除图书信息*/

{

if(书库中没有此书)

输出“无此书”;

if(书库中有此书)

{

strcpy(连续两本书的相关信息);

现存量减1;库存量减1;

}

else输出“此书已有借阅者,无法删除!

”;

}

voidBorrow(Book&boo,lend&Lin,charBorrowNum[],charCaNum[])/*借阅图书信息*/

{

if(没有找到此书)输出“书库中无此书!

”;

if(书库中有此书)

{

借出一本书后,该书的现存量减1;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录。

}

else输出“该书现存量为0”;

}

voidReturn(Book&boo,lend&Lin,charReturnNum[],charBorrowerNum[])/*归还图书信息*/

{

if(书库中无此书)

输出“无此书记录”;

if(书库中有此书)

{

查找图书文件,修改图书的现存量;查找记录借阅信息的单链表,填入还书日期,删除借阅信息;查找记录读者信息的单链表,删除证号信息。

}

}

voidSearchByNum(Book&boo,charSeaNum[])/*按书号查找*/

{

if(书库中无此书信息)/*用二分法查找*/

输出“无此书”;

else/*书库中有此书信息*/

输出与此书有关的相关信息;

}

voidSearchByName(Book&boo)/*按书名查找*/

{

输入想要查找书的书名;

用顺序查找法查找;

if(查找到需要查找的书)

输出与此书相关的信息;

}

建议画出主要模块流程图。

四设计与调试分析

1、这个程序设计中要注意定义两个结构体:

图书结构体、借阅人结构体。

其中定义数组存放图书信息,申请链表存放借阅记录和读者信息记录。

2、程序中运用到大多的插入与删除,所以申请链表比较方便插入与删除。

但应前期需求分析的准备工作不充分,导致程序运行功能不全,比如查找时关于此书的信息不能全部显示出来,并且添加删除时库存的变化不能直接显示出来。

程序的健壮性不能达到预期的结果,这些都是需要改进的。

3、在程序中的函数调用是个非常重要的部分,也是经常需要用到的,在编写程序过程中,因为函数调用不准确,使得循环进不去,后来改变函数的调用关系,才达到了预期结果。

4、程序中还定义了全局变量,之前没定义全局变量,在下面的编写过程,同样性质的地方需要重复定义,比较麻烦,定义全局变量使得程序比较简明一点。

五用户手册

【使用说明】

1、进入图书馆管理系统主页面

2、若有新书要新编入库,选择1,进入新书入库系统,输入入库书的书号,若书库中无该书,则设立新书目,输入新书信息。

若书库中已有该书,则输入新信息覆盖修改原书库中该书号对应书的信息。

3、若有书籍信息需要删除,选择2,进入清空库存系统,输入想要删除书的书号,则此书信息就已删除。

4、若要借阅图书,选择3,进入图书借阅系统,输入需要借阅书的书号以及读者证号,并输入还书日期,则借书成功。

5、若要归还图书,选择4,进入图书归还系统,输入需要归还图书的书号以及读者证号,则还书成功。

6、若要查找信息,选择5,进入查找信息子系统。

若要按书号查找,则选择子系统中的1,输入需要查找的书的书号,若按书名查找,则选择子系统中的2,输入需要查找的书名,若按作者查找,输入需要查找书的作者进行查找,若查找结束,则按0退出。

7、若系统使用结束,按0退出。

【程序中的头文件】

#include

#include

#include

#defineMAXSIZE100

#defineLIST_INIT_SIZE100

intRetotal;/*定义的全局变量*/

inttotal;

六测试成果

1、采编入库

2、清空库存

3、图书借阅

4、图书归还

5、图书查找

七附录(源程序清单)

#include

#include

#include

#defineMAXSIZE100

#defineLIST_INIT_SIZE100

typedefstructBoro

{

charBNum[20];

charRetDate[8];

structBoro*next;

}Bor;

typedefstructLinkBook

{

Bor*next;

charCNum[20];

intTotal;

}lend[LIST_INIT_SIZE];

typedefstructLNode

{

charCardNum[20];

structLNode*next;

}LinkList;

typedefstructbook

{

charnum[20];

charname[20];

charauth[20];

charpub[20];

intTotNum;

intNowNum;

LinkList*next;

}Book[MAXSIZE];

intRetotal;

inttotal;

voidInitBo(Book&boo)

{

for(inti=0;i

{

boo[i].NowNum=0;

boo[i].TotNum=0;

boo[i].next=NULL;

}

}

voidInitRe(lend&Lin)

{

for(inti=0;i

Lin[i].next=NULL;

}

intmid=0;

boolBinarySearch(Bookboo,charSearchNum[])

{

intlow=0,high=total;

intfound=0;

while(low<=high)

{

mid=(low+high)/2;

if(strcmp(boo[mid].num,SearchNum)==0)

{

found=1;

returntrue;

}

if(strcmp(boo[mid].num,SearchNum)!

=0)

high=mid-1;

else

low=mid+1;

}

if(found==0)

returnfalse;

}

voidBuy(Book&boo,charBuyNum[])

{

inti;

if(BinarySearch(boo,BuyNum))

{

boo[mid].TotNum++;

boo[mid].NowNum++;

printf("入库成功.\n");

printf("已更改书库中该书的信息。

\n");

printf("编号:

%s书名:

%s",boo[mid].num,boo[mid].name);

printf("作者:

%s出版社:

%s",boo[mid].auth,boo[mid].pub);

printf("\n");

}

if(!

BinarySearch(boo,BuyNum))

{

for(i=total;i>mid&&total;i--)

boo[i]=boo[i-1];

printf("该书在书库中不存在,设立新书目!

\n");

strcpy(boo[i].num,BuyNum);

printf("该书购入的数量是:

");

scanf("%d",&boo[i].NowNum);

boo[i].TotNum=boo[i].NowNum;

printf("该书的名字是:

");

scanf("%s",&boo[i].name);

printf("该书的作者是:

");

scanf("%s",&boo[i].auth);

printf("该书的出版社是:

");

scanf("%s",&boo[i].pub);

boo[i].next=NULL;

total++;

printf("已增加该书的信息!

\n");

printf("编号:

%s书名:

%s",boo[i].num,boo[i].name);

printf("作者:

%s出版社:

%s",boo[i].auth,boo[i].pub);

printf("\n");

printf("入库成功.\n");

}

}

voidDelete(Book&boo,charDeleteNum[])

{

if(BinarySearch(boo,DeleteNum)==false||total==0)

printf("书库中没有该书.\n");

if(BinarySearch(boo,DeleteNum))

{

if(!

boo[mid].next)

{

intj;

for(j=mid;j

boo[j]=boo[j+1];

strcpy(boo[j].num,boo[j+1].num);

strcpy(boo[j].name,boo[j+1].name);

strcpy(boo[j].auth,boo[j+1].auth);

strcpy(boo[j].pub,boo[j+1].pub);

boo[j].TotNum=boo[j+1].TotNum;

boo[j].NowNum=boo[j+1].NowNum;

printf("已成功删除该书.\n");

}

else

printf("该书有借阅者,无法删除。

\n");

}

}

voidBorrow(Book&boo,lend&Lin,charBorrowNum[],charCaNum[])

{

Bor*p,*q;

LinkList*m,*n;

if(!

BinarySearch(boo,BorrowNum)||total==0)

printf("书库里没这书。

\n");

if(BinarySearch(boo,BorrowNum))

{

if(boo[mid].NowNum>0)

{

boo[mid].NowNum--;

if(boo[mid].next==NULL)

{

m=(LinkList*)malloc(sizeof(LNode));

boo[mid].next=m;

strcpy(m->CardNum,CaNum);

m->next=NULL;

}

else

{

m=boo[mid].next;

while(m->next)

m=m->next;

n=(LinkList*)malloc(sizeof(LNode));

m->next=n;

strcpy(n->CardNum,CaNum);

n->next=NULL;

}

inti=0;

for(i=0;i

{

if(!

strcmp(Lin[i].CNum,CaNum))

{

p=Lin[i].next;

while(p->next)p=p->next;

q=(Bor*)malloc(sizeof(Boro));

p->next=q;

strcpy(q->BNum,BorrowNum);

printf("输入归还日期:

");

scanf("%s",&q->RetDate);

q->next=NULL;

printf("借阅成功.\n");

break;

}

}

if(i==Retotal)

{

strcpy(Lin[i].CNum,CaNum);

p=(Bor*)malloc(sizeof(Boro));

Lin[i].next=p;

strcpy(p->BNum,BorrowNum);

printf("输入归还日期:

");

scanf("%s",&p->RetDate);

p->next=NULL;

Retotal++;

printf("借阅成功.\n");

}

}

else

printf("借阅失败.该书现在库存为0.\n");

}

}

voidReturn(Book&boo,lend&Lin,charReturnNum[],charBorrowerNum[])

{

Bor*p,*q;

LinkList*m,*n;

intflag=0;

if(!

BinarySearch(boo,ReturnNum)||!

total)

printf("书库中无此书.\n");

if(BinarySearch(boo,ReturnNum))

{

m=boo[mid].next;

if(!

strcmp(m->CardNum,BorrowerNum))

{

boo[mid].NowNum++;

boo[mid].next=m->next;

free(m);

}

else

{

while(m->next)

{

if(!

strcmp(m->next->CardNum,BorrowerNum))

{

n=m->next;

m->next=n->next;

free(n);

boo[mid].NowNum++;

break;

}

m=m->next;

}

}

}

for(inti=0;i

{

if(!

strcmp(Lin[i].CNum,BorrowerNum))

{

p=Lin[i].next;

if(!

strcmp(p->BNum,ReturnNum))

{

Lin[i].next=p->next;

free(p);

printf("成功归还该书.\n");

flag=1;

break;

}

else

{

while(p->next)

{

if(!

strcmp(p->next->BNum,ReturnNum))

{

q=p->next;

p->next=q->next;

free(q);

printf("成功归还该书.\n");

flag=1;

break;

}

p=p->next;

}

}

}

}

for(intk=0;k

if(!

Lin[k].next)

{

intj;

for(j=k;j

Lin[j]=Lin[j+1];

strcpy(Lin[j].CNum,"");

Retotal--;

}

if(flag==0)

printf("无该证信息.\n");

}

voidSearchByNum(Book&boo,charSeaNum[])

{

LinkList*p;

p=boo[mid].next;

if(BinarySearch(boo,SeaNum)==true)

{

printf("书号:

%s\n",boo[mid].num);

printf("书名:

%s\n",boo[mid].name);

printf("作者名:

%s\n",boo[mid].auth);

printf("出版社:

%s\n",boo[mid].pub);

printf("现存量:

%s\n",boo[mid].NowNum);

printf("库存量:

%s\n",boo[mid].TotNum);

printf("\n");

}

else

printf("对不起,未找到您想查找的书。

\n");

}

voidSearchByName(Book&boo)

{

charSeaName[20];

printf("输入想查找的书的书名:

\n");

scanf("%s",&SeaName);

printf("此书存在!

\n");

for(inti=0;i

{

if(strcmp(SeaName,boo[i].name)==0)

{

printf("编号:

%s书名:

%s",boo[i].num,boo[i].name);

printf("作者:

%s出版社:

%s",boo[i].auth,boo[i].pub);

printf("总库存量:

%s",boo[i].TotNum);

printf("现库存量:

%s",boo[i].NowNum);

printf("\n");

}

}

}

voidSearchByAuth(Book&boo)

{

charSeaAuth[20];

printf("输入想查找的书的作者:

\n");

scanf("%s",&SeaAuth);

printf("

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

当前位置:首页 > 高中教育 > 英语

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

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