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

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

本攻略将介绍如何使用C语言实现基础的图书管理系统,数据存储采用文件数据库。本攻略包含以下内容:

  1. 设计数据结构
  2. 实现操作函数
  3. 完成主函数
  4. 示例1: 添加书籍
  5. 示例2: 按名称查询书籍

设计数据结构

首先,图书管理系统需要存储书籍的信息,因此需要定义一个书籍结构体,包含书籍的相关信息。

struct Book {
    int id;                 // 书籍编号
    char name[50];          // 书籍名称
    char author[50];        // 作者
    char press[50];         // 出版社
    float price;            // 价格
    int quantity;           // 库存
};

实现操作函数

接下来需要实现基本的操作函数,包括添加书籍、删除书籍、修改书籍信息以及查询书籍。这里只列举添加、查询两个操作函数代码作为示例。

添加书籍

void addBook(struct Book book) {
    FILE *fp;
    fp = fopen("database.txt", "a+");
    fprintf(fp, "%d %s %s %s %f %d\n", book.id,
                                       book.name,
                                       book.author,
                                       book.press,
                                       book.price,
                                       book.quantity);
    fclose(fp);
}

该函数首先打开名为database.txt的文本文件,使用fprintf函数在文件末尾写入一行表示书籍信息的字符串,最后关闭文件。

查询书籍

void searchBook(char *name) {
    FILE *fp;
    fp = fopen("database.txt", "r");
    int found = 0;
    struct Book book;
    while(!feof(fp)) {
        fscanf(fp, "%d %s %s %s %f %d\n", &book.id,
                                          book.name,
                                          book.author,
                                          book.press,
                                          &book.price,
                                          &book.quantity);
        if(strcmp(book.name, name) == 0) {
            printf("%d %s %s %s %f %d\n", book.id,
                                          book.name,
                                          book.author,
                                          book.press,
                                          book.price,
                                          book.quantity);
            found = 1;
            break;
        }
    }
    if(!found) {
        printf("Book not found.\n");
    }
    fclose(fp);
}

该函数首先打开名为database.txt的文本文件,使用fscanf函数从文件中读取一行表示书籍信息的字符串,如果书名与参数匹配,则将关于该书籍的信息输出,found标记为1,退出循环。如果遍历完所有行后仍未找到,则提示“Book not found.”,最后关闭文件。

完成主函数

最后,在主函数中实现用户选择操作的过程即可。以下为伪代码。

int main() {
    while(1) {
        switch(用户选择) {
            case 1: // 添加书籍
                输入书籍信息;
                addBook(书籍信息);
                break;
            case 2: // 删除书籍
                输入书籍编号;
                deleteBook(书籍编号);
                break;
            case 3: // 修改书籍信息
                输入书籍编号;
                输入修改后信息;
                editBook(书籍编号, 修改后信息);
                break;
            case 4: // 查询书籍
                输入书籍名称;
                searchBook(书籍名称);
                break;
            case 5: // 退出程序
                return 0;
                break;
            default:
                printf("Invalid operation.\n");
                break;
        }
    }
}

示例1: 添加书籍

假设要添加名为《C语言程序设计》的书籍,作者为“小明”,出版社为“清华大学出版社”,价格为180元,库存为10本,书籍编号自动生成。

  1. 用户选择添加书籍操作。
  2. 系统提示用户输入书籍信息。
  3. 用户输入书籍信息。
  4. 系统调用addBook函数,将书籍信息写入数据库。
  5. 系统提示操作成功。

示例2: 按名称查询书籍

假设要查询名为《Java编程思想》的书籍。

  1. 用户选择查询书籍操作。
  2. 系统提示用户输入书籍名称。
  3. 用户输入书籍名称。
  4. 系统调用searchBook函数,从数据库中检索与给定名称相匹配的书籍信息。
  5. 系统输出匹配的书籍信息,如果未找到,则输出“Book not found.”。

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

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

相关文章

  • C语言 递归实现排雷游戏

    C语言 递归实现排雷游戏 介绍 排雷游戏是一款非常经典的休闲小游戏,本文将详细介绍如何使用C语言递归实现排雷游戏。 实现原理 排雷游戏的核心就是根据玩家翻开格子的情况,计算周围雷的数量并显示在格子上。 对于每一个格子,我们需要进行以下操作: 如果该格子是雷,则直接显示在格子上 如果该格子不是雷,则计算周围雷的数量n,如果n为0,则继续递归翻开周围的格子直到不…

    C 2023年5月23日
    00
  • Qt计时器使用方法详解

    以下是关于“Qt计时器使用方法详解”的攻略说明: 1. 概述 Qt是一款功能强大的跨平台C++应用程序开发框架,提供了很多实用的功能模块,其中就包括计时器模块,可以在Qt中轻松地实现各种计时器功能,比如实现周期性的定时任务、定时刷新界面等。本文将介绍如何使用Qt计时器,包括如何创建计时器、设置计时器参数、处理计时器事件等。 2. 创建计时器 首先,我们需要通…

    C 2023年5月22日
    00
  • 通过示例详解C++智能指针

    通过示例详解C++智能指针 什么是智能指针 智能指针是C++中的一种封装类,用于替代传统的指针。其方便的特性在于它在生命周期结束时会自动释放内存,从而避免了内存泄漏的风险。C++标准库提供了三种类型的智能指针:unique_ptr、shared_ptr、weak_ptr。下面将分别介绍它们的用法。 unique_ptr unique_ptr是指向独占所有权的…

    C 2023年5月22日
    00
  • C++初级线程管理

    C++初级线程管理是多线程编程中最基础的部分,它可以帮助开发者充分利用计算资源,提升程序的并发能力,从而提高程序的运行效率。下面是完整的C++初级线程管理攻略: 线程的概念和基本使用 线程的概念 线程是计算机程序执行流的最小单元,它是操作系统能够进行运算调度的基本单位。与进程不同,线程通常是在同一进程中执行的,因此共享同一份资源,包括内存空间、文件描述符和其…

    C 2023年5月22日
    00
  • Windows 2008 R2服务管理器刷新失败的解决方法

    Windows 2008 R2服务管理器刷新失败的解决方法 在Windows Server 2008 R2操作系统中,你可能会遇到服务管理器刷新失败的问题。在本篇文章中,我们将讨论此问题的原因以及如何解决它。 问题原因 当服务管理器尝试刷新时,它将读取注册表中的服务配置信息。 如果服务配置已损坏,服务管理器将无法正确刷新服务列表。 解决方法 以下是一些方法,…

    C 2023年5月23日
    00
  • 如何利用Matlab绘制出好看的火山图

    下面是关于如何利用Matlab绘制出好看的火山图的完整攻略。 1. 准备工作 在开始制作火山图之前,需要先准备好数据。火山图通常用来展示两组数据,通常是不同条件下的基因表达差异,也可以是某些其他类型的数据。一组数据应该是基因标识符和差异表达值的列表,可以是一个文本文件或一个数据表格,常见的格式包括CSV、Excel、TSV等。 制作火山图需要使用Matlab…

    C 2023年5月23日
    00
  • C/C++ 单元自动化测试解决方案总结

    C/C++ 单元自动化测试解决方案总结 背景 C/C++ 是一门常用的编程语言,广泛应用于嵌入式系统、操作系统、游戏等领域。在实际的开发过程中,单元测试是必不可少的环节,可以确保代码的质量和稳定性。 常用的单元测试框架 C/C++ 的单元测试框架有很多,包括 Google Test,CppUnit,Boost.Test 等。这些框架可以满足大部分的单元测试需…

    C 2023年5月23日
    00
  • Android json解析及简单例子

    好的。首先需要了解什么是JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,用于在不同的平台之间传输数据,常用于Web API的数据交换。在Android开发中,我们经常会用到JSON格式的数据,因此,掌握Android JSON解析技术是至关重要的。 JSON解析的基本方法 Android中常用的JSON解…

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