#define FILENAME "books.dat"
// Add book
void addBook() {
struct Book b;
FILE *fp = fopen(FILENAME, "ab");
if(!fp) { printf("Error opening file.\n"); return; }
printf("Enter Book ID: "); scanf("%d", &b.id);
printf("Enter Title: "); scanf(" %[^\n]", b.title);
printf("Enter Author: "); scanf(" %[^\n]", b.author);
b.isIssued = 0; // available
fwrite(&b, sizeof(b), 1, fp);
fclose(fp);
printf("Book added successfully!\n");
}
// Display all books
void displayBooks() {
struct Book b;
FILE *fp = fopen(FILENAME, "rb");
if(!fp) { printf("No records found.\n"); return; }
printf("\nID\tTitle\tAuthor\tStatus\n");
while(fread(&b, sizeof(b), 1, fp)) {
printf("%d\t%s\t%s\t%s\n", b.id, b.title, b.author, b.isIssued ? "Issued" : "Available");
}
fclose(fp);
}
// Search book by ID
void searchBook() {
int searchId;
struct Book b;
printf("Enter Book ID to search: "); scanf("%d", &searchId);
FILE *fp = fopen(FILENAME, "rb");
if(!fp) { printf("No records found.\n"); return; }
int found = 0;
while(fread(&b, sizeof(b), 1, fp)) {
if(b.id == searchId) {
printf("ID: %d\nTitle: %s\nAuthor: %s\nStatus: %s\n", b.id, b.title, b.author, b.isIssued ? "Issued" : "Available");
found = 1;
break;
}
}
if(!found) printf("Book not found.\n");
fclose(fp);
}
// Issue a book
void issueBook() {
int bookId;
struct Book b;
FILE *fp = fopen(FILENAME, "rb+");
if(!fp) { printf("No records found.\n"); return; }
printf("Enter Book ID to issue: "); scanf("%d", &bookId);
int found = 0;
while(fread(&b, sizeof(b), 1, fp)) {
if(b.id == bookId) {
if(b.isIssued) {
printf("Book already issued!\n");
} else {
b.isIssued = 1;
fseek(fp, -sizeof(b), SEEK_CUR);
fwrite(&b, sizeof(b), 1, fp);
printf("Book issued successfully!\n");
}
found = 1;
break;
}
}
if(!found) printf("Book not found.\n");
fclose(fp);
}
// Return a book
void returnBook() {
int bookId;
struct Book b;
FILE *fp = fopen(FILENAME, "rb+");
if(!fp) { printf("No records found.\n"); return; }
printf("Enter Book ID to return: "); scanf("%d", &bookId);
int found = 0;
while(fread(&b, sizeof(b), 1, fp)) {
if(b.id == bookId) {
if(!b.isIssued) {
printf("Book is not issued!\n");
} else {
b.isIssued = 0;
fseek(fp, -sizeof(b), SEEK_CUR);
fwrite(&b, sizeof(b), 1, fp);
printf("Book returned successfully!\n");
}
found = 1;
break;
}
}
if(!found) printf("Book not found.\n");
fclose(fp);
}