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

📄 liabrary.c

📁 C语言的代码,图书管理系统,功能多多,借书还书管理员等等功能.
💻 C
📖 第 1 页 / 共 3 页
字号:
			}
		}
        passw[i]='\0';
         
		for(j = 0; j < totalMember; j++)
		{
			if(strcmp(p->memberID,ID) == 0)
			{
				flag = 0;
				if(strcmp(p->password,passw) == 0)
					return p;
				else
				{
					printf("\n密码错误,请重新输入.\n");break;  //跳出第二个for循环
				}
			}
			else
				p = p->nextM;
		}

		if(flag == 1)
			printf("\nID不存在.");

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

    getch();
	return NULL;
}
void myInformation(Member *m)                 //会员查看借书信息
{
	printM(m);                                /*调用打印会员相关信息函数*/
	getch();
}

Book* searchBook(int num)                    //按bookNum查找图书结点函数
{
	int i;
	Book *p;

	p = bookshead;

	for(i = 0; i < totalBook; i++)
	{
		if(num == p->bookNum)
		    return p;
		else
			p = p->nextB;
	}

	return NULL;
}

void borrowBook(Member *m)                 //借阅图书函数
{
	int num;
	Book *b, *b1;

	printf("输入要借书的编码:");
	scanf("%d",&num);
    
	b = searchBook(num);                /*调用查找图书结点函数*/

	if(b != NULL)
	{
		if(m->borrowNum < 10)
		{
			b->status = 0;

		    b1 = &m->book[m->borrowNum];

		    strcpy(b1->name,b->name);
		    strcpy(b1->author,b->author);
		    b1->bookNum = b->bookNum;
		    strcpy(b1->year,b->year);
		    b1->page = b->page;
		    strcpy(b1->publisher,b->publisher);
		    b1->price = b->price;
		    b1->status = b->status;
		    m->borrowNum++;

			printf("%s借书成功!",b->name);
	        getch();
		}
		else
		{
			printf("你已借满10本书.");
			getch();
		}
	}
	else
	{
		printf("没有你要借的书.");
		getch();
	}
	
}

void returnBook(Member *m)        //归还图书函数
{
	int num, i;
	Book *b, *p;

	printf("要还书的编号:");
	scanf("%d",&num);

	b = searchBook(num);            /*调用查找图书结点函数*/

	if(b != NULL)
	{
		b->status = 1;
		for(i = 0; i < m->borrowNum; i++)
		{
			p = &m->book[i];
			if(p->bookNum == num)
			{
				if(i != (m->borrowNum - 1))
				{
					m->book[i] = m->book[m->borrowNum - 1];    
					m->borrowNum--;
					printf("%s已归还.",b->name);
				}
				else
				{
					m->borrowNum--;
					printf("%s已归还.",b->name);
				}
			}
		}
	}
	getch();
}

void rewritepassword2(Member *m)                //会员修改密码函数
{
	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,m->password) == 0)                          /*检验两次新密码的输入是否一致*/
		{
			if(strcmp(passw1,passw2) == 0)
			{
				flag = 1;break;
			}
			else
				printf("\n两次输入的密码不一样.\n");
		}
		else
			printf("\n密码错误.\n");
	}

	if(flag == 1)
	{
		strcpy(m->password,passw1);
		printf("\n密码修改成功!");
	}
	getch();
}

void member()                //会员操作函数
{
	int n;
	Member *mp;

	mp = enterpassword2();                  /*调用输入会员密码函数,并把返回值赋给mp*/

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

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

			switch(n)
			{
			case 1:
				myInformation(mp);break;          /*查询会员相关信息,调用对应函数*/
			case 2:
				consultBook();break;              /*查找图书,调用对应函数*/
			case 3:
				borrowBook(mp);break;             /*借阅图书,调用对应函数*/
			case 4:
				returnBook(mp);break;             /*归还图书,调用对应函数*/
			case 5:
				rewritepassword2(mp);break;       /*修改密码,调用对应函数*/
			case 0:
                        break;                    /*返回上一层*/
			default:
				printf("输入有误,请重新输入.");break;
			}
		}
	}
}

int textID(char ID[])        //检验会员ID是否存在函数
{
	Member *p;
	int i;

	if(totalMember == 0)
		return 0;
	else
	{
		p = membershead;

		for(i = 0; i < totalMember; i++)
		{
			if(strcmp(p->memberID,ID) == 0)
				return 1;
			else
				p = p->nextM;
		}

		return 0;
	}

	return 0;
}

Member* writeM(Member *m)         //填写会员信息函数
{
	char ch[4], passw1[100], passw2[100];
	int i = 0;
    
	char name[51];
	char memberID[20];
	char ID[20];
	int sex;
	char phoneNum[20];
    int borrowNum = 0;
	char password[20] = {'0'};
	Member *nextM = NULL;

	printf("\t姓名:");
	scanf("%s",name);
	printf("\tID(即学号):");
	scanf("%s",memberID);

	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';

	printf("\n\t性别(男或女):");
	scanf("%s",ch);
	if((strcmp(ch,"男") == 0))
		sex = 1;
	else
		sex = 0;

	printf("\t电话号码:");
	scanf("%s",phoneNum);
	
	for( ; textID(memberID) == 1; )                /*检验ID是否已存在*/
	{
		printf("ID已存在,请重新输入.\n");
		printf("\tID(即学号):");
	    scanf("%s",ID);
		strcpy(memberID,ID);
	}

	for( ; strcmp(passw1,passw2) != 0; )
	{
		printf("\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重新置零*/
	}

	for(i = 0; i < 10; i++)
	{
		strcpy(m->book[i].name,"0");
		strcpy(m->book[i].author,"0");
		m->book[i].bookNum = 0;
		strcpy(m->book[i].year,"0");
		m->book[i].page = 0;
		strcpy(m->book[i].publisher,"0");
		m->book[i].price = 0;
		m->book[i].status = 0;
	}

	strcpy(m->name,name);
	strcpy(m->memberID,memberID);
	strcpy(m->phoneNum,phoneNum);
	strcpy(m->password,passw1);
	m->sex = sex;
    m->borrowNum = borrowNum;
	m->nextM = nextM;

	return m;
}

void newMember()           //申请新会员函数
{
	Member *p, *p1;
	int i;

	p = (Member*)malloc(sizeof(Member));
	p = writeM(p);               /*调用填写会员信息函数*/

	if(totalMember == 0)
	{
		membershead = p;
		totalMember++;

		printf("会员申请成功!\n");
		getch();
	}
	else
	{
		p1 = membershead;

		for(i = 1; i < totalMember; i++)
			p1 = p1->nextM;

		p1->nextM = p;
		totalMember++;

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

void about()          //本系统的简介
{
	printf("^@^欢迎使用该图书馆管理系统\n\t");
	printf("\b\b\b\b本系统是一个图书馆借还书管理系统,界面友好。应用本系统,\n");
	printf("\t可以进行新图书的增加,馆内图书的查询,管理员对馆内事务的\n\t管理,");
	printf("同时采用会员制借书,所以本系统有注册会员功能,\n");
	printf("\t也有对应的删除会员和查询会员的功能,还包括有会员对自己借书\n");
	printf("\t情况的查询,以了解自己的借书实况。\n\t\b\b系统创建于2008年5月,创建人为华南农业大学信息学院\n");
	printf("\t07计算机科学与技术3班谢树德、郑佳曼、卢贺龙。最终解释权归\n\t创建人所有。\n\t\t谢谢,祝君好运!");
	getch();
}

void saveBook()          //把图书信息写出文件的函数
{
	FILE *fp;
	Book *p;
	int i;

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

	fprintf(fp, "%d\n", totalBook);

    p = bookshead;

	for(i = 0; i < totalBook; i++)
	{
		fprintf(fp,"%s\n%s\n%s\n%s\n%d\n%d\n%ld\n%f\n",p->name,p->author,p->year,p->publisher,p->page,p->status,p->bookNum,p->price);
		p = p->nextB;
	}

	fclose(fp);
	printf("书本保存成功!\n");
}

void saveMember()         //把读者信息写出文件的函数
{
	FILE *fp;
	Member *p;
    Book b;
	int i, j;

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

	fprintf(fp, "%d\n", totalMember);

    p = membershead;

	for(i = 0; i < totalMember; i++)
	{
		fprintf(fp, "%s\n%s\n%s\n%s\n%d\n%d\n",p->name,p->memberID,p->password,p->phoneNum,p->borrowNum,p->sex);
		for(j = 0; j < p->borrowNum; j++)
		{
			b = p->book[j];
			fprintf(fp,"%s\n%s\n%s\n%s\n%d\n%d\n%ld\n%f\n",b.name,b.author,b.year,b.publisher,b.page,b.status,b.bookNum,b.price);
		}

		p = p->nextM;
	}

	fclose(fp);
	printf("读者保存成功!\n");
}

Manager* loadManager()         //载入管理员信息的函数
{
	FILE *fp;
	int i;
	Manager *p, *p1;


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

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

	p = (Manager*)malloc(sizeof(Manager));
	managershead = p;
	if(totalManager != 0)
	{
        fscanf(fp, "%s%*c%s%*c",p->name,p->password);                 /* *c是为了除去回车键*/
	}

	for(i = 1; i < totalManager; i++)
	{
		p1 = p;
		p = (Manager*)malloc(sizeof(Manager));
		p1->next = p;
		fscanf(fp, "%s%*c%s%*c",p->name,p->password);                /* *c是为了除去回车键*/
	    
	}

	fclose(fp);
	printf("管理员载入成功!\n");
 
	return managershead;
}

void saveManager()             //把管理员信息写出文件函数
{
	FILE *fp;
	Manager *p;
	int i;

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

	fprintf(fp, "%d\n", totalManager);

    p = managershead;

	for(i = 0; i < totalManager; i++)
	{
		fprintf(fp, "%s\n%s\n",p->name,p->password);
		p = p->next;
	}

	fclose(fp);
	printf("管理员保存成功!\n");
}

int main()                   //主函数
{
	int select = 1;

	bookshead = loadBook();
	membershead = loadMember();
	managershead = loadManager();

	for( ; select != 0; )
	{
		menu1();

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

		switch(select)
		{
		case 1:
			manager(); break;
		case 2:		       
			member(); break;			   
		case 3:
			newMember(); break;
		case 4:
			about(); break;
		case 0:      
			break;
		default:         
			printf("输入有误,请重新输入.");getch();break;
		}
	}

	saveBook();
	saveMember();
	saveManager();

	return 0;
}

⌨️ 快捷键说明

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