图书管理系统,数据可以存储在本地

图书管理系统,数据本地存储

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define ZFNUM 20
struct book
{
	char isbn[ZFNUM];
	char bookname[ZFNUM];
	float price;
	book *next;
};
void s_db_input(char *s_db)
{
	char ch[ZFNUM + 100] = { 0 };
	while (!(scanf("%s", ch) && (strlen(ch)<ZFNUM)))
	{
		printf("长度超出,重新输入\n>>>");
	}
	strcpy(s_db, ch);
}
void bookname_input(book* p)
{
	char* ch = (char*)malloc(128*sizeof(char));
	if (ch)
	{
		while (!(scanf("%s", ch) && (strlen(ch)<ZFNUM)))
		{
			printf("长度超出,重新输入书名\n>>>");
		}
		strcpy(p->bookname, ch);
	}
	
}
void isbn_input(book* p)
{
	char* ch = (char*)malloc(128 * sizeof(char));
	if (ch)
	{
		while (!(scanf("%s", ch) && (strlen(ch) < ZFNUM)))
		{
			printf("长度超出,重新输入ISBN\n>>>");
		}
		strcpy(p->isbn, ch);
	}
}
void price_input(book* p)
{
	int fh = 0;
	while (!fh)
	{
		fh = scanf("%f", &p->price);
		if (!fh)
		{
			printf("输入错误,重新输入价格\n");
			printf(">>>");
			fflush(stdin);
		}
	}
}
void g_input(book* p)
{
	int t = 0;
	scanf("%d", &t);
	switch (t)
	{
	case 1:
	{
			  printf("请输入书名>>>");
			  bookname_input(p);
	}
		break;
	case 2:
	{
			  printf("请输入ISBN>>>");
			  isbn_input(p);
	}
		break;
	case 3:
	{
			  printf("请输入价格>>>");
			  price_input(p);
	}
		break;
	default:
		printf("输入错误\n");
	}
}
void writedata(book *wt,FILE *pw)
{
	if (pw)
	{
		while (wt)
		{
			fprintf(pw, "%s\t\t", wt->bookname);
			fprintf(pw, "%s\t\t", wt->isbn);
			fprintf(pw, "%f\t\n", wt->price);
			wt = wt->next;
		}
		fclose(pw);
	}
	else
		printf("库中无书\n");
	
}
book* readdata()
{
	FILE *pw = fopen("config.txt", "r");
	book head = { 0 };
	if (pw)
	{
		while (1)
		{
			book* p = (book*)malloc(sizeof(book));
			strcpy(p->bookname, "0");
			fscanf(pw, "%s", p->bookname);
			if (!strcmp(p->bookname, "0"))
			{
				free(p);
				break;
			}
			fscanf(pw, "%s", p->isbn);
			fscanf(pw, "%f", &p->price);
			p->next = head.next;
			head.next = p;
		}
		return head.next;
		fclose(pw);
	}
}
void z()
{
	book head = { 0 };
	printf("(添加图书信息)\n");
	printf("输入“0”以结束添加\n\n");
	printf("********************\n");
	while (1)
	{
		book* p = (book*)malloc(sizeof(book));
		if (p)
		{
			printf("输入书名>>>");
			bookname_input(p);

			if (!(strcmp(p->bookname, "0")))
			{
				free(p);
				break;
			}
			printf("输入ISBN>>>");
			isbn_input(p);

			printf("输入价格>>>");
			price_input(p);

			p->next = head.next;
			head.next = p;
			printf("已添加图书信息\n\n");
		}
		else
			printf("内存出错\n");
	}
	printf("录入结束\n");
	FILE *pw = fopen("config.txt", "a+");
	writedata(head.next,pw);
	printf("***********************************************************************************\n\n");
}
void s()
{
	printf("(删除图书信息)\n");
	printf("输入“0”以结束删除\n\n");
	book head = { 0 };
	head.next=readdata();
	if (head.next)
	{
		while (1)
		{
			printf("请选择输入ISBN或书名:(1.ISBN 2.书名)\n>>>");
			int xz = 0;
			scanf("%d", &xz);
			if (!xz)
				break;
			switch (xz)
			{
			case 1:
			{
					  char s_db[ZFNUM];
					  book* p = &head;
					  book* last_p = &head;
					  int flag = 0;
					  printf("输入ISBN:>>>");
					  s_db_input(s_db);
					  while (p)
					  {
						  if (!(strcmp(p->isbn, s_db)))
						  {
							  printf("书名:%s \n", p->bookname);
							  printf("ISBN:%s \n", p->isbn);
							  printf("价格:%.2f \n", p->price);
							  printf("------------------\n");
							  last_p->next = p->next;
							  p->next = NULL;
							  printf("已删除\n");
							  flag = 1;
						  }
						  last_p = p;
						  p = p->next;
					  }
					  if (!flag)
						  printf("书库无此书\n");
			}
				break;
			case 2:
			{
					  char s_db[ZFNUM];
					  book* p = &head;
					  book* last_p = &head;
					  int flag = 0;
					  printf("输入书名:>>>");
					  s_db_input(s_db);
					  while (p)
					  {
						  if (!(strcmp(p->bookname, s_db)))
						  {
							  printf("书名:%s \n", p->bookname);
							  printf("ISBN:%s \n", p->isbn);
							  printf("价格:%.2f \n", p->price);
							  printf("------------------\n");
							  last_p->next = p->next;
							  p->next = NULL;
							  printf("已删除\n");
							  flag = 1;
						  }
						  last_p = p;
						  p = p->next;
					  }
					  if (!flag)
						  printf("书库无此书\n");
			}
				break;
			default:
				printf("输入错误\n");
			}
		}
		FILE *pw = fopen("config.txt", "w+");
		writedata(head.next, pw);
	}
	else
		printf("库中无书\n");
	printf("***********************************************************************************\n\n");
}
void g()
{
	printf("(更改图书信息)\n");
	printf("输入“0”以结束修改\n\n");
	book head = { 0 };
	head.next = readdata();
	if (head.next)
	{
		while (1)
		{
			printf("请选择输入ISBN或书名:(1.ISBN 2.书名)>>>");
			int xz = 0;
			scanf("%d", &xz);
			if (!xz)
				break;
			switch (xz)
			{
			case 1:
			{
					  char s_db[ZFNUM];
					  book* p = &head;
					  printf("输入ISBN:>>>");
					  s_db_input(s_db);
					  int flag = 0;
					  while (p)
					  {
						  if (!(strcmp(p->isbn, s_db)))
						  {
							  flag = 1;
							  printf("已查到位置!\n");
							  printf("------------------\n");
							  printf("书名:%s \n", p->bookname);
							  printf("ISBN:%s \n", p->isbn);
							  printf("价格:%.2f \n", p->price);
							  printf("------------------\n");
							  printf("请选择要修改的信息:(1.书名 2.ISBN 3.价格)\n");
							  g_input(p);
							  printf("已修改!\n");
						  }
						  p = p->next;
					  }
					  if (!flag)
						  printf("书库无此书\n");
			}
				break;
			case 2:
			{
					  char s_db[ZFNUM];
					  book* p = &head;
					  printf("输入书名:>>>");
					  s_db_input(s_db);
					  int flag = 0;
					  while (p)
					  {
						  if (!(strcmp(p->bookname, s_db)))
						  {
							  flag = 1;
							  printf("已查到位置\n");
							  printf("------------------\n");
							  printf("书名:%s \n", p->bookname);
							  printf("ISBN:%s \n", p->isbn);
							  printf("价格:%.2f \n", p->price);
							  printf("------------------\n");
							  printf("请选择要修改的信息:(1.书名 2.ISBN 3.价格)\n");
							  g_input(p);
							  printf("已修改!\n");
						  }
						  p = p->next;
					  }
					  if (!flag)
						  printf("书库无此书\n");
			}
				break;
			default:
				printf("输入错误\n");
			}
		}
		FILE *pw = fopen("config.txt", "w+");
		writedata(head.next, pw);
	}
	else
		printf("库中无书\n");
	printf("***********************************************************************************\n\n");
}
void c()
{
	printf("(查询图书信息)\n");
	printf("输入“0”以结束查找\n\n");
	book head = { 0 };
	head.next = readdata();
	if (head.next)
	{
		while (1)
		{
			printf("请选择输入ISBN或书名或其它:(1.ISBN 2.书名 3.输出所有图书信息)\n>>>");
			int xz = 0;
			scanf("%d", &xz);
			if (!xz)
				break;
			printf("***********************************************************************************\n\n");
			switch (xz)
			{
			case 1:
			{
					  char s_db[ZFNUM];
					  book* p = &head;
					  book* last_p = &head;
					  int flag = 0;
					  printf("输入ISBN:>>>");
					  s_db_input(s_db);
					  while (p)
					  {
						  if (!(strcmp(p->isbn, s_db)))
						  {
							  flag = 1;
							  printf("书名:%s \n", p->bookname);
							  printf("ISBN:%s \n", p->isbn);
							  printf("价格:%.2f \n", p->price);
							  printf("------------------\n\n");
						  }
						  p = p->next;
					  }
					  if (!flag)
						  printf("书库无此书\n");
			}
				break;
			case 2:
			{
					  char s_db[ZFNUM];
					  book* p = &head;
					  book* last_p = &head;
					  int flag = 0;
					  printf("输入书名:>>>");
					  s_db_input(s_db);
					  while (p)
					  {
						  if (!(strcmp(p->bookname, s_db)))
						  {
							  flag = 1;
							  printf("书名:%s \n", p->bookname);
							  printf("ISBN:%s \n", p->isbn);
							  printf("价格:%.2f \n", p->price);
							  printf("------------------\n\n");
						  }
						  p = p->next;
					  }
					  if (!flag)
						  printf("书库无此书\n");

			}
				break;
			case 3:
			{
					  book* p = head.next;
					  while (p)
					  {
						  printf("书名:%s \n", p->bookname);
						  printf("ISBN:%s \n", p->isbn);
						  printf("价格:%.2f \n", p->price);
						  printf("------------------\n\n");
						  p = p->next;
					  }
					  printf("\n输出结束\n");
			}
				break;
			default:
				printf("输入错误\n");
			}
		}
	}
	else
		printf("库中无书\n");
	printf("***********************************************************************************\n\n");
}
int main()
{
	int xz;
	printf("简易图书管理---@kyaa111 作品\n");
	printf("提供本地存储功能\n");
	printf("请输入数字选择功能:\n");
	while (1)
	{
		printf("1.增(添加图书信息)2.删(删除图书信息)3.改(更改图书信息)4.查(查询图书信息)\n");
		printf("\n>>>");
		int fh = 0;
		while (!fh)
		{
			fh = scanf("%d", &xz);
			if (!fh)
			{

				printf("输入错误,注意格式\n>>>");
				fflush(stdin);
				xz = 0;
			}
		}
		printf("***********************************************************************************\n\n");
		switch (xz)
		{
		case 1:
			z();
			break;
		case 2:
			s();
			break;
		case 3:
			g();
			break;
		case 4:
			c();
			break;
		default:
			printf("输入错误\n");
		}
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/kyaa111/article/details/79273166