C语言图书管理系统

news2024/11/26 13:42:35

一,开发环境

  1. 操作系统:windows10, windows11, linux, mac等。
  2. 开发工具:Qt, vscode, visual studio等
  3. 开发语言:c

二,功能需求

在这里插入图片描述

1. 图书信息管理:

这个功能的主要任务是保存和管理图书的所有信息。这应该包括:

  • 添加新书:输入新书的信息,包括书名、作者、出版社、ISBN、库存数量等,并将其添加到数据库中。
  • 修改书籍信息:如果书籍的某些信息需要更改(例如库存数量或作者信息),应能够找到特定的书籍并修改其信息。
  • 删除书籍:如果某本书不再被库存,应能够从数据库中完全删除该书的所有信息。

2. 图书查询功能:

这个功能应该让用户根据各种不同的信息查找书籍。这可以包括:

  • 书名查询:输入书名,返回所有与之匹配的书籍。
  • 作者查询:输入作者的名字,返回所有该作者的书籍。
  • 出版社查询:输入出版社的名字,返回所有由该出版社出版的书籍。
  • ISBN查询:输入ISBN号,返回对应的书籍。

三,功能设计

1. 主菜单

当用户启动程序时,他们将首先看到主菜单。主菜单将包括以下选项:
欢迎来到图书管理系统!请选择一个操作:

1. 添加新书
2. 修改书籍信息
3. 删除书籍
4. 查询书籍
5. 退出程序
请输入你的选择(1-5):
  • 用户可以通过输入数字选择一个操作。

2. 添加新书

当用户选择添加新书时,他们将需要输入书的详细信息。例如:

请输入书的详细信息:
书名:
作者:
出版社:
ISBN:
库存数量:

程序将根据用户输入的信息创建一个新的书籍记录,并将其添加到文件中。

3. 修改书籍信息

当用户选择修改书籍信息时,他们首先需要通过某种方式找到要修改的书。例如,程序可以让他们输入书名或ISBN来找到书。然后,他们可以选择要修改的信息,并输入新的值。例如:

请输入要修改的书的ISBN:
请输入要修改的信息(书名、作者、出版社、ISBN、库存数量):
请输入新的值:

程序将更新文件中的对应记录。

4. 删除书籍

当用户选择删除书籍时,他们同样需要先找到要删除的书,然后程序将删除对应的记录。例如:

请输入要删除的书的ISBN:
你确定要删除这本书吗?(yes/no):

5. 查询书籍

当用户选择查询书籍时,他们将需要选择查询方式(书名、作者、出版社或ISBN),然后输入查询条件。例如:

请选择查询方式(书名、作者、出版社、ISBN):
请输入查询条件:

程序将在文件中查找匹配的书籍,并显示它们的详细信息。

6. 退出程序

当用户选择退出程序时,程序将结束。

四,代码目录

1. 目录结构

BookManagementSystem/ # 项目根目录
├── CMakeLists.txt # CMake的主配置文件
├── src/ # 源代码目录
│ ├── main.c # 主程序文件
│ ├── book_management.c # 图书管理相关的函数实现
│ └── book_management.h # 图书管理相关的函数声明
├── data/ # 存放数据文件的目录
│ └── books.txt # 存储图书信息的文件
└── build/ # 存放编译结果的目录

2. 生成目录脚本

仅限linux系统使用

#!/bin/bash
# 创建目录结构
mkdir -p BookManagementSystem/src
mkdir -p BookManagementSystem/data
mkdir -p BookManagementSystem/build

# 创建CMakeLists.txt文件
cat << EOF > BookManagementSystem/CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(BookManagementSystem)

# 设置C语言标准
set(CMAKE_C_STANDARD 11)

# 添加你的源代码文件
add_executable(BookManagementSystem src/main.c src/book_management.c)

# 如果需要链接其他库,使用target_link_libraries
# target_link_libraries(BookManagementSystem your_library)
EOF

# 创建空的源代码文件
touch BookManagementSystem/src/main.c
touch BookManagementSystem/src/book_management.c
touch BookManagementSystem/src/book_management.h

# 创建存储书籍信息的空文件
touch BookManagementSystem/data/books.txt

# 提示
echo "目录结构已创建。请在BookManagementSystem目录下开始你的项目。"

五,源代码

book_management.h

#ifndef BOOK_MANAGEMENT_GUARD__H 
#define BOOK_MANAGEMENT_GUARD__H

#include <stdio.h>

typedef struct _Book {
    char title[100];
    char author[50];
    char publisher[50];
    char isbn[14];
    int quantity;
} Book;

int add_new_book(const Book *book);
int delete_book(const char *isbn);
int modify_book(const char *isbn, const Book *book);
int search_books(const char *query, Book *result, int size);
int load_books(Book **books, int *size);
int save_books(const Book *books, int size);

#endif

book_management.c

#include "book_management.h"
#include <stdlib.h>
#include <string.h>

int add_new_book(const Book *book) {
    Book *books;
    int size;
    load_books(&books, &size);

    books = realloc(books, (size + 1) * sizeof(Book));
    books[size] = *book;
    size++;

    save_books(books, size);

    free(books);
    return 0;
}

int load_books(Book **books, int *size) {
    FILE *file = fopen("../data/books.txt", "r");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return -1;
    }

    *books = NULL;
    *size = 0;

    Book book;
    while (fscanf(file, "%[^,],%[^,],%[^,],%[^,],%d\n", book.title, book.author, book.publisher, book.isbn, &book.quantity) != EOF) {
        *books = realloc(*books, (*size + 1) * sizeof(Book));
        (*books)[*size] = book;
        (*size)++;
    }

    fclose(file);
    return 0;
}

int modify_book(const char *isbn, const Book *book) {
    Book *books;
    int size;
    load_books(&books, &size);

    for (int i = 0; i < size; i++) {
        if (strcmp(books[i].isbn, isbn) == 0) {
            books[i] = *book;
            break;
        }
    }

    save_books(books, size);

    free(books);
    return 0;
}

int delete_book(const char *isbn) {
    Book *books;
    int size;
    load_books(&books, &size);

    int index = -1;
    for (int i = 0; i < size; i++) {
        if (strcmp(books[i].isbn, isbn) == 0) {
            index = i;
            break;
        }
    }

    if (index != -1) {
        for (int i = index; i < size - 1; i++) {
            books[i] = books[i + 1];
        }
        size--;
    }

    save_books(books, size);

    free(books);
    return 0;
}

int search_books(const char *query, Book *result, int size) {
    Book *books;
    int books_size;
    load_books(&books, &books_size);

    int count = 0;
    for (int i = 0; i < books_size; i++) {
        if (strstr(books[i].title, query) != NULL ||
            strstr(books[i].author, query) != NULL ||
            strstr(books[i].publisher, query) != NULL ||
            strstr(books[i].isbn, query) != NULL) {
            if (count < size) {
                result[count++] = books[i];
            } else {
                break;
            }
        }
    }

    free(books);
    return count;
}

int save_books(const Book *books, int size) {
    FILE *file = fopen("../data/books.txt", "w");
    if (file == NULL) {
        printf("无法打开文件!\n");
        return -1;
    }

    for (int i = 0; i < size; i++) {
        fprintf(file, "%s,%s,%s,%s,%d\n",
            books[i].title,
            books[i].author,
            books[i].publisher,
            books[i].isbn,
            books[i].quantity);
    }

    fclose(file);
    return 0;
}

main.c

#include "book_management.h"

void print_menu() {
    printf("\n=== 图书管理系统 ===\n");
    printf("1. 添加图书\n");
    printf("2. 删除图书\n");
    printf("3. 修改图书信息\n");
    printf("4. 查找图书\n");
    printf("5. 展示所有图书\n");
    printf("6. 退出\n");
    printf("===================\n");
    printf("请选择你的操作: ");
}

void add_book() {
    Book book;
    printf("请输入书名: ");
    scanf("%s", book.title);
    printf("请输入作者名: ");
    scanf("%s", book.author);
    printf("请输入出版社: ");
    scanf("%s", book.publisher);
    printf("请输入ISBN: ");
    scanf("%s", book.isbn);
    printf("请输入库存量: ");
    scanf("%d", &book.quantity);
    add_new_book(&book);
}

void remove_book() {
    char isbn[14];
    printf("请输入你想要删除的图书的ISBN: ");
    scanf("%s", isbn);
    delete_book(isbn);
}

void update_book() {
    char isbn[14];
    printf("请输入你想要修改的图书的ISBN: ");
    scanf("%s", isbn);

    Book book;
    printf("请输入新的书名: ");
    scanf("%s", book.title);
    printf("请输入新的作者名: ");
    scanf("%s", book.author);
    printf("请输入新的出版社: ");
    scanf("%s", book.publisher);
    printf("请输入新的库存量: ");
    scanf("%d", &book.quantity);

    modify_book(isbn, &book);
}

void find_book() {
    char query[100];
    printf("请输入你的查询: ");
    scanf("%s", query);

    Book books[10];
    int size = search_books(query, books, 10);
    if (size == 0) {
        printf("未找到相关图书。\n");
    } else {
        printf("找到以下图书:\n");
        for (int i = 0; i < size; i++) {
            printf("%s by %s, published by %s, ISBN: %s, quantity: %d\n",
                books[i].title, books[i].author, books[i].publisher, books[i].isbn, books[i].quantity);
        }
    }
}

void show_all_books() {
    Book *books;
    int size;
    load_books(&books, &size);

    printf("图书库中的所有图书:\n");
    for (int i = 0; i < size; i++) {
        printf("%s by %s, published by %s, ISBN: %s, quantity: %d\n",
            books[i].title, books[i].author, books[i].publisher, books[i].isbn, books[i].quantity);
    }

    free(books);
}

int main() {
    while (1) {
        print_menu();

        int option;
        scanf("%d", &option);

        switch (option) {
            case 1:
                add_book();
                break;
            case 2:
                remove_book();
                break;
            case 3:
                update_book();
                break;
            case 4:
                find_book();
                break;
            case 5:
                show_all_books();
                break;
            case 6:
                printf("谢谢使用,再见!\n");
                return 0;
            default:
                printf("未知选项!\n");
                break;
        }
    }

    return 0;
}

books.txt

《红楼梦》,曹雪芹,人民文学出版社,9787020002207,10
《西游记》,吴承恩,人民文学出版社,9787020008728,15
《三国演义》,罗贯中,人民文学出版社,9787020008483,12
《水浒传》,施耐庵,人民文学出版社,9787020008728,20
《围城》,钱钟书,人民文学出版社,9787020002207,7
《活着》,余华,作家出版社,9787506365437,10
《平凡的世界》,路遥,人民文学出版社,9787020063155,9
《百年孤独》,加西亚·马尔克斯,南海出版公司,9787544253994,151984,乔治·奥威尔,北京十月文艺出版社,9787530216274,12
《动物农场》,乔治·奥威尔,人民文学出版社,9787020002207,8

六,界面展示

在这里插入图片描述

七,项目资料

项目的资料及代码已整理打包,有需要可取,也可定制开发。后续会分享c,c++,qt,python等语言的更多项目,感谢关注。v:clzicheng

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++数据结构X篇_09_C++实现栈的顺序存储与链式存储

本篇参考C实现队列的顺序存储与链式存储整理&#xff0c;先搞懂结构框架&#xff0c;后期根据视频利用c对内容实现&#xff0c;也可以对c有更高的提升。 文章目录 1. 顺序存储2. 链式存储 队列是一种特殊的数据存储结构&#xff0c;与栈不同的是其数据存储与访问顺序为先进先出…

Python教程:全局变量和局部变量

变量的作用域始终是Python学习中一个必须理解掌握的环节&#xff0c;下面我们从局部变量和全局变量开始全面解析Python中变量的作用域。 所谓局部变量&#xff0c;指的是定义在函数内的变量。定义在函数内的变量&#xff0c;只能在函数内使用&#xff0c;它与函数外具有相同名…

GlasgowSmile-v2靶机复盘

GlasgowSmile-v2靶机复盘 这是一个非常难的靶机 这个靶机是直接给我们ip地址的&#xff0c;所以就不用去找ip地址了&#xff0c;直接对ip进行一个扫描。 发现开通了22&#xff0c;80&#xff0c;83&#xff0c;但是8080端口是个开启我们无法访问的状态&#xff0c;所以可以猜…

【Redis】—— Redis的RDB持久化机制

&#x1f4a7; 【 R e d i s 】—— R e d i s 的 R D B 持久化机制 \color{#FF1493}{【Redis】 —— Redis的RDB持久化机制} 【Redis】——Redis的RDB持久化机制&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞…

Springboot -- Mybatis + Mybatis Generate + KingbaseES8(pgsql) + 静态多数据源

&#x1f3db;&#x1f3db;&#x1f3db; 以下内容记录一次 Springboot 项目整和人大金仓数据库的过程 &#x1f3db;&#x1f3db;&#x1f3db; 文章目录 KingBaseES8SpringBoot整合KES8(pgsql)修改pom文件配置多数据源配置文件配置类 代码生成器配置JsonTypeHandler修改配…

[HDCTF2019]Maze(初识逆向)

下载附件解压&#xff0c;为了方便&#xff0c;我将文件名改为了maze.exe 一般我们先查壳&#xff0c;确实存在UPX壳 对于刚接触逆向的我&#xff0c;一键脱掉哈哈哈 不过还是要说一下&#xff0c;这种脱壳处理有可能会产生其它损坏或者影响&#xff0c;需要进行一定的修复 可…

Visio使用

1.Visio中字母上下标快捷键&#xff1a; 选中要成为上标的文字,ctrlshift"" 选中要成为下标的文字,ctrl"" 2.导入CAD文件 从 AutoCAD 版本 2007 到 2017 导入 .dwg 或 .dxf 文件。 3.编辑CAD文件 右键图形—CAD绘图对象—转换 选择高级 将默认选项改…

居安思危,测试员被裁了还能干什么?

2019年迎来了一大波大佬级公司裁员&#xff0c;包括了阿里、美团、知乎……。它们是各行业的独角兽公司&#xff0c;既是媒体关注的焦点&#xff0c;也是代表了行业风向的指针。 2019年的互联网&#xff0c;已经过了蓬勃发展期&#xff0c;接下来要迎接的更加平稳、规律的发展…

ECM能耗管理云平台

能源是企业运营中不可或缺的要素之一&#xff0c;直接影响企业的成本和竞争力。能源消耗和碳排放不断增长&#xff0c;对环境和可持续发展造成了严重影响。越来越多的企业开始关注并实施能耗管理云平台系统&#xff0c;以实现更高的能源效率、降低碳排放。 ECM能耗管理云平台系…

数分面试题:魔方涂色

问题&#xff1a;现在有一个正方体&#xff0c;现在有6种颜色&#xff0c;给正方体的每一面涂一种颜色&#xff0c;有多少种涂色方法。 注意&#xff01;正方体是可以旋转的&#xff0c;如果旋转正方体之后&#xff0c;涂色效果和另一种涂色效果相同&#xff0c;那么算是一种涂…

车载开发月薪10k与30k的区别,就是CAN总线技术

CAN&#xff08;Controller Area Network&#xff09;总线是一种实时通信协议&#xff0c;是一种广泛应用于车载电子系统中的网络技术。CAN总线技术最初是由德国Bosch公司开发的&#xff0c;用于汽车电子控制系统&#xff08;ECU&#xff09;之间的通信&#xff0c;它能够在车辆…

Linux的shell脚本

Linux的shell脚本 &#x1f607;博主简介&#xff1a;我是一名正在攻读研究生学位的人工智能专业学生&#xff0c;我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑&#xff0c;欢迎随时来交流哦&#xff01;&#x1f604; ✨座右铭&…

Ai数字人浪潮来袭,超写实数字人系统出世,为企业打造定制化服务

数字人概念首次出现在80年代&#xff0c;最初在音乐领域应用&#xff0c;使用手绘技术进行生成。随着时间的推移&#xff0c;传统手绘被CG和动作捕捉等技术取代&#xff0c;从而使虚拟数字人的制作变得更加简化并降低成本。因此&#xff0c;虚拟数字人产业进入产业化探索阶段。…

SpringBoot快速实践 --Ⅰ

文章目录 启动一个SpringBoot项目如何替换内嵌容器玩转SpringBoot配置全局异常处理过滤器拦截器使用Lombok简洁代码使用IDEA HTTP Client进行接口调试 启动一个SpringBoot项目 如果你觉得使用官网来创建太慢了&#xff0c;那你直接把以前项目的依赖粘过来就行了&#xff1a; …

pytorch LBFGS

LBFGS pytorch的LBFGS也是一个优化器 但是与一般的优化器不同 平常我们的顺序是 losscriterion(predict, gt) optim.zero_grad() loss.backward() optim.step()而LBFGS是 def closure():optim.zero_grad()loss criterion(predict, gt)loss.backward()return lossoptim.step…

5.EFLK(ELK+filebeat)+filter过滤

文章目录 EFLK&#xff08;ELKfilebeat&#xff09;部署filebeat修改配置文件logstash配置 logstash的filter过滤grok(正则捕获插件)内置正则表达式调用自定义表达式 mutate(数据修改插件)重命名字段添加字段删除字段转换数据类型替换字段内容以"|"为分割符拆分数据成…

系统升级丨让VR全景制作简单再简单

最高端的VR全景 往往只需要最朴素的制作方式 酷雷曼3D VR数字化升级平台4.0版本 闪耀上线 全新的后台界面 丝滑的编辑工具 无需代码 不用建模 简单拖拉拽移 依然有手就行 轻松搭建VR元宇宙空间 1、界面升级&#xff0c;让VR创作更加可视 全新视觉设计 酷雷曼3D VR…

【必读】未来八大最具潜力行业!看懂就赚了

1 网络安全行业 现在保护“网络安全”已经成为世界各国的重要共识。有专家表示&#xff0c;未来网络安全行业有望超越金融、地产业成最赚钱行业。 2 动漫行业 我国的动漫产业才刚刚起步&#xff0c;现在全国各地如北京、上海、杭州、大连、深圳、广州等城市均建立起动漫产业…

2023年中总结:未到年末,立的Flag就已实现

前言 去年年末&#xff0c;搞了一篇年终总结&#xff0c;立了一个小小的Flag&#xff0c;2023年实现全网粉丝量突破1.5万&#xff0c;可以很负责任的告诉大家&#xff0c;截至到当前&#xff0c;不仅已经实现&#xff0c;而且超额完成&#xff0c;虽然这个量&#xff0c;很低&a…

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就…