C语言图书管理系统

这篇具有很好参考价值的文章主要介绍了C语言图书管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,开发环境

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

二,功能需求

C语言图书管理系统,C语言项目,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语言项目,c语言,开发语言

七,项目资料

项目的资料及代码已整理打包,有需要可取,也可定制开发。后续会分享c,c++,qt,python等语言的更多项目,感谢关注。v:clzicheng文章来源地址https://www.toymoban.com/news/detail-567441.html

到了这里,关于C语言图书管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图书管理系统——C语言课程设计

    新进图书基本信息的输入 图书借本信息的查询 对撤销图书的删除 办理借书手续 办理还书手续 提供使用文件方式存储数据 新进图书的输入,首先要输入要添加的书的基本信息,如:书名、书号、价格、作者,再通过fprintf()函数将输入的信息写入文件中 图书信息的查询可分为

    2024年02月09日
    浏览(41)
  • 【C语言课程设计】图书管理系统

    引言 : 图书管理系统是一个重要的信息管理系统,对于图书馆和书店等机构来说,它能够方便地管理图书的录入、显示、查询、修改和删除等操作。本实验基于C语言开发了一个简单的图书管理系统,通过账户名和密码进行系统访问和权限控制,并实现了上述功能。在本实验

    2024年02月15日
    浏览(37)
  • C语言课程设计-图书管理系统

    需求分析:   为了满足图书管理的要求,通过计算机技术给图书管理人员和读者借、还书带来便利。使用c语言编写了图书管理系统。本系统主要实现图书信息管理的功能,通过此系统可对图书馆库存图书信息进行管理和维护操作。实现了图书馆内管理的一般功能,包括查询

    2024年02月04日
    浏览(42)
  • C语言课设:图书管理系统

    一、系统功能        图书管理系统要求实现图书管理的基本功能,包括图书的录入、删除、查找和导入/导出等。图书的属性包括书号、书名、第一作者、版次、出版社、出版年等信息。 1.创建:创建图书管理系统,用逐条输入的方式; 2.显示:分屏显示图书管理系统中的

    2024年02月11日
    浏览(37)
  • Django项目之图书管理系统

    1、创建好 Django 项目 2、准备好数据库 —— 创建数据库:book_system 3、配置项目中的数据库引擎 4、配置静态文件的搜索路径 , 以及在项目的根目录中创建一个 static 存放静态文件数据文件夹 5、导入 html 模板文件和静态文件数据。 1、响应用户注册页面的视图 2、定义用户数

    2024年04月29日
    浏览(47)
  • 数据结构项目:图书管理系统

    随着科技的不断进步,图书的种类也随之日益增多。图书馆所需要处理的图书管理问题从而突出,而读者也许需要能够更方便的查找和查看图书馆的书籍。为解决以上问题,本系统设计时主要针对图书管理人员需求做出对图书信息的录入、删除、修改、导出等功能。 (1)用

    2024年02月04日
    浏览(49)
  • SpringBoot项目----图书管理系统(详解)

    目录 项目业务  技术栈 数据库表的设计  数据库表关系图 关于字典表  前后端接口实现 1.初始化数据库、表、数据 2.数据库连接池配置 3.统一响应封装  4.统一异常处理 5.实现统一会话管理(登录)  5.通过Mybatis生成工具,生成mapper接口,xml文件,实体类  6.准备所有的Co

    2024年02月09日
    浏览(42)
  • 【开源】基于JAVA语言的图书管理系统

    图书管理系统是一个用于管理图书馆资源的软件系统,该系统包括图书馆模块、图书类型模块、图书模块、图书借阅模块和公告模块。 图书馆模块 是系统的核心模块,用于管理图书馆的基本信息,包括图书馆名称、地址、联系方式等。管理员可以通过该模块进行图书馆信息

    2024年01月24日
    浏览(79)
  • [项目]PHP图书管理系统(附源码)

    📔这里是一个喜欢编程的小程序员,KSaMar 📕如果此文章对您有些许帮助,您可以选择赞助本作作者,让作者有更强的更新文章动力! 📒如果您喜欢此文章,您可以 点赞👍 收藏⭐ 一下,这将对我书写有很大的帮助! 📘如果您通过阅读此文章发现了BUG,请及时私信联系我

    2024年02月08日
    浏览(44)
  • 项目篇 | 图书管理系统 | 账号模块 | 登录

    该系统实现了管理员登录和用户登录,二者的实现和逻辑几乎完全一致,这里以用户登录为例进行讲解。 userLoginPage:功能页,用户登录页,实现用户登录页的界面 userLogin:功能,用户登录,实现用户登录逻辑

    2024年01月20日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包