图书管理系统

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include<conio.h>
typedef int BOOL;
typedef struct bookinfo
{
	char number[15];/*产品编号*/
	char name[30];/*产品名称*/
	char auther[20];/*作者*/
	char authernum[15];//作者编号
	BOOL isExit;/*存在状态*/
	char pubname[20];//出版社名
	char pubnum[15]; //出版社号
	int now;   //现存量
	int all;   //总存量
}BOOKINFO;
typedef struct lender
{
	char bookname[30];
	char lendernum[15];/*借书人学号(图书证号)*/
	int lendertime;/*借书时间*/
}LENDER;
int search_according_name(char* );
void menu()
{
	printf("\n\n\n\n\n\n\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\t5:按照出版社名称查询图书基本信息\n");
	printf("\t\t\t6:根据作者名称查询图书基本信息\n");
	printf("\t\t\t7:列出所有未借出去的图书信息\n");
	printf("\t\t\t8:组合查询图书基本信息\n");
	printf("\t\t\ta:借书\n");
	printf("\t\t\tb:还书\n");
	printf("\t\t\tt:退出\n");
}
void choice_1_input_new()/*输入新进的图书信息*/
{
	char choice;
	FILE *p;
	BOOKINFO newbook;
	system("cls");
	while (1)
	{
		printf("输入图书编号:");
		gets(newbook.number);

		printf("输入图书名称:");
		gets(newbook.name);


		printf("输入图书的作者:");
		gets(newbook.auther);

		printf("输入作者编号:");
		gets(newbook.authernum);

		printf("输入图书的出版社名:");
		gets(newbook.pubname);

		printf("输入出版社编号:");
		gets(newbook.pubnum);

		printf("输入现存量:");
		scanf("%d", &newbook.now);

		printf("输入总存量:");
		scanf("%d", &newbook.all);

		

		printf("是否保存该条书目?(Y/N)\n");
		choice = getchar();
		while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
			choice = getchar();
		if (choice == 'Y' || choice == 'y')
		{
			newbook.isExit = 1;/*将图书状态设置成1,表示没有借出*/

				p = fopen("book.txt", "ab");
				fwrite(&newbook, sizeof(BOOKINFO), 1, p);
				fclose(p);

				printf("\n该条书目已添加到book.txt文件中!\n");

		}
		else
		{
			printf("\n本条书目未保存!\n");
		}
		printf("\n是否继续添加书目?(Y/N)\n");
		choice = getchar();
		while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
			choice = getchar();
		if (choice == 'Y' || choice == 'y')
			continue;
		else
			break;
	}
}
void choice_2_display_all()/*显示全部图书信息*/
{
	FILE *p;
	int n;
	BOOKINFO bookinfo[100];
	int booknumber = 0;
	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	booknumber--;
	if (booknumber == 0)
	{
		printf("没有任何图书信息!\n\n");
	}
	else
	{
		n = 0;
		printf("                              图书信息如下\n");
		printf("                           图书信息                  \n");
		printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
		while (n<booknumber)
		{
			printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
				bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
				bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
				bookinfo[n].pubnum, bookinfo[n].now,bookinfo[n].all);
			n++;
		}
	}
	printf("\n\n按任意键回到主菜单!\n");
	getchar();
}

void choice_8_display_lend()/*显示全部借书信息*/      //无法使用
{
	FILE *p;
	int n;
	LENDER lendinfo[10];
	int lendnumber = 0;
	system("cls");
	p = fopen("lend.txt", "rb");
	while (!feof(p))
	{
		fread(&lendinfo[lendnumber], sizeof(LENDER), 1, p);
		lendnumber++;
	}
	/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	lendnumber--;
	if (lendnumber == 0)
	{
		printf("没有任何借书信息!\n\n");
	}
	else
	{
		n = 0;
		printf("           借书信息如下\n");
		printf("        借书信息                  \n");
		printf("书名        图书证号    借书时间 \n");
		while (n<lendnumber)
		{
			printf("%-12s%-12s%-6d\n",
				lendinfo[n].bookname,lendinfo[n].lendernum,lendinfo[n].lendertime);
			n++;
		}
	}
	printf("\n\n按任意键回到主菜单!\n");
	getchar();
}

void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
	char search[20] = "";/*search用来存放要查询的书名*/
	int n;
	FILE *p;
	char choice;
	BOOKINFO bookinfo[100];
	int booknumber = 0;

	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	while (1)
	{
		printf("输入要查询的书本名称:");
		gets(search);
		if (booknumber == 0)
		{
			printf("书库中没有任何信息!\n\n");
			printf("按任意键回到主菜单!\n\n");
			getch();
			break;
		}/*if结束*/
		else
		{
			for (n = 0; n<booknumber; n++)
			if (strcmp(bookinfo[n].name, search) == 0)
			{
				printf("该书的详细信息如下:\n");
				printf("                           图书信息                  \n");
				printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
					printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
						bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
						bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
						bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
				break;
			}
			if (n >= booknumber)
				printf("没有查找该书的任何信息!\n");
			printf("\n\n是否继续查询?(Y/N)\n");
			choice = getchar();
			getchar();   //收回车
			while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
				choice = getchar();
			if (choice == 'Y' || choice == 'y')
				continue;
			else
				break;
		}/*else结束*/
	}/*while(1)结束*/
}
void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/
{
	char search[20] = "";/*search用来存放要删除的书名*/
	int n, i;
	FILE *p;
	char choice;
	BOOKINFO bookinfo[100];
	int booknumber;

	system("cls");
	while (1)
	{
		getchar();
		printf("输入要删除的书本名称:");
		gets(search);
		p = fopen("book.txt", "rb");
		booknumber = 0;
		while (!feof(p))
		{
			fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
			booknumber++;
		}
		booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
		fclose(p);
		if (booknumber == 0)
		{
			printf("书库中没有任何信息!\n\n");
			printf("按任意键回到主菜单!\n\n");
			getchar();
			break;
		}/*if结束*/
		else
		{
			for (n = 0; n<booknumber; n++)
			if (strcmp(bookinfo[n].name, search) == 0)
			{
				break;
			}
			if (n >= booknumber)
				printf("没有查找该书的任何信息!\n");
			else
			{
				printf("是否确认需要删除该条书目?(Y/N)");
				choice = getchar();
				while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
					choice = getchar();
				if (choice == 'Y' || choice == 'y')
				{
					for (i = n; i<booknumber - 1; i++)
						bookinfo[i] = bookinfo[i + 1];
					booknumber--;

					p = fopen("book.txt", "wb");
					for (n = 0; n<booknumber; n++)
						fwrite(&bookinfo[n], sizeof(BOOKINFO), 1, p);
					fclose(p);

					printf("删除成功!\n");
				}
				else
					printf("\n\n该条书目没有被删除!");
			}
			printf("\n\n是否继续进行删除操作?(Y/N)\n");
			choice = getchar();
			while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
				choice = getchar();
			if (choice == 'Y' || choice == 'y')
				continue;
			else
				break;
		}/*else结束*/
	}/*while(1)结束*/
}
void choice_5_sort_according_name()/*根据图书名称排序*/
{
	FILE *p;
	int m, n;
	BOOKINFO temp;
	BOOKINFO bookinfo[100];
	int booknumber;

	p = fopen("book.txt", "rb");
	booknumber = 0;
	system("cls");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	if (booknumber == 0)
	{
		printf("没有任何图书信息!\n\n");
	}
	else
	{
		for (m = 0; m<booknumber - 1; m++)
		for (n = m + 1; n<booknumber; n++)
		if (strcmp(bookinfo[m].name, bookinfo[n].name)>0)
		{
			temp = bookinfo[m];
			bookinfo[m] = bookinfo[n];
			bookinfo[n] = temp;
		}
		p = fopen("book.txt", "wb");
		for (m = 0; m<booknumber; m++)
			fwrite(&bookinfo[m], sizeof(BOOKINFO), 1, p);
		fclose(p);
		printf("\n\n完成排序!\n\n");
	}
	printf("按任意键回到主菜单!\n");
	getchar();
}



void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/
{
	FILE *p;
	int n;
	int count = 0;
	BOOKINFO bookinfo[100];
	int booknumber;

	system("cls");
	booknumber = 0;
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;
	fclose(p);
	if (booknumber == 0)
	{
		printf("书库中没有任何书目存在!\n");
	}
	else
	{
		for (n = 0; n<booknumber; n++)
		if (bookinfo[n].isExit == 1)
			count++;
		if (count == 0)
			printf("书库中的书籍全部借出!\n");
		else
		{
			printf("书库中未被借出的图书信息如下:\n\n");
			printf("                           图书信息                  \n");
			printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
			for (n = 0; n<booknumber; n++)
			if (bookinfo[n].isExit == 1)
			{
				printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
					bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
					bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
					bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
			}
		}
	}
	printf("\n按任意键返回主菜单!\n");
	getchar();
}

int search_according_name(char* bookname)/*根据图书名称显示图书的信息*/
{
	int n;
	FILE *p;
	char choice;
	BOOKINFO bookinfo[100];
	int booknumber = 0;

	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
			for (n = 0; n<booknumber; n++)
			if (strcmp(bookname, bookinfo[n].name) == 0)
			{
				return n;    //找到
			}
			else
				return -1;
		
}

void lendbook(int n)     //n!=-1
{
    FILE *p,*q;
	char choice;
	BOOKINFO bookinfo[100];
	LENDER lendinfo;
	int booknumber = 0;
	int i;
	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	bookinfo[n].now--;
	bookinfo[n].isExit = 0;
	strcpy(lendinfo.bookname, bookinfo[n].name);
	p = fopen("book.txt", "wb");
	for (i = 0; i<booknumber; i++)
		fwrite(&bookinfo[i], sizeof(BOOKINFO), 1, p);
	fclose(p);
	q = fopen("lend.txt", "ab");      //借书记录
	printf("请输入图书证号:\n");
	gets(lendinfo.lendernum);
	lendinfo.lendertime = 20;
	fclose(q);
	printf("借书成功\n");
	getchar();
}

void backbook(int n)                 //还书
{
	FILE *p, *q;
	char choice;
	BOOKINFO bookinfo[100];
	LENDER lendinfo[10];
	int booknumber = 0;
	int lendnumber = 0;
	int i;
	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	bookinfo[n].now++; bookinfo[n].isExit = 1;
	q = fopen("lend.txt","rb");
	while (!feof(q))
	{
		fread(&lendinfo[lendnumber], sizeof(LENDER), 1, q);
		lendnumber++;
	}
	lendnumber--;
	fclose(q);
	int n1;
	for (n1 = 0; n1<lendnumber; n1++)
	if (strcmp(lendinfo[n1].bookname, bookinfo[n].name) == 0)
	{
		break;
	}

	for (i = n1; i<lendnumber - 1; i++)
		lendinfo[i] = lendinfo[i + 1];
	lendnumber--;

	q = fopen("lend.txt", "wb");
	for (n1 = 0; n1<lendnumber; n1++)
		fwrite(&lendinfo[n1], sizeof(LENDER), 1, q);
	fclose(q);

	p = fopen("book.txt", "wb");
	for (n1 = 0; n1<booknumber; n1++)
		fwrite(&bookinfo[n1], sizeof(BOOKINFO), 1, p);
	fclose(p);

	printf("删除成功!\n");
	getchar();
}
void choice_6_search_according_author()/*根据作者名称显示图书的信息*/
{
	char search[20] = "";/*search用来存放要查询的作者名*/
	int n;
	FILE *p;
	char choice;
	BOOKINFO bookinfo[100];
	int booknumber = 0;

	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	while (1)
	{
		printf("输入要查询的作者名称:");
		gets(search);
		if (booknumber == 0)
		{
			printf("书库中没有任何信息!\n\n");
			printf("按任意键回到主菜单!\n\n");
			getch();
			break;
		}/*if结束*/
		else
		{
			for (n = 0; n<booknumber; n++)
			if (strcmp(bookinfo[n].auther, search) == 0)
			{
				printf("该书的详细信息如下:\n");
				printf("                           图书信息                  \n");
				printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
				printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
					bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
					bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
					bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
				break;
			}
			if (n >= booknumber)
				printf("没有查找该书的任何信息!\n");
			printf("\n\n是否继续查询?(Y/N)\n");
			choice = getchar();
			getchar();   //收回车
			while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
				choice = getchar();
			if (choice == 'Y' || choice == 'y')
				continue;
			else
				break;
		}/*else结束*/
	}/*while(1)结束*/
}

void search_according_pubname()/*根据出版社名称显示图书的信息*/
{
	char search[20] = "";/*search用来存放要查询的出版社名*/
	int n;
	FILE *p;
	char choice;
	BOOKINFO bookinfo[100];
	int booknumber = 0;

	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	while (1)
	{
		printf("输入要查询的出版社名称:");
		gets(search);
		if (booknumber == 0)
		{
			printf("书库中没有任何信息!\n\n");
			printf("按任意键回到主菜单!\n\n");
			getch();
			break;
		}/*if结束*/
		else
		{
			for (n = 0; n<booknumber; n++)
			if (strcmp(bookinfo[n].pubname, search) == 0)
			{
				printf("该书的详细信息如下:\n");
				printf("                           图书信息                  \n");
				printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
				printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
					bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
					bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
					bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
				break;
			}
			if (n >= booknumber)
				printf("没有查找该书的任何信息!\n");
			printf("\n\n是否继续查询?(Y/N)\n");
			choice = getchar();
			getchar();   //收回车
			while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
				choice = getchar();
			if (choice == 'Y' || choice == 'y')
				continue;
			else
				break;
		}/*else结束*/
	}/*while(1)结束*/
}

void search_according_all()/*组合查询显示图书的信息*/
{
	char search1[20] = "";/*search1用来存放要查询的作者名*/
	char search2[20] = "";/*存放要查询的出版社名*/
	int n;
	FILE *p;
	char choice;
	BOOKINFO bookinfo[100];
	int booknumber = 0;

	system("cls");
	p = fopen("book.txt", "rb");
	while (!feof(p))
	{
		fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
		booknumber++;
	}
	booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
	fclose(p);
	while (1)
	{
		printf("输入要查询的作者名称:");
		gets(search1);
		printf("输入要查询的出版社名称:");
		gets(search2);
		if (booknumber == 0)
		{
			printf("书库中没有任何信息!\n\n");
			printf("按任意键回到主菜单!\n\n");
			getch();
			break;
		}/*if结束*/
		else
		{
			for (n = 0; n<booknumber; n++)
			if ((strcmp(bookinfo[n].pubname, search2) == 0)&&(strcmp(bookinfo[n].auther,search1)==0))
			{
				printf("该书的详细信息如下:\n");
				printf("                           图书信息                  \n");
				printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
				printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
					bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
					bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
					bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
				break;
			}
			if (n >= booknumber)
				printf("没有查找该书的任何信息!\n");
			printf("\n\n是否继续查询?(Y/N)\n");
			choice = getchar();
			getchar();   //收回车
			while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
				choice = getchar();
			if (choice == 'Y' || choice == 'y')
				continue;
			else
				break;
		}/*else结束*/
	}/*while(1)结束*/
}


void main()
{
	char choice;
	clock_t tm;
	FILE *p;
	char s[30];
	int n;
	if ((p = fopen("book.txt", "rb")) == NULL)
	{
		p = fopen("book.txt", "wb");
		fclose(p);
	}
	while (1)
	{
		system("cls");
		menu();
		choice = getch();
		switch (choice)
		{
		case '1':choice_1_input_new(); break;/*输入新进的图书信息*/
		case '2':choice_2_display_all(); break;/*显示全部图书信息*/
		case '3':choice_3_search_according_name(); break;/*根据图书名称显示图书的信息*/
		case '4':choice_4_delete_according_name(); break;/*根据图书名称对图书信息进行删除*/
		case '5':search_according_pubname(); break;/*根据出版社名称查找*/
		case '6':choice_6_search_according_author(); break;/*根据作者名称查找*/
		case '7':choice_7_display_according_exitflag(); break;/*根据存在状态列出图书信息*/
		case '8':search_according_all(); break; /*组合查询*/
		case 'a':printf("请输入借书名称:\n"); scanf("%s",s);
			n = search_according_name(s); getchar();
			if (n == -1) printf("没有此书信息\n");
			else { lendbook(n); }
			break;
		case 'b':printf("请输入还书名称:\n"); scanf("%s",s);
			n = search_according_name(s); getchar();
			if (n == -1) printf("没有此书信息\n");
			else { backbook(n);  }
			break;
		case 't':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n"); getch(); return;
		default:
			printf("\n\n\t\t\t请输入菜单中的字符!");
			tm = clock();
			while (clock()<tm + 1800);
			break;
		}
	}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include<conio.h>
typedef int BOOL;
typedef struct bookinfo
{
char number[15];/*产品编号*/
char name[30];/*产品名称*/
char auther[20];/*作者*/
char authernum[15];//作者编号
BOOL isExit;/*存在状态*/
char pubname[20];//出版社名
char pubnum[15]; //出版社号
int now;   //现存量
int all;   //总存量
}BOOKINFO;
typedef struct lender
{
char bookname[30];
char lendernum[15];/*借书人学号(图书证号)*/
int lendertime;/*借书时间*/
}LENDER;
int search_according_name(char* );
void menu()
{
printf("\n\n\n\n\n\n\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\t5:按照出版社名称查询图书基本信息\n");
printf("\t\t\t6:根据作者名称查询图书基本信息\n");
printf("\t\t\t7:列出所有未借出去的图书信息\n");
printf("\t\t\t8:组合查询图书基本信息\n");
printf("\t\t\ta:借书\n");
printf("\t\t\tb:还书\n");
printf("\t\t\tt:退出\n");
}
void choice_1_input_new()/*输入新进的图书信息*/
{
char choice;
FILE *p;
BOOKINFO newbook;
system("cls");
while (1)
{
printf("输入图书编号:");
gets(newbook.number);
 
printf("输入图书名称:");
gets(newbook.name);
 
 
printf("输入图书的作者:");
gets(newbook.auther);
 
printf("输入作者编号:");
gets(newbook.authernum);
 
printf("输入图书的出版社名:");
gets(newbook.pubname);
 
printf("输入出版社编号:");
gets(newbook.pubnum);
 
printf("输入现存量:");
scanf("%d", &newbook.now);
 
printf("输入总存量:");
scanf("%d", &newbook.all);
 

 
printf("是否保存该条书目?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
{
newbook.isExit = 1;/*将图书状态设置成1,表示没有借出*/
 
p = fopen("book.txt", "ab");
fwrite(&newbook, sizeof(BOOKINFO), 1, p);
fclose(p);
 
printf("\n该条书目已添加到book.txt文件中!\n");
 
}
else
{
printf("\n本条书目未保存!\n");
}
printf("\n是否继续添加书目?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}
}
void choice_2_display_all()/*显示全部图书信息*/
{
FILE *p;
int n;
BOOKINFO bookinfo[100];
int booknumber = 0;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
booknumber--;
if (booknumber == 0)
{
printf("没有任何图书信息!\n\n");
}
else
{
n = 0;
printf("                              图书信息如下\n");
printf("                           图书信息                  \n");
printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
while (n<booknumber)
{
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now,bookinfo[n].all);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getchar();
}
 
void choice_8_display_lend()/*显示全部借书信息*/      //无法使用
{
FILE *p;
int n;
LENDER lendinfo[10];
int lendnumber = 0;
system("cls");
p = fopen("lend.txt", "rb");
while (!feof(p))
{
fread(&lendinfo[lendnumber], sizeof(LENDER), 1, p);
lendnumber++;
}
/*booknumber--;使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
lendnumber--;
if (lendnumber == 0)
{
printf("没有任何借书信息!\n\n");
}
else
{
n = 0;
printf("           借书信息如下\n");
printf("        借书信息                  \n");
printf("书名        图书证号    借书时间 \n");
while (n<lendnumber)
{
printf("%-12s%-12s%-6d\n",
lendinfo[n].bookname,lendinfo[n].lendernum,lendinfo[n].lendertime);
n++;
}
}
printf("\n\n按任意键回到主菜单!\n");
getchar();
}
 
void choice_3_search_according_name()/*根据图书名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的书名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
 
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的书本名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].name, search) == 0)
{
printf("该书的详细信息如下:\n");
printf("                           图书信息                  \n");
printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar();   //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_4_delete_according_name()/*根据图书名称对图书信息进行删除*/
{
char search[20] = "";/*search用来存放要删除的书名*/
int n, i;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber;
 
system("cls");
while (1)
{
getchar();
printf("输入要删除的书本名称:");
gets(search);
p = fopen("book.txt", "rb");
booknumber = 0;
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getchar();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].name, search) == 0)
{
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
else
{
printf("是否确认需要删除该条书目?(Y/N)");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
{
for (i = n; i<booknumber - 1; i++)
bookinfo[i] = bookinfo[i + 1];
booknumber--;
 
p = fopen("book.txt", "wb");
for (n = 0; n<booknumber; n++)
fwrite(&bookinfo[n], sizeof(BOOKINFO), 1, p);
fclose(p);
 
printf("删除成功!\n");
}
else
printf("\n\n该条书目没有被删除!");
}
printf("\n\n是否继续进行删除操作?(Y/N)\n");
choice = getchar();
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
void choice_5_sort_according_name()/*根据图书名称排序*/
{
FILE *p;
int m, n;
BOOKINFO temp;
BOOKINFO bookinfo[100];
int booknumber;
 
p = fopen("book.txt", "rb");
booknumber = 0;
system("cls");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
if (booknumber == 0)
{
printf("没有任何图书信息!\n\n");
}
else
{
for (m = 0; m<booknumber - 1; m++)
for (n = m + 1; n<booknumber; n++)
if (strcmp(bookinfo[m].name, bookinfo[n].name)>0)
{
temp = bookinfo[m];
bookinfo[m] = bookinfo[n];
bookinfo[n] = temp;
}
p = fopen("book.txt", "wb");
for (m = 0; m<booknumber; m++)
fwrite(&bookinfo[m], sizeof(BOOKINFO), 1, p);
fclose(p);
printf("\n\n完成排序!\n\n");
}
printf("按任意键回到主菜单!\n");
getchar();
}
 
 
 
void choice_7_display_according_exitflag()/*根据存在状态列出图书信息*/
{
FILE *p;
int n;
int count = 0;
BOOKINFO bookinfo[100];
int booknumber;
 
system("cls");
booknumber = 0;
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;
fclose(p);
if (booknumber == 0)
{
printf("书库中没有任何书目存在!\n");
}
else
{
for (n = 0; n<booknumber; n++)
if (bookinfo[n].isExit == 1)
count++;
if (count == 0)
printf("书库中的书籍全部借出!\n");
else
{
printf("书库中未被借出的图书信息如下:\n\n");
printf("                           图书信息                  \n");
printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
for (n = 0; n<booknumber; n++)
if (bookinfo[n].isExit == 1)
{
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
}
}
}
printf("\n按任意键返回主菜单!\n");
getchar();
}
 
int search_according_name(char* bookname)/*根据图书名称显示图书的信息*/
{
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
 
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
for (n = 0; n<booknumber; n++)
if (strcmp(bookname, bookinfo[n].name) == 0)
{
return n;    //找到
}
else
return -1;

}
 
void lendbook(int n)     //n!=-1
{
    FILE *p,*q;
char choice;
BOOKINFO bookinfo[100];
LENDER lendinfo;
int booknumber = 0;
int i;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
bookinfo[n].now--;
bookinfo[n].isExit = 0;
strcpy(lendinfo.bookname, bookinfo[n].name);
p = fopen("book.txt", "wb");
for (i = 0; i<booknumber; i++)
fwrite(&bookinfo[i], sizeof(BOOKINFO), 1, p);
fclose(p);
q = fopen("lend.txt", "ab");      //借书记录
printf("请输入图书证号:\n");
gets(lendinfo.lendernum);
lendinfo.lendertime = 20;
fclose(q);
printf("借书成功\n");
getchar();
}
 
void backbook(int n)                 //还书
{
FILE *p, *q;
char choice;
BOOKINFO bookinfo[100];
LENDER lendinfo[10];
int booknumber = 0;
int lendnumber = 0;
int i;
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
bookinfo[n].now++; bookinfo[n].isExit = 1;
q = fopen("lend.txt","rb");
while (!feof(q))
{
fread(&lendinfo[lendnumber], sizeof(LENDER), 1, q);
lendnumber++;
}
lendnumber--;
fclose(q);
int n1;
for (n1 = 0; n1<lendnumber; n1++)
if (strcmp(lendinfo[n1].bookname, bookinfo[n].name) == 0)
{
break;
}
 
for (i = n1; i<lendnumber - 1; i++)
lendinfo[i] = lendinfo[i + 1];
lendnumber--;
 
q = fopen("lend.txt", "wb");
for (n1 = 0; n1<lendnumber; n1++)
fwrite(&lendinfo[n1], sizeof(LENDER), 1, q);
fclose(q);
 
p = fopen("book.txt", "wb");
for (n1 = 0; n1<booknumber; n1++)
fwrite(&bookinfo[n1], sizeof(BOOKINFO), 1, p);
fclose(p);
 
printf("删除成功!\n");
getchar();
}
void choice_6_search_according_author()/*根据作者名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的作者名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
 
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的作者名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].auther, search) == 0)
{
printf("该书的详细信息如下:\n");
printf("                           图书信息                  \n");
printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar();   //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
 
void search_according_pubname()/*根据出版社名称显示图书的信息*/
{
char search[20] = "";/*search用来存放要查询的出版社名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
 
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的出版社名称:");
gets(search);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if (strcmp(bookinfo[n].pubname, search) == 0)
{
printf("该书的详细信息如下:\n");
printf("                           图书信息                  \n");
printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar();   //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
 
void search_according_all()/*组合查询显示图书的信息*/
{
char search1[20] = "";/*search1用来存放要查询的作者名*/
char search2[20] = "";/*存放要查询的出版社名*/
int n;
FILE *p;
char choice;
BOOKINFO bookinfo[100];
int booknumber = 0;
 
system("cls");
p = fopen("book.txt", "rb");
while (!feof(p))
{
fread(&bookinfo[booknumber], sizeof(BOOKINFO), 1, p);
booknumber++;
}
booknumber--;/*使用feof()函数会多读一行,因此需要booknumber自减一次,使书目的数量正确*/
fclose(p);
while (1)
{
printf("输入要查询的作者名称:");
gets(search1);
printf("输入要查询的出版社名称:");
gets(search2);
if (booknumber == 0)
{
printf("书库中没有任何信息!\n\n");
printf("按任意键回到主菜单!\n\n");
getch();
break;
}/*if结束*/
else
{
for (n = 0; n<booknumber; n++)
if ((strcmp(bookinfo[n].pubname, search2) == 0)&&(strcmp(bookinfo[n].auther,search1)==0))
{
printf("该书的详细信息如下:\n");
printf("                           图书信息                  \n");
printf("编号  名称        作者        作者号|图书状态 |出版社名    出版社号 现存量|总存量 \n");
printf("%-6s%-12s%-12s%-6s|%-9d|%-12s%-9s%-6d|%-6d\n",
bookinfo[n].number, bookinfo[n].name, bookinfo[n].auther,
bookinfo[n].authernum, bookinfo[n].isExit, bookinfo[n].pubname,
bookinfo[n].pubnum, bookinfo[n].now, bookinfo[n].all);
break;
}
if (n >= booknumber)
printf("没有查找该书的任何信息!\n");
printf("\n\n是否继续查询?(Y/N)\n");
choice = getchar();
getchar();   //收回车
while (choice != 'Y'&&choice != 'y'&&choice != 'N'&&choice != 'n')
choice = getchar();
if (choice == 'Y' || choice == 'y')
continue;
else
break;
}/*else结束*/
}/*while(1)结束*/
}
 
 
void main()
{
char choice;
clock_t tm;
FILE *p;
char s[30];
int n;
if ((p = fopen("book.txt", "rb")) == NULL)
{
p = fopen("book.txt", "wb");
fclose(p);
}
while (1)
{
system("cls");
menu();
choice = getch();
switch (choice)
{
case '1':choice_1_input_new(); break;/*输入新进的图书信息*/
case '2':choice_2_display_all(); break;/*显示全部图书信息*/
case '3':choice_3_search_according_name(); break;/*根据图书名称显示图书的信息*/
case '4':choice_4_delete_according_name(); break;/*根据图书名称对图书信息进行删除*/
case '5':search_according_pubname(); break;/*根据出版社名称查找*/
case '6':choice_6_search_according_author(); break;/*根据作者名称查找*/
case '7':choice_7_display_according_exitflag(); break;/*根据存在状态列出图书信息*/
case '8':search_according_all(); break; /*组合查询*/
case 'a':printf("请输入借书名称:\n"); scanf("%s",s);
n = search_according_name(s); getchar();
if (n == -1) printf("没有此书信息\n");
else { lendbook(n); }
break;
case 'b':printf("请输入还书名称:\n"); scanf("%s",s);
n = search_according_name(s); getchar();
if (n == -1) printf("没有此书信息\n");
else { backbook(n);  }
break;
case 't':printf("\n\n\t\t\t谢谢使用,再见!\n\t\t\t按任意键退出!\n"); getch(); return;
default:
printf("\n\n\t\t\t请输入菜单中的字符!");
tm = clock();
while (clock()<tm + 1800);
break;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值