用c语言写出图书管理系统包括录入书籍速览书籍借阅书籍归还书籍查找书籍删除书籍退出系统并存储到文件中
时间: 2023-08-31 10:11:26 浏览: 134
图书借阅系统(C语言编写)
好的,我可以帮您解答这个问题。以下是一个简单的图书管理系统的代码示例,实现了录入书籍、浏览书籍、借阅书籍、归还书籍、查找书籍、删除书籍、退出系统并存储到文件中的功能。代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BOOKS 100 // 最大书籍数量
#define MAX_TITLE_LENGTH 100 // 书名最大长度
#define MAX_AUTHOR_LENGTH 50 // 作者名最大长度
// 书籍结构体
struct book {
char title[MAX_TITLE_LENGTH];
char author[MAX_AUTHOR_LENGTH];
int is_borrowed; // 是否被借阅
};
struct book books[MAX_BOOKS]; // 书籍数组
int total_books = 0; // 当前书籍数量
// 录入书籍
void add_book() {
if (total_books >= MAX_BOOKS) {
printf("已达到最大书籍数量,无法继续录入。\n");
return;
}
struct book new_book;
printf("请输入书名:\n");
scanf("%s", new_book.title);
printf("请输入作者名:\n");
scanf("%s", new_book.author);
new_book.is_borrowed = 0; // 默认未借阅
books[total_books] = new_book;
total_books++;
printf("录入成功!\n");
}
// 显示所有书籍
void show_books() {
if (total_books <= 0) {
printf("当前没有任何书籍。\n");
return;
}
printf("当前所有书籍:\n");
for (int i = 0; i < total_books; i++) {
printf("%d. %s - %s", i + 1, books[i].title, books[i].author);
if (books[i].is_borrowed) {
printf(" (已借出)\n");
} else {
printf(" (未借出)\n");
}
}
}
// 借阅书籍
void borrow_book() {
show_books();
if (total_books <= 0) {
printf("当前没有任何书籍可供借阅。\n");
return;
}
int book_index;
printf("请输入要借阅的书籍编号:\n");
scanf("%d", &book_index);
if (book_index < 1 || book_index > total_books) {
printf("输入的书籍编号无效。\n");
return;
}
if (books[book_index - 1].is_borrowed) {
printf("该书籍已被借出,无法借阅。\n");
return;
}
books[book_index - 1].is_borrowed = 1;
printf("借阅成功!\n");
}
// 归还书籍
void return_book() {
show_books();
if (total_books <= 0) {
printf("当前没有任何书籍可供归还。\n");
return;
}
int book_index;
printf("请输入要归还的书籍编号:\n");
scanf("%d", &book_index);
if (book_index < 1 || book_index > total_books) {
printf("输入的书籍编号无效。\n");
return;
}
if (!books[book_index - 1].is_borrowed) {
printf("该书籍未被借阅,无法归还。\n");
return;
}
books[book_index - 1].is_borrowed = 0;
printf("归还成功!\n");
}
// 查找书籍
void search_book() {
char keyword[MAX_TITLE_LENGTH];
printf("请输入要查找的书籍关键字:\n");
scanf("%s", keyword);
int found = 0;
for (int i = 0; i < total_books; i++) {
if (strstr(books[i].title, keyword)) {
printf("%d. %s - %s", i + 1, books[i].title, books[i].author);
if (books[i].is_borrowed) {
printf(" (已借出)\n");
} else {
printf(" (未借出)\n");
}
found = 1;
}
}
if (!found) {
printf("未找到任何符合条件的书籍。\n");
}
}
// 删除书籍
void delete_book() {
show_books();
if (total_books <= 0) {
printf("当前没有任何书籍可供删除。\n");
return;
}
int book_index;
printf("请输入要删除的书籍编号:\n");
scanf("%d", &book_index);
if (book_index < 1 || book_index > total_books) {
printf("输入的书籍编号无效。\n");
return;
}
for (int i = book_index - 1; i < total_books - 1; i++) {
books[i] = books[i + 1];
}
total_books--;
printf("删除成功!\n");
}
// 退出系统并存储到文件中
void save_and_exit() {
FILE *fp = fopen("books.dat", "wb");
if (fp == NULL) {
printf("无法打开文件。\n");
return;
}
fwrite(&total_books, sizeof(total_books), 1, fp);
fwrite(books, sizeof(struct book), total_books, fp);
fclose(fp);
printf("已保存所有书籍到文件 books.dat 中,即将退出系统。\n");
exit(0);
}
int main() {
// 从文件中读取之前保存的书籍
FILE *fp = fopen("books.dat", "rb");
if (fp != NULL) {
fread(&total_books, sizeof(total_books), 1, fp);
fread(books, sizeof(struct book), total_books, fp);
fclose(fp);
}
// 显示菜单
while (1) {
printf("\n图书管理系统菜单:\n");
printf("1. 录入书籍\n");
printf("2. 浏览书籍\n");
printf("3. 借阅书籍\n");
printf("4. 归还书籍\n");
printf("5. 查找书籍\n");
printf("6. 删除书籍\n");
printf("7. 退出系统并保存到文件\n");
printf("请输入要执行的操作编号:\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
show_books();
break;
case 3:
borrow_book();
break;
case 4:
return_book();
break;
case 5:
search_book();
break;
case 6:
delete_book();
break;
case 7:
save_and_exit();
break;
default:
printf("无效的操作编号,请重新输入。\n");
}
}
return 0;
}
```
该程序使用了结构体来表示书籍,实现了录入书籍、浏览书籍、借阅书籍、归还书籍、查找书籍、删除书籍、退出系统并存储到文件中的功能。其中,书籍信息保存在一个包含多个书籍结构体的数组中,最多支持 MAX_BOOKS 本书籍。在退出系统时,程序会将所有书籍保存到文件 books.dat 中,下次运行程序时可以从文件中读取之前保存的书籍。
阅读全文