C语言图书管理系统

一,开发环境

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

二,功能需求

C语言图书管理系统_第1张图片

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 

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 
#include 

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语言图书管理系统_第2张图片

七,项目资料

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

你可能感兴趣的:(C语言项目,c语言,开发语言)