图书管理信息系统的设计与实现docxWord文档格式.docx

上传人:b****2 文档编号:6098003 上传时间:2023-05-06 格式:DOCX 页数:58 大小:27.58KB
下载 相关 举报
图书管理信息系统的设计与实现docxWord文档格式.docx_第1页
第1页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第2页
第2页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第3页
第3页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第4页
第4页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第5页
第5页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第6页
第6页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第7页
第7页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第8页
第8页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第9页
第9页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第10页
第10页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第11页
第11页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第12页
第12页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第13页
第13页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第14页
第14页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第15页
第15页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第16页
第16页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第17页
第17页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第18页
第18页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第19页
第19页 / 共58页
图书管理信息系统的设计与实现docxWord文档格式.docx_第20页
第20页 / 共58页
亲,该文档总共58页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

图书管理信息系统的设计与实现docxWord文档格式.docx

《图书管理信息系统的设计与实现docxWord文档格式.docx》由会员分享,可在线阅读,更多相关《图书管理信息系统的设计与实现docxWord文档格式.docx(58页珍藏版)》请在冰点文库上搜索。

图书管理信息系统的设计与实现docxWord文档格式.docx

数据库

小云

人民邮

8

1014

数据结

小洋

中国科

013

6

1106

操作系0

许海平

人民邮1

7

4

1108

数据结2

清华大0

5

1203

程序设0

中国科2

2201

数据库1

清华大4

2360

数据结4

人民邮3

0030

程序设5

清华大6

a)图书主索引文件

链头地址

长度

人民邮电

中国科学

操作系统

清华大学

程序设计

b)书名索引链头文件

c)作者索引链头文件

d)出版社索引链头文件

二、设计容

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

(1)每种书的登记容包括书号、书名、著作者、现存量和库存量;

(2)对书号建立索引表(线性表)以提高查找效率;

(3)采编入库:

新购一种书,确定书号后,登记到图书帐目表中,如果表中

已有,

则只将库存量增加;

(4)借阅:

如果一种书的现存量大于0,则借出一本,登记借阅者的书证号

和还

期限,改变现存量;

(5)归还:

注销对借阅者的登记,改变该书的现存量。

三、概要设计:

确定所需模块及模块间调用关系

分析:

首先应该定义借书人的结构体信息和图书结构体信息,为了便于查找图

书和借书人,分别对其建立单链表。

然后定义buy(),SearchByNum

(),SearchByName(),borrow(),return()五个函数分别实现图书采编入库的功能,

按书号查询的功能,按书名查找的功能,借书功能和还书功能。

.根据任务的要求,先定义头文件。

然后写出借书人和图书的结构体信息。

了便

于查找图书和存储借书人的信息,分别对借书人和图书采用链表的形式存放。

//头文件的声明

#include<

stdio.h>

string.h>

stdlib.h>

#defineMAXSIZE100//最大值定义为100

#defineLIST_INIT_SIZE100//图书证使用者最大值定义为100

//借书人的结构体

typedefstructBoro//借书记录

{

charBNum[20];

//所借书的书号

charBorDate[8];

//借书日期

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;

//借了该书的人}ook;

1、新图书采编入库的设计方案

采编入库:

新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存

量和现库存量均为1。

为了便于查找,另外定义了一个专门用于查找的函数BinarySearch(),使用的是折半查找法。

(1)折半查找法查找书号

intmid=0;

//外部函数mid,用来返回查找到的位置

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

{由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位

intlow=0,high=total-1;

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;

elselow=mid+1;

}

if(found==0)

returnfalse;

//查找失败

2.新图书采编入库

voidBuy(ook&

boo,charBuyNum[])

if(BinarySearch(boo,BuyNum))//如果书库中有此书

boo[mid].TotNum++;

//总库存加1

boo[mid].NowNum++;

//现库存加1

printf("

入库成功.\n"

);

已更改书库中该书的信息。

编号%s的书%s作者是%s,出版社

是%s,

目前的总库存是%d,现库存是%d。

\n"

boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].TotN

um,boo[mid].NowNum);

if(!

BinarySearch(boo,BuyNum))

inti;

for(i=total;

i>

mid&

&

total;

i--)//插在适合位置保持有序

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

//空出插入位置

该书在书库中不存在。

设立新书目,请补全书的详细信息。

\n"

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

该书购入的数量是:

"

scanf("

%d"

&

boo[i].NowNum);

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

该书的名字是:

%s"

boo[i].name);

该书的作者是:

boo[i].auth);

该书的出版社是:

boo[i].pub);

//补全信息

boo[i].next=NULL;

total++;

//总量+1

已增加该书的信息。

编号%s的书%s作者是%s,出版社是%s,目前

的总库存是%d,现库存是%d。

boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowN

um);

3、查找图书的设计方案

为了更便于查找,这里设计了两种查找方案,按书号查找和按书名查找。

在按书号查找中使用了折半查找法的查找函数。

按书号查找方案中都显示图书的所有状态,包括是在库还是借出,如果借出,并显示何人借走。

(1).按书号查找

voidSearchByNum(ook&

boo,charSeaNum[])

{//BYNUM根据书号查找

LinkList*p;

p=boo[mid].next;

if(BinarySearch(boo,SeaNum)==false)printf("

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

//二分查找没找到

else//找到了的话

┃书号┃书名┃作者┃出版社┃现库存┃总库

存┃\n"

--------------------------------------------------------------------------

-----\n"

┃%10s┃%10s┃%10s┃%10s┃%10d┃%10d┃\n"

boo[mid].num,boo[mid].name,boo[mid].auth,boo[mid].pub,boo[mid].Now

Num,boo[mid].TotNum);

if(boo[mid].next!

=NULL)

{printf("

┃已借该书的┃\n"

printf("

┃图书证号┃\n"

while(p)

┃%14s┃\n"

p->

CardNum);

p=p->

next;

%s"

//在按书号查找的函数里也显示借了这本书

的借阅者的证号

p=p->

}//显示查找的书籍的信息

(2).按书名查找

voidSearchByName(ook&

boo)

{//BYNAME根据书名查找

charSeaName[20];

输入想查找的书的书名:

SeaName);

找到符合该书名的书的详细信息如下:

for(inti=0;

i<

i++)

if(strcmp(SeaName,boo[i].name)==0)//如果书名一样

书号:

%s\n书名:

%s\n作者:

%s\n出版社:

%s\n总库存量:

%d\n

库存

量:

%d\n\n"

boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum

boo

[i].NowNum);

}//显示符合信息的所有书籍的信息

4、借阅图书的设计方案

如果一种书的现库存量大于零,则借出一本书,将现库存量减1,

并登记借阅者的图书证号和归还期限。

voidBorrow(ook&

boo,lend&

Lin,charBorrowNum[],charCaNum[])

Bor*p,*q;

LinkList*m,*n;

BinarySearch(boo,BorrowNum)||total==0)//如果没有找到此书

书库里没这书。

//如果有这书

if(BinarySearch(boo,BorrowNum))//书库里有

if(boo[mid].NowNum>

0)//看现库存是否大于0

boo[mid].NowNum--;

//借出一本,少1

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->

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

//分配空间,增加1个结点

next=n;

strcpy(n->

//记录证号

n->

inti=0;

for(i=0;

Retotal;

strcmp(Lin[i].CNum,CaNum))//如果已经有该图书证的信息

p=Lin[i].next;

while(p->

next)p=p->

//遍历到最后一个结点

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

//分配空间

p->

next=q;

strcpy(q->

BNum,BorrowNum);

//记录书号

输入归还日期:

%s"

q->

RetDate);

借阅成功.\n"

break;

//找到证了就跳出循环

if(i==Retotal)//如果没有这证的信息

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

//记录证号

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

//分配空间

Lin[i].next=p;

strcpy(p->

Retotal++;

//借阅证号信息总数加1

elseprintf("

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

5、归还图书的设计方案

定义了一个return函数,当进行还书时,在借阅者表里查找借阅者,注销对借阅者的登记。

在图书链表中改变该书的现存量,把现存量增加。

voidReturn(ook&

Lin,charReturnNum[],charBorrowerNum[])

{Bor*p,*q;

LinkList*m,*n;

intflag=0;

//设置一个参数

BinarySearch(boo,ReturnNum)||!

total)//没书

书库中无此书.\n"

if(BinarySearch(boo,ReturnNum))//有书

strcmp(m->

CardNum,BorrowerNum))//如果是第一个借的人还的

boo[mid].next=m->

//删除结点

free(m);

//释放该结点的空间空间

else

next)//查找归还者的借阅者结点

next->

CardNum,BorrowerNum))//如果找到

n=m->

//n为归还者的借阅结点

next=n->

//m指向归还者的借阅结点的下一结点

free(n);

//释放空间

//在借阅者表里查找借阅者信息

strcmp(Lin[i].CNum,BorrowerNum))//如果找到借阅者

strcmp(p->

BNum,ReturnNum))//如果是归还的是借的第一本书

Lin[i].next=p->

//指向下一借书结点

free(p);

//释放结点空间

成功归还该书.\n"

flag=1;

else//找不到

next)//找到归还书的借书结点

BNum,ReturnNum))//如果找到

q=p->

//q为归还书的借书结点

next=q->

//p指向下一借书结点

free(q);

for(intk=0;

k<

k++)

Lin[k].next)

intj;

for(j=k;

j<

j++)

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

//其后都往前移一位,覆盖掉当前信息

strcpy(Lin[j].CNum,"

"

//删除图书证号

Retotal--;

//图书证数减1

}//删除当前状态下没借书的图书证的信息,节省空间

if(flag==0)printf("

无该证信息.\n"

6、定义主函数,在主函数中设计出主界面。

便于用户进入后能够根据提示方便操作。

并且在主

函数中定义出要实现的基本功能,在分别另外去实现。

分别在主函数中定义有:

Buy(Bo,BNum);

SearchByNum(Bo,BNum);

SearchByName(Bo);

Borrow(Bo,Lin,BNum,CNum);

Return

(Bo,Lin,BNum,CNum)五个函数。

四、算法描述:

给出各模块流程图及代码

图书管理系统的总体结构如

图书管理

系统

图书采编按书号查按书名查借阅图书图书归还

入库找找

完整代码如下:

“wj.h”

//借书人的结构体

}le

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

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2