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

📄 liabrary.c

📁 C语言的代码,图书管理系统,功能多多,借书还书管理员等等功能.
💻 C
📖 第 1 页 / 共 3 页
字号:
		for(i = 0; i < total; i++)
		{
			if(strstr(p->name,n) != NULL)
			{
				flag = 0;
				printM(p);              /*调用打印会员信息函数*/
				printf("\n确定要删除吗?\n是输入1,否输入2.\n\n请选择:");
				scanf("%d",&t);

				if(t == 1)             /*删除该会员对应指针节点*/
				{
					if(p == membershead)
					{
						p3 = p;
						membershead = p2;
						p = membershead;
						p1 = p;
						if(p2 != NULL)
							p2 = p2->nextM;
						totalMember--;
						printf("\t%s成功删除",p3->memberID);
					}
					else
					{
						p3 =p;
						p1->nextM = p->nextM;
						p = p->nextM;
						if(p2 != NULL)
							p2 = p2->nextM;
						totalMember--;
						printf("\t%s成功删除",p3->memberID);
					}
				}
				else
				{
					p1 = p;
					p = p->nextM;
					if(p2 !=NULL)
						p2 = p2->nextM;
				}
			}
			else
			{
				p1 = p;
				p = p->nextM;
				if(p2 !=NULL)
					p2 = p2->nextM;
			}
		}
	}

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

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

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

		p = membershead;
		p1 = p;
		p2 = p->nextM;
        
		for(i = 0; i < total; i++)
		{
			if(strcmp(p->memberID,ID) == 0)
			{
				flag = 0;
				printM(p);               /*调用打印会员信息函数*/
				printf("\n确定要删除吗?\n是输入1,否输入2.\n\n请选择:");
				scanf("%d",&t);

				if(t == 1)
				{
					if(p == membershead)           /*删除该会员结点指针*/
					{
						p3 = p;
						membershead = p2;
						totalMember--;
						printf("\t%s成功删除",p3->memberID);break;
					}
					else
					{
						p3 =p;
						p1->nextM = p->nextM;
						totalMember--;
						printf("\t%s成功删除",p3->memberID);break;
					}
				}
				else
				{
					p1 = p;
					p = p->nextM;
					if(p2 !=NULL)
						p2 = p2->nextM;
				}
			}
			else
			{
				p1 = p;
				p = p->nextM;
				if(p2 !=NULL)
					p2 = p2->nextM;
			}
		}
	}

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

void delMember()      //删除会员函数   
{
	int n;

	for(n = 1; n != 0; )
	{
		menu6();                 /*调用删除会员目录函数*/

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

		switch(n)
		{
		case 1:
			delByMName();break;              /*按会员名查找并删除*/
		case 2:
			delByMID();break;                /*按会员ID查找并删除*/
		case 0:
			           break;               /*返回上一层*/
        default:
			printf("输入有误,请重新输入.");break;
		}
	}
}

void listBook()                //列出所有图书信息函数
{
	Book *p;
	int i;

	p = bookshead;

	if(totalBook == 0)
	{
		printf("\t图书库没有书.\n");
	    getch();
	}
	else
	{
		printf("图书列表如下:");
		for(i = 0; i < totalBook; i++)
		{
			printB(p);               /*调用打印图书信息函数*/
			p = p->nextB;
		}
		getch();
	}
}

void listMember()          //列出所有会员信息函数
{
	Member *m;
	int i;

	m = membershead;

	if(totalMember == 0)
	{
		printf("\t没有注册会员.\n\n");
	    getch();
	}
	else
	{
		printf("会员列表如下:");
		for(i = 0; i < totalMember; i++)
		{
			printM(m);         /*调用打印会员信息函数*/
			m = m->nextM;
		}
		getch();
	}
}

void rewritepassword1(Manager *p)         //修改当前管理员密码函数
{
	char passw0[100], passw1[100], passw2[100];
	int i = 0, flag = 0, t = 1;

	for( ; t == 1; )
	{
		printf("\t旧密码:");           
		for(i = 0 ; ; )
		{
			passw0[i] = getch();			
			if(passw0[i] == '\r')
				break;
			else
			{
				if(i == 0)
				{
					if(passw0[i] == 8)
						;
					else
					{
						i++;
                        printf("*");
					}
				}
				else
				{
					if(passw0[i] == 8)
					{
						i--;
						printf("\b \b");
					}
					else
					{
						i++;
                        printf("*");
					}
				}
			}
		}
        passw0[i]='\0';

		printf("\n\t新密码(6位,英文字母或0-9的数字组成):");          /*输入新密码*/
		for(i = 0 ; ; )
		{
			passw1[i] = getch();			
			if(passw1[i] == '\r')
				break;
			else
			{
				if(i == 0)
				{
					if(passw1[i] == 8)
						;
					else
					{
						i++;
                        printf("*");
					}
				}
				else
				{
					if(passw1[i] == 8)
					{
						i--;
						printf("\b \b");
					}
					else
					{
						i++;
                        printf("*");
					}
				}
			}
		}
        passw1[i]='\0';

		printf("\n\t再次输入新密码:");                        /*再次输入确认新密码*/
		for(i = 0 ; ; )
		{
			passw2[i] = getch();			
			if(passw2[i] == '\r')
				break;
			else
			{
				if(i == 0)
				{
					if(passw2[i] == 8)
						;
					else
					{
						i++;
                        printf("*");
					}
				}
				else
				{
					if(passw2[i] == 8)
					{
						i--;
						printf("\b \b");
					}
					else
					{
						i++;
                        printf("*");
					}
				}
			}
		}
        passw2[i]='\0';

        if(strcmp(passw0,p->password) == 0)               /*检验两次新密码的输入是否一致*/
		{
			if(strcmp(passw1,passw2) == 0)
			{
				flag = 1;break;
			}
			else
				printf("\n两次输入的密码不一样.\n");
		}
		else
			printf("\n密码错误.\n");
	}

	if(flag == 1)          /*调用strcpy() 函数修改密码*/
	{
		strcpy(p->password,passw1);           
		printf("\n密码修改成功!");
	}
	getch();
}

int textManagerID(char ID[])          //验证管理员ID函数      
{
	Manager *p;
	int i;

	if(totalManager == 0)
		return 0;
	else
	{
		p = managershead;

		for(i = 0; i < totalManager; i++)
		{
			if(strcmp(p->name,ID) == 0)
				return 1;
			else
				p = p->next;
		}

		return 0;
	}

	return 0;
}

void newmanager()            //创建新管理员函数
{
	Manager *p, *p1;
	int i = 0;
	char name[21];
	char n[21];
	char passw1[100], passw2[100];
	struct MANAGER *next = NULL;


	p = (Manager*)malloc(sizeof(Manager));

	printf("管理员ID:");
	scanf("%s",name);
	printf("\t密码(6位,英文字母或0-9的数字组成):");
	for(i = 0 ; ; )
		{
			passw1[i] = getch();			
			if(passw1[i] == '\r')
				break;
			else
			{
				if(i == 0)
				{
					if(passw1[i] == 8)
						;
					else
					{
						i++;
                        printf("*");
					}
				}
				else
				{
					if(passw1[i] == 8)
					{
						i--;
						printf("\b \b");
					}
					else
					{
						i++;
                        printf("*");
					}
				}
			}
		}
        passw1[i]='\0';

    printf("\n\t再次输入密码:");
	for(i = 0 ; ; )
		{
			passw2[i] = getch();			
			if(passw2[i] == '\r')
				break;
			else
			{
				if(i == 0)
				{
					if(passw2[i] == 8)
						;
					else
					{
						i++;
                        printf("*");
					}
				}
				else
				{
					if(passw2[i] == 8)
					{
						i--;
						printf("\b \b");
					}
					else
					{
						i++;
                        printf("*");
					}
				}
			}
		}
        passw2[i]='\0';
	
	for( ; textManagerID(name) == 1; )
	{
		printf("\n管理员ID已存在,请重新输入.\n");
		printf("\t管理员ID:");
	    scanf("%s",n);
		strcpy(name,n);
	}

	for( ; strcmp(passw1,passw2) != 0; )
	{
		printf("\n\t两次输入的密码不一样,请重新输入.");
		printf("\n\t密码(6位,英文字母或0-9的数字组成):");
	    while((passw1[i] = getch()) != '\r')
		{
		    i++;
		    printf("*");
		}
        passw1[i] = '\0';

		i = 0;                            /*把i重新置零*/

        printf("\n\t再次输入密码:");
	    while((passw2[i] = getch())!='\r')
		{
	        i++;
		    printf("*");
		}
        passw2[i] = '\0';

		i = 0;                              /*把i重新置零*/
	}
    strcpy(p->name,name);
	strcpy(p->password,passw1);

	if(totalManager == 0)
	{
		managershead = p;
		totalManager++;

		printf("管理员申请成功!\n");
		getch();
	}
	else
	{
		p1 = managershead;

		for(i = 1; i < totalManager; i++)
			p1 = p1->next;

		p1->next = p;
		totalManager++;

		printf("管理员申请成功!");
		getch();
	}
}

void manager()              //管理员函数
{
	int n;
	Manager *mp;

	mp = enterpassword1();

	if(mp != NULL)
	{
		for(n = 1; n != 0; )
		{
			menu2();                   /*调用显示管理员目录函数*/

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

			switch(n)
			{
			case 1:
				addBook();break;                  /*新增一本图书,调用对应函数*/
			case 2:
				delBook();break;                  /*删除图书,调用对应函数*/
			case 3:
				consultBook();break;              /*查询图书,调用对应函数*/
			case 4:
				consultMember();break;            /*查询会员,调用对应函数*/
			case 5:
				delMember();break;                /*删除会员,调用对应函数*/
			case 6:
                listBook();break;                 /*查看所有图书信息,调用对应函数*/
			case 7:
				listMember();break;               /*查看所有会员信息,调用对应函数*/  
			case 8:
				rewritepassword1(mp);break;       /*修改管理员密码,调用对应函数*/ 
			case 9:
				newmanager();break;               /*创建新管理员,调用对应函数*/
			case 0:
				           break;                 /*返回上一层*/
            default :
				printf("输入有误,请重新输入.");break;
			}
		}
	}
}

Book* loadBook()          //从文件载入图书信息
{
	FILE *fp;
	int i;
	Book *p, *p1;

	fp = fopen("books.txt", "r");
	if (fp == NULL)
	{
		printf("Can't open books.txt");
		return NULL;
	}

	fscanf(fp,"%d%*c",&totalBook);

	p = (Book*)malloc(sizeof(Book));
	bookshead = p;
	if(totalBook != 0)
	fscanf(fp,"%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",p->name,p->author,p->year,p->publisher,&p->page,&p->status,&p->bookNum,&p->price);//*c是为了除去回车键

	for(i = 1; i < totalBook; i++)
	{
		p1 = p;
		p = (Book*)malloc(sizeof(Book));
		p1->nextB = p;
		fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",p->name,p->author,p->year,p->publisher,&p->page,&p->status,&p->bookNum,&p->price);//*c是为了除去回车键
	}
	fclose(fp);
	printf("图书载入成功!\n");
 
	return bookshead;
}

Member* loadMember()          //从文件载入读者信息
{
	FILE *fp;
	int i, j;
	Member *p, *p1;
	Book b;

	fp = fopen("members.txt", "r");
	if (fp == NULL)
	{
		printf("Can't open books.txt");
		return NULL;
	}

	fscanf(fp,"%d%*c",&totalMember);

	p = (Member*)malloc(sizeof(Member));
	membershead = p;

	if(totalMember != 0)
	{
        fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c",p->name,p->memberID,p->password,p->phoneNum,&p->borrowNum,&p->sex);//*c是为了除去回车键
        for(j = 0; j < p->borrowNum; j++)
		{
			b = p->book[j];
			fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",b.name,b.author,b.year,b.publisher,&b.page,&b.status,&b.bookNum,&b.price);//*c是为了除去回车键
		}
	}

	for(i = 1; i < totalMember; i++)
	{
		p1 = p;
		p = (Member*)malloc(sizeof(Member));
		p1->nextM = p;
		fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c",p->name,p->memberID,p->password,p->phoneNum,&p->borrowNum,&p->sex);//*c是为了除去回车键
	    for(j = 0; j < p->borrowNum; j++)
		{
			b = p->book[j];
			fscanf(fp, "%s%*c%s%*c%s%*c%s%*c%d%*c%d%*c%ld%*c%f%*c",b.name,b.author,b.year,b.publisher,&b.page,&b.status,&b.bookNum,&b.price);//*c是为了除去回车键
		}
	}

	fclose(fp);
	printf("读者载入成功!\n");
 
	return membershead;
}

void menu1()                 //显示图书管理系统主界面目录函数
{
	system("cls");
	printf("--------------欢迎进入图书管理系统---------------\n");
	printf("\t注册会员:%ld",totalMember);
    printf("\t\t藏书量:%ld\n",totalBook);
	printf("\t\t1)管理员登陆.\n");
	printf("\t\t2)会员登陆.\n");
	printf("\t\t3)会员注册.\n");
	printf("\t\t4)系统简介.\n");
	printf("\t\t0)退出.\n");
}

void menu7()                  //显示会员界面目录函数
{
	system("cls");
    printf("--------------欢迎进入读者系统---------------");
    printf("\n\t注册读者:%ld",totalMember);
	printf("\n\t\t1)我的信息.\t");
	printf("4)还书.\n");
	printf("\t\t2)查询书目.\t");
	printf("5)修改密码.\n");
	printf("\t\t3)借书.\t\t");
	printf("0)返回.\n");
}

Member* enterpassword2()          //读者登陆输入密码函数
{
	int i = 0, j = 0, flag = 1, t;
	char ID[20], passw[100];
	Member *p;

	p = membershead;

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

	for( ; t != 2; )
	{
		printf("\tID(即学号):");
		scanf("%s",ID);
		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("*");
					}
				}

⌨️ 快捷键说明

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