图书管理系统程序代码.docx
- 文档编号:7711628
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:19
- 大小:20.07KB
图书管理系统程序代码.docx
《图书管理系统程序代码.docx》由会员分享,可在线阅读,更多相关《图书管理系统程序代码.docx(19页珍藏版)》请在冰点文库上搜索。
图书管理系统程序代码
图书管理系统
课程设计程序代码
#include
#include
#include
#include
#include
#defineMAXNUM10
#defineMAXNUM10
#defineNUMBER20/*最大物品数量*/
#defineTRUE1
#defineFALSE0
typedefstructbook
{
longintstarting;//借书日期
longintending;//应还日期
charbookinform[120];//这里面存储书籍的描述信息
longintcallnum;//索书号
charbookname[30];
charwriter[20];
inttotalstorage,nowstorage;//书本的馆藏量,现有量
}book;
/*本结构体用于创建链表的二叉树*/
typedefstructvolume
{
bookbooks;
structvolume*lchild;
structvolume*rchild;
}volume,*Btvolume;
typedefstructlibcard
{
charuserID[12];
charpassword[12];//密码
charclientname[20];//用户的名字
charusermessage[150];//用户信息
bookborrow[10];//每本借书证限借书十本
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");
printf("----------------1.背包问题----------------\n");
printf("----------------2.图书系统----------------\n");
printf("----------------0.退出系统----------------\n");
printf("----------------------------------------------\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;
key->ending=0;
printf("输入索书号:
");
scanf("%ld",&(key->callnum));
if(key->callnum==0){
free(key);
}
printf("输入入库量:
");
scanf("%d",&(key->totalstorage));
key->nowstorage=key->totalstorage;
printf("输入书本名:
");
scanf("%s",&(key->bookname));
printf("输入著作者:
");
scanf("%s",&(key->writer));
printf("输入书描述:
");
scanf("%s",&(key->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;
s->books.nowstorage=key->nowstorage;
s->books.totalstorage=key->totalstorage;
s->books.starting=key->starting;
s->books.ending=key->ending;
strcpy(&(s->books.bookinform),&(key->bookinform));
strcpy(&(s->books.bookname),&(key->bookname));
strcpy(&(s->books.writer),&(key->writer));
s->lchild=NULL;
s->rchild=NULL;
*bst=s;
}
elseif(key->callnum<(*bst)->books.callnum)
{
insertBST(&((*bst)->lchild),key);
}
elseif(key->callnum>(*bst)->books.callnum)
{
insertBST(&((*bst)->rchild),key);
}
else
{
(*bst)->books.nowstorage+=key->nowstorage;
(*bst)->books.totalstorage+=key->totalstorage;
}
}
/*
*二叉排序树的查找算法按索书号为关键字进行二分查找*/
BtvolumesearchBST(Btvolumebst,longintkey)
{
if(bst==NULL)
returnNULL;
if(bst->books.callnum==key)
returnbst;
if(bst->books.callnum returnsearchBST(bst->rchild,key); returnsearchBST(bst->lchild,key); } /* *入库函数,用于增加书本库存函数无返回值实现: 1、排序二叉树的建立2、排序二叉树的查找3、排序二叉树的插入4、排序二叉树的删除 *说明: 在这里并没有对物理层进行操作 */ voidin_stor(volume**root) { Btvolumep,q; book*key; /*输入数据*/ key=(book*)malloc(sizeof(book)); printf("输入索书号: "); scanf("%ld",&(key->callnum)); printf("输入入库量: "); scanf("%d",&(key->totalstorage)); key->nowstorage=key->totalstorage; printf("输入书本名: "); scanf("%s",&(key->bookname)); printf("输入著作者: "); scanf("%s",&(key->writer)); printf("输入书描述: "); scanf("%s",&(key->bookinform)); key->starting=0; key->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) printf("对不起,您借的书过多,请先还书! \n"); else { temp=searchBST(*root,callnum); if(temp==NULL) printf("对不起,本馆没有收藏此书! \n"); elseif(temp->books.nowstorage>0) { time(&t); temp->books.nowstorage-=1; current_client->borrow[i].callnum=callnum; current_client->borrow[i].starting=t;//获取当前系统时间 current_client->borrow[i].ending=current_client->borrow[i].starting+2592000; current_client->borrow[i].totalstorage=temp->books.totalstorage; current_client->borrow[i].nowstorage=temp->books.nowstorage; strcpy(current_client->borrow[i].bookinform,temp->books.bookinform); strcpy(current_client->borrow[i].bookname,temp->books.bookname); strcpy(current_client->borrow[i].writer,temp->books.writer); success=1; printf("您已经成功借书,欢迎下次光临! \n"); } else printf("对不起,该书已被借完! \n"); } returnsuccess; } /* *还书模块,有学生发出请求每次只能还一本书即便是两本同样的书也需还两次! 无返回值还书后相应库存量增加,同时学生的当前借阅量减少 *如果超期,返回超期天数 */ voidbackbook(Btvolume*root,longintcallnum) { Btvolumetemp; time_tt; inti=0; doubleovertime; while(i<=10) { if(current_client->borrow[i].callnum==callnum) break; i++; } if(i>=10) { printf("对不起,您并未借过此书! \n"); return; } temp=searchBST(*(root),callnum); if(temp==NULL) { printf("您好,本馆并未藏有此书,因此你所还的书不是本馆! \n"); return; } if(temp->books.nowstorage>=temp->books.totalstorage) { printf("对不起,本馆未借出此书! \n"); return; } time(&t); if(t>current_client->borrow[i].ending) { overtime=((t-current_client->borrow[i].ending)/43200)+1; printf("对不起,您所借的书已经超期%0.0f天\n",overtime); } /*还书后所做的处理*/ temp->books.nowstorage++; current_client->borrow[i].bookinform[0]='\0'; current_client->borrow[i].bookname[0]='\0'; current_client->borrow[i].callnum=0; current_client->borrow[i].ending=2004967296;// current_client->borrow[i].starting=0; current_client->borrow[i].nowstorage=0; current_client->borrow[i].totalstorage=0; current_client->borrow[i].writer[0]='\0'; printf("书已成功归还,欢迎下次光临! \n"); } /*注册模块*/ intregisterer() { libcard*client,*client_temp=NULL; chartemp[13]; inttype,success=0; inti; while (1){ while (1){ client=(libcard*)malloc(sizeof(libcard));//这里很重要 client->next=NULL; printf("------------按要求填写有关注册信息--------------\n"); printf("用户ID: "); scanf("%s",&client->userID); /* *检测是否为重复注册 */ client_temp=clients; while(client_temp! =NULL) { 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]='\0'; client->borrow[i].bookname[0]='\0'; client->borrow[i].writer[0]='\0'; client->borrow[i].callnum=0; client->borrow[i].starting=0; client->borrow[i].ending=315360000;//将归还日期初始为无穷大 client->borrow[i].nowstorage=0; client->borrow[i].totalstorage=0; } client->next=clients; clients=client; } else { printf("对不起,该ID已被占用,注册失败! \n"); break; } while (1) { printf("密码: "); GetPassword(&client->password,12); //scanf("%s",&client->password); printf("确认密码: "); GetPassword(&temp,12); //scanf("%s",&temp); if(! strcmp(client->password,temp))//检测密码是否有误 break; printf("您的密码输入有误,请从新输入\n"); } printf("请输入用户名字: "); scanf("%s",&client->clientname); printf("请输入用户描述: "); scanf("%s",&client->usermessage); break; } printf("是否继续注册? (1、继续)(0、退出)"); scanf("%d",&type); if(! type) break; } returnsuccess; } /*核对用户信息*/ intcheck_client(libcard**client) { intsuccess=0; libcard*temp=clients; while(temp! =NULL)//循环验证借书证 { if(! strcmp((*client)->userID,temp->userID)&&! strcmp((*client)->password,temp->password))//如果有其一不对应,则跳入下面一个用户验证 { free(*client); *client=temp; success=1; break; } temp=temp->next; } returnsuccess; } /* *客户 */ voidclientsev(volume**Btroot) { inta,b; volume*temp; libcard*p=NULL;//用作临时指针 if(current_client==NULL) { printf("您还未登录,请登录! \n"); login(); return;//不管是否成功登陆都将返回原处 } while (1) { system("cls");////////////清屏 printf("-----------------图书管理系统-----------------\n"); printf("-------------------客户用户---------------------\n"); printf("---------------1、图书借阅--------------------\n"); printf("---------------2、图书归还--------------------\n"); printf("---------------0、退出------------------------\n"); scanf("%d",&a); switch(a) { case1: printf("输入索书号: \n"); scanf("%d",&b); lend(Btroot,b); break; case2: printf("输入索书号: \n"); scanf("%d",&b); backbook(Btroot,b); b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统 程序代码
![提示](https://static.bingdoc.com/images/bang_tan.gif)