当前位置:文档之家› 图书管理信息系统的设计与实现

图书管理信息系统的设计与实现

图书管理信息系统的设计与实现
图书管理信息系统的设计与实现

数据结构

课程设计报告

设计题目:图书管理信息系统的设计与实现

专业通信工程(物联网)

班级

学生

学号

指导教师

起止时间 2012-8-20至2012-9-11

湖北师范学院

2012 年下学期

一、设计题目

十七、图书管理信息系统的设计与实现

【问题描述】图书信息所表示的就是一个数据库文件。图书管理一般包括:图书采编、图书编目、图书查询及图书流通(借、还书)等。要求设计一个图书管理信息系统,用计算机实现上述系统功能。

【基本要求】

建立一个图书信息数据库文件,输入若干种书的记录,建立一个以书号为关键字的索引文件;在主数据库文件中建立以书名、作者及出版社作为次关键字的索引以及对应的索引链头文件,如图所示;

建立关于书号、书名、作者及出版社的图书查询;

(1)实现图书的借还子系统,包括建立读者文件、借还文件、读者管

d)出版社索引链头文件

二、设计内容

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

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

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

(3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,

则只将库存量增加;

(4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和还

期限,改变现存量;

(5)归还:注销对借阅者的登记,改变该书的现存量。

三、概要设计:确定所需模块及模块间调用关系

分析:首先应该定义借书人的结构体信息和图书结构体信息,为了便于查找图书和借书人,分别对其建立单链表。然后定义buy(),SearchByNum (),SearchByName(), borrow(),return()五个函数分别实现图书采编入库的功能,按书号查询的功能,按书名查找的功能,借书功能和还书功能。

.根据任务的要求,先定义头文件。然后写出借书人和图书的结构体信息。为了便

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

//头文件的声明

#include

#include

#include

#define MAXSIZE 100 //最大值定义为100

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

//借书人的结构体

typedef struct Boro//借书记录

{

char BNum[20];//所借书的书号

char BorDate[8];//借书日期

char RetDate[8];//归还日期

struct Boro *next;

}Bor;

typedef struct LinkBook

{

Bor *next;//该图书证的借书记录

char CNum[20];//图书证号

int Total;//借书的数量

}lend[LIST_INIT_SIZE];//借书人数组

//图书的结构体信息

typedef struct LNode

{

char CardNum[20];//图书证号

struct LNode *next;

}LinkList; //借书人

typedef struct book

{//每种图书需要登记的内容包括书号、书名、作者、出版社、总库存量和现库量。

char num[20];//书号

char name[20];//书名

char auth[20];//作者

char pub[20];//出版社

int TotNum;//总库存

int NowNum;//现库存

LinkList *next;//借了该书的人 }ook;

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

采编入库:新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包

括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。为了便于查找,另外定义了一个专门用于查找的函数BinarySearch(),使用的是折半查找法。

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

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

int BinarySearch(ook boo,char SearchNum[]) //二分法查找比较书号

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

int low=0,high=total-1;

int found=0;

while(low<=high)

{

mid=(low+high)/2; //中间点

if(strcmp(boo[mid].num,SearchNum)==0) //书号相同

{

found=1;

return true;

}//查找成功

if(strcmp(boo[mid].num,SearchNum)!=0)//书号不同

high=mid-1;

else low=mid+1;

}

if(found==0)

return false; //查找失败

}

2.新图书采编入库

void Buy(ook &boo, char BuyNum[])

{

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

{

boo[mid].TotNum++; //总库存加1

boo[mid].NowNum++; //现库存加1

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

printf("已更改书库中该书的信息。编号 %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))

{

int i;

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;

相关主题
文本预览
相关文档 最新文档