一,开发环境
- 操作系统: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