图书信息管理系统

我花了一周多的时间写的并进行了简单的优化,但还是有一些bug

这一些代码可以让vs识别scanf而不出错
#pragma warning 4996
#pragma warning(disable : 6031 )
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include <malloc.h>

struct book {
	char name[50];//书名 
	char author[50];//作者名 
	char classify[50];//图书的编号 
	char publisher[50];//出版单位 
	char publishtime[50];//出版时间 
	int price;//图书价格 
	struct book* next;//下一个节点	
};

struct book* creat();//创建链表 
void browse(void);//图书信息浏览功能 
void browse1(void);//图书信息浏览功能 
void changlock(void);//管理员修改密码功能 
void check(void);//查询界面 
void checkauthor(void);//查询作者 
void checkname(void);//查询书名 
void checktprice(void);//查询价格 
void dele(void);//删除 
void handmenu1(void);//管理员菜单功能 
void handmenu2(void);//学生菜单功能 
void input(void);//图书信息录入 
void login(void);//登录界面
void regist(void);//身份注册功能 
void menu1(void);//管理员登录 
void menu2(void);//学生登录 
void modfiy(void);//修改界面 
void modfiyclassify(void);//修改分类号 
void modfiypublisher(void);//修改出版社 
void modfiypublishtime(void);//修改出版时间 
void modfiyprice(void);//修改图书价格 
void sort(void);//排序界面 
void sortprice(void);//按价格排序 
void sorttime(void);//按时间排序 

struct book* creat()//创建链表信息 
{
	struct book bok;//建立图书信息节点 
	struct book* head = NULL, * p1 = NULL, * p2;//建立图书信息链表 
	//p1 = (struct book*)malloc(sizeof(struct book));
	FILE* fp = NULL;
	head = p1;``
	if ((fp = fopen("b.txt", "ab+")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	rewind(fp);//移向头文件指针 
	while (fread(&bok, sizeof(bok), 1, fp) != 0)
	{
		p2 = (struct book*)malloc(sizeof(struct book));
		strcpy(p2->name, bok.name);
		strcpy(p2->author, bok.author);
		strcpy(p2->classify, bok.classify);
		strcpy(p2->publisher, bok.publisher);
		strcpy(p2->publishtime, bok.publishtime);
		p2->price= bok.price;
		p2->next = NULL;
		if (head == NULL)
		{
			head = p2;
			p1 = p2;
		}
		else
		{
			p1->next = p2;
			p1 = p1->next;
		}
	}
	fclose(fp);
	return head;
}
void input()//输入功能 
{
	FILE* fp;
	int sum = 0, i, m = 0;
	struct book books[1000];
	char str[3];
	int sign = 1;
	if ((fp = fopen("b.txt", "ab")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	printf("\t\t\t你已选择图书信息输入(新增)功能,请按照接下来的指示完成图书信息输入。\n");
	while (sign)
	{
		printf("\t\t\t请输入你想要新增多少本书的信息(请控制一次性新增加图书的数量在100本书以内):\n");
		printf("\t\t\t");
		scanf("%d", &sum);
		system("cls");
		printf("\t\t\t请按接下来的格式输入图书的信息,每个信息段一个空格:\n");
		for (i = 0; i < sum; i++)
		{
			printf("\t\t\t图书书名\n");
			printf("\t\t\t");
			scanf("%s", books[i].name);
			printf("\t\t\t图书的作者名\n");
			printf("\t\t\t");
			scanf("%s", books[i].author);
			printf("\t\t\t图书的分类号\n");
			printf("\t\t\t");
			scanf("%s", books[i].classify);
			printf("\t\t\t图书的出版社\n");
			printf("\t\t\t");
			scanf("%s", books[i].publisher);
			printf("\t\t\t图书的出版时间\n");
			printf("\t\t\t");
			scanf("%s", books[i].publishtime);
			printf("\t\t\t图书的价格\n");
			printf("\t\t\t");
			scanf("%d", &books[i].price);
			fwrite(&books[i], sizeof(book), 1, fp);
			printf("\n");
			system("cls");
		}
		system("cls");
		printf("\t\t\t你已新增加%d本书的信息,请确认是否继续新添图书的信息(y/n)\n", sum);
		while (1)
		{
			printf("\t\t\t");
			scanf("%s", str);
			if (strcmp(str, "n") == 0 || strcmp(str, "N") == 0)
			{
				fclose(fp);
				sign = 0;
				break;
			}
			else if (strcmp(str, "y") == 0 || strcmp(str, "Y") == 0)
			{
				printf("\t\t\t你已选择继续添加图书的信息,请完成你的信息输入。\n");
				sign = 1;
				break;
			}
			else
			{
				printf("\t\t\t你的输入有误,请重新输入:\n");
				sign = 1;
				continue;
			}
		}
	}
	printf("\t");
	system("cls");
	printf("\t\t\t你已完成图书信息输入,请选择你接下来的操作:\n");
	printf("\t\t\t你是选择返回管理员菜单还是直接退出程序(1或者2):\n");
	printf("\t\t\t1、选择返回管理员菜单\n");
	printf("\t\t\t2、选择直接退出程序\n");
	printf("\t\t\t");
	scanf("%d", &m);
	while (sign)
	{
		if (m < 1 || m>2)
		{
			sign = 1;
			printf("\t\t\t你的选择有误,请重新选择:\n");
			printf("\t\t\t");
			scanf("%d", &m);
		}
		else
			sign = 0;
	}
	switch (m)
	{
	case 1:
		system("cls");
		handmenu1();
		break;
	case 2:
		system("cls");
		printf("\t\t\t欢迎下次使用,再见!\n");
		exit(0);
		break;
	default:
		break;
	}
}
void checkname()//按书名查询 
{
		FILE* fp = NULL;
		char str[50], str1[3];
		int sum = 0, n = 1, m, sign = 1;
		system("cls");
		struct book* head = NULL, * p2;//建立图书信息链表 
		p2 = (struct book*)malloc(sizeof(struct book));
		printf("\t\t\t你已选择图书的信息查询功能,请输入你想要查询图书的书名:\n");
		while (n)
		{
			printf("\t\t\t");
			scanf("%s", str);
			system("cls");
			printf("\t图书书名:\t图书的作者名:\t图书的分类号;\t图书的出版社:\t图书的出版时间:\t图书的价格:\n");
			p2 = creat();
			while (p2 != NULL)
			{
				if (strcmp(str, p2->name) == 0)
				{
					printf("\t%s\t", p2->name);
					printf("\t%s\t", p2->author);
					printf("\t%s\t", p2->classify);
					printf("\t%s\t", p2->publisher);
					printf("\t%s\t", p2->publishtime);
					printf("\t%d\t\n", p2->price);
					sum++;
				}
				p2 = p2->next;
			}
		if (sum == 0)
		{
			printf("\t\t\t系统没有找到符合条件的图书,请重新输入你想要查询的图书:\n");
			n = 1;
		}
		else
			n = 0;
		}
		printf("\t");
	system("pause");
	system("cls");
	printf("\t\t\t你是否要继续操作图书信息查询功能(y/n):\n");
	printf("\t\t\t");
	scanf("%s", str1);
	system("cls");
	if (strcmp(str1, "n") == 0 || strcmp(str1, "N") == 0)
	{
		free(p2);
		printf("\t\t\t你是选择返回上一级还是直接退出程序(1或者2):\n");
		printf("\t\t\t1、选择返回主菜单\n");
		printf("\t\t\t2、选择直接退出程序\n");
		printf("\t\t\t");
		scanf("%d", &m);
		while (sign)
		{
			if (m < 1 || m>2)
			{
				sign = 1;
				printf("\t\t\t你的选择有误,请重新选择:\n");
				scanf("%d", &m);
			}
			else
				sign = 0;
		}	
		system("cls");
		switch (m)
		{
		case 1:
			check();
			break;
		case 2:
			printf("\t\t\t欢迎下次使用,再见!\n");
			exit(0);
			break;
		default:
			break;
		}
	}
	if (strcmp(str1, "y") == 0 || strcmp(str1, "Y") == 0)
	check();
}

void checkauthor()//按作者查询 
{
	FILE* fp = NULL;
	char str[50], str1[3];
	int sum = 0, n = 1, m, sign = 1;
	system("cls");
	struct book* head = NULL, * p2;//建立图书信息链表 
	p2 = (struct book*)malloc(sizeof(struct book));
	p2 = creat();
	printf("\t\t\t你已选择图书的信息查询功能,请输入你想要查询图书的作者:\n");
	while (n)
	{
		printf("\t\t\t");
		scanf("%s", str);
		system("cls");
		printf("\t图书书名:\t图书的作者名:\t图书的分类号;\t图书的出版社:\t图书的出版时间:\t图书的价格:\t\n");
		p2 = creat();
		while (p2 != NULL)
		{
			if (strcmp(str,p2->author )==0)
			{
				printf("\t%s\t", p2->name);
				printf("\t%s\t", p2->author);
				printf("\t%s\t", p2->classify);
				printf("\t%s\t", p2->publisher);
				printf("\t%s\t", p2->publishtime);
				printf("\t%d\t\n", p2->price);
				sum++;
			}
			p2 = p2->next;
		}
		if (sum == 0)
		{
			printf("\t\t\t系统没有找到符合条件的图书,请重新输入你想要查询的图书:\t\t\t\n");
			n = 1;
		}
		else
			n = 0;
	}
	printf("\t");
	system("pause");
	system("cls");
	printf("\t\t\t你是否要继续操作图书信息查询功能(y/n):\t\t\t\n");
	printf("\t\t\t");
	scanf("%s", str1);
	if (strcmp(str1, "n") == 0 || strcmp(str1, "N") == 0)
	{
		system("cls");
		printf("\t\t\t你是选择返回上一级还是直接退出程序(1或者2):\t\t\t\n");
		printf("\t\t\t1、选择返回上一级\n");
		printf("\t\t\t2、选择直接退出程序\n");
		printf("\t\t\t");
		scanf("%d", &m);
		while (sign)
		{
			if (m < 1 || m>2)
			{
				sign = 1;
				printf("\t\t\t你的选择有误,请重新选择:\n");
				printf("\t\t\t");
				scanf("%d", &m);
			}
			else
				sign = 0;
		}
		switch (m)
		{
		case 1:
			check();
			break;
		case 2:
			printf("\t\t\t欢迎下次使用,再见!\n");
			exit(0);
			break;
		default:
			break;
		}
	}
	if (strcmp(str1, "y") == 0 || strcmp(str1, "Y") == 0)
	{
		check();
	}
}

void checkprice()//按价格查询 
{
	FILE* fp = NULL;
	char  str1[3];
	int sum = 0, n = 1, m, sign = 1,str;
	system("cls");
	struct book* head = NULL, * p2;//建立图书信息链表 
	p2 = (struct book*)malloc(sizeof(struct book));
	printf("\t\t\t你已选择图书的信息查询功能,请输入你想要查询图书的价格:\n");
	printf("\t图书书名:\t图书的作者名:\t图书的分类号;\t图书的出版社:\t图书的出版时间:\t图书的价格:\t\n");
	while (n)
	{
		printf("\t\t\t");
		scanf("%d",&str);
		p2 = creat();
		while (p2 != NULL)
		{
			if (p2->price ==str)
			{
				printf("\t%s\t", p2->name);
				printf("\t%s\t", p2->author);
				printf("\t%s\t", p2->classify);
				printf("\t%s\t", p2->publisher);
				printf("\t%s\t", p2->publishtime);
				printf("\t%d\t\n", p2->price);
				sum++;
			}
			p2 = p2->next;
		}
		if (sum == 0)
		{
			printf("\t\t\t系统没有找到符合条件的图书,请重新输入你想要查询的图书:\n");
			n = 1;
		}
		else
			n = 0;
	}
	printf("\t");
	system("pause");
	system("cls");
	printf("\t\t\t你是否要继续操作图书信息查询功能(y/n):\n");
	printf("\t\t\t");
	scanf("%s", str1);
	if (strcmp(str1, "n") == 0 || strcmp(str1, "N") == 0)
	{
		printf("\t\t\t你是选择返回上一级还是直接退出程序(1或者2):\n");
		printf("\t\t\t1、选择返回上一级\n");
		printf("\t\t\t2、选择直接退出程序\n");
		printf("\t\t\t");
		scanf("%d", &m);
		while (sign)
		{
			if (m < 1 || m>2)
			{
				sign = 1;
				printf("\t\t\t你的选择有误,请重新选择:\n");
				scanf("%d", &m);
			}
			else
				sign = 0;
		}
		switch (m)
		{
		case 1:
			check();
			break;
		case 2:
			printf("\t\t\t欢迎下次使用,再见!\n");
			exit(0);
			break;
		default:
			break;
		}
	}
	if (strcmp(str1, "y") == 0 || strcmp(str1, "Y") == 0)
	{
		check();
	}
}

void check()//查询功能 
{
	int  n;
	int sign = 1;
	printf("\t你已选择图书信息查询功能,请选择你的查询方式:\n");
	printf("\t1、按书名查询\t2、按作者查询\t3、按价格查询\t4、返回主菜单\t\n");
	while (sign)
	{
		printf("\t");
		scanf("%d", &n);
		if (n >= 1 && n <= 4)
			sign = 0;
		else
		{
			printf("\t\t\t对不起,你的选择有误,请重新选择你的查询方式:\t\t\t\n");
			continue;
		}
	}
	system("cls");
	switch (n)
	{
	case 1:
		checkname();
		break;
	case 2:
		checkauthor();
		break;
	case 3:
		checkprice();
		break;
	case 4:
		login();
		break;
	default:
		break;
	}
}

void browse()//浏览功能  
{
	char str[3];
	int sign = 1, m = 0,sum=0;
	printf("\t你已选择图书信息浏览功能,现在为你显示已存储在文档中的图书信息。\t\t\t\n");
	struct book* head = NULL,* p2;//建立图书信息链表 
	p2 = (struct book*)malloc(sizeof(struct book));
	p2 = creat();
	printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
	while (p2 != NULL)
	{
		printf("\t%s\t%s\t%s\t%s\t%s\t%d", p2->name, p2->author,p2->classify, p2->publisher, p2->publishtime, p2->price);
		sum++;
		p2 = p2->next;
		printf("\n");
	}
	if (sum == 0)
	{
		printf("\t\t\t没有图书信息,请先输入信息再浏览\n");
		Sleep(2000);
		system("cls");
		input();
	}
	free(p2);
	printf("\t");
	system("pause");
	system("cls");
	printf("\t\t\t选择你的下一步操作: \t\t\t\n");
	printf("\t\t\t你是选择返回管理员菜单还是直接退出程序(1或者2):\t\t\t\n");
	printf("\t\t\t1、选择返回管理员菜单\t\t\t\n");
	printf("\t\t\t2、选择直接退出程序\t\t\t\n");
	while (sign)
	{
		printf("\t\t\t");
		scanf("%s", str);

		if (strcmp(str, "2") == 0)
		{
			m = 2;
			sign = 0;
		}
		else if (strcmp(str, "1") == 0)
		{
			m = 1;
			sign = 0;
		}
		else
		{
			printf("你的输入有误,请重新输入:\n");
			sign = 1;
		}
	}
	system("cls");
	switch (m)
	{
	case 1:
		handmenu1();
		break;
	case 2:
		printf("欢迎下次使用,再见!\n");
		exit(0);
		break;
	default:
		break;
	}
}

void browse1()//浏览功能  
{
	char str[3];
	int sign = 1, m = 0,sum=0;
	printf("\t\t\t你已选择图书信息浏览功能,现在为你显示已存储在文档中的图书信息。\t\t\t\n");
	struct book* head = NULL, * p2;//建立图书信息链表 
	p2 = (struct book*)malloc(sizeof(struct book));
	p2 = creat();
	printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
	while (p2 != NULL)
	{
		printf("\t%s\t%s\t\t%s\t\t%s\t%s\t%d", p2->name, p2->author, p2->classify, p2->publisher, p2->publishtime, p2->price);
		p2 = p2->next;
		sum++;
		printf("\n");
	}
	free(p2);
	if (sum == 0)
	{
		printf("\t\t\t没有图书信息,请先输入信息再浏览\n");
		Sleep(2000);
		system("cls");
		login();
		//return ;
	}
	system("pause");
	system("cls");
	printf("\t\t\t选择你的下一步操作: \t\t\t\n");
	printf("\t\t\t你是选择返回学生菜单还是直接退出程序(1或者2):\t\t\t\n");
	printf("\t\t\t1、选择返回学生菜单\t\t\t\n");
	printf("\t\t\t2、选择直接退出程序\t\t\t\n");
	while (sign)
	{
		printf("\t\t\t");
		scanf("%s", str);
		if (strcmp(str, "2") == 0)
		{
			m = 2;
			sign = 0;
		}
		else if (strcmp(str, "1") == 0)
		{
			m = 1;
			sign = 0;
		}
		else
		{
			printf("\t\t\t你的输入有误,请重新输入:\n");
			sign = 1;
		}
	}
	system("cls");
	switch (m)
	{
	case 1:
		handmenu2();
		break;
	case 2:
		printf("欢迎下次使用,再见!\n");
		exit(0);
		break;
	default:
		break;
	}
}

void sortprice()
{
	FILE* fp;
	int i, sum = 0, sign = 1, j;
	struct book books[100], a;
	printf("\t\t\t你已选择图书信息排序功能,下面是图书价格从小到大排序后的详细信息:\n");
	if ((fp = fopen("b.txt", "rb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	while (!feof(fp))
	{
		if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
			sum++;
	}
	if (sum == 0)
	{
		printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
		Sleep(2000);
		input();
	}
	printf("\t\t\t系统共查询到%d条图书信息\n", sum);
	for (i = 0; i < sum; i++)
	{
		for (j = i + 1; j < sum; j++)
			if (books[i].price > books[j].price)
			{
				a = books[i];
				books[i] = books[j];
				books[j] = a;
			}
	}
	printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
	for (j = 0; j < sum; j++)
	{
		printf("\t%s\t%s\t\t%s\t\t%s\t%s\t%d", books[j].name, books[j].author, books[j].classify, books[j].publisher, books[j].publishtime, books[j].price);
		if(j!=sum-1)
		printf("\n");
	}
	fclose(fp);
	printf("\n");
	system("pause");
	system("cls");
	sort();
}

void sorttime()
{
	FILE* fp;
	int i, sum = 0, sign = 1, j;
	struct book books[100], a;
	system("cls");
	printf("\t\t\t你已选择图书信息排序功能,下面是图书出版时间从长到短排序后的详细信息:\t\t\t\n");
	if ((fp = fopen("b.txt", "rb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	while (!feof(fp))
	{
		if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
			sum++;
	}
	if (sum == 0)
	{
		printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\t\t\t\n");
		input();
	}
	printf("\t\t\t系统共查询到%d条图书信息\n", sum);
	for (i = 0; i < sum; i++)
	{
		for (j = i + 1; j < sum; j++)
			if (strcmp(books[i].publishtime, books[j].publishtime) > 0)
			{
				a = books[i];
				books[i] = books[j];
				books[j] = a;
			}
	}
	printf("\t图书书名\t图书的作者名\t图书的分类号\t图书的出版社\t图书的出版时间\t图书的价格\n");
	for (j = 0; j < sum; j++)
	{
		printf("\t%s\t%s\t\t%s\t\t%s\t%s\t%d", books[j].name, books[j].author , books[j].classify, books[j].publisher, books[j].publishtime, books[j].price);
		if (j != sum - 1)
			printf("\n");
	}
	fclose(fp);
	printf("\n");
	system("pause");
	system("cls");
	sort();
}

void sort()//管理员排序功能 
{
	int n, sign = 1;
	printf("\t\t\t下面请选择你的排序选择,或者返回主菜单:\t\t\t\n");
	printf("\t\t\t1、价格排序\t\t\t\n");
	printf("\t\t\t2、出版时间排序\t\t\t\n");
	printf("\t\t\t3、主菜单\t\t\t\n");
	printf("\t\t\t请从1或者3中选择:\t\t\t\n");
	while (sign)
	{
		printf("\t\t\t");
		scanf("%d", &n);
		if (n < 1 || n>3)
		{
			printf("\t\t\t你的输入有误,请重新输入:\t\t\t\n");
			sign = 1;
			continue;
		}
		else if (n >= 1 && n <= 3)
			sign = 0;
	}
	system("cls");
	switch (n)
	{
	case 1:
		sortprice();
		break;
	case 2:
		sorttime();
		break;
	case 3:
		login();
		break;
	default:
		break;
	}
}

void dele()//删除功能 
{
	char str[50];
	FILE* fp;
	int sum = 0, i,j = 0;
	int sign = 1;
	struct book books[100];
	printf("\t\t\t你已选择图书信息删除功能,请输入你想要删除的图书书名:\t\t\t\n");
	printf("\t\t\t");
	scanf("%s", str);
	if ((fp = fopen("b.txt", "ab")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	while (!feof(fp))
	{
		if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
			sum++;
	}
	if (sum == 0)
	{
		printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\t\t\t\n");
		input();
	}
	for (i = 0; i < sum; i++)
	{
		if (strcmp(books[i].name, str) == 0)
		{
			j++;
			strcpy(books[i].name, "0");
		}
	}
	fclose(fp);
	if ((fp = fopen("b.txt", "wb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	printf("\t\t\t正在把新的记录写进文件");
	for (i = 0; i < sum; i++)
		if (strcmp(books[i].name, "0") != 0)
			fwrite(&books[i], sizeof(book), 1, fp);
	fclose(fp);
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".\n");
	printf("\t\t\t写入成功!\n");
	printf("\t\t\t");
	system("pause");
	system("cls");
	handmenu1();
}

void modfiyclassify()
{
	FILE* fp;
	char str1[50];
	char  str2[50];
	int sum = 0, i,m;
	struct book books[100];
	printf("\t\t\t请先输入你想要修改图书信息的书名:\t\t\t\n");
	printf("\t\t\t");
	scanf("%s", str1);
	if ((fp = fopen("b.txt", "rb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	while (!feof(fp))
	{
		if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
			sum++;
	}
	if (sum == 0)
	{
		printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\t\t\t\n");
		input();
	}
	printf("\t\t\t请输入你想要修改的分类号:\t\t\t\n");
	printf("\t\t\t");
	scanf("%s", str2);
	for (i = 0; i < sum; i++)
	{
		if (strcmp(books[i].name, str1) == 0)
			strcpy(books[i].classify, str2);
	}
	fclose(fp);
	if ((fp = fopen("b.txt", "wb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	printf("\t\t\t正在保存中");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".\n");
	for (i = 0; i < sum; i++)
		fwrite(&books[i], sizeof(book), 1, fp);
	printf("\t\t\t保存成功!\t\t\t\n");
	fclose(fp);
	Sleep(1000);
	system("cls");
	printf("\t\t\t请选择你的下一步操作:\t\t\t\n");
	printf("\t\t\t1、返回上一级\t\t\t\n");
	printf("\t\t\t2、返回管理员菜单界面\t\t\t\n");
	printf("\t\t\t3、返回主菜单\t\t\t\n");
	printf("\t\t\t4、结束程序\t\t\t\n");
	printf("\t\t\t请从1到4中选择你的操作:\t\t\t\n");
	while (1)
	{
		printf("\t\t\t");
		scanf("%d", &m);
		if (m < 1 || m>4)
		{
			printf("\t\t\t你的选择有误,请重新选择:\t\t\t\n");
			continue;
		}
		else if (m >= 1 && m <= 4)
			break;
	}
	system("cls");
	switch (m)
	{
	case 1:
		modfiy();
		break;
	case 2:
		handmenu1();
		break;
	case 3:
		login();
		break;
	case 4:
		printf("\t\t\t欢迎下次继续使用,再见!\n");
		exit(0);
		break;
	default:
		break;
	}
}

void modfiypublisher()
{
	FILE* fp;
	char str1[50];
	char  str2[50];
	int sum = 0, i, m,n=1;
	struct book books[100];
		printf("\t\t\t请先输入你想要修改图书信息的书名:\n");
		printf("\t\t\t");
		scanf("%s", str1);
		if ((fp = fopen("b.txt", "rb")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		while (!feof(fp))
		{
			if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
				sum++;
		}
		if (sum == 0)
		{
			printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
			input();
		}
		printf("\t\t\t请输入你想要修改的出版社:\n");
		printf("\t\t\t");
		scanf("%s", str2);
		for (i = 0; i < sum; i++)
		{
			if (strcmp(books[i].name, str1) == 0)
			{
				strcpy(books[i].publisher, str2);
			}
		}
		fclose(fp);
	if ((fp = fopen("b.txt", "wb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	printf("\t\t\t正在保存中");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".\n");
	for (i = 0; i < sum; i++)
		fwrite(&books[i], sizeof(book), 1, fp);
	printf("\t\t\t保存成功!\n");
	fclose(fp);
	Sleep(1000);
	system("cls");
	printf("\t\t\t请选择你的下一步操作:\n");
	printf("\t\t\t1、返回上一级\n");
	printf("\t\t\t2、返回管理员菜单界面\n");
	printf("\t\t\t3、返回主菜单\n");
	printf("\t\t\t4、结束程序\n");
	printf("\t\t\t请从1到4中选择你的操作:\n");
	while (1)
	{
		printf("\t\t\t");
		scanf("%d", &m);
		if (m < 1 || m>4)
		{
			printf("你的选择有误,请重新选择:\n");
			continue;
		}
		else if (m >= 1 && m <= 4)
			break;
	}
	system("cls");
	switch (m)
	{
	case 1:
		modfiy();
		break;
	case 2:
		handmenu1();
		break;
	case 3:
		login();
		break;
	case 4:
		printf("\t\t\t欢迎下次继续使用,再见!\t\t\t\n");
		exit(0);
		break;
	default:
		break;
	}
}

void modfiypublishtime()
{
	FILE* fp;
	char str1[50];
	char  str2[50];
	int sum = 0, i, m;
	struct book books[100];
	printf("\t\t\t请先输入你想要修改图书信息的书名:\n");
	printf("\t\t\t");
	scanf("%s", str1);
	if ((fp = fopen("b.txt", "rb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	while (!feof(fp))
	{
		if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
			sum++;
	}
	if (sum == 0)
	{
		printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
		input();
	}
	printf("\t\t\t请输入你想要修改的出版时间:\n");
	printf("\t\t\t");
	scanf("%s", str2);
	for (i = 0; i < sum; i++)
	{
		if (strcmp(books[i].name, str1) == 0)
			strcpy(books[i].publishtime, str2);
	}
	fclose(fp);
	if ((fp = fopen("b.txt", "wb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	printf("\t\t\t正在保存中");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".\n");
	for (i = 0; i < sum; i++)
		fwrite(&books[i], sizeof(book), 1, fp);
	printf("\t\t\t保存成功!\n");
	fclose(fp);
	Sleep(1000);
	system("cls");
	printf("\t\t\t请选择你的下一步操作:\n");
	printf("\t\t\t1、返回上一级\n");
	printf("\t\t\t2、返回管理员菜单界面\n");
	printf("\t\t\t3、返回主菜单\n");
	printf("\t\t\t4、结束程序\n");
	printf("\t\t\t请从1到4中选择你的操作:\n");
	while (1)
	{
		printf("\t\t\t");
		scanf("%d", &m);
		if (m < 1 || m>4)
		{
			printf("\t\t\t你的选择有误,请重新选择:\n");
			continue;
		}
		else if (m >= 1 && m <= 4)
			break;
	}
	system("cls");
	switch (m)
	{
	case 1:
		modfiy();
		break;
	case 2:
		handmenu1();
		break;
	case 3:
		login();
		break;
	case 4:
		printf("\t\t\t欢迎下次继续使用,再见!\t\t\t\n");
		exit(0);
		break;
	default:
		break;
	}
}

void modfiyprice()
{
	FILE* fp;
	char str1[50];
	int str2;
	int sum = 0, i, m;
	struct book books[100];
	printf("\t\t\t请先输入你想要修改图书信息的书名:\n");
	printf("\t\t\t");
	scanf("%s", str1);
	if ((fp = fopen("b.txt", "rb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	while (!feof(fp))
	{
		if (fread(&books[sum], sizeof(book), 1, fp) != NULL)
			sum++;
	}
	if (sum == 0)
	{
		printf("\t\t\t系统没有查询到记录,请进行下一步图书信息输入功能:\n");
		input();
	}
	printf("\t\t\t请输入你想要修改的图书价格:\n");
	printf("\t\t\t");
	scanf("%d",&str2);
	for (i = 0; i < sum; i++)
	{
		if (strcmp(books[i].name, str1) == 0)
			books[i].price =str2;
	}
	fclose(fp);
	if ((fp = fopen("b.txt", "wb")) == NULL)
	{
		printf("can not open file!\n");
		exit(0);
	}
	printf("\t\t\t正在保存中");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".\n");
	for (i = 0; i < sum; i++)
		fwrite(&books[i], sizeof(book), 1, fp);
	printf("\t\t\t保存成功!\n");
	fclose(fp);
	Sleep(1000);
	system("cls");
	printf("\t\t\t请选择你的下一步操作:\n");
	printf("\t\t\t1、返回上一级\n");
	printf("\t\t\t2、返回管理员菜单界面\n");
	printf("\t\t\t3、返回主菜单\n");
	printf("\t\t\t4、结束程序\n");
	printf("\t\t\t请从1到4中选择你的操作:\n");
	while (1)
	{
		printf("\t\t\t");
		scanf("%d", &m);
		if (m < 1 || m>4)
		{
			printf("\t\t\t你的选择有误,请重新选择:\n");
			continue;
		}
		else if (m >= 1 && m <= 4)
			break;
	}
	system("cls");
	switch (m)
	{
	case 1:
		modfiy();
		break;
	case 2:
		handmenu1();
		break;
	case 3:
		login();
		break;
	case 4:
		printf("\t\t\t欢迎下次继续使用,再见!\t\t\t\n");
		exit(0);
		break;
	default:
		break;
	}
}

void  modfiy()//修改功能 
{
	int n;
	printf("\t\t\t你已选择图书信息修改功能,请选择你想要修改的信息:\n");
	printf("\t\t\t1、修改分类号\n");
	printf("\t\t\t2、修改出版社\n");
	printf("\t\t\t3、修改出版的时间\n");
	printf("\t\t\t4、修改图书的价格\n");
	printf("\t\t\t请从1到4中选择\n");
	while (1)
	{
		printf("\t\t\t");
		scanf("%d", &n);
		if (n > 4 || n < 1)
		{
			printf("\t\t\t你的输入有误,请重新输入:\n");
			continue;
		}
		else if (n >= 1 && n <= 4)
			break;
	}
	system("cls");
	switch (n)
	{
	case 1:
		modfiyclassify();
		break;
	case 2:
		modfiypublisher();
		break;
	case 3:
		modfiypublishtime();
		break;
	case 4:
		modfiyprice();
		break;
	default:
		break;
	}
}

void changlock()//操作8,管理员修改密码功能 密码设置功能为最长为12位。 
{
	FILE* fp=NULL,*fp1=NULL;
	char str[3], str1[50],str2[50];
	char  a[50],b[50];
	int  sign = 1;
	system("cls");
	printf("\t\t\t你已选择管理员密码修改操作,请再一次确认你的操作:(y/n)\n");
	printf("\t\t\t");
	scanf("%s", str);
	if (strcmp(str, "y") == 0 || strcmp(str, "Y") == 0)
	{
		printf("\t\t\t请输入你想要修改密码的账号: \n");
		printf("\t\t\t");
		scanf("%s", str1);
		printf("\t\t\t请输入你想要修改的密码: \n");
		printf("\t\t\t");
		scanf("%s", str2);
		if ((fp = fopen("a.txt", "r")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		if ((fp1 = fopen("d.txt", "w")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		do
		{
			if (fscanf(fp, "%s %s\n", a, b) != 0)
			{
				if (strcmp(a, str1) == 0)
					strcpy(b, str2);
				fprintf(fp1, "%s %s\n", a, b);
			}
			else
				break;
		} while (!feof(fp));
		fclose(fp);
		fclose(fp1);
		if ((fp1= fopen("d.txt", "r")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		if ((fp = fopen("a.txt", "w")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		printf("\t\t\t正在修改中,请稍后");
		Sleep(500);
		printf(".");
		Sleep(500);
		printf(".");
		Sleep(500);
		printf(".\n");
		do
		{
			fscanf(fp1, "%s %s\n", a, b);
			fprintf(fp, "%s %s\n", a, b);
		} 
		while (!feof(fp1));
		fclose(fp);
		fclose(fp1);
		system("cls");
		printf("\t\t\t恭喜你已成功修改管理员密码,请重新登录。\t\t\t\n");
		Sleep(1000);
		system("cls");
		login();
	}
	else if (strcmp(str, "n") == 0 || strcmp(str, "N") == 0)
	{
		printf("\t\t\t你已选择放弃修改密码。\t\t\t\n");
		Sleep(1000);
		system("cls");
		handmenu1();
	}
}

void regist()//登录功能
{
	system("cls");
	FILE* fp;
	char str1[20],str2[20], n[3];
	int sign = 1;
	printf("\n\n\n\n");
	printf("\t \t\t你已选择身份注册功能,请完善你的个人信息:\t\t\t\n");
	printf("\t\t\t1、选择管理员身份注册 \t\t\t\n");
	printf("\t\t\t 2、选择学生身份注册\t\t\t\n");
	printf("\t\t\t请选择你的注册身份(1或者2):\t\t\t\n");
	while (1)
	{
		printf("\t\t\t");
		scanf("%s", n);
		if (strcmp(n, "1") == 0 || strcmp(n, "2") == 0)
			break;
		else
		{
			printf("\t\t\t你的选择有误,请重新选择:\t\t\t\n");
			continue;
		}
	}
	if (strcmp(n, "1") == 0)
	{
		system("cls");
		printf("\n\n\n\n");
		printf("\t\t\t 你已选择管理员身份注册,请注册你的账号密码:\t\t\t\n");
		if ((fp = fopen("a.txt", "ab")) == NULL)//追加密码
		{
			printf("can not open file!\n");
			exit(0);
		}
		printf("\t\t\t请输入你的账号:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str1);
		printf("\t\t\t 请输入你的密码:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str2);
		fprintf(fp, "%s %s\n", str1, str2);
		printf("\t\t\t正在注册中,请稍后");
		Sleep(500);
		printf(".");
		Sleep(500);
		printf(".");
		Sleep(500);
		printf(".\n");
		printf("\t\t\t 注册成功!");
		fclose(fp);
		Sleep(1000);
		system("cls");
		login();
	}
	else if (strcmp(n, "2") == 0)
	{
		system("cls");
		printf("\t\t\t你已选择学生身份注册,请注册你的账号密码:\n");
		if ((fp = fopen("c.txt", "ab")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		printf("\t\t\t请输入你的账号:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str1);
		printf("\t\t\t请输入你的密码:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str2);
		fprintf(fp, "%s %s\n", str1, str2);
		printf("\t\t\t正在注册中,请稍后");
		Sleep(500);
		printf(".");
		Sleep(500);
		printf(".");
		Sleep(500);
		printf(".\n");
		printf("\t\t\t 注册成功!");
		fclose(fp);
		Sleep(1000);
		system("cls");
		login();
	}
}
void handmenu1()//管理员权限 
{
	int n;
	int sign = 1;
	printf("\t*********************************************************************************************\t\n");
	printf("\t*                        系统已确认你的管理员的身份,你可以执行以下的操作:                 *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       0.图书信息的录入                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       1.图书信息的浏览                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       2.图书信息的查询                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       3.图书信息的排序                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       4.图书信息的删除                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       5.图书信息的修改                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       6.管理员密码修改                                                    *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       7.程序结束功能                                                      *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       8、主菜单                                                           *\t\n");
	printf("\t*-------------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       请从0到8中选择你接下来要进行的操作:                                *\t\n");
	printf("\t*********************************************************************************************\t\n");
	while (sign)
	{
		printf("\t");
		scanf("%d", &n);
		if (n >= 0 && n <= 8)
			sign = 0;
		else
		{
			printf("\t\t\t你的输入有误,请重新输入你选择的操作:\t\t\t\n");
			continue;
		}
	}
	system("cls");
	switch (n)
	{
	case 0:
		input();//输入 
		break;
	case 1:
		browse();//浏览 
		break;
	case 2:
		check();//查询 
		break;
	case 3:
		sort();//排序 
		break;
	case 4:
		dele();//删除 
		break;
	case 5:
		modfiy();//修改 
		break;
	case 6:
		changlock();//管理员修改密码 
		break;
	case 7:
		printf("\t\t\t欢迎下次使用,再见!\t\t\t\n");
		exit(0);
		break;
	case 8:
		login();
		break;
	default:
		break;
	}
}

void menu1()//管理员登录菜单功能 
{
	FILE* fp;
	char a[20], b[20];
	char str[20], str1[20];
	int sign = 0;
	while (1)
	{
		printf("\t\t\t请输入管理员账号:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str);
		printf("\t\t\t请输入管理员密码:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str1);
		if ((fp = fopen("a.txt", "r")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		while (!feof(fp))
		{
			fscanf(fp, "%s %s", a, b);
			if (strcmp(str, a) == 0 && strcmp(str1, b) == 0)
			{
				printf("\t\t\t登录中");
				Sleep(500);
				printf(".");
				Sleep(500);
				printf(".");
				Sleep(500);
				printf(".\n");
				printf("\t\t\t登录成功!\t\t\t\n");
				Sleep(1000);
				system("cls");
				handmenu1();
				sign = 1;
				break;
			}
		}
		if (sign == 0)
		{
			system("cls");
			printf("\t\t\t管理员密码不正确,或账号错误,请重新登录:\t\t\t\n");
			continue;
		}
		fclose(fp);
	}
}

void handmenu2()//学生身份登录菜单功能
{
	int m;
	int sign = 1;
	char n[3];
	printf("\t******************************************************************************************\t\n");
	printf("\t*                                    1.图书信息的浏览                                    *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                                    2.图书信息的查询                                    *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                                    3.图书信息的排序                                    *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                                    4、主菜单                                           *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                                    请从1到4中选择你想要进行的操作:                    *\t\n");
	printf("\t******************************************************************************************\t\n");
	while (sign)
	{
		printf("\t");
		scanf("%s", n);
		if (strcmp(n, "1") == 0)
		{
			m = 1;
			sign = 0;
		}
		else if (strcmp(n, "2") == 0)
		{
			m = 2;
			sign = 0;
		}
		else if (strcmp(n, "3") == 0)
		{
			m = 3;
			sign = 0;
		}
		else if (strcmp(n, "4") == 0)
		{
			m = 4;
			sign = 0;
		}
		else
		{
			system("cls");
			printf("\t\t\t你的输入有误,请重新输入:\t\t\t\n");
			continue;
		}
	}
	system("cls");
	switch (m)
	{
	case 1:
		browse1();
		break;
	case 2:
		check();
		break;
	case 3:
		sort();
		break;
	case 4:
		login();
		break;
	default:
		break;
	}
}

void menu2()//学生菜单功能 
{
	FILE *fp=NULL;
	char str1[20], str2[20];
	char a[20], b[20];
	int sign = 0,m = 0, count = 1, j = 0;
	while (count)
	{
		printf("\t\t\t请输入你的账号:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str1);
		printf("\t\t\t请输入你的密码:\t\t\t\n");
		printf("\t\t\t");
		scanf("%s", str2);
		if ((fp = fopen("c.txt", "r")) == NULL)
		{
			printf("can not open file!\n");
			exit(0);
		}
		while (!feof(fp))
		{
			fscanf(fp, "%s %s", a, b);
			if (strcmp(str1, a) == 0 && strcmp(str2, b) == 0)
			{
				sign = 1;
				count = 0;
				break;
			}
		}
		if (sign == 0)
		{
			system("cls");
			printf("\t\t\t你的输入账号或密码错误,请重新输入:\t\t\t\n");
			continue;
		}
	}
	fclose(fp);
	printf("\t\t\t登录中");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".");
	Sleep(500);
	printf(".\n");
	printf("\t\t\t登陆成功!\t\t\t\n");
	Sleep(1000);
	system("cls");
	printf("\t\t\t系统已确认你的学生身份,你可以选择下面的操作:\t\t\t\n");
	handmenu2();
}


void login()//登录功能 
{
	char m[3];
	printf("\t******************************************************************************************\t\n");
	printf("\t*                       这是一个图书管理系统,请完成接下来的操作                         *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       1、注册身份                                                      *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       2、管理员身份                                                    *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       3、学生身份                                                      *\t\n");
	printf("\t*----------------------------------------------------------------------------------------*\t\n");
	printf("\t*                       请从1到3中选择                                                   *\t\n");
	printf("\t******************************************************************************************\t\n");

	while (1)
	{
		printf("\t");
		scanf("%s", m);
		if (strcmp(m, "2") == 0)
		{
			system("cls");
			printf("\t\t\t你已选择管理员身份登录.......\t\t\t\n");
			menu1();
			break;
		}
		else if (strcmp(m, "3") == 0)
		{
			system("cls");
			printf("\t\t\t你已选择学生身份登录........\t\t\t\n");
			menu2();
			break;
		}
		else if (strcmp(m, "1") == 0)
		{
			printf("\t\t\t你已选择身份注册功能........\t\t\t\n");
			regist();
			break;
		}
		else
		{
			printf("你的输入有误,请重新输入......\n");
			continue;
		}
	}
}

int main(void)
{
	login();
}



发布了6 篇原创文章 · 获赞 1 · 访问量 1550

猜你喜欢

转载自blog.csdn.net/m0_46198325/article/details/104124973