一,开发环境
- 操作系统:windows10, windows11, linux, mac等。
- 开发工具:Qt, vscode, visual studio等
- 开发语言: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,15
《1984》,乔治·奥威尔,北京十月文艺出版社,9787530216274,12
《动物农场》,乔治·奥威尔,人民文学出版社,9787020002207,8
六,界面展示
七,项目资料
项目的资料及代码已整理打包,有需要可取,也可定制开发。后续会分享c,c++,qt,python等语言的更多项目,感谢关注。v:clzicheng