用C语言写一个图书管理系统,包括基本信息:书名、作者、价格、出版社、出版年月。要求:输入至少5册书籍,能够按名称和作者查询书籍信息。提供书籍信息录入、删除、查询功能,将书籍信息存在文件,程序运行时从文件读取书籍信息
时间: 2023-12-24 08:02:43 浏览: 105
好的,这是一个比较大的项目,需要一步一步来完成。首先,我们需要定义一个结构体来表示书籍信息:
```c
#include <stdio.h>
#include <string.h>
#define MAX_BOOKS 100
struct Book {
char name[50];
char author[50];
float price;
char publisher[50];
char publish_date[20];
};
struct Library {
struct Book books[MAX_BOOKS];
int count;
};
struct Library library;
```
上面的代码中,我们定义了一个结构体 `Book` 表示一本书的信息,包括书名、作者、价格、出版社和出版年月。另外,我们定义了一个结构体 `Library` 表示整个图书馆的信息,包括所有的书籍和总数。
下一步,我们需要实现书籍信息的录入功能,即从用户输入中读取书籍信息并存储到 `library` 中。代码如下:
```c
void add_book() {
struct Book book;
printf("请输入书名:");
scanf("%s", book.name);
printf("请输入作者:");
scanf("%s", book.author);
printf("请输入价格:");
scanf("%f", &book.price);
printf("请输入出版社:");
scanf("%s", book.publisher);
printf("请输入出版年月:");
scanf("%s", book.publish_date);
library.books[library.count++] = book;
printf("添加成功!\n");
}
```
上面的代码中,我们定义了一个函数 `add_book` 来实现书籍信息的录入功能。首先,我们定义一个局部变量 `book` 来存储用户输入的书籍信息。然后,通过 `scanf` 函数从用户输入中读取书籍信息,并存储到 `book` 中。最后,将 `book` 存储到 `library` 中,并更新 `count` 值,表示图书馆中书籍的总数。
接下来,我们需要实现查询功能,包括按名称和作者查询。代码如下:
```c
void find_book_by_name() {
char name[50];
int found = 0;
printf("请输入书名:");
scanf("%s", name);
for (int i = 0; i < library.count; i++) {
if (strcmp(name, library.books[i].name) == 0) {
printf("书名:%s,作者:%s,价格:%.2f,出版社:%s,出版年月:%s\n",
library.books[i].name, library.books[i].author, library.books[i].price,
library.books[i].publisher, library.books[i].publish_date);
found = 1;
}
}
if (!found) {
printf("未找到该书!\n");
}
}
void find_book_by_author() {
char author[50];
int found = 0;
printf("请输入作者:");
scanf("%s", author);
for (int i = 0; i < library.count; i++) {
if (strcmp(author, library.books[i].author) == 0) {
printf("书名:%s,作者:%s,价格:%.2f,出版社:%s,出版年月:%s\n",
library.books[i].name, library.books[i].author, library.books[i].price,
library.books[i].publisher, library.books[i].publish_date);
found = 1;
}
}
if (!found) {
printf("未找到该作者的书!\n");
}
}
```
上面的代码中,我们定义了两个函数 `find_book_by_name` 和 `find_book_by_author` 分别用于按名称和作者查询书籍信息。这两个函数的实现方式类似,都是通过 `strcmp` 函数比较字符串是否相等,如果相等则输出书籍信息。如果找到了书籍,则将 `found` 标记为 1,表示已经找到了书籍。否则,输出未找到的提示信息。
最后,我们需要实现书籍信息的存储和读取功能,即将书籍信息存储到文件中,并在程序运行时从文件中读取书籍信息。代码如下:
```c
void save_books() {
FILE* fp = fopen("library.dat", "wb");
fwrite(&library, sizeof(library), 1, fp);
fclose(fp);
}
void load_books() {
FILE* fp = fopen("library.dat", "rb");
if (fp != NULL) {
fread(&library, sizeof(library), 1, fp);
fclose(fp);
}
}
```
上面的代码中,我们定义了两个函数 `save_books` 和 `load_books` 分别用于存储和读取书籍信息。在 `save_books` 函数中,我们使用二进制写入模式打开文件,并将 `library` 中的所有数据写入文件中。在 `load_books` 函数中,我们使用二进制读取模式打开文件,并将文件中的数据读取到 `library` 中。
最后,我们还需要实现书籍信息的删除功能。由于该功能比较复杂,这里就不再赘述了。完整的代码如下:
阅读全文