117.info
人生若只如初见

C语言实现图书管理系统(文件数据库)

以下是一个简单的C语言实现的图书管理系统,使用文件数据库进行数据的存储和读取。

#include 
#include 
#include 
// 定义图书结构体
typedef struct Book {
int id;
char title[100];
char author[100];
float price;
} Book;
// 添加图书
void addBook(FILE* fp) {
Book book;
printf("请输入图书ID: ");
scanf("%d", &book.id);
printf("请输入图书标题: ");
scanf("%s", book.title);
printf("请输入图书作者: ");
scanf("%s", book.author);
printf("请输入图书价格: ");
scanf("%f", &book.price);
// 写入文件
fseek(fp, 0, SEEK_END);
fwrite(&book, sizeof(Book), 1, fp);
printf("图书添加成功\n");
}
// 显示所有图书
void displayBooks(FILE* fp) {
Book book;
rewind(fp); // 将文件指针设置到文件开头
printf("图书列表:\n");
while (fread(&book, sizeof(Book), 1, fp) != 0) {
printf("ID: %d\n", book.id);
printf("标题: %s\n", book.title);
printf("作者: %s\n", book.author);
printf("价格: %.2f\n", book.price);
printf("---------\n");
}
}
// 查找图书
void searchBook(FILE* fp) {
int id;
Book book;
printf("请输入要查找的图书ID: ");
scanf("%d", &id);
while (fread(&book, sizeof(Book), 1, fp) != 0) {
if (book.id == id) {
printf("ID: %d\n", book.id);
printf("标题: %s\n", book.title);
printf("作者: %s\n", book.author);
printf("价格: %.2f\n", book.price);
return;
}
}
printf("未找到该图书\n");
}
int main() {
FILE* fp;
int choice;
fp = fopen("books.dat", "ab+"); // 打开文件,如果文件不存在则创建
if (fp == NULL) {
printf("文件打开失败\n");
exit(1);
}
while (1) {
printf("图书管理系统\n");
printf("1. 添加图书\n");
printf("2. 显示所有图书\n");
printf("3. 查找图书\n");
printf("0. 退出\n");
printf("请选择操作: ");
scanf("%d", &choice);
switch (choice) {
case 1:
addBook(fp);
break;
case 2:
displayBooks(fp);
break;
case 3:
searchBook(fp);
break;
case 0:
fclose(fp); // 关闭文件
exit(0);
break;
default:
printf("无效的选择\n");
break;
}
}
return 0;
}

这个程序使用了一个Book结构体来表示图书信息,包括ID、标题、作者和价格。图书信息被存储在一个二进制文件中,每次操作时将文件指针设置到文件开头或文件末尾来读取或写入数据。在程序运行过程中,用户可以选择添加图书、显示所有图书或查找图书。

未经允许不得转载 » 本文链接:https://www.117.info/ask/fe066AzsLBg5RAFw.html

推荐文章

  • c语言goto用法是什么

    在C语言中,goto语句用于从一个位置跳转到另一个位置。它可以用于跳出循环、条件语句或者函数。goto语句的语法如下:
    goto label;
    ...
    label: //...

  • goto在c语言中的运用方法是什么

    goto 语句在 C 语言中允许程序从一个位置跳转到另一个位置。然而,在实际编程中,过度使用 goto 语句通常被认为是一种不好的编程实践,因为它可能导致代码结构混...

  • c语言堆和栈的区别是什么

    C语言中的堆和栈是两种不同的内存分配方式。 栈(Stack):栈是由编译器自动分配和释放的内存区域,用于存储局部变量和函数调用的上下文信息。栈的特点是先进后出...

  • C语言结构体数组怎么定义和使用

    在C语言中,可以通过定义结构体数组来存储多个具有相同数据类型的结构体对象。下面是定义和使用结构体数组的示例代码:
    #include // 定义一个结构体类型

  • 云服务器无法删除数据库怎么解决

    如果云服务器无法删除数据库,可以尝试以下解决方法: 检查权限:确保当前登录的用户具有足够的权限来删除数据库。可以尝试使用超级用户或具有管理员权限的用户登...

  • 使用InternetOpen到底要包什么头文件啊

    在使用InternetOpen函数之前,您需要包含以下头文件:#include #include 其中,windows.h头文件是Windows操作系统的核心头文件,而wininet.h头文件是WinINet库的...

  • 多进程中CreateMutex与ReleaseMutex使用问题

    在多进程中使用CreateMutex和ReleaseMutex时,需要注意以下几个问题:1. 创建互斥对象时,需要指定一个唯一的名称,以便其他进程可以通过名称来打开这个互斥对象...

  • BDE Administrator问题

    BDE(Borland Database Engine)是一个用于数据库访问和管理的软件开发工具。BDE Administrator是BDE的管理工具,用于配置和管理BDE引擎。一些常见的BDE Adminis...