求用c语言编写图书管理系统答案?

求答案代码

要求图书馆li系统能实现图书信息的浏览,删除,查询,添加,修改,排序等功能。

如有帮助,望采纳。点击我回答右上角【采纳】按钮。

#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<conio.h>
#include<stdlib.h>
#define N sizeof(struct BOOK)
 
struct BOOK        //图书信息 
{
	char number[10];   //登录号 
	char name[10];     //书名 
	char author[10];    //作者名 
	char type[10];      //类型 
	char publish[10];  //出版单位 
	char time[8];        //出版时间 
	float price;       //价格 
	int num;         //数量 
	int x;
	struct BOOK *next;   //指针域 
};
typedef struct BOOK Book;
typedef Book *book;	 
 
void HideCursor();    //隐藏光标
void toxy(int x, int y);    //将光标移动到X,Y坐标处
void color(short x);     //设置颜色
void over();             //退出 
void menu();           //菜单 
void input_book();     //图书入库 
void save_book(book p);//将图书信息存入文件 
void find_book();      //查询 
void print_book();    //图书总览 
void del_book();     //删除图书 
void amend_book();    //修改信息 
book ss();
void find_name_book();  //按书名查询 
void find_author_book(); //按作者查询 
void find_number_book();  //按登录号查询
void find_publish_book();  //按出版社查询 
void fuzzy_search();     //模糊查找 
 
void HideCursor()     //隐藏光标
{
 CONSOLE_CURSOR_INFO cursor_info = {1, 0}; 
 SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
 
void color(short x)
{
	if(x>=0&&x<=15)
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
	}
	else
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x);
	}
} 
 
void toxy(int x, int y)      //将光标移动到X,Y坐标处
{
COORD pos = { x , y };
HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(Out, pos); 
}
 
void menu()    //菜单 
{
	do
	{
		system("cls");  //清屏 
		HideCursor();  //隐藏光标 
		color(15);    //设置一个好看的颜色 
		char t;
		toxy(50,5);//将光标移动到(50,5)坐标处
		printf(" 图书查询管理系统");
		toxy(48,8);
		printf("|     1.图书入库      |");
		toxy(48,10);
		printf("|     2.修改信息      |");
		toxy(48,12);
		printf("|     3.删除信息      |");
		toxy(48,14);
		printf("|     4.图书查询      |");
		toxy(48,16);
		printf("|     5.图书总览      |");
		toxy(48,18);
		printf("|     6.退出软件      |");
		t=getch();    //不回显函数 
		switch(t)
		{
			case '1':input_book();break;
			case '2':amend_book();break;
			case '3':del_book();break;
			case '4':find_book();break;
			case '5':print_book();break; 
			case '6':over();break;
			default :break;
		}
	}while(1);
} 
 
book ss()      //将文件中的内容读出到链表中,返回值为表头地址 
{
	FILE *fp;       //文件指针 
	int n=0;
	book head=NULL;
	book p2,p,pr=NULL;
	fp=fopen("mybook","ab+");     //以只读的方式打开文件 
	if(fp==NULL)
	{
		printf("cannot open file\n");
	}
	while(!feof(fp))        //判断文件位置标志是否移动到文件末尾 
	{
	   n++;
	   	p=(book)malloc(N); //向内存申请一段空间 
	   fread(p,N,1,fp);     //将fp所指向的文件中的内容赋给p 
	   if(n==1)
	   {
	      head=p;
	      p2=p;
	    }
	    else             //创建链表 
	    {
	    	pr=p2;
	    	p2->next=p;
	    	p2=p;
		}
    }
    if(pr!=NULL)
       pr->next=NULL;
    else
       head=NULL;
    fclose(fp);    //关闭文件 
    return head;   //返回头指针 
}
 
void input_book()    //图书录入 
{
	do
	{
		system("cls");
		color(10);
		char t;
		book p;
		p=(book)malloc(N);     //申请空间 
		//输入图书信息
		toxy(48,8);
		printf("请输入图书登录号(小于10位数):");    
		scanf("%s",p->number);getchar();
		toxy(48,10);
		printf("请输入书名(小于10位数):");
		scanf("%s",p->name);getchar();
		toxy(48,12);
		printf("请输入作者名(小于10位数):");
		scanf("%s",p->author);getchar();
		toxy(48,14);
		printf("请输入图书类别(小于10位数):");
		scanf("%s",p->type);getchar();
		toxy(48,16);
		printf("请输入图书出版单位(小于10位数):");
		scanf("%s",p->publish);getchar();
		toxy(48,18);
		printf("请输入图书出版时间(小于8位数):");
		scanf("%s",p->time);getchar();
		toxy(48,20);
		printf("请输入图书价格:");
		scanf("%f",&p->price);getchar();
		toxy(48,22);
		printf("请输入图书数量:");
		scanf("%d",&p->num);
		save_book(p);
		toxy(48,24);
		printf("正在保存....");
		Sleep(500);   //暂停0.5秒 
		system("cls");
		toxy(46,8);
		printf("-------------------------");
		toxy(46,9);
		printf("|                       |");
		toxy(46,10);
		printf("| 保存成功!是否继续?  |");
		toxy(46,12);
		printf("| 1.是             2.否 |");
		toxy(46,13);
		printf("|                       |");
		toxy(46,14);
		printf("-------------------------");
		while(1)    //利用死循环可有效防止其他按键干扰 
		{
			t=getch();
			if(t=='1')
			{
				break;
			 } 
			 else if(t=='2')
			 {
			 	menu();
			 }
		}
	}while(1);
	
} 
 
void amend_book()    //修改图书信息 
{
	do
	{
		system("cls");
		color(10);
		book head,p;
		int i=11,j=0,x;
		char ch,t;
		FILE *fp;    //文件指针 
		char _name[10];
		char number[10];   //登录号 
		char name[10];     //书名 
		char author[10];    //作者名 
		char type[10];      //类型 
		char publish[10];  //出版单位 
		char time[8];        //出版时间 
		float price;       //价格 
		int num;         //数量 
		head=ss();
		p=head;
		toxy(48,10);
		printf("请输入你要修改的图书的书名:");
		gets(_name); 
		while(p!=NULL)    //初始化p->x为0 
		{
			p->x=0;
			p=p->next;
		}
		p=head;    //让p重新指向表头 
		toxy(20,5);
		printf("***********************************************图书信息******************************************************");
		toxy(20,8);
		printf("-------------------------------------------------------------------------------------------------------------");
		toxy(20,9);
		printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
		toxy(20,10);
		printf("-------------------------------------------------------------------------------------------------------------");
		while(p!=NULL)
		{
			if(p!=NULL&&strcmp(p->name,_name)==0)
			{
				toxy(20,i);
				j++;
				printf("%d:%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",j,p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
				p->x=j;    //给符合查询标准的结点标号 
				i++;
			}
			p=p->next;
		}
		if(j==0)                   //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息 
		{ 
			toxy(50,i);
			printf("没有找到相应的信息!(按0返回,按1重新搜索)");
			while(1)               //死循环是为了防止除0和1的其他按键干扰 
			{
				ch=getch();
				if(ch=='0')
				{
					menu();break;
				}
				else if(ch=='1')
				{
					break;
				}
			}
			if(ch=='1')     //如果输入的ch等于1,则结束本次循环 
			   continue;
		}
		while(1)
		{
			toxy(45,i);
			printf("请输入您要修改的图书的编号:");
			scanf("%d",&x);getchar();
			if(x>j||x==0)     
			{
				toxy(45,++i);
				printf("输入错误,请重新输入!");
				Sleep(500);
			}
			else
			{
				break;
			}
		}
		p=head;     //让p重新指向表头 
		while(p!=NULL&&p->x!=x)   //遍历链表查询符合条件的结点 
		{
			p=p->next;
		}
		if(p)    //如果p不为空 
		{
			system("cls");
			//输入要修改的信息 
			toxy(48,8);
			printf("请输入图书登录号(小于10位数):");
			scanf("%s",number);getchar();strcpy(p->number,number);
			toxy(48,10);
			printf("请输入书名(小于10位数):");
			scanf("%s",name);getchar();strcpy(p->name,name);
			toxy(48,12);
			printf("请输入作者名(小于10位数):");
			scanf("%s",author);getchar();strcpy(p->author,author);
			toxy(48,14);
			printf("请输入图书类别(小于10位数):");
			scanf("%s",type);getchar();strcpy(p->type,type);
			toxy(48,16);
			printf("请输入图书出版单位(小于10位数):");
			scanf("%s",publish);getchar();strcpy(p->publish,publish);
			toxy(48,18);
			printf("请输入图书出版时间(小于8位数):");
			scanf("%s",time);getchar();strcpy(p->time,time);
			toxy(48,20);
			printf("请输入图书价格:");
			scanf("%f",&price);getchar();p->price=price;
			toxy(48,22);
			printf("请输入图书数量:");
			scanf("%d",&num);getchar();p->num=num;
		}
		color(7);
		toxy(46,8);
		printf("-------------------------");
		toxy(46,9);
		printf("|                       |");
		toxy(46,10);
		printf("|     是否确认修改?    |");
		toxy(46,12);
		printf("| 1.是             2.否 |");
		toxy(46,13);
		printf("|                       |");
		toxy(46,14);
		printf("-------------------------");
		while(1)   //利用死循环防止其他按键干扰 
		{
			t=getch();
			if(t=='1')
			{
				break;
			} 
			else if(t=='2')
			{
				menu();
			}
		}
		system("cls");
		toxy(46,10);
		printf("正在修改,请稍后....");
		fp=fopen("mybook","wb");   //以只写的方式打开名为mybook的二进制文件,打开的同时清空文件中的内容 
		if(fp==NULL)
		{
			printf("cannot open file"); 
		}
		if(fwrite(head,N,1,fp)!=1)   //将head写入fp所指向的文件中 
		{
			printf("write error!"); 
		}
		fclose(fp);   //关闭文件 
		if(head!=NULL)   //如果head不为空 
		{
			p=head->next;     //让p指向第二个结点 
			fp=fopen("mybook","ab");   //以追加的方式打开文件 
			if(fp==NULL)
			{
				printf("cannot open file");
			}
			while(p!=NULL)
			{
				if(fwrite(p,N,1,fp)!=1)//将p写入fp所指向的文件中
				{
					printf("write error!");
				}
				p=p->next;
			}
			fclose(fp);  //关闭文件 
		}
		Sleep(500);   //暂停0.5秒 
		system("cls");
		toxy(46,10);
		printf("修改成功!即将自动返回主菜单....");
		Sleep(500);
		break;
	}while(1);
}
 
void del_book()   //删除信息 
{
	do
	{
		system("cls");
		color(9);
		FILE *fp;
		book head,p,pre=NULL; 
		int j=0,x,i=11;
		char name[10];
		char t,c,ch;
		head=ss();    //调用函数,返回表头地址 
		toxy(48,10);
		printf("请输入你要删除的图书的书名:");
		scanf("%s",name);
		p=head;
		while(p!=NULL)
		{
			p->x=0;
			p=p->next;
		}
		p=head;
		toxy(20,5);
		printf("***********************************************图书信息******************************************************");
		toxy(20,8);
		printf("-------------------------------------------------------------------------------------------------------------");
		toxy(20,9);
		printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
		toxy(20,10);
		printf("-------------------------------------------------------------------------------------------------------------");
		while(p!=NULL)
		{
			if(p!=NULL&&strcmp(p->name,name)==0)
			{
				toxy(20,i);
				j++;
				printf("%d:%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",j,p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
				p->x=j;
				i++;
			}
			p=p->next;
		}
		if(j==0)                   //如果j=0,即没有进入前面的搜索循环,也就是没有找到相应的信息 
		{ 
			toxy(50,i);
			printf("没有找到相应的信息!(按0返回,按1重新搜索)");
			while(1)               //死循环是为了防止除0和1的其他按键干扰 
			{
				ch=getch();
				if(ch=='0')
				{
					menu();break;
				}
				else if(ch=='1')
				{
					break;
				}
			}
			if(ch=='1')     //如果输入的ch等于1,则结束本次循环 
			   continue;
		}
		while(1)
		{
			toxy(45,i);
			printf("请输入您要删除的图书的编号:");
			scanf("%d",&x);getchar();
			if(x>j||x==0)
			{
				toxy(45,++i);
				printf("输入错误,请重新输入!");
				Sleep(500);
			}
			else
			{
				break;
			}
		}
		color(7);
		toxy(46,8);
		printf("-------------------------");
		toxy(46,9);
		printf("|                       |");
		toxy(46,10);
		printf("|     是否确认删除?    |");
		toxy(46,12);
		printf("| 1.是             2.否 |");
		toxy(46,13);
		printf("|                       |");
		toxy(46,14);
		printf("-------------------------");
		while(1)
		{
			t=getch();
			if(t=='1')
			{
				break;
			} 
			else if(t=='2')
			{
				menu();
			}
		}
		p=head;
		while(p!=NULL&&p->x!=x)
		{
			pre=p;
			p=p->next;
		}
		if(p!=NULL)
		{
			if(pre==NULL)
			{
				head=head->next;
			}
			else
			{
				pre->next=p->next;
			}
		}
		free(p);
		fp=fopen("mybook","wb");
		if(fp==NULL)
		{
			printf("cannot open file"); 
		}
		if(fwrite(head,N,1,fp)!=1)
		{
			printf("write error!"); 
		}
		fclose(fp);
		if(head!=NULL)
		{
			p=head->next;
			fp=fopen("mybook","ab");
			if(fp==NULL)
			{
				printf("cannot open file");
			}
			while(p!=NULL)
			{
				if(fwrite(p,N,1,fp)!=1)
				{
					printf("write error!");
				}
				p=p->next;
			}
			fclose(fp);
		}
		system("cls");
		toxy(46,10);
		printf("正在删除,请稍后....");
		Sleep(500);
		system("cls");
		toxy(46,8);
		printf("-------------------------");
		toxy(46,9);
		printf("|                       |");
		toxy(46,10);
		printf("|  删除成功,是否继续? |");
		toxy(46,12);
		printf("| 1.是             2.否 |");
		toxy(46,13);
		printf("|                       |");
		toxy(46,14);
		printf("-------------------------");
		while(1)
		{
			c=getch();
			if(c=='1')
			{
				break;
			}
			else if(c=='2')
			{
				menu();
			}
		}
	}while(1);
}
 
void print_book()   //图书总览 
{
	system("cls");
	color(6);
	book head,p;
	int i=11;
	int sum=0;
	head=ss();
	toxy(20,5);
	printf("***********************************************图书总览******************************************************");
	toxy(20,8);
	printf("-------------------------------------------------------------------------------------------------------------");
	toxy(20,9);
	printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
	toxy(20,10);
	printf("-------------------------------------------------------------------------------------------------------------");
	if(head==NULL)
	{
		toxy(45,11);
		printf("书库暂时没有书哦~赶快去添加几本吧^_^(按任意键返回)");
		getch();
		menu();
	}
	p=head;
	while(p!=NULL)
	{
		toxy(20,i);
		printf("%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
		i++;
		sum+=p->num;//计算图书总量 
		p=p->next;
	}
	toxy(48,7);
	printf("图书总量为:%d",sum);
	toxy(45,i);
	printf("按任意键返回");
	getch();//不回显函数 
}
 
void find_book()  //查询图书 
{
	do
	{
		system("cls");  //清屏 
		color(8);
		char t;
		toxy(50,5);
		printf(" 图书查询");
		toxy(48,8);
		printf("|     1.书名  查询      |");
		toxy(48,10);
		printf("|     2.作者  查询      |");
		toxy(48,12);
		printf("|     3.登录号查询      |");
		toxy(48,14);
		printf("|     4.出版社查询      |");
		toxy(48,16);
		printf("|     5.模糊  查询      |");
		toxy(50,18);
		printf("按0返回主菜单");
		t=getch();
		switch(t)
		{
			case '0':menu();break;
			case '1':find_name_book();break;
			case '2':find_author_book();break;
			case '3':find_number_book();break;
			case '4':find_publish_book();break;
			case '5':fuzzy_search();break;
			default :break;
		 } 
	}while(1);
}
 
void find_name_book()  //按名字查询 
{
	system("cls");
	color(8);
	book head,p;
	int i=11;
	head=ss();
	char name[10];
	toxy(48,8);
	printf("请输入您要查询图书的书名:");
	gets(name);
	toxy(48,10);
	printf("正在查询....");
	Sleep(500);
	p=head;
	toxy(20,5);
	printf("***********************************************图书总览******************************************************");
	toxy(20,8);
	printf("-------------------------------------------------------------------------------------------------------------");
	toxy(20,9);
	printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
	toxy(20,10);
	printf("-------------------------------------------------------------------------------------------------------------");
	while(p!=NULL)
	{
		if(p!=NULL&&strcmp(p->name,name)==0)
		{
			toxy(20,i);
			printf("%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
			i++;
		}
		p=p->next;
	}
	toxy(45,i);
	printf("按任意键返回!");
	getch();
	find_book();
}
 
void find_author_book()   //按作者名查询 
{
	system("cls");
	color(8);
	book head,p;
	int i=11;
	head=ss();
	char author[10];
	toxy(48,8);
	printf("请输入您要查询图书的作者名:");
	gets(author);
	toxy(48,10);
	printf("正在查询....");
	Sleep(500);
	p=head;
	toxy(20,5);
	printf("***********************************************图书总览******************************************************");
	toxy(20,8);
	printf("-------------------------------------------------------------------------------------------------------------");
	toxy(20,9);
	printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
	toxy(20,10);
	printf("-------------------------------------------------------------------------------------------------------------");
	while(p!=NULL)
	{
		if(p!=NULL&&strcmp(p->author,author)==0)
		{
			toxy(20,i);
			printf("%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
			i++;
		}
		p=p->next;
	}
	toxy(45,i);
	printf("按任意键返回!");
	getch();
	find_book();
}
 
void find_number_book()   //按图书编号查询 
{
	system("cls");
	color(8);
	book head,p;
	int i=11;
	head=ss();
	char number[10];
	toxy(48,8);
	printf("请输入您要查询图书的登录号:");
	gets(number);
	toxy(48,10);
	printf("正在查询....");
	Sleep(500);
	p=head;
	toxy(20,5);
	printf("***********************************************图书总览******************************************************");
	toxy(20,8);
	printf("-------------------------------------------------------------------------------------------------------------");
	toxy(20,9);
	printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
	toxy(20,10);
	printf("-------------------------------------------------------------------------------------------------------------");
	while(p!=NULL)
	{
		if(p!=NULL&&strcmp(p->number,number)==0)
		{
			toxy(20,i);
			printf("%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
			i++;
		}
		p=p->next;
	}
	toxy(45,i);
	printf("按任意键返回!");
	getch();
	find_book();
}
 
void find_publish_book()   //按出版商查询 
{
	system("cls");
	color(8);
	book head,p;
	int i=11;
	head=ss();
	char publish[10];
	toxy(48,8);
	printf("请输入您要查询图书的出版社:");
	gets(publish);
	toxy(48,10);
	printf("正在查询....");
	Sleep(500);
	p=head;
	toxy(20,5);
	printf("***********************************************图书总览******************************************************");
	toxy(20,8);
	printf("-------------------------------------------------------------------------------------------------------------");
	toxy(20,9);
	printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
	toxy(20,10);
	printf("-------------------------------------------------------------------------------------------------------------");
	while(p!=NULL)
	{
		if(p!=NULL&&strcmp(p->publish,publish)==0)
		{
			toxy(20,i);
			printf("%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
			i++;
		}
		p=p->next;
	}
	toxy(45,i);
	printf("按任意键返回!");
	getch();
	find_book();
}
 
void fuzzy_search()   //模糊查询 
{
	system("cls");
	color(8);
	book head,p;
	int i=11;
	head=ss();
	char information[10];
	toxy(48,8);
	printf("请输入您要查询图书的信息:");
	gets(information);
	toxy(48,10);
	printf("正在查询....");
	Sleep(500);
	p=head;
	toxy(20,5);
	printf("***********************************************图书总览******************************************************");
	toxy(20,8);
	printf("-------------------------------------------------------------------------------------------------------------");
	toxy(20,9);
	printf("登录号        书名        作者名         图书类别         出版单位         出版时间          价格        数量");
	toxy(20,10);
	printf("-------------------------------------------------------------------------------------------------------------");
	while(p!=NULL)
	{
		if(p!=NULL&&(strcmp(p->name,information)==0||strcmp(p->author,information)==0||strcmp(p->number,information)==0||strcmp(p->publish,information)==0))
		{
			toxy(20,i);
			printf("%s%14s%14s%14s   %14s   %18s         %.2f%12d\n",p->number,p->name,p->author,p->type,p->publish,p->time,p->price,p->num);
			i++;
		}
		p=p->next;
	}
	toxy(45,i);
	printf("按任意键返回!");
	getch();
	find_book();
}
 
void save_book(book p)   //将p中内容写入文件 
{
	FILE *fp;    //文件指针 
	fp=fopen("mybook","ab");   //以追加的方式打开名字为mybook的二进制文件 
	if(fp==NULL)
	{
		printf("cannot open file");
	}
	if(fwrite(p,N,1,fp)!=1)   //将p所指向的一段大小为N的内容存入fp所指向的文件中 
	{
		printf("write error");
	}
	fclose(fp);    //关闭文件  
 } 
 
void over()       //退出软件 
{
	char t;
	toxy(48,11);
	printf("-----------------------");
	toxy(48,12);
	printf("|   您确定要退出吗?  |");
	toxy(48,14);
	printf("| 1.确定     2.取消   |");
	toxy(48,15);
	printf("-----------------------");
	while(1)
	{
		t=getch();         //输入t
		switch(t)
		{
			case '1':
			system("cls");
		    color(6);
			toxy(48,10);
			printf("正在安全退出....");
			Sleep(1000);     //暂停1秒 
			system("cls");
			color(8);
			toxy(48,10);
			printf("已安全退出软件");
			toxy(48,12);
			printf("谢谢使用!");
			toxy(48,14);
			printf("by-by^_^");
			exit(0);  break; //终止程序 
			case '2':
			menu(); break;   //调用函数,进入菜单 
			default :break;
		}
	}
} 
 
main()   //简洁明了的主函数 
{
	menu();//菜单 
}

 

 如有帮助,望采纳
#include <stdio.h>
#include <stdlib.h>//其中包含system函数
#include <conio.h>//定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
#include <string.h>//定义字符数组
#include <math.h>
#define LEN sizeof(struct book)//有关图书信息的结构体
#define LEN1 sizeof(struct reader)//有关读者信息的结构体
#define LEN2 sizeof(struct land)//有关登录系统的结构体


struct book//图书信息
{
	char num[20],nam[20],aut[20],pub[20],cat[20];
	int  many;
	float price;
	struct book*next;
};

struct reader//读者借阅信息
{
	int jnum;
	char jnam[20],time[20],tsnam[20];
	struct reader *next;
};
struct land//登录信息
{
	int zhanghao;
	char password[20];
	struct land*next;
};



int tjzs();//统计library文本个数函数
void xg(int,char[] );
void mainmenu();//显示主菜单
void tsmenu();//显示图书信息菜单
void jmenu();//显示借阅信息菜单
void lmenu();//显示登录菜单

void main1();// 主菜单功能
void tsmain();//图书菜单功能
void cxts();//查询图书
void zjts();//增加图书
void scts();//删除图书
void llts();//浏览图书

void jmain();//读者借阅信息
void js();//借书
void hs();//还书
void cxjs();//查询借书
void lljs();// 浏览借书情况

void land();//登录功能系统
int xinjian(int,char[] );//创建账号密码
void xgmm();//修改密码
void lmain();//登录界面函数


int tjzs()//统计图书文本个数
{
FILE *fp;
int txcl=0,n;
float tprice=0;
char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'};
fp=fopen("library.txt","r");//打开文件
for (n=0;!feof(fp);n++)//逐个读文件
fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);
n--;
fclose(fp);//关闭文件
return (n);//返回个数
}


int tjdzzs()//统计文读者本个数函数

{
FILE *fp;
int zhenghao=0,n;
char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
fp=fopen("reader.txt","r");//打开文件
for (n=0;!feof(fp);n++)//逐个读文件
fscanf(fp,"%d%s%s%s ",&zhenghao,&mingzi,&riqi,&zname);
n--;
fclose(fp);//关闭文件
return (n);//返回个数
}


int tjzs3()//统计账号密码文本个数
{
FILE *fp;
int zhao=0,n;
char mm[20]={'\0'};
fp=fopen("land.txt","r");//打开文件
for (n=0;!feof(fp);n++)//逐个读文件
fscanf(fp,"%d %s",&zhao,mm);
n--;
fclose(fp);//关闭文件
return (n);//返回个数
}


void mainmenu()//主菜单
{
system ("cls");

printf("**************************************************");

printf("\n\n 1.图书系统\n\n");

printf("\n\n 2.借阅系统\n\n");

printf("\n\n 3.退出系统\n\n");

printf("\n\n 请按键选择,回车确定\n");

printf("*************************************************\n");

return ;
}


void tsmenu() //图书馆信息菜单
{
system ("cls");

printf("****************************************************");

printf("\n 1.增加图书\n\n");

printf("\n 2.删除图书\n\n");

printf("\n 3.查询图书\n\n");

printf("\n 4.库存浏览\n\n");

printf("\n 5.返回上一层\n\n");

printf("\n 请按键选择,回车确定\n");

printf("***************************************************\n");

return ;

}


void main1()
{
	void tsmian();
	void jmain();
	char choose;
	mainmenu();
	scanf(" %c",&choose);
	switch(choose)//功能函数
  {
	  case'1':
	    tsmain();
	    break;
	  case'2':
	  	jmain();
	  	break;
	  case'3':
	  	system("cls");
    getch();
  	exit(0);
  	system ("cls");
	break;
  }
}


void tsmain()
{
	void zjts();
	void scts();
	void ctts();
	void llts();
	char choose;
	tsmenu();
	scanf(" %c",&choose);
	for(;;)
	{
		switch(choose)
	{
	case'1':
		zjts();
		break;
	case'2':
		scts();
		break;
	case'3':
		cxts();
		break;
	case'4':
		llts();
		break;
	case'5':
		main1();
		break;
	}
    }
}


void zjts()//增加图书
{
	FILE*fp;
	char i;
	int many=0;
    float price=0;
    char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
    system ("cls");

    if ((fp=fopen("library.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
	{
      fp=fopen("library.txt","w");
      fclose(fp);
    }
	fp=fopen("library.txt","a");
	
	printf("\n请按以下格式输入图书信息:\n书号 书名 作者 出版社 类别 进库量 单价");
	
	for(;i!=27;)//为了实现输入一次后按esc退出
	{
		printf("请输入:\n");
		scanf("%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
		fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
	    printf("继续输入请按回车,结束输入请按Esc\n");
        i=getch();//暂停程序当i接收后继续下一条指令
        for (;i!=13&&i!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
        i=getch();
     }

	fclose(fp);
    printf("\n保存成功,按任意键返回上一层!");
    getch();
	tsmain();//返回上一层
}

void scts()//删除图书
{
	   struct book *head=NULL;
       struct book *p,*p1,*p2;
       int tmany=0,n=0,j,k;
       float tprice=0;
       char  tnam[20]={'\0'},taut[20]={'\0'},tcat[20]={'\0'},tpub[20]={'\0'},tnum[20]={'\0'};
	   char jjnam[20]={'\0'};
	   char i;
       FILE *fp;
       if ((fp=fopen("library.txt","r"))==NULL)//打开文件
       {
	       system ("cls");
           printf("\n记录文件不存在!按任意键返回");
           getch();
           tsmain();
       }

	   else//实现删除的功能
	   {
	      system ("cls");
	      printf("\n请输入你要删除的书名:");//输入删除图书书名
          scanf("%s",jjnam);
          printf("\n确认删除请回车,取消请按Esc\n");
          i=getch();
          for(;i!=13&&i!=27;)
          i=getch();
          if (i==27)
          tsmain();
	      fp=fopen("library.txt","r");
		 j=tjzs();

	   for (k=0;k<j;k++)
       {
	       fscanf(fp,"%s%s%s%s%s%d%f",tnum,tnam,taut,tpub,tcat,&tmany,&tprice);
           if (strcmp(jjnam,tnam))//比较名字,将不同名字的信息复制到链表
          {
	          n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
	            if (n==1)//建立链表
                {
		          p1=p2=(struct book*)malloc(LEN);
                  head=p1;
				}
                else
			    {
			      p2->next=p1;
				  p2=p1;
                  p1=(struct book*)malloc(LEN);//新建链表
                }

                strcpy(p1->num,tnum);//复制书号
                strcpy(p1->nam,tnam);//复制书名
                strcpy(p1->aut,taut);//复制作者名字
                strcpy(p1->pub,tpub);//复制出版社
                strcpy(p1->cat,tcat);//复制类别
                p1->many=tmany;//复制个数
                p1->price=tprice;//复制单价
           }
       }
             if (n==0)//如果图书只有一项且这一项刚好和要删除的相同
			 {
			 head=NULL;
			 }
			 else//建立链表的最后剩余一个储存空间,所以封底
			 {
			 p2->next=p1;
			 p1->next=NULL;
			 fclose(fp);
			 }
    }

   fp=fopen("library.txt","w");//清空文件,只写打开,然后关闭
   fclose(fp);
   fp=fopen("library.txt","a");//追加文件
   p=head;

   for (;p!=NULL;)//把链表内容覆盖到文件
   {
   	   fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price);
   	   p=p->next;
   }
   fclose(fp);
   system ("cls");
   printf("\n删除成功 \n按任意键返回上一层\n");
   getch();//返回上一层
   tsmain();
}


void cxts()//查询图书
{
	   FILE *fp;
       int k=0,many=0,m=0,n=0;
	   float price=0;
       char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
       char i;
       char chazhao[20]={'\0'};
       if ((fp=fopen("library.txt","r"))==NULL)//打开文件
       {
	       system ("cls");
           printf("\n记录文件不存在!按任意键返回");
  		   getch();
		   tsmain();
       }
	   system("cls");
       printf("请输入书号,书名,作者或类别查询:\n");
       scanf("%s",chazhao);
       system ("cls");
       m=tjzs();

	   for (n=0;n<m;n++)
	   {
	    fscanf(fp,"%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
        if(!strcmp(chazhao,num)||!strcmp(chazhao,nam)||!strcmp(chazhao,aut)||!strcmp(chazhao,cat))
        {
        	if(k==0)
            {
			  printf("查询结果:\n\n");
			  printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t现存量\t单价\n");
            }
			printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
            k++;
        }
       }
        if (k==0)//文件夹为空则输出无记录并返回上一层
        { system ("cls");
        printf("\n无符合记录!\n");
        getch();
        tsmain();
		}
		fclose(fp);//查询结束
		getch();
		tsmain();
}


void llts()//浏览图书
{
	FILE *fp;
	int n=0;
       int k=0,m=0,many=0;
	   float price=0;
       char  nam[20]={'\0'},aut[20]={'\0'},cat[20]={'\0'},pub[20]={'\0'},num[20]={'\0'};
  	   char i;
	   if ((fp=fopen("library.txt","r"))==NULL)//打开文件
       {
	       system ("cls");
           printf("\n记录文件不存在!按任意键返回");
		   getch();//返回
           tsmain();
	   }
	   n= tjzs();
       if (n==0)
      {
	  system ("cls");
      printf("\n无任何记录!");
      }

	     fp=fopen("library.txt","r");//打开只读文件
         system ("cls");
	     printf("书号\t书名\t作者\t\t出版社\t\t类别\t\t库存量\t单价\n");
  
	   for (m=0;m<n;m++)//输出数据
	     {
	     fscanf(fp,"%s%s%s%s%s%d%f",num,nam,aut,pub,cat,&many,&price);
		 printf("%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",num,nam,aut,pub,cat,many,price);
	 	}
		fclose(fp);
        printf("\n按任意键返回\n");
        getch();
        tsmain();
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`!~~~~~~~~~~~~~~~~~~~~~
	
void jmenu()//显示借书菜单
{
	system("cls");
	printf("*****************************************************");
	printf("\n\n 1.借书登记\n\n");
	printf("\n\n 2.还书登记\n\n");
	printf("\n\n 3.借阅情况查看\n\n");
	printf("\n\n 4.查询借书\n\n");
    printf("\n\n 5.返回上一层\n\n");
	printf("\n\n 请按键选择,回车确定\n");
	printf("****************************************************");
	return ;
}


void jmain()//借阅系统函数
{
	void js();
	void hs();
	void lljs();
	void cxjs();
	char choose;
	jmenu();
	scanf(" %c",&choose);
	for(;;)
	{
		switch(choose)
		{
			case'1':
			js();
			break;
			case'2':
			hs();
			break;
			case'3':
			lljs();
			break;
			case'4':
			cxjs();
			break;
			case'5':
			main1();
			break;
		}
	}

}



void js()//借书函数
{
	FILE *fp,*fp3;
	struct book *head=NULL;
    struct book *p,*p1,*p2;
    int i,loop,k,n=0,flag=0,s=0;
	int jnum=0;
	int many=0;
	float tprice=0;
	char tname[20]={'\0'},tauthor[20]={'\0'},tchuban[20]={'\0'},tkind[20]={'\0'},tshuhao[20]={'\0'},
         ttname[20]={'\0'},mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
	char hit=0;

	system("cls");
	if((fp=fopen("library.txt","r"))==NULL)
	{
		system("cls");
		printf("\n 图书馆无库存!按任意键退出!");
		getch();
		exit(0);
	}
	else
	{
        printf("\n请输入借阅书名:\n请输入:");
		scanf("%s",zname);
    k= tjzs();//统计图书馆文件个数

	for (i=0;i<k;i++)//先将图书信息建立链表,更改库存
    	{
    		fscanf(fp,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&many,&tprice);
			n++;
			if(n==1)
			{
				p1=p2=(struct book*)malloc(LEN);
				head=p1;
			}
		    else
           	{
                p2->next=p1;
                p2=p1;
                p1=(struct book*)malloc(LEN);

            }
			strcpy(p1->num,tshuhao);//复制书号
			strcpy(p1->nam,tname);//复制书名
			strcpy(p1->aut,tauthor);//复制作者
			strcpy(p1->pub,tchuban);//复制出版社
			strcpy(p1->cat,tkind);//复制类别
			p1->many=many;//复制现存量
			p1->price=tprice;//复制单价
        }
        if(n==0)
 		head=NULL;
		else
		 {
		 	p2->next=p1;
		 	p1->next=NULL;
		 	fclose(fp);
		 }

	}
	p=head;
	
	for (;p!=NULL;)
	{
		if(!(strcmp(p->nam,zname)))//判断要借书的是否存在,标记等于1,存在库存减一
		{
			
            flag=1;
		 	loop=p->many;
		 	(p->many)--;
		 }
			p=p->next;
  }
	if(flag&&(loop>0))//存在被借的图书且现存量大于0,把库存量变化后的链表存入文件
    {

		fp=fopen("library.txt","w");
    	fclose(fp);
    	fp=fopen("library.txt","a");
    	p=head;

		for(;p !=NULL;)
    	{
    		fprintf(fp,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",p->num,p->nam,p->aut,p->pub,p->cat,p->many,p->price);
   		   	p=p->next;
		}
		free(p);
		fclose(fp);

		if ((fp3=fopen("reader.txt","r"))==NULL)//建读者文件夹存入借书信息
        {
		    fp3=fopen("reader.txt","w");//打开只读文件
            fclose(fp3);
        }
		fp3=fopen("reader.txt","a");

		printf("\n请按以下格式输入读者信息:\n 证号 姓名 借书日期 借书书名\n请输入:");//录入读者信息
 		scanf("%d %s %s %s",&jnum,mingzi,riqi,zname);
		fprintf(fp3,"\n%-8d%-23s%-18s%-10s\n",jnum,mingzi,riqi,zname);
	    fclose(fp3);
        printf("借书成功!请两个月内归还!!!按任意键返回\n");
		getch();//返回
		jmain();//调用借阅系统
   }
	else
    {
    	if(flag!=0)
        printf("此书已被借完!按任意键返回!");//否则输出此书已被借完
		else
		printf("查找无此书!按任意键返回");
	}
	    getch();//返回
        jmain();//调用借阅系统

}


void hs ()//还书函数
{
 	 FILE *fp,*fp3;
	 struct reader *head=NULL;
	 struct reader *p,*p1,*p2;
	 struct book *lhead1=NULL;
	 struct book *zp1,*lp1,*lp2;
	 int txcl=0,i;
	 float tprice=0;
	 char tname[20]={'\0'},tauthor[20]={'\0'},tkind[20]={'\0'},
	 tchuban[20]={'\0'},ttname[20]={'\0'},tshuhao[20]={'\0'};
	 int ttzhenghao=0,tzhenghao=0,n=0,k=0,t=0,flag=0;
	 char tmingzi[20]={'\0'},triqi[20]={'\0'},tzname[20]={'\0'},ttzname[20]={'\0'};
	 char hitkey=0;
	 system ("cls");
{
 	 if ((fp=fopen("reader.txt","r"))==NULL)//不存在读者文件,则输出不能还书
	  {
         system ("cls");
		 printf("\n 不存在借书者!按任意键退出!");
		 getch();
		 system("cls");
		 jmain();
      }

	  else
	  {<!-- -->{
	     printf("\n请输入读者证号和书名:\n请输入:");
		 scanf("%d %s",&ttzhenghao,ttzname);//输入还书证号和书名
		 k=tjdzzs();//获取读者文件夹信息个数
		 for (i=0;i<k;i++)//读取读者文件夹信息
           {
			fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);
			if((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname))//如果证号书名存在,则标记为1
			flag=1;
			}
      fclose(fp);
	  fp=fopen("reader.txt","r");//打开读者文件,删除借书信息
	  if(flag)
	  {
	  for (i=0;i<k;i++)//将读者文件复制到链表
	  {
	  fscanf(fp,"%d%s%s%s\n ",&tzhenghao,tmingzi,triqi,tzname);//读取文件信息
	  if(!((ttzhenghao==tzhenghao)&&!strcmp(ttzname,tzname)))
	  {
          n++;
		  if (n==1)
		  {
		      p1=p2=(struct reader*)malloc(LEN1);//新建链表
			  head=p1;
		  }
		  else
		  {
		        p2->next=p1;
				p2=p1;
				p1=(struct reader*)malloc(LEN1);//新建链表
          }
		  p1->jnum=tzhenghao;//复制证号
		  strcpy(p1->jnam,tmingzi);//复制读者名字
		  strcpy(p1->time,triqi);//复制日
		  strcpy(p1->tsnam,tzname);//复制书名
		  }}
		  if (n==0)
		  head=NULL;
		  else
		  {
		       p2->next=p1;
			   p1->next=NULL;
			   fclose(fp);
	      }
		  fp=fopen("reader.txt","w");//清空读者文件
		  fclose(fp);
		  fp=fopen("reader.txt","a");//追加信息
		  p=head;
		  for (;p!=NULL;)//把链表内容覆盖读者文件
		  {
		      fprintf(fp,"\n%-8d%-23s%-18s%-10s\n",p->jnum,p->jnam,p->time,p->tsnam);
			  p=p->next;
	      }
		  free(p);
		  fclose(fp);
		  }}}}

		  if(flag)//标记为1,即还书时更改库存
		  {<!-- -->{
		  {
		      printf("确认还书请按回车!");
			  for (;hitkey!=13&&hitkey!=27;)
			  hitkey=getch();
			  if (hitkey==13)
			  printf("成功!按任意键返回!");
			  n=0;flag=0;
			  fp3=fopen("library.txt","r");//打开图书馆文件
			  k=tjzs();//获取图书馆文件个数
			  for (i=0;i<k;i++)//将图书馆文件复制到链表
			  {
			       fscanf(fp3,"%s%s%s%s%s%d%f",tshuhao,tname,tauthor,tchuban,tkind,&txcl,&tprice);//读取信息
				   n++;
				   if (n==1)
				   {
				       lp1=lp2=(struct book*)malloc(LEN);//新建链表
					   lhead1=lp1;
				   }
				   else
				   {
				       lp2->next=lp1;
					   lp2=lp1;
					   lp1=(struct book*)malloc(LEN);//新建链表
				   }
				   strcpy(lp1->num,tshuhao);//复制书号
				   strcpy(lp1->nam,tname);//复制书名
				   strcpy(lp1->aut,tauthor);//复制作者
				   strcpy(lp1->pub,tchuban);//复制出版社
				   strcpy(lp1->cat,tkind);//复制类别
				   lp1->many=txcl; //复制现存量
				   lp1->price=tprice;//复制单价
				   }
				   if (n==0)
				   {
 	  		          lhead1=NULL;
				   }
				   else
				   {
				   	   lp2->next=lp1;
				   	   lp1->next=NULL;
				   	   fclose(fp3);
				   }}}
				   zp1=lhead1;
				   for (;zp1!=NULL;)
				   {
				        if(!(strcmp(zp1->nam,ttzname)))//寻找书名相同
						++(zp1->many);//现存量加1
						zp1=zp1->next;
					}
					fp3=fopen("library.txt","w");//清空图书馆文件
					fclose(fp);
					fp3=fopen("library.txt","a");//追加信息
					zp1=lhead1;
					for (;zp1!=NULL;)//把链表内容覆盖图书馆文件
					{
                         fprintf(fp3,"%-8s%-9s%-14s%-16s%-18s%-7d%-8.2f\n",
        				 zp1->num,zp1->nam,zp1->aut,zp1->pub,zp1->cat,zp1->many,zp1->price);
						 zp1=zp1->next;
				    }
					fclose(fp3);
					getch();//返回
					jmain();//调用借阅系统
					}
					else
					printf("不存在此信息!按任意键返回!");
					getch();//返回
					jmain();//调用借阅系统
}


void lljs()//显示借书情况函数

{
    FILE *fp;
    int zhenghao=0,xcl=0,n=0,i=0,j=0;
    char mingzi[20]={'\0'},riqi[20]={'\0'},zname[20]={'\0'};
	if ((fp=fopen("reader.txt","r"))==NULL)//打开读者文件夹
    {
        system ("cls");
        printf("\n记录文件不存在!按任意键返回");
	    getch();
	    jmain();
    }
    n=tjdzzs();
    if (n==0)
	{ system ("cls");
	printf("\n无任何记录!");
	}
	fp=fopen("reader.txt","r");
	system ("cls");
	printf("\n证号\t读者姓名\t\t借书日期\t书名\n");
	for (;!feof(fp);)//输出文件信息
	{
	fscanf(fp,"%d%s%s%s\n ",&zhenghao,mingzi,riqi,zname);
	printf("\n%-8d%-23s%-18s%-10s\n", zhenghao,mingzi,riqi,zname);
	}
	fclose(fp);
	printf("\n按任意键返回\n");
	getch();//返回
	jmain();//调用借阅系统
}

					
void cxjs()//查询借书
{
	   FILE *fp;
       int jsnum=0,k=0,many=0,m=0,n=0;

       char  jsnam[20]={'\0'},jstime[20]={'\0'},tsnam[20]={'\0'};
       char i;
       char chazhao[20]={'\0'};
       if ((fp=fopen("reader.txt","r"))==NULL)//打开文件
       {
	       system ("cls");
           printf("\n记录文件不存在!按任意键返回");
  		   getch();
		   jmain();
       }
	   system("cls");
       printf("请输入证号或姓名查询:\n");
       scanf("%s",chazhao);
       system ("cls");
	   m=tjzs();
	   for (n=0;n<m;n++)
	   {
	    fscanf(fp,"%d%s%s%s",&jsnum,jsnam,jstime,tsnam);
        if(!strcmp(chazhao,jsnam)||(('chazhao'-'0')==jsnum))
        {
        	if(k==0)
            {
			  printf("查询结果:\n\n");
			  printf("\n证号\t读者姓名\t\t借书日期\t书名\n");
            }
			printf("\n%-8d%-23s%-18s%-10s\n",jsnum,jsnam,jstime,tsnam);
            k++;
         }
       }
	    if (k==0)//文件夹为空则输出无记录并返回上一层
        { system ("cls");
        printf("\n无符合记录!\n");
        getch();
        jmain();
		}
       fclose(fp);//查询结束
		getch();
		jmain();
}


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

void lmenu()//显示登录菜单
{


printf("\n\n\t    欢迎使用会员登录系统\n\n");
printf("**********************************************");
printf("\n\n\t\t1.登录系统\n\n");
printf("\n\n\t\t2.创建账号\n\n");
printf("\n\n\t\t3.修改密码\n\n");
printf("\n\n\t\t4.退出系统\n\n");
printf("\n\n\t    请按键选择,回车确定\n");
printf("**********************************************");
return ;
}


void lmain()//登录功能函数
{
	void land();
	void xinjian();
	char choose;
	lmenu();
	scanf(" %c",&choose);
	switch(choose)//功能函数
  {
	  case'1':
	    land();
	    break;
	  case'2':
	  	xinjian();
	  	break;
	  	case'3':
	  	xgmm();
	  	break;
	  case'4':
	  	system("cls");
    getch();
  	exit(0);
  	system ("cls");
	break;
  }
}



void xinjian()//新建账户密码
{
	FILE *fp;
	int zhanghao;
	char password[20],password1[20];
	char hit=0;
	if ((fp=fopen("land.txt","r"))==NULL)//if语句:打开图书馆文件,不存在此文件则新建
	{
      fp=fopen("land.txt","w");
      fclose(fp);
    }
    system("cls");
	fp=fopen("land.txt","a");
	for(;;)//输入两次密码确认,两次相同才能确认
	{
	   printf("\n请按以下格式输入账户:\n学号 密码\n");
	   printf("请输入:");
	   scanf("%d %s",&zhanghao,password);
       printf("再次输入密码:\n");
	   scanf("%s",password1);
	   if(strcmp(password,password1)==0)
	   {
	       fprintf(fp,"%d %s\n",zhanghao,password);
		   break;
       }
       else
	   {
	       printf("两次输入密码不一致,继续创建按回车,退出按ESC");
	       hit=getch();
		   if(hit=27)
		   system("cls");
		   lmain();
		         }
   }
   fclose(fp);
   printf("创建成功,按任意键返回");
   getch();
   system("cls");
   lmain();
}



int match(int m,char a[20])//匹配数据库中的账号密码
{
	FILE*fp;
	int n=0,i=0;
	int zhanghao;
	char password[20];

	if ((fp=fopen("land.txt","r"))==NULL)//不存在读者文件
	  {
         system ("cls");
		 printf("\n 还未存在用户!请新建账户");
		 getch();
	 	system("cls");
		lmain();
	
      }


        for(;!feof(fp);)
      {
        fscanf(fp,"%d%s",&zhanghao,password);
        if(m==zhanghao)
        {
        	if(strcmp(a,password)==0)
			return 1;
			else
			{
			return -1;
		   }
	    }
	  }
	  return 0;
 }

void land()//输入账户密码的登录函数
{
	int zhanghao;
	char password[20];
	int i=2,j,k,n;
	char hit=0;
	system("cls");
	do
	{
	   printf("\n请输入账号:\n");
       scanf("%d",&zhanghao);
       printf("确认输入请安回车,重新输入请按ECS");
       hit=getch();//暂停程序当i接收后继续下一条指令
       for (;hit!=13&&hit!=27;)//保证只能是CR和ESC才能退出循环,输入其他字符无用,暂停程序,按'CR'继续。
       {
	        hit=getch();
	   }
    }
    while(hit==27);
	 printf("\n请输入密码:\n");
	 scanf("%s",password);
     i=match(zhanghao,password);
     if(i==1)
	 {
       printf("登陆成功!按任意键继续");
	   getch();
	   main1();
	 }
	 else
	 {
	 	if(i==-1)
		 {
		 printf("密码错误!");
		 getch();
         land();
		 }
		 if(i==0)
		 printf("不存在此用户");
		 getch();
		 system("cls");
		 lmain();
	 }
}

void xg(int z,char m[20])//修改函数
{
	FILE *fp;
	int zhanghao1,n,j,k;
	char mima1[20];
	struct land *head,*p,*p1,*p2;

	 fp=fopen("land.txt","r");
	   j =tjzs3();

	   for (k=0;k<=j;k++)
       {
	       fscanf(fp,"%d %s",&zhanghao1,mima1);
           if (z!=zhanghao1)//比较名字,将不同名字的信息复制到链表
          {
	            n++;//相同返回值为0不执行if语句继续循环,不同则执行直到将所有不同的书名建立成链表
	            if (n==1)//建立链表
                {
		          p1=p2=(struct land*)malloc(LEN2);
                  head=p1;
				}
                else
			    {
			      p2->next=p1;
				  p2=p1;
                  p1=(struct land*)malloc(LEN2);//新建链表
                }
 				p1->zhanghao=zhanghao1;
                strcpy(p1->password,mima1);//复制账号密码
          }
       }
        if (n==0)
			 {
			 head=NULL;
			 }
			 else//建立链表的最后剩余一个储存空间,所以封底
			 {
			 p2->next=p1;
			 p1->next=NULL;
			 fclose(fp);
			 }
			  fp=fopen("land.txt","w");//清空文件,只写打开,然后关闭
              fclose(fp);
              fp=fopen("land.txt","a");//追加文件
              p=head;
            for (;p!=NULL;)//把链表内容覆盖到文件
   			{
   	   		 	fprintf(fp,"%d %s%\n",p->zhanghao,p->password);
   	   			p=p->next;
	        }
	        fprintf(fp,"%d %s\n",z,m);
            fclose(fp);
             system ("cls");

}



void xgmm()//修改密码
{

	   FILE *fp;
       int zh=0,k=0,many=0,m=0,n=0;
       int chazhao,hit;
       char mima[20]={'\0'},password1[20]={'\0'};
       char  mm[20]={'\0'};
       char i;

       if ((fp=fopen("land.txt","r"))==NULL)//打开文件
       {
	       system ("cls");
           printf("\n记录文件不存在!按任意键返回");
  		   getch();
  		   system("cls");
		   lmain();
       }
	   system("cls");
       printf("请输入你的帐号和旧密码:\n");
       scanf("%d %s",&chazhao,mima);
	   m =tjzs3();
	   for (n=0;n<=m;n++)
	   {
	    fscanf(fp,"%d %s",&zh,mm);
        if(zh==chazhao)
        {
        	if(!strcmp(mm,mima))
        	{
        		printf("请输入新的密码");
        		scanf("%s",mima);
       		    printf("再次输入密码:\n");
	            scanf("%s",password1);
	             if(strcmp(mima,password1)==0)
	   			 {
		             xg(chazhao,mima);
		            getch();
				    lmain();
	                system("cls");
   			     }
       			  else
	   			  {
	       		   	  printf("两次输入密码不一致,按任意键退出");
	       			  hit=getch();
		   			  system("cls");
				      lmain();

   				  }
			}
			else
			{
				printf("旧密码错误,按任意键返回!");
				getch();
				system("cls");
				lmain();
	            
			}

        }
      }
	   printf("不存在此账号,按任意键返回");
		fclose(fp);//修改结束
		getch();
		system("cls");
		lmain();
}



int main()
{
	system("color 1F");
	lmain();
	return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632