您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
图书管理系统是图书馆、书店等机构中不可或缺的一部分。随着信息技术的发展,传统的纸质管理方式已经无法满足现代图书馆的需求。因此,开发一个基于文件数据库的图书管理系统显得尤为重要。本文将详细介绍如何使用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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。