图书管理系统程序代码Word格式.docx
- 文档编号:3626242
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:22
- 大小:20KB
图书管理系统程序代码Word格式.docx
《图书管理系统程序代码Word格式.docx》由会员分享,可在线阅读,更多相关《图书管理系统程序代码Word格式.docx(22页珍藏版)》请在冰点文库上搜索。
//每本借书证限借书十本
structlibcard*next;
}libcard;
libcard*clients,*current_client=NULL;
/*
*函数声明
*/
voidcreateBST(Btvolume*bst);
voidinsertBST(Btvolume*bst,book*key);
BtvolumesearchBST(Btvolumebst,longintkey);
voidGetPassword(char*str,intn);
intregisterer();
intlogin();
//登录
voidclientsev(volume**Btroot);
//客户(学生)
intcheck_client(libcard**client);
voidin_stor(volume**root);
//入库
voidbackbook(Btvolume*root,longintcallnum);
//还书
intlend(Btvolume*root,longintcallnum);
//借书,有学生发出请求
structRecord/*本结构体用于保存每一次结果*/
inttotalWeight;
/*本次结果的总价值*/
intgoods[NUMBER];
/*本次结果对应的下标*/
structRecord*next;
};
structRecord*headLink;
structRecordresult;
intstack[NUMBER];
inttop;
intweight[NUMBER];
/*保存物品重量的数组*/
intvalue[NUMBER];
/*保存对应(下标相同)物品的价值*/
intknapproblen(intn,intmaxweight,intweight[]);
voidCreateHeadLink(void);
structRecord*MallocNode(void);
voidInsertOneNode(structRecord*t);
voidGetResult(void);
voidShowResult(void);
main(){
inta;
printf("
----------------选择访问程序----------------\n"
);
----------------1.背包问题----------------\n"
----------------2.图书系统----------------\n"
----------------0.退出系统----------------\n"
----------------------------------------------\n"
scanf("
%d"
&
a);
if(a==1)
beibao();
elseif(a==2)
tushuguanli();
}
*建立图书库第一本书
voidcreateBST(Btvolume*bst)
book*key;
*bst=NULL;
key=(book*)malloc(sizeof(book));
key->
starting=0;
ending=0;
printf("
输入索书号:
"
scanf("
%ld"
(key->
callnum));
if(key->
callnum==0){
free(key);
}
输入入库量:
totalstorage));
nowstorage=key->
totalstorage;
输入书本名:
%s"
bookname));
输入著作者:
writer));
输入书描述:
bookinform));
if(key!
=NULL)
insertBST(bst,key);
}
*二叉排序树的插入模块,采用递归算法实现*/
voidinsertBST(Btvolume*bst,book*key)
Btvolumes;
if(*bst==NULL)//递归结束条件
{
s=(Btvolume)malloc(sizeof(volume));
s->
books.callnum=key->
callnum;
books.nowstorage=key->
nowstorage;
books.totalstorage=key->
books.starting=key->
starting;
books.ending=key->
ending;
strcpy(&
(s->
books.bookinform),&
books.bookname),&
books.writer),&
lchild=NULL;
rchild=NULL;
*bst=s;
}
elseif(key->
callnum<
(*bst)->
books.callnum)
insertBST(&
((*bst)->
lchild),key);
callnum>
rchild),key);
else
(*bst)->
books.nowstorage+=key->
books.totalstorage+=key->
*二叉排序树的查找算法按索书号为关键字进行二分查找*/
BtvolumesearchBST(Btvolumebst,longintkey)
if(bst==NULL)
returnNULL;
if(bst->
books.callnum==key)
returnbst;
books.callnum<
key)
returnsearchBST(bst->
rchild,key);
returnsearchBST(bst->
lchild,key);
*入库函数,用于增加书本库存函数无返回值实现:
1、排序二叉树的建立2、排序二叉树的查找3、排序二叉树的插入4、排序二叉树的删除
*说明:
在这里并没有对物理层进行操作
voidin_stor(volume**root)
Btvolumep,q;
/*输入数据*/
key=(book*)malloc(sizeof(book));
printf("
scanf("
key->
starting=0;
ending=0;
insertBST(root,key);
*借书模块,由学生发出请求返回借书是否成功如果当前的可借阅量大于0且学生当前借书量未超过限制则借书成功否则失败*/
intlend(Btvolume*root,longintcallnum)
intsuccess=0;
//作为返回值,用于标记借阅是否成功
inti=0;
time_tt;
Btvolumetemp;
while(current_client->
borrow[i].callnum>
0)
i++;
if(i>
=10)
对不起,您借的书过多,请先还书!
\n"
temp=searchBST(*root,callnum);
if(temp==NULL)
printf("
对不起,本馆没有收藏此书!
elseif(temp->
books.nowstorage>
0)
{
time(&
t);
temp->
books.nowstorage-=1;
current_client->
borrow[i].callnum=callnum;
borrow[i].starting=t;
//获取当前系统时间
borrow[i].ending=current_client->
borrow[i].starting+2592000;
borrow[i].totalstorage=temp->
books.totalstorage;
borrow[i].nowstorage=temp->
books.nowstorage;
strcpy(current_client->
borrow[i].bookinform,temp->
books.bookinform);
borrow[i].bookname,temp->
books.bookname);
borrow[i].writer,temp->
books.writer);
success=1;
您已经成功借书,欢迎下次光临!
else
对不起,该书已被借完!
returnsuccess;
*还书模块,有学生发出请求每次只能还一本书即便是两本同样的书也需还两次!
无返回值还书后相应库存量增加,同时学生的当前借阅量减少
*如果超期,返回超期天数
voidbackbook(Btvolume*root,longintcallnum)
doubleovertime;
while(i<
if(current_client->
borrow[i].callnum==callnum)
break;
对不起,您并未借过此书!
return;
temp=searchBST(*(root),callnum);
if(temp==NULL)
您好,本馆并未藏有此书,因此你所还的书不是本馆!
if(temp->
=temp->
books.totalstorage)
对不起,本馆未借出此书!
time(&
if(t>
current_client->
borrow[i].ending)
overtime=((t-current_client->
borrow[i].ending)/43200)+1;
对不起,您所借的书已经超期%0.0f天\n"
overtime);
/*还书后所做的处理*/
temp->
books.nowstorage++;
current_client->
borrow[i].bookinform[0]='
\0'
;
borrow[i].bookname[0]='
borrow[i].callnum=0;
borrow[i].ending=2004967296;
//
borrow[i].starting=0;
borrow[i].nowstorage=0;
borrow[i].totalstorage=0;
borrow[i].writer[0]='
书已成功归还,欢迎下次光临!
/*注册模块*/
intregisterer()
libcard*client,*client_temp=NULL;
chartemp[13];
inttype,success=0;
inti;
while
(1){
client=(libcard*)malloc(sizeof(libcard));
//这里很重要
client->
next=NULL;
printf("
------------按要求填写有关注册信息--------------\n"
用户ID:
scanf("
client->
userID);
/*
*检测是否为重复注册
*/
client_temp=clients;
while(client_temp!
{
if(!
strcmp(client->
userID,client_temp->
userID))//不允许相同ID但允许相同密码
break;
client_temp=client_temp->
next;
}
if(client_temp==NULL)//没有相同的ID
/*
*注册成功后应对信息进行初始化
*/
for(i=0;
i<
10;
i++)
{
client->
borrow[i].bookinform[0]='
borrow[i].bookname[0]='
borrow[i].writer[0]='
borrow[i].callnum=0;
borrow[i].starting=0;
borrow[i].ending=315360000;
//将归还日期初始为无穷大
borrow[i].nowstorage=0;
borrow[i].totalstorage=0;
}
client->
next=clients;
clients=client;
else
printf("
对不起,该ID已被占用,注册失败!
break;
while
(1)
密码:
GetPassword(&
password,12);
//scanf("
password);
确认密码:
temp,12);
temp);
password,temp))//检测密码是否有误
您的密码输入有误,请从新输入\n"
请输入用户名字:
clientname);
请输入用户描述:
usermessage);
}
是否继续注册?
(1、继续)(0、退出)"
scanf("
type);
if(!
type)
break;
returnsuccess;
/*核对用户信息*/
intcheck_client(libcard**client)
libcard*temp=clients;
while(temp!
=NULL)//循环验证借书证
if(!
strcmp((*client)->
userID,temp->
userID)&
&
!
password,temp->
password))//如果有其一不对应,则跳入下面一个用户验证
free(*client);
*client=temp;
success=1;
temp=temp->
*客户
voidclientsev(volume**Btroot)
inta,b;
volume*temp;
libcard*p=NULL;
//用作临时指针
if(current_client==NULL)
您还未登录,请登录!
login();
//不管是否成功登陆都将返回原处
while
(1)
system("
cls"
////////////清屏
-----------------图书管理系统-----------------\n"
-------------------客户用户---------------------\n"
---------------1、图书借阅--------------------\n"
---------------2、图书归还--------------------\n"
---------------0、退出------------------------\n"
switch(a)
case1:
b);
lend(Btroot,b);
case2:
backbook(Btroot,b);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 程序代码