📄 book.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 + -