c语言图书管理系统增删改查
时间: 2024-12-25 13:20:19 浏览: 10
### C语言实现图书管理系统的增删改查功能
#### 创建节点结构体
为了存储每本书的信息,定义一个包含书籍详情的结构体。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LENGTH 50
typedef struct Book {
char name[MAX_NAME_LENGTH];
float price;
int quantity;
struct Book* next;
} Book;
Book* head = NULL; // 链表头指针初始化为空
```
#### 添加新书 (Create)
当向系统中增加一本新的书籍时,创建一个新的`Book`类型的节点并将其链接到现有列表之后。
```c
void add_book(const char* book_name, float book_price, int book_quantity) {
Book* new_book = (Book*)malloc(sizeof(Book));
strcpy(new_book->name, book_name);
new_book->price = book_price;
new_book->quantity = book_quantity;
new_book->next = NULL;
if (!head) { // 如果当前链表为空,则设置为头部
head = new_book;
} else {
Book* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = new_book;
}
}
```
#### 删除指定书籍 (Delete)
通过遍历整个链表找到要删除的目标项,并调整前后两个元素之间的连接关系以移除目标项。
```c
int delete_book_by_name(const char* target_name) {
if (!head || !target_name) return 0;
Book* prev = NULL;
Book* current = head;
while (current && strcmp(current->name, target_name)) {
prev = current;
current = current->next;
}
if (!current) return 0; // 找不到该书名对应的记录
if(prev){
prev->next=current->next;
}else{
head=head->next;
}
free(current); //释放内存空间
return 1;
}
```
#### 更新已有书籍信息 (Update)
定位特定条目后修改其属性值。
```c
int update_book_info(const char* old_name, const char* new_name, float new_price, int new_quantity) {
Book* ptr = head;
while(ptr!=NULL&&strcmp(ptr->name,old_name)){
ptr=ptr->next;
}
if(!ptr)return 0;//未找到匹配项
strncpy(ptr->name,new_name,sizeof(ptr->name)-1);
ptr->price=new_price;
ptr->quantity=new_quantity;
return 1;
}
```
#### 查询所有书籍 (Read All Books)
打印出链表中的每一本存档下来的书籍数据。
```c
void list_all_books() {
printf("\n--\n");
Book* iterator = head;
while(iterator != NULL) {
printf("Name: %s | Price: %.2f | Quantity: %d\n",
iterator->name,
iterator->price,
iterator->quantity);
iterator = iterator->next;
}
printf("-------------------------\n");
}
```
以上就是使用C语言构建简单版图书管理系统的核心逻辑[^2]。此程序利用了基本的数据结构——单向循环链表来管理和维护图书馆藏品清单;同时也展示了如何执行常见的CRUD(创建、读取、更新、删除)操作。
阅读全文