圖書管理系統是圖書館、書店等機構中不可或缺的一部分。隨著信息技術的發展,傳統的紙質管理方式已經無法滿足現代圖書館的需求。因此,開發一個基于文件數據庫的圖書管理系統顯得尤為重要。本文將詳細介紹如何使用C語言實現一個簡單的圖書管理系統,重點討論文件數據庫的設計與實現。
在開始設計之前,我們需要明確系統的需求。一個基本的圖書管理系統應具備以下功能:
圖書管理系統的架構可以分為以下幾個模塊:
typedef struct {
int id; // 圖書ID
char title[100]; // 書名
char author[50]; // 作者
char publisher[50];// 出版社
int year; // 出版年份
int stock; // 庫存數量
} Book;
typedef struct {
int id; // 用戶ID
char name[50]; // 用戶名
char password[50]; // 密碼
int role; // 用戶角色(0:普通用戶, 1:管理員)
} User;
typedef struct {
int userId; // 用戶ID
int bookId; // 圖書ID
time_t borrowDate; // 借閱日期
time_t returnDate; // 歸還日期
} BorrowRecord;
為了簡化數據存儲,我們可以將每種數據結構分別存儲在不同的文件中。例如:
books.dat
:存儲圖書信息。users.dat
:存儲用戶信息。borrow_records.dat
:存儲借閱記錄。void saveBooks(Book books[], int count) {
FILE *file = fopen("books.dat", "wb");
if (file == NULL) {
perror("Failed to open file");
return;
}
fwrite(books, sizeof(Book), count, file);
fclose(file);
}
int loadBooks(Book books[], int maxCount) {
FILE *file = fopen("books.dat", "rb");
if (file == NULL) {
perror("Failed to open file");
return 0;
}
int count = fread(books, sizeof(Book), maxCount, file);
fclose(file);
return count;
}
void addBook(Book books[], int *count) {
Book newBook;
printf("Enter book title: ");
scanf("%s", newBook.title);
printf("Enter book author: ");
scanf("%s", newBook.author);
printf("Enter book publisher: ");
scanf("%s", newBook.publisher);
printf("Enter publication year: ");
scanf("%d", &newBook.year);
printf("Enter stock quantity: ");
scanf("%d", &newBook.stock);
newBook.id = (*count) + 1;
books[(*count)++] = newBook;
saveBooks(books, *count);
}
void deleteBook(Book books[], int *count, int id) {
for (int i = 0; i < *count; i++) {
if (books[i].id == id) {
for (int j = i; j < *count - 1; j++) {
books[j] = books[j + 1];
}
(*count)--;
saveBooks(books, *count);
return;
}
}
printf("Book not found.\n");
}
void registerUser(User users[], int *count) {
User newUser;
printf("Enter username: ");
scanf("%s", newUser.name);
printf("Enter password: ");
scanf("%s", newUser.password);
newUser.id = (*count) + 1;
newUser.role = 0; // 默認普通用戶
users[(*count)++] = newUser;
saveUsers(users, *count);
}
int loginUser(User users[], int count, char *name, char *password) {
for (int i = 0; i < count; i++) {
if (strcmp(users[i].name, name) == 0 && strcmp(users[i].password, password) == 0) {
return users[i].id;
}
}
return -1; // 登錄失敗
}
void borrowBook(BorrowRecord records[], int *count, int userId, int bookId) {
BorrowRecord newRecord;
newRecord.userId = userId;
newRecord.bookId = bookId;
newRecord.borrowDate = time(NULL);
newRecord.returnDate = 0; // 未歸還
records[(*count)++] = newRecord;
saveBorrowRecords(records, *count);
}
void returnBook(BorrowRecord records[], int count, int userId, int bookId) {
for (int i = 0; i < count; i++) {
if (records[i].userId == userId && records[i].bookId == bookId && records[i].returnDate == 0) {
records[i].returnDate = time(NULL);
saveBorrowRecords(records, count);
return;
}
}
printf("Borrow record not found.\n");
}
void mainMenu() {
printf("1. Add Book\n");
printf("2. Delete Book\n");
printf("3. Register User\n");
printf("4. Login\n");
printf("5. Borrow Book\n");
printf("6. Return Book\n");
printf("7. Exit\n");
}
void userInteraction() {
int choice;
while (1) {
mainMenu();
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
addBook(books, &bookCount);
break;
case 2:
printf("Enter book ID to delete: ");
int id;
scanf("%d", &id);
deleteBook(books, &bookCount, id);
break;
case 3:
registerUser(users, &userCount);
break;
case 4:
printf("Enter username: ");
char name[50];
scanf("%s", name);
printf("Enter password: ");
char password[50];
scanf("%s", password);
int userId = loginUser(users, userCount, name, password);
if (userId != -1) {
printf("Login successful.\n");
} else {
printf("Login failed.\n");
}
break;
case 5:
printf("Enter book ID to borrow: ");
int bookId;
scanf("%d", &bookId);
borrowBook(borrowRecords, &borrowCount, userId, bookId);
break;
case 6:
printf("Enter book ID to return: ");
scanf("%d", &bookId);
returnBook(borrowRecords, borrowCount, userId, bookId);
break;
case 7:
return;
default:
printf("Invalid choice.\n");
}
}
}
通過上述測試用例,系統能夠正確地處理圖書管理、用戶管理、借閱管理等操作,數據能夠正確存儲和讀取。
本文詳細介紹了如何使用C語言實現一個基于文件數據庫的圖書管理系統。通過合理的數據結構設計、文件存儲設計以及功能模塊的實現,我們成功構建了一個簡單的圖書管理系統。未來,我們可以進一步優化系統性能,增加更多的功能模塊,如多用戶并發處理、數據加密等,以滿足更復雜的需求。
注:本文僅為示例,實際實現中可能需要根據具體需求進行調整和優化。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。