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

📄 book.c

📁 小学期作业
💻 C
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define OK		0
#define ERROR	-1

struct BookInfo
{
	char name[50];
	long serial;
	float price;
	char author[20];
	char publishcompany[50];
	int number;
};

struct BookInfo Record[100],SortedRecord[100],swap;

int num,i;
char buffer[50];
long ser;float pri;int amo;

void OutputRecord(int m)
{
	printf("Name: %s\n",Record[m].name);
	printf("Serial No.: %ld\n",Record[m].serial);
	printf("Price: %f\n",Record[m].price);
	printf("Author: %s\n",Record[m].author);
	printf("Publishing Comp.: %s\n",Record[m].publishcompany);
	printf("Amount: %d\n",Record[m].number);
}

int Save()
{
	FILE *fp;

	if((fp=fopen("data.txt","w"))==NULL) return ERROR;
	fprintf(fp,"%d\n",num);
	for(i=0;i<num;i++)
		fprintf(fp,"%s %ld %f %s %s %d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
	return 0;
}

int Load()
{
	FILE *fp;

	if((fp=fopen("data.txt","r"))==NULL) return ERROR;
	fscanf(fp,"%d\n",&num);
	for(i=0;i<num;i++)
		fscanf(fp,"%s %ld %f %s %s %d\n",Record[i].name,&Record[i].serial,&Record[i].price,Record[i].author,Record[i].publishcompany,&Record[i].number);
	return 0;
}

int List()
{
	printf("Name\t\tSN.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
	for(i=0;i<num;i++)
		printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
	printf("\nPress any key...\n");
	fflush(stdin);getchar();
	return 0;
}

int Insert()
{
	printf("Please input the following things\n");
	while(1)
	{
		printf("Name:");
		fflush(stdin);gets(buffer);		
		if(buffer==0) printf("Name cann't be blank!\n");
		else break;
	}
	strcpy(Record[num].name,buffer);
	while(1)
	{
		printf("Serial No.:");
		fflush(stdin);scanf("%ld",&ser);
		if(ser==0) printf("Serial No. cann't be zero!\n");
		else
		{
			for(i=0;i<num;i++)
				if(ser==Record[i].serial)
				{
					printf("Serial No. is duplicated!\n");
					break;
				}
		}
		if(i==num) break;
	}
	Record[num].serial=ser;
	while(1)
	{
		printf("Price:");
		fflush(stdin);scanf("%f",&pri);		
		if(pri<=0) printf("Price must be a positive number!\n");
		else break;
	}
	Record[num].price=pri;
	while(1)
	{
		printf("Author:");
		fflush(stdin);gets(buffer);		
		if(buffer==0) printf("Author cann't be blank!\n");
		else break;
	}
	strcpy(Record[num].author,buffer);
	while(1)
	{
		printf("Publishing Comp.:");
		fflush(stdin);gets(buffer);		
		if(buffer==0) printf("Publishing Comp. cann't be blank!\n");
		else break;
	}
	strcpy(Record[num].publishcompany,buffer);
	while(1)
	{
		printf("Amount:");
		fflush(stdin);scanf("%d",&amo);
		if(amo<=0) printf("Amount must be a positive number!\n");
		else break;
	}
	Record[num].number=amo;
	num++;
	return 0;
}

int Modify()
{
	int cur;
	printf("Enter the Serial No.:");
	fflush(stdin);scanf("%ld",&ser);
	for(i=0;i<num;i++)
		if(ser==Record[i].serial) break;
	if(i==num)
		printf("Book not found!\n");
	else
	{
		cur=i;
		OutputRecord(cur);
		printf("Please input the modified data\n");
		while(1)
		{
			printf("Name:");
			fflush(stdin);gets(buffer);		
			if(buffer==0) printf("Name cann't be blank!\n");
			else break;
		}
		strcpy(Record[cur].name,buffer);
		while(1)
		{
			printf("Serial No.:");
			fflush(stdin);scanf("%ld",&ser);
			if(ser==0) printf("Serial No. cann't be zero!\n");
			else
			{
				for(i=0;i<num;i++)
					if(ser==Record[i].serial)
					{
						printf("Serial No. is duplicated!\n");
						break;
					}
			}
			if(i==num) break;
		}
		Record[cur].serial=ser;
		while(1)
		{
			printf("Price:");
			fflush(stdin);scanf("%f",&pri);		
			if(pri<=0) printf("Price must be a positive number!\n");
			else break;
		}
		Record[cur].price=pri;
		while(1)
		{
			printf("Author:");
			fflush(stdin);gets(buffer);		
			if(buffer==0) printf("Author cann't be blank!\n");
			else break;
		}
		strcpy(Record[cur].author,buffer);
		while(1)
		{
			printf("Publishing Comp.:");
			fflush(stdin);gets(buffer);		
			if(buffer==0) printf("Publishing Comp. cann't be blank!\n");
			else break;
		}
		strcpy(Record[cur].publishcompany,buffer);
		while(1)
		{
			printf("Amount:");
			fflush(stdin);scanf("%d",&amo);
			if(amo<=0) printf("Amount must be a positive number!\n");
			else break;
		}
		Record[cur].number=amo;
	}
	return 0;
}

int Delete()
{
	int cur;
	printf("Enter the Serial No.:");
	fflush(stdin);scanf("%ld",&ser);
	for(i=0;i<num;i++)
		if(ser==Record[i].serial) break;
	if(i==num)
		printf("Book not found!\n");
	else
	{
		cur=i;
		OutputRecord(cur);
		printf("Are you sure you want to delete this record(y/n)?");
		if(getchar()=='y')
		{
			for(i=cur;i<num-1;i++)
			{
				strcpy(Record[i].name,Record[i+1].name);
				Record[i].serial=Record[i+1].serial;
				Record[i].price=Record[i+1].price;
				strcpy(Record[i].author,Record[i+1].author);
				strcpy(Record[i].publishcompany,Record[i+1].publishcompany);
				Record[i].number=Record[i+1].number;
			}
			num--;
		}
	}
	return 0;
}

int Search()
{
	char ch,found;
	while(1)
	{
		found=0;
		printf("1.Name\n2.Serial No.\n3.Price\n4.Author\n5.Publishing Comp.\n6.Amount\n0.Back\n");
		while(1)
		{
			printf("Select the key for searching:");
			fflush(stdin);ch=getchar();
			if(ch>='0'&&ch<='6') break;
			printf("Wrong input!\n");
		}
		switch(ch)
		{
		case '1':
			while(1)
			{
				printf("Name:");
				fflush(stdin);gets(buffer);		
				if(buffer==0) printf("Name cann't be blank!\n");
				else break;
			}
			for(i=0;i<num;i++)
				if(!strcmp(buffer,Record[i].name)) 
				{
					found=1;
					printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
				}
			if(found==0) printf("Record not found!\n");
			break;
		case '2':
			while(1)
			{
				printf("Serial No.:");
				fflush(stdin);scanf("%ld",&ser);
				if(ser==0) printf("Serial No. cann't be zero!\n");
				else break;
			}
			for(i=0;i<num;i++)
				if(ser==Record[i].serial) 
				{
					found=1;
					printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
				}
			if(found==0) printf("Record not found!\n");
			break;
		case '3':
			while(1)
			{
				printf("Price:");
				fflush(stdin);scanf("%f",&pri);		
				if(pri<=0) printf("Price must be a positive number!\n");
				else break;
			}
			for(i=0;i<num;i++)
				if(pri==Record[i].price) 
				{
					found=1;
					printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
				}
			if(found==0) printf("Record not found!\n");
			break;
		case '4':
			while(1)
			{
				printf("Author:");
				fflush(stdin);gets(buffer);		
				if(buffer==0) printf("Author cann't be blank!\n");
				else break;
			}
			for(i=0;i<num;i++)
				if(!strcmp(buffer,Record[i].author)) 
				{
					found=1;
					printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
				}
			if(found==0) printf("Record not found!\n");
			break;
		case '5':
			while(1)
			{
				printf("Publishing Comp.:");
				fflush(stdin);gets(buffer);		
				if(buffer==0) printf("Publishing Comp. cann't be blank!\n");
				else break;
			}
			for(i=0;i<num;i++)
				if(!strcmp(buffer,Record[i].publishcompany)) 
				{
					found=1;
					printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
				}
			if(found==0) printf("Record not found!\n");
			break;
		case '6':
			while(1)
			{
				printf("Amount:");
				fflush(stdin);scanf("%d",&amo);
				if(amo<=0) printf("Amount must be a positive number!\n");
				else break;
			}
			for(i=0;i<num;i++)
				if(amo==Record[i].number) 
				{
					found=1;
					printf("%-10s %8ld %9.2f %8s %17s %13d\n",Record[i].name,Record[i].serial,Record[i].price,Record[i].author,Record[i].publishcompany,Record[i].number);
				}
			if(found==0) printf("Record not found!\n");
			break;
		case '0':
			return 0;
		}
	}

	return 0;
}

int SortByKey()
{
	int j;
	char ch;
	
	memcpy(SortedRecord,Record,sizeof(Record));
	while(1)
	{
		printf("1.Name\n2.Serial No.\n3.Price\n4.Author\n5.Publishing Comp.\n6.Amount\n0.Back\n");
		while(1)
		{
			printf("Select the key for sort:");
			fflush(stdin);ch=getchar();
			if(ch>='0'&&ch<='6') break;
			printf("Wrong input!\n");
		}
		switch(ch)
		{
		case '1':
			for(i=0;i<num-1;i++)
				for(j=i+1;j<num;j++)
					if(strcmp(SortedRecord[i].name,SortedRecord[j].name)>0)
					{
						memcpy(&swap,&SortedRecord[i],sizeof(struct BookInfo));
						memcpy(&SortedRecord[i],&SortedRecord[j],sizeof(struct BookInfo));
						memcpy(&SortedRecord[j],&swap,sizeof(struct BookInfo));
					}
			printf("Name\tSerial No.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
			for(i=0;i<num;i++)
				printf("%-10s %8ld %9.2f %8s %17s %13d\n",SortedRecord[i].name,SortedRecord[i].serial,SortedRecord[i].price,SortedRecord[i].author,SortedRecord[i].publishcompany,SortedRecord[i].number);
			break;
		case '2':
			for(i=0;i<num-1;i++)
				for(j=i+1;j<num;j++)
					if(SortedRecord[i].serial>SortedRecord[j].serial)
					{
						memcpy(&swap,&SortedRecord[i],sizeof(struct BookInfo));
						memcpy(&SortedRecord[i],&SortedRecord[j],sizeof(struct BookInfo));
						memcpy(&SortedRecord[j],&swap,sizeof(struct BookInfo));
					}
			printf("Name\tSerial No.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
			for(i=0;i<num;i++)
				printf("%-10s %8ld %9.2f %8s %17s %13d\n",SortedRecord[i].name,SortedRecord[i].serial,SortedRecord[i].price,SortedRecord[i].author,SortedRecord[i].publishcompany,SortedRecord[i].number);
			break;
		case '3':
			for(i=0;i<num-1;i++)
				for(j=i+1;j<num;j++)
					if(SortedRecord[i].price>SortedRecord[j].price)
					{
						memcpy(&swap,&SortedRecord[i],sizeof(struct BookInfo));
						memcpy(&SortedRecord[i],&SortedRecord[j],sizeof(struct BookInfo));
						memcpy(&SortedRecord[j],&swap,sizeof(struct BookInfo));
					}
			printf("Name\tSerial No.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
			for(i=0;i<num;i++)
				printf("%-10s %8ld %9.2f %8s %17s %13d\n",SortedRecord[i].name,SortedRecord[i].serial,SortedRecord[i].price,SortedRecord[i].author,SortedRecord[i].publishcompany,SortedRecord[i].number);
			break;
		case '4':
			for(i=0;i<num-1;i++)
				for(j=i+1;j<num;j++)
					if(strcmp(SortedRecord[i].author,SortedRecord[j].author)>0)
					{
						memcpy(&swap,&SortedRecord[i],sizeof(struct BookInfo));
						memcpy(&SortedRecord[i],&SortedRecord[j],sizeof(struct BookInfo));
						memcpy(&SortedRecord[j],&swap,sizeof(struct BookInfo));
					}
			printf("Name\tSerial No.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
			for(i=0;i<num;i++)
				printf("%-10s %8ld %9.2f %8s %17s %13d\n",SortedRecord[i].name,SortedRecord[i].serial,SortedRecord[i].price,SortedRecord[i].author,SortedRecord[i].publishcompany,SortedRecord[i].number);
			break;
		case '5':
			for(i=0;i<num-1;i++)
				for(j=i+1;j<num;j++)
					if(strcmp(SortedRecord[i].publishcompany,SortedRecord[j].publishcompany)>0)
					{
						memcpy(&swap,&SortedRecord[i],sizeof(struct BookInfo));
						memcpy(&SortedRecord[i],&SortedRecord[j],sizeof(struct BookInfo));
						memcpy(&SortedRecord[j],&swap,sizeof(struct BookInfo));
					}
			printf("Name\tSerial No.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
			for(i=0;i<num;i++)
				printf("%-10s %8ld %9.2f %8s %17s %13d\n",SortedRecord[i].name,SortedRecord[i].serial,SortedRecord[i].price,SortedRecord[i].author,SortedRecord[i].publishcompany,SortedRecord[i].number);
			break;
		case '6':
			for(i=0;i<num-1;i++)
				for(j=i+1;j<num;j++)
					if(SortedRecord[i].number>SortedRecord[j].number)
					{
						memcpy(&swap,&SortedRecord[i],sizeof(struct BookInfo));
						memcpy(&SortedRecord[i],&SortedRecord[j],sizeof(struct BookInfo));
						memcpy(&SortedRecord[j],&swap,sizeof(struct BookInfo));
					}
			printf("Name\tSerial No.\tPrice\tAuthor\tPublishing Comp.\tAmount\n");
			for(i=0;i<num;i++)
				printf("%-10s %8ld %9.2f %8s %17s %13d\n",SortedRecord[i].name,SortedRecord[i].serial,SortedRecord[i].price,SortedRecord[i].author,SortedRecord[i].publishcompany,SortedRecord[i].number);
			break;
		case '0':
			return 0;
		}
		printf("\nPress any key...\n");
		fflush(stdin);getchar();
	}

	return 0;
}


int main()
{
	char ch;
	Load();
	while(1)
	{
		printf("-------Welcome to the Library Manage System-------\n");
		printf("1.List all records\n2.Insert a record\n3.Modify a record\n4.Delete a record\n5.Search a record\n6.Sort by key\n0.Exit\n");
		while(1)
		{
			printf("Enter your choice:");
			fflush(stdin);ch=getchar();
			if(ch>='0'&&ch<='6') break;
			printf("Wrong input!\n");
		}
		switch(ch)
		{
		case '1':
			List();
			break;
		case '2':
			Insert();
			break;
		case '3':
			Modify();
			break;
		case '4':
			Delete();
			break;
		case '5':
			Search();
			break;
		case '6':
			SortByKey();
			break;
		case '0':
			Save();
			printf("Bye!\n");
			return 0;
		default:
			;
		}
	}
	return 0;
}


⌨️ 快捷键说明

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