📄 library.c
字号:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define N 5
#define OK 1
#define ERROR 0
#define OVERFLLOW -2
typedef int status;
typedef struct borrow
{
int borrownum;
int btime[3];
int ltime[3];
}borrow;
typedef struct reader
{
int num;
char name[20];
borrow bw[N];
int count;
}reader;
typedef struct
{
int num;
char name[20];
char writer[20];
int curremain;
int sumremain;
}book;
typedef struct bookNode
{
book bk;
int length;
struct bookNode *next;
}bookNode,*bookList;
typedef struct yonghuNode
{
reader rd;
int length;
struct yonghuNode *next;
}yonghuNode,*yonghuList;
bookList bl;
yonghuList yl;
yonghuList InitListYonghu() //初始化用户
{
yl=(yonghuNode *)malloc(sizeof(yonghuNode));
if(!yl)
exit(OVERFLLOW);
yl->next=NULL;
return yl;
}
bookList InitListBook() // 初始化图书
{
bl=(bookNode *)malloc(sizeof(bookNode));
if(!bl)
exit(OVERFLLOW);
bl->next=NULL;
return bl;
}
status InsertbookList(bookList L,int i,book e) // 加入图书函数
{
bookList p,s;
int j=0;
p=L;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
printf("出现错误!\n");
return ERROR;
}
s=(bookNode *)malloc(sizeof(bookNode));
s->bk.num=e.num;
strcpy(s->bk.name,e.name);
strcpy(s->bk.writer,e.writer);
s->bk.curremain=e.curremain;
s->bk.sumremain=e.sumremain;
//s->bk=e;
s->next=p->next;
p->next=s;
return OK;
}
status InsertyonghuList(yonghuList yl,int i,reader e) // 加入用户函数
{
yonghuList p,s;
int j=0;
p=yl;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{
printf("出现错误!\n");
return ERROR;
}
s=(yonghuNode *)malloc(sizeof(yonghuNode));
s->rd=e;
s->next=p->next;
p->next=s;
return OK;
}
status Exitbook(int m) // 判断图书是否存在
{
bookList p;
int flag=0;
p=bl->next;
while(p)
{
if(p->bk.num == m)
{
flag=1;
return OK;
break;
}
else
p=p->next;
}
if(!flag)
return ERROR;
}
status AddBook(bookList L,book bk) // 添加图书
{
bookList p;
int j=1;
p=L->next;
while(p && j<=L->length)
{
if(p->bk.num<bk.num )
{
j++;
p=p->next;
}
else
break;
}
if( j<=L->length )
{
if(!p)
{
printf("出现错误!\n");
return ERROR;
}
if(p->bk.num==bk.num)
{
p->bk.curremain+=bk.curremain;
p->bk.sumremain+=bk.sumremain;
}
else
{
InsertbookList(bl,j,bk);
L->length++;
}
}
else
{
InsertbookList(bl,j,bk);
L->length++;
}
return OK;
}
status DeleteBook(int i,int n) // 删除图书
{
bookList p,q;
int j=0;
p=bl;
while(p && j<i-1)
{
p=p->next;
j++;
}
if(!p || j>i-1)
{
printf("出现错误!\n");
return ERROR;
}
if(p->next->bk.num==n)
{
q=p->next;
p->next=q->next;
free(q);
return OK;
}
else
return ERROR;
}
status ModifyBook(int i) // 修改图书
{
bookList p;
int m,n,a,b,flag=0;
char str1[20],str2[20];
p=bl->next;
while(p)
{
if(p->bk.num==i)
{
flag=1;
break;
}
else
p=p->next;
}
if(flag)
{
printf("\n以下是这本图书的信息:\n");
printf("图书编号 名称 作者 现存量 库存量\n");
printf(" %5d %8s %8s %8d %8d\n",p->bk.num,p->bk.name,p->bk.writer,p->bk.curremain,p->bk.sumremain);
printf("<1.>修改图书编号\n");
printf("<2.>修改图书名称\n");
printf("<3.>修改图书作者\n");
printf("<4.>修改图书现存量\n");
printf("<5.>修改图书库存量\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入新的图书编号:");
scanf("%d",&m);
if(Exitbook(m))
{
printf("此图书编号已经存在!\n");
return ERROR;
}
else
{
p->bk.num=m;
return OK;
}break;
case 2:
printf("请输入新的图书名称:");
scanf("%s",str1);
strcpy(p->bk.name,str1);return OK;break;
case 3:
printf("请输入新的图书作者:");
scanf("%s",str2);
strcpy(p->bk.writer,str2);return OK;break;
case 4:
printf("请输入新的图书现存量:");
scanf("%d",&a);
p->bk.curremain=a;return OK;break;
case 5:
printf("请输入新的图书库存量:");
scanf("%d",&b);
p->bk.sumremain=b;return OK;break;
}
}
else
{
printf("此图书编号不存在!\n");
return ERROR;
}
}
status Deleteyonghu(int i,int n) // 删除用户
{
yonghuList p,q;
int j=0;
p=yl;
while(p && j<i-1)
{
p=p->next;
j++;
}
if(!p|| j>i-1)
{
printf("出现错误!\n");
return ERROR;
}
if(p->next->rd.num==n)
{
q=p->next;
p->next=q->next;
free(q);
return OK;
}
else
return ERROR;
}
void FindBook(int i) // 查找图书
{
bookList p;
int m,n,a,b,flag=0;
p=bl->next;
while(p)
{
if(p->bk.num==i)
{
flag=1;
break;
}
else
p=p->next;
}
if(flag)
{
printf("\n以下是这本图书的信息:\n");
printf("图书编号 名称 作者 现存量 库存量\n");
printf(" %5d %8s %8s %8d %8d\n\n",p->bk.num,p->bk.name,p->bk.writer,p->bk.curremain,p->bk.sumremain);
}
else
{
printf("查找图书不存在!\n");
}
}
void FindBooklist()
{
int n;
printf("请输入所要查找的图书编号:");
scanf("%d",&n);
FindBook(n);
}
status Exityonghu(int m) // 判断用户是否存在
{
yonghuList p;
int flag=0;
p=yl->next;
while(p)
{
if(p->rd.num == m)
{
flag=1;
return OK;
break;
}
else
p=p->next;
}
if(!flag)
return ERROR;
}
status Modifyyonghu(int j) // 修改用户
{
yonghuList p;
int flag=0,m,n,i;
char str[20];
p=yl->next;
while(p)
{
if(p->rd.num==j)
{
flag=1;
break;
}
else
p=p->next;
}
if(flag)
{
printf("\n以下是这位用户信息:\n");
printf("用户编号 名称 借书编号 借书时间 还书时间\n");
for(i=0;i<=p->rd.count;i++)
{
printf(" %5d %8s %10d %4d%3d%3d %4d%3d%3d\n",p->rd.num,p->rd.name,p->rd.bw[i].borrownum,
p->rd.bw[i].btime[0],p->rd.bw[i].btime[1],p->rd.bw[i].btime[2],p->rd.bw[i].ltime[0],p->rd.bw[i].ltime[1],p->rd.bw[i].ltime[2]);
}
printf("<1.>修改用户编号\n");
printf("<2.>修改用户名称\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("请输入新的用户编号:");
scanf("%d",&m);
if(Exityonghu(m))
{
printf("此用户编号已经存在!\n");
return ERROR;
}
else
{
p->rd.num=m;
return OK;
}break;
case 2:
printf("请输入新的用户名称:");
scanf("%s",&str);
strcpy(p->rd.name,str);return OK;break;
}
return OK;
}
else
{
printf("此用户编号不存在!\n");
return ERROR;
}
}
void Findyonghu(int j) // 查找用户
{
yonghuList p;
int flag=0,m,n,i;
char str[20];
p=yl->next;
while(p)
{
if(p->rd.num==j)
{
flag=1;
break;
}
else
p=p->next;
}
if(flag)
{
printf("\n以下是这位用户信息:\n");
printf("用户编号 名称 借书编号 借书时间 还书时间\n");
for(i=0;i<=p->rd.count;i++)
{
printf(" %5d %8s %10d %4d%3d%3d %4d%3d%3d\n",p->rd.num,p->rd.name,p->rd.bw[i].borrownum,
p->rd.bw[i].btime[0],p->rd.bw[i].btime[1],p->rd.bw[i].btime[2],p->rd.bw[i].ltime[0],p->rd.bw[i].ltime[1],p->rd.bw[i].ltime[2]);
}
}
else
{
printf("查找用户不存在!\n");
}
}
void Printbook(bookList L) // 显示图书信息
{
bookList p;
p=L->next;
printf("\n以下 %d 本图书信息分别为:\n",L->length);
printf("图书编号 名称 作者 现存量 库存量\n");
while(p!=NULL)
{
printf(" %5d %8s %8s %8d %8d\n",p->bk.num,p->bk.name,p->bk.writer,p->bk.curremain,p->bk
.sumremain);
p=p->next;
}
}
status CreateBookList() // 创建图书函数
{
int i,n;
book bk;
bl=InitListBook();
printf("请输入图书的种类:");
scanf("%d",&n);
bl->length=0;
for(i=1;i<=n;i++)
{
printf("\n请输入第 %d 的图书信息:\n",i);
printf("请输入该图书编号:");
scanf("%d",&bk.num);
printf("请输入该图书名称:");
scanf("%s",bk.name);
printf("请输入该图书作者:");
scanf("%s",bk.writer);
printf("请输入该图书的现存量:");
scanf("%d",&bk.curremain);
printf("请输入该图书的库存量:");
scanf("%d",&bk.sumremain);
if(InsertbookList(bl,i,bk))
{
if(i==n)
printf("创建成功!\n");
bl->length++;
}
else
printf("创建不成功!\n");
}
return OK;
}
status Createyonghulist() // 创建用户函数
{
int i,j,n;
reader rd;
yl=InitListYonghu();
printf("请输入用户的人数:");
scanf("%d",&n);
yl->length=0;
for(i=1;i<=n;i++)
{
printf("\n请输入第 %d 的用户信息:\n",i);
printf("请输入该用户编号:");
scanf("%d",&rd.num);
printf("请输入该用户名称:");
scanf("%s",rd.name);
rd.count=0;
for(j=0;j<N;j++)
{
rd.bw[j].borrownum=0;
rd.bw[j].btime[0]=0;
rd.bw[j].btime[1]=0;
rd.bw[j].btime[2]=0;
rd.bw[j].ltime[0]=0;
rd.bw[j].ltime[1]=0;
rd.bw[j].ltime[2]=0;
}
if(InsertyonghuList(yl,i,rd))
{
if(i==n)
printf("创建成功!\n");
yl->length++;
}
else
printf("创建不成功!\n");
}
return OK;
}
status Addyonghu(yonghuList L,reader rd) //添加用户
{
yonghuList p;
int j=1;
p=L->next;
while(p && j<=L->length)
{
if(p->rd.num < rd.num)
{
j++;
p=p->next;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -