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日

相关文章

  • Java超详细梳理异常处理机制

    Java超详细梳理异常处理机制 简介 在Java编程过程中,异常是一种经常出现的问题。当程序发生异常时,程序对于异常的处理方式会影响程序的正常运行。本篇文章将详细介绍Java中的异常处理机制,帮助读者更好地理解和处理Java中的异常。 Java异常处理机制 Java的异常处理机制主要包含两种类型的异常:编译时异常(Checked Exception)和运行时…

    C 2023年5月23日
    00
  • CentOS操作系统安装CMake图文步骤

    下面就为大家介绍 CentOS 操作系统安装 CMake 的图文步骤: 1. 下载CMake 首先到CMake的官网 http://cmake.org/download/ 下载最新版的 CMake,选择合适的版本并下载。 2. 解压CMake安装包 将下载好的 CMake 安装包解压到合适的目录下,例如 /opt 目录。使用以下命令解压: tar -zxvf…

    C 2023年5月23日
    00
  • C++中类的成员函数及内联函数使用及说明

    下面我就来为您详细讲解C++中类的成员函数及内联函数使用及说明的攻略。 类成员函数的定义 在C++中,类的成员函数可以在类的定义中进行声明,并在类外定义函数实现。类成员函数的定义格式如下: class ClassName { public: ReturnType functionName(ParameterList); //… }; ReturnType…

    C 2023年5月22日
    00
  • json与jsonp知识小结(推荐)

    让我来为您详细讲解“json与jsonp知识小结(推荐)”的完整攻略。 1. 什么是 JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 JavaScript的对象语法。它有如下几个特点: JSON是一种文本格式,可以轻松地在网络上传输。 JSON的语法和JavaScript的语法几乎相同,因此易读易…

    C 2023年5月23日
    00
  • Java虚拟机处理异常的最佳方式

    下面我将为您详细讲解Java虚拟机处理异常的最佳方式,这一攻略分为以下几个部分: 1. Java异常机制简介 在Java程序中,当发生异常时,会抛出一个异常对象,该对象包含了异常的类型、信息和发生异常的位置等信息,并将该异常对象传递给调用栈中的上层方法处理。Java中的异常分为受检查异常和非受检查异常两种。 受检查异常通常指那些在程序逻辑正确的情况下仍可能发…

    C 2023年5月22日
    00
  • 帮VS2019 找回丢失的 SDK问题

    下面是详细讲解“帮VS2019 找回丢失的 SDK问题”的完整攻略: 问题背景 我们在使用VS2019进行开发的过程中,有时候会遇到一些编译错误,提示找不到指定的SDK。这个时候,我们就需要找回这些丢失的SDK,才能正常地进行开发和编译。 解决方法 我们可以通过以下两种方法来找回丢失的SDK: 方法1:通过Visual Studio Installer重新安…

    C 2023年5月23日
    00
  • 浅谈chuck-lua中的多线程

    浅谈chuck-lua中的多线程 什么是chuck-lua chuck-lua是一款基于C++和Lua的实时音频编程语言,它融合了Lua解释器和ChucK的实时音频处理能力,可以用于实时音频处理和音乐创作。在chuck-lua中,通过Lua的脚本编写来控制实时音频流入流出,ChucK作为音频引擎进行低延迟的实时音频处理。chuck-lua同时支持多线程操作,…

    C 2023年5月22日
    00
  • C 程序 检查整数是正还是负

    C程序检查整数是正还是负 程序概述 这个程序可以检查一个输入的整数是正还是负数。如果输入的整数大于0,则会输出”Positive”,否则输出”Negative”。 程序代码 #include <stdio.h> int main() { int num; printf("Enter a number: "); scanf(&q…

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