⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 library.c

📁 图书管理系统开发 主要用到链表知识 很好很强大 欢迎下载!!!
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -