#include <stdio.h>
#include <stdlib.h>
#define MAXITL 40
#define MAXAUTL 40
#define MAXBKS 10
struct book{
char title[MAXITL];
char author[MAXAUTL];
float value;
};
int cmp1(const void * a,const void *b)
{
struct book *c=(struct book*)a;
struct book *d=(struct book*)b;
return strcmp(c->title,d->title);
}
int cmp2(const void *a,const void *b)
{
return (*(struct book *)a).value>(*(struct book *)b).value;
}
int main(int argc, char **argv)
{
//printf("hello world\n");
//
struct book library[MAXBKS];
int count=0;
int index,filecount;
FILE * pbooks;
int size=sizeof(struct book);
if((pbooks=fopen("book.dat","a+b"))==NULL)
{
fputs("Can't open book.dat file\n",stderr);
exit(1);
}
rewind(pbooks);
while(count<MAXBKS&&fread(&library[count],size,1,pbooks)==1)
{
if(count==0)
puts("Current contents of book.dat:");
printf("%s by %s:$%.2f\n",library[count].title,library[count].author,library[count].value);
count++;
}
printf("\n");
filecount=count;
count=0;
while(count<MAXBKS&&count<filecount)
{
qsort(library,filecount,sizeof(struct book),cmp1);
if(count==0)
puts("Current contents of book.dat:");
printf("%s by %s:$%.2f\n",library[count].title,library[count].author,library[count].value);
count++;
}
printf("\n");
filecount=count;
count=0;
while(count<MAXBKS&&count<filecount)
{
qsort(library,filecount,sizeof(struct book),cmp2);
if(count==0)
puts("Current contents of book.dat:");
printf("%s by %s:$%.2f\n",library[count].title,library[count].author,library[count].value);
count++;
}
if(count==MAXBKS)
{
fputs("The book.dat file is full.",stderr);
exit(2);
}
puts("Please add new book titles.");
puts("Press [enter] at the start of a line to stop.");
while(count<MAXBKS&&gets(library[count].title)!=NULL&&library[count].title[0]!='\0')
{
puts("Now enter the author.");
gets(library[count].author);
puts("Now enter the value.");
scanf("%f",&library[count++].value);
while(getchar()!='\n')
continue;
if(count<MAXBKS)
puts("Enter the next title.");
}
if(count>0)
{
puts("Here is the list of your books:");
for(index=0;index<count;index++)
printf("%s by %s: $%.2f\n",library[index].title,library[index].author,library[index].value);
fwrite(&library[filecount],size,count-filecount,pbooks);
}
else
puts("No books?Too bad.\n");
puts("Bye.\n");
fclose(pbooks);
return 0;
//printf("Please enter the book title.\n");
/*gets(library.title);
printf("Now enter the author.\n");
gets(library.author);
printf("Now enter the value.\n");
scanf("%f",&library.value);
printf("%s by %s:$%.2f\n",library.title,library.author,library.value);
printf("%s:\"%s\"($%.2f)\n",library.author,library.title,library.value);*/
}