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

📄 liabrary.c

📁 C语言的代码,图书管理系统,功能多多,借书还书管理员等等功能.
💻 C
📖 第 1 页 / 共 3 页
字号:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "memory.h"
#include "conio.h"
#define Member struct MEMBER
#define Book struct BOOK
#define Manager struct MANAGER

struct BOOK     //图书结构体
{
	char name[51];
	char author[51];
	int long bookNum;
	char year[20];
	int page;
	char publisher[51];
	float price;
	int status;
	struct BOOK *nextB;
};

struct MEMBER   //会员结构体
{
	char name[51];
	char memberID[20];
	int sex;
	char phoneNum[20];
    int borrowNum;
	char password[20];
    Book book[10];     
	struct MEMBER *nextM;
};

struct MANAGER   //管理员结构体
{
	char name[21];
	char password[20];
	struct MANAGER *next;
};

Book* bookshead = NULL;
Member* membershead = NULL;
Manager* managershead = NULL;

int long totalBook = 0;
int long totalMember = 0;
int totalManager = 0;

Manager* enterpassword1()     //检验管理员输入的密码函数
{
	int flag = 1, i = 0, t;
	char name[51], passw[100];
	Manager *mp;

	mp = managershead;
    
	printf("\n\t\t1)登陆.\n\t\t2)退出登陆.\n请选择:");
	scanf("%d",&t);

	for( ; t != 2; )
	{
		printf("\t用户名:");
		scanf("%s",name);
		printf("\t密码:");
		for(i = 0 ; ; )
		{
			passw[i] = getch();			
			if(passw[i] == '\r')
				break;
			else
			{
				if(i == 0)
				{
					if(passw[i] == 8)
						;
					else
					{
						i++;
                        printf("*");
					}
				}
				else
				{
					if(passw[i] == 8)
					{
						i--;
						printf("\b \b");
					}
					else
					{
						i++;
                        printf("*");
					}
				}
			}
		}
        passw[i]='\0';

		for(i = 0; i < totalManager; i++)
		{
			if(strcmp(mp->name,name) == 0)              //若找到该管理员,则进入密码验证          
			{
				flag = 0;
				if(strcmp(mp->password,passw) == 0)
					return mp;
				else
				{
					printf("\n密码错误,请重新输入.\n");break;        //跳出第二个for循环
				}
			}
			else
				mp = mp->next;
		}

		if(flag == 1)
			printf("\n管理员不存在.");

		printf("\n\t\t1)登陆.\n\t\t2)退出登陆.\n请选择:");
	    scanf("%d",&t);		
	}

    getch();
	return NULL;
}

void menu2()              //显示管理员系统目录函数
{
	system("cls");
	printf("--------------欢迎进入管理员系统---------------");
    printf("\n\t注册管理员:%d",totalManager);
	printf("\n\t\t1)增加图书.\t");
	printf("6)查看所有书目.\n");
	printf("\t\t2)删除图书.\t");
	printf("7)查看所有读者.\n");
	printf("\t\t3)查询图书.\t");
	printf("8)修改密码.\n");
	printf("\t\t4)查询会员.\t");
	printf("9)创建新管理员.\n");
	printf("\t\t5)删除会员.\t");
	printf("0)返回.\n");
}

Book *writeB(Book* b)           //建立某本书的一个指针,以待使用的函数
{
	char name[51];
	char author[51];
	int long bookNum;
	char year[20];
	int page;
	char publisher[51];
	float price;
	int status = 1;

	printf("\t书名:");
	scanf("%s",name);
	printf("\t作者:");
	scanf("%s",author);
	printf("\t出版日期(如2008.4.1):");
	scanf("%s",year);
	printf("\t出版社:");
	scanf("%s",publisher);
	printf("\t总页数:");
	scanf("%d",&page);
	printf("\t价格:");
	scanf("%f",&price);
	printf("\t编码:");
	scanf("%ld",&bookNum);

	strcpy(b->name,name);
	strcpy(b->author,author);
	strcpy(b->year,year);
	strcpy(b->publisher,publisher);
	b->page = page;
	b->price = price;
    b->bookNum = bookNum;
	b->status = status; 
	b->nextB = NULL;

	return b;
}

void addBook()           //新增图书函数
{
	Book *p, *p1;
	int i;

	p = (Book*)malloc(sizeof(Book));
	p = writeB(p);

	if( totalBook == 0)
	{
		bookshead = p;
		totalBook++;
	}
	else
	{
		p1 = bookshead;                  //已追加表尾方式插入新书指针      
		for( i = 1; i < totalBook; i++)
			p1 = p1->nextB;
		p1->nextB = p;
		totalBook++;
	}

	printf("\n新书%s,已经增加!\n",p->name);
	getch();
}

void printB(Book *b)         //打印图书信息函数
{
	printf("\n\t书名:%s\t",b->name);
	 
	if(b->status == 1)
		printf("在馆\n");
	else
		printf("借出\n");

	printf("\t作者:%s\n",b->author);
    printf("\t编码:%ld\n",b->bookNum);
	printf("\t出版社:%s\n",b->publisher);
	printf("\t出版日期:%s\n",b->year);
	printf("\t总页数:%d\n",b->page);
	printf("\t价格:%.2f\n",b->price);
}

void menu3()              //目录选择删除图书的方式的函数
{
	printf("\t\t1)按书名查找并删除图书.\n");
	printf("\t\t2)按书编号查找并删除图书.\n");
	printf("\t\t0)返回.\n");
}

void delByName()          //按书名删除图书函数
{
	char n[51];
	int i, t, flag = 1, total = totalBook;
	Book *p, *p1, *p2, *p3;

	if(totalBook == 0)
		printf("\t图书库没有书.\n\n");
	else
	{
		printf("输入要删除的书的书名:");
		scanf("%s",n);

		p = bookshead;
		p1 = p;
		p2 = p->nextB;

		for(i = 0; i < total; i++)           //查找要删除的图书
		{
			if(strstr(p->name,n) != NULL)
			{
				flag = 0;
                printB(p);                  //调用打印图书信息函数
				printf("\n确定要删除这本书吗?\n是输入1,否输入2.\n\n请选择:");				
				scanf("%d",&t);

				if(t == 1)                 //删除图书
				{
					if(p == bookshead)
					{
						p3 = p;
						bookshead = p2;
						p = bookshead;
						p1 = p;
						if(p2 != NULL)
							p2 = p2->nextB;
						totalBook--;
						printf("\t%s删除成功.\n",p3->name);
					}
					else
					{
						p3 = p;
						p1->nextB = p->nextB;
						p = p->nextB;
						if(p2 != NULL)
							p2 = p2->nextB;
						totalBook--;
						printf("\t%s删除成功.\n",p3->name);
					}
				}
				else
				{
					p1 = p;
					p = p->nextB;
					if(p2 != NULL)
						p2 = p2->nextB;
				}
			}
			else
			{
				p1 = p;
				p = p->nextB;
				if(p2 != NULL)
					p2 = p2->nextB;
			}
		}
	}

	if((flag == 1) && (totalBook != 0))
		printf("\t没有找到该书的记录.\n");
}

void delByNum()                 //按书编号删除图书函数
{
	int num, i, t, flag = 1, total = totalBook;
	Book *p, *p1, *p2, *p3;

	if(totalBook == 0)
		printf("\t图书库没有书.\n\n");
	else
	{
		printf("输入要删除的书的编码:");
		scanf("%d",&num);    

		p = bookshead;
		p1 = p;
		p2 = p->nextB;

		for(i = 0; i < total; i++)
		{
			if(p->bookNum == num)
			{
				flag = 0;
				printB(p);                 //调用打印图书信息函数
				printf("\n确定要删除这本书吗?\n是输入1,否输入2.\n\n请选择:");					
				scanf("%d",&t);
				if(t == 1)
				{
					if(p == bookshead)
					{
						p3 = p;
						bookshead = p2;
						totalBook--;
						printf("\t%s删除成功.\n",p3->name);
						break;
					}
					else
					{
						p3 = p;
						p1->nextB = p->nextB;
						totalBook--;
						printf("\t%s删除成功.\n",p3->name);
						break;
					}
				}
				else
					break;
			}
			else
			{
				p1 = p;
				p = p->nextB;
				if(p2 != NULL)
					p2 = p2->nextB;
			}
		}
	}

	if((flag == 1) && (totalBook != 0))
		printf("\t没有找到该书的记录.\n");
}

void delBook()           //删除图书函数
{
	int n;

	for(n = 1; n != 0; )
	{
		menu3();           //调用显示删除图书目录函数

		printf("请选择:");
		scanf("%d",&n);

		switch(n)
		{
		case 1:
			delByName();break;          /*按书名查找并删除*/            
		case 2:
			delByNum();break;           /*按书编号查找并删除*/  
		case 0:
			           break;           /*返回上一层*/  
        default:
			printf("输入有误,请重新输入.");break;
		}
	}
}

void menu4()              //显示查询图书目录函数
{
	system("cls");
	printf("\n\t\t1)按书名查询.\n");
	printf("\t\t2)按编码查询.\n");
	printf("\t\t3)按作者查询.\n");
	printf("\t\t0)返回.\n");
}

void queryByName()         //按书名查找图书函数
{
	char n[51];
	Book *p;
	int flag = 1, i;

	if(totalBook == 0)
	{
		printf("\t图书库没有书.\n");
		getch();
	}
	else
	{
		printf("请输入你要查的书名:");
		scanf("%s",n);

		p = bookshead;

		for(i = 0; i < totalBook; i++)
		{
			if(strstr(p->name,n) != NULL)
			{
				flag = 0;
				printB(p);
				p = p->nextB;
			}
			else
				p = p->nextB;
		}
		getch();
	}

	if((flag == 1) && (totalBook != 0))
	{
		printf("\t没有这本书的记录.");
		getch();
	}
}

void queryByNum()              //按书编号查找图书函数
{
	int num, flag = 1, i;
    Book *p;

	if(totalBook == 0)
	{
		printf("\t图书库没有书.\n");
		getch();
	}
	else
	{
		printf("请输入你要查的书号:");
		scanf("%d",&num);

		p =bookshead;

		for(i = 0; i < totalBook; i++)
		{
			if(num == p->bookNum)
			{
				flag = 0;
				printB(p);             /*调用打印图书信息函数*/  
				break;                 /*编码是唯一的,找到一本满足立即跳出*/
			}
			else
				p = p->nextB;
		}
		getch();
	}

	if((flag == 1) && (totalBook != 0))
	{
		printf("\t没有这本书的记录.");
		getch();
	}
}

void queryByAuthor()                 //按作者名查找图书函数
{
	char auth[51];
	int flag = 1, i;
	Book *p;

	if(totalBook == 0)
	{
		printf("\t图书库没有书.\n");
		getch();
	}
	else
	{
		printf("输入作者名:");
		scanf("%s",auth);

		p = bookshead;

		for(i = 0; i < totalBook; i++)
		{
			if(strcmp(p->author,auth) == 0)
			{
				flag = 0;
				printB(p);             /*调用打印图书信息函数*/ 
			    p = p->nextB;
			}
			else
				p = p->nextB;
		}
		getch();
	}

	if((flag == 1) && (totalBook != 0))
	{
		printf("\t没有这名作者的书.");
		getch();
	}
}

void consultBook()          //查找图书函数
{
	int n;

	for(n = 1; n != 0; )
	{
		menu4();            /*调用显示查询图书目录函数*/

		printf("请选择:");
		scanf("%d",&n);

		switch(n)
		{
		case 1:
			queryByName();break;         /*按书名查询,调用对应函数*/
		case 2:
			queryByNum();break;          /*按编码查询,调用对应函数*/
		case 3:
			queryByAuthor();break;       /*按作者查询,调用对应函数*/
		case 0:
			                break;       /*返回上一层*/
        default:
			printf("输入有误,请重新输入.");break;
		}
	}
}

void menu5()             //显示查询会员目录函数
{
	printf("\n\t\t1)按会员名查询.\n");
	printf("\t\t2)按会员ID查询.\n");
	printf("\t\t0)返回.\n");
}

void printM(Member *m)            //打印会员信息函数
{
	int i;
	Book p;

	printf("\n\t姓名:%s\n",m->name);	
	printf("\t帐号:%s\n",m->memberID);
	printf("\t性别:");
	if(m->sex == 1)
		printf("男\n");
	else
		printf("女\n");

    printf("\t密码:%s\n",m->password);	
	printf("\t已借:%d\t",m->borrowNum);
	printf("\t还可借:%d\n",(10 - m->borrowNum));
	printf("\t电话:%s\n",m->phoneNum);

	for(i = 0; i < m->borrowNum; i++)
	{
		p = m->book[i];
		printf("\n\t书名:%s\t",p.name);
		printf("书号:%ld\n",p.bookNum);
		printf("\t作者:%s\t",p.author);
		printf("出版社:%s\n",p.publisher);
		printf("\t页数:%d\t\n",p.page);
	}
	printf("\n\t------------------------------");
}

void queryByMName()    //按会员名字查找会员函数
{
	char n[51];
	int flag = 1, i;
	Member *p;

	if(totalMember == 0)
		printf("\t没有注册会员.\n");
	else
	{
		printf("输入要查询的会员名:");
		scanf("%s",n);

		p = membershead;

		for(i = 0; i < totalMember; i++)
		{
			if(strstr(p->name,n) != NULL)
			{
				flag = 0;
				printM(p);
				p = p->nextM;
			}
			else
				p = p->nextM;
		}
	}

	if((flag == 1) && (totalMember != 0))
		printf("\t会员不存在.");
}

void queryByMID()           //按会员ID查找会员函数
{
	char ID[20];
	int flag, i;
	Member *p;

	if(totalMember == 0)
		printf("\t没有注册会员.\n");
	else
	{
		printf("请输入要查询的ID:");
		scanf("%s",ID);

		p = membershead;

		for(i = 0; i < totalMember; i++)
		{
			if(strcmp(p->memberID,ID) == 0)
			{
				flag = 0;
				printM(p);
				break;           //ID是唯一的,找到满足的立即跳出
			}
			else
				p = p->nextM;
		}
	}

	if((flag == 1) && (totalMember != 0))
		printf("\tID不存在.");
}

void consultMember()               //查找会员函数
{
	int n;

	for(n = 1; n != 0; )
	{
		menu5();

		printf("请选择:");
		scanf("%d",&n);

		switch(n)
		{
		case 1:
			queryByMName();break;                   //按名字查询会员
		case 2:
			queryByMID();break;                    //按帐号查询会员
		case 0:
			              break;                   //返回上一层
		default:
			printf("输入有误,请重新输入.");break;
		}
	}
}

void menu6()                          //显示删除会员目录函数
{
	printf("\n\t\t1)按会员名查找并删除.\n");
	printf("\t\t2)按会员ID查找并删除.\n");
	printf("\t\t0)返回.\n");
}

void delByMName()             //按会员名删除会员函数
{
	char n[51];
	int i, t, flag = 1, total = totalMember;
	Member *p, *p1, *p2, *p3;

	if(totalMember == 0)
		printf("\t没有注册会员.\n\n");
	else
	{
		printf("输入要删除的会员的名:");
		scanf("%s",n);

		p = membershead;
		p1 = p;
		p2 = p->nextM;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -