C语言实现简单的图书管理系统

C语言实现简单的图书管理系统攻略

一、前期准备

在实现图书管理系统之前,需要先了解以下基础知识:

  1. 结构体的定义和使用
  2. 文件的读写操作
  3. 指针的使用

掌握以上基础知识,才能顺利实现图书管理系统。

二、功能需求

我们要实现的图书管理系统需要以下功能模块:

  1. 添加图书信息(包括图书名称、作者、价格等信息)
  2. 删除图书信息
  3. 修改图书信息
  4. 查找图书信息
  5. 显示所有图书信息

三、实现步骤

1. 定义结构体

在实现图书管理系统之前,需要定义一个包含图书信息的结构体。结构体中包含图书名称、作者、价格等信息。以下是定义结构体的示例代码:

struct book {
    char name[50]; //图书名称
    char author[50]; //图书作者
    float price; //图书价格
};

2. 添加图书信息

添加图书信息需要先打开文件,然后将图书信息写入文件。以下是添加图书信息的示例代码:

//定义结构体数组
struct book books[100];

//定义文件指针
FILE *fp;

//打开文件
fp = fopen("books.dat", "ab");

//输入图书信息
printf("请输入图书信息:\n");
printf("图书名称:");
scanf("%s", books[count].name);
printf("图书作者:");
scanf("%s", books[count].author);
printf("图书价格:");
scanf("%f", &books[count].price);

//将图书信息写入文件
fwrite(&books[count], sizeof(struct book), 1, fp);

//关闭文件
fclose(fp);

//图书数量加1
count++;

3. 删除图书信息

删除图书信息需要先打开文件,然后读取文件中的图书信息。接着根据需要删除的图书信息,将其从结构体数组中删除。最后再将剩余的图书信息写回文件中。以下是删除图书信息的示例代码:

//定义结构体数组
struct book books[100];

//定义文件指针
FILE *fp, *ftp;

//打开文件
fp = fopen("books.dat", "rb");
ftp = fopen("temp.dat", "wb");

//输入要删除的图书名称
printf("请输入要删除的图书名称:");
char name[50];
scanf("%s", name);

//读取文件中的图书信息,将要删除的图书信息从结构体数组中删除
int i = 0;
int flag = 0;
while(!feof(fp)) {
    fread(&books[i], sizeof(struct book), 1, fp);
    if(strcmp(books[i].name, name) != 0) { //如果图书名称与要删除的不同,将其写回文件中
        fwrite(&books[i], sizeof(struct book), 1, ftp);
    } else {
        flag = 1;
    }
    i++;
}

//如果未找到要删除的图书,则输出提示信息
if(flag == 0) {
    printf("未找到要删除的图书!\n");
}

//关闭文件指针
fclose(fp);
fclose(ftp);

//删除原文件,并将临时文件重命名为原文件名
remove("books.dat");
rename("temp.dat", "books.dat");

4. 修改图书信息

修改图书信息需要先打开文件,然后读取文件中的图书信息。接着根据需要修改的图书信息,将其修改在结构体数组中。最后再将修改后的图书信息写回文件中。以下是修改图书信息的示例代码:

//定义结构体数组
struct book books[100];

//定义文件指针
FILE *fp, *ftp;

//打开文件
fp = fopen("books.dat", "rb");
ftp = fopen("temp.dat", "wb");

//输入要修改的图书名称
printf("请输入要修改的图书名称:");
char name[50];
scanf("%s", name);

//读取文件中的图书信息,根据要修改的图书信息,将其修改在结构体数组中
int i = 0;
int flag = 0;
while(!feof(fp)) {
    fread(&books[i], sizeof(struct book), 1, fp);
    if(strcmp(books[i].name, name) == 0) { //如果找到了要修改的图书,修改结构体数组中的信息
        printf("请输入修改后的图书信息:\n");
        printf("图书名称:");
        scanf("%s", books[i].name);
        printf("图书作者:");
        scanf("%s", books[i].author);
        printf("图书价格:");
        scanf("%f", &books[i].price);
        flag = 1;
    }
    fwrite(&books[i], sizeof(struct book), 1, ftp); //将修改后的图书信息写回文件中
    i++;
}

//如果未找到要修改的图书,则输出提示信息
if(flag == 0) {
    printf("未找到要修改的图书!\n");
}

//关闭文件指针
fclose(fp);
fclose(ftp);

//删除原文件,并将临时文件重命名为原文件名
remove("books.dat");
rename("temp.dat", "books.dat");

5. 查找图书信息

查找图书信息需要先打开文件,然后读取文件中的图书信息。接着根据需要查找的图书信息,逐个比对结构体数组中的图书信息,最后输出查找到的图书信息。以下是查找图书信息的示例代码:

//定义结构体数组
struct book books[100];

//定义文件指针
FILE *fp;

//打开文件
fp = fopen("books.dat", "rb");

//输入要查找的图书名称
printf("请输入要查找的图书名称:");
char name[50];
scanf("%s", name);

//读取文件中的图书信息,逐个比对结构体数组中的图书信息,输出查找到的图书信息
int i = 0;
int flag = 0;
while(!feof(fp)) {
    fread(&books[i], sizeof(struct book), 1, fp);
    if(strcmp(books[i].name, name) == 0) {
        printf("图书名称:%s\n", books[i].name);
        printf("图书作者:%s\n", books[i].author);
        printf("图书价格:%f\n", books[i].price);
        flag = 1;
    }
    i++;
}

//如果未找到要查找的图书,则输出提示信息
if(flag == 0) {
    printf("未找到要查找的图书!\n");
}

//关闭文件指针
fclose(fp);

6. 显示所有图书信息

显示所有图书信息需要先打开文件,然后逐个读取文件中的图书信息,并输出每本图书的名称、作者、价格等信息。以下是显示所有图书信息的示例代码:

//定义结构体数组
struct book books[100];

//定义文件指针
FILE *fp;

//打开文件
fp = fopen("books.dat", "rb");

//读取文件中的图书信息,逐个输出每本图书的名称、作者、价格等信息
int i = 0;
while(!feof(fp)) {
    fread(&books[i], sizeof(struct book), 1, fp);
    if(strcmp(books[i].name, "") != 0) {
        printf("图书名称:%s\n", books[i].name);
        printf("图书作者:%s\n", books[i].author);
        printf("图书价格:%f\n", books[i].price);
        printf("\n");
    }
    i++;
}

//关闭文件指针
fclose(fp);

四、示例说明

以下是添加图书信息和显示所有图书信息的示例说明:

1. 添加图书信息

假设有一个图书名称为《C语言入门教程》的图书需要添加到图书管理系统中。

运行程序,输入以下命令:

请输入数字选择功能:1
请输入图书信息:
图书名称:C语言入门教程
图书作者:张三
图书价格:25

程序会将图书信息写入文件。

2. 显示所有图书信息

假设已经添加了多本图书,并想要查看所有图书的信息。

运行程序,输入以下命令:

请输入数字选择功能:5
图书名称:C语言入门教程
图书作者:张三
图书价格:25

程序会逐个读取文件中的图书信息,并输出每本图书的名称、作者、价格等信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现简单的图书管理系统 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • JQuery ajax返回JSON时的处理方式 (三种方式)

    当使用 JQuery 发送 ajax 请求获取 JSON 数据时,我们需要对返回数据进行处理。下面总结了三种常用的方式:使用回调函数、使用 Promise 对象和使用 async/await。 使用回调函数 使用回调函数处理返回的 JSON 数据是最常见的方式,可以通过在 $.ajax() 函数的 success 属性中指定一个回调函数来实现。该回调函数会在…

    C 2023年5月23日
    00
  • C#命令行编译器配置方法

    下面是详细的C#命令行编译器配置攻略: 1. 下载.NET Core SDK 在开始配置之前,需要确保已经安装了.NET Core SDK。如果没有安装,可以前往 官方网站 下载并安装。 2. 配置PATH环境变量 在打开命令行终端之前,需要先配置PATH环境变量,这样系统才能找到编译器的安装路径。 Windows 用户可以这样操作: 打开“控制面板” -&…

    C 2023年5月23日
    00
  • C语言实现静态顺序表的实例详解

    C语言实现静态顺序表的实例详解 什么是静态顺序表? 顺序表是一种连续的存储结构,在内存中占用一段连续的空间,可以用数组结构来实现。静态顺序表是指在创建时就分配一定大小的存储空间,无法动态调整大小。 如何实现静态顺序表? 在C语言中,我们可以利用数组结构来实现静态顺序表。具体实现方式如下: 首先,我们需要定义一个结构体来表示顺序表: #define MAXSI…

    C 2023年5月23日
    00
  • Win11提示rundll32.exe应用程序错误怎么办 rundll32.exe错误提示修复教程

    Win11提示rundll32.exe应用程序错误怎么办 当用户在Win11操作系统中打开某些应用程序时,可能会遭遇到rundll32.exe应用程序错误。这个问题可能会严重干扰一个人的日常计算机使用。然而,这个问题并不是无法解决的。接下来就让我们一步步来解决这个问题。 什么是rundll32.exe? rundll32.exe是一个Windows系统进程,…

    C 2023年5月23日
    00
  • C语言代码实现简单三子棋游戏

    C语言代码实现简单三子棋游戏 简介 三子棋是一种经典的策略游戏,在游戏中两位玩家轮流放置棋子,直到有一方在棋盘上形成连续的三枚棋子为止。由于其简单而有趣,常被用于讲解人工智能、算法等知识点。本文将介绍如何使用C语言编写一个简单的三子棋游戏。 准备工作 在开始编码前,需要先准备好C语言的开发环境。推荐使用Visual Studio Code和MinGW来进行开…

    C 2023年5月23日
    00
  • 浅析C++ atomic 和 memory ordering

    浅析C++ atomic 和 memory ordering 简介 C++11 中引入了一个新的原子类型 —— std::atomic,用以在多线程环境中实现原子操作。同时,它也提供了 Memory Ordering 来确保原子操作的顺序性。本文将从理论和实践角度浅析 C++ atomic 和 memory ordering。 原子操作 原子操作是指一个操作…

    C 2023年5月23日
    00
  • 基于c++中的默认拷贝函数的使用详解

    基于C++中的默认拷贝函数的使用详解 在C++中,当我们定义了一个类,并对其进行实例化时,如果没有手动定义拷贝构造函数或拷贝赋值运算符,那么编译器会自动为该类提供默认的拷贝构造函数和拷贝赋值运算符。本文将详细讲解这两种默认拷贝函数的使用。 默认拷贝函数的定义 默认拷贝函数的定义如下: class MyClass { public: MyClass(const…

    C 2023年5月22日
    00
  • Qt数据库应用之实现通用数据库清理

    Qt数据库应用之实现通用数据库清理 前言 在Qt数据库应用中,针对数据库的清理是非常必要的一步操作,常见的清理操作包括删除记录、修改记录、整理缓存、压缩数据库等。本文将详细介绍如何自主实现通用数据库清理,以帮助读者解决相关问题。 实现步骤 先定义好所需清理的数据库表以及相关的字段,可根据实际需求进行添加或删除。这里以表名为contacts、字段名为name和…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部