用c语言实现单链表图书管理
时间: 2023-10-22 08:06:24 浏览: 100
下面是一个简单的用 C 语言实现单链表图书管理系统的示例代码。本代码实现了添加图书、删除图书、查找图书和打印所有图书信息等功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct book {
char name[50];
char author[20];
int id;
struct book *next;
} Book;
// 定义全局变量 head
Book *head = NULL;
// 添加图书
void add_book() {
Book *p, *q;
p = (Book *)malloc(sizeof(Book));
printf("请输入图书名称:");
scanf("%s", p->name);
printf("请输入图书作者:");
scanf("%s", p->author);
printf("请输入图书编号:");
scanf("%d", &p->id);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q = head;
while (q->next != NULL) {
q = q->next;
}
q->next = p;
}
printf("添加图书成功!\n");
}
// 删除图书
void delete_book() {
int id;
Book *p, *q;
if (head == NULL) {
printf("当前图书列表为空!\n");
return;
}
printf("请输入要删除的图书编号:");
scanf("%d", &id);
if (head->id == id) {
p = head;
head = head->next;
free(p);
printf("删除图书成功!\n");
return;
}
p = head;
while (p != NULL && p->id != id) {
q = p;
p = p->next;
}
if (p == NULL) {
printf("未找到对应图书!\n");
return;
}
q->next = p->next;
free(p);
printf("删除图书成功!\n");
}
// 查找图书
void search_book() {
int id;
Book *p;
if (head == NULL) {
printf("当前图书列表为空!\n");
return;
}
printf("请输入要查找的图书编号:");
scanf("%d", &id);
p = head;
while (p != NULL && p->id != id) {
p = p->next;
}
if (p == NULL) {
printf("未找到对应图书!\n");
return;
}
printf("图书名称:%s\n", p->name);
printf("图书作者:%s\n", p->author);
printf("图书编号:%d\n", p->id);
}
// 打印所有图书信息
void print_books() {
Book *p;
if (head == NULL) {
printf("当前图书列表为空!\n");
return;
}
printf("图书列表如下:\n");
p = head;
while (p != NULL) {
printf("图书名称:%s\n", p->name);
printf("图书作者:%s\n", p->author);
printf("图书编号:%d\n", p->id);
p = p->next;
}
}
int main() {
int choice;
while (1) {
printf("\n请选择操作:\n");
printf("1. 添加图书\n");
printf("2. 删除图书\n");
printf("3. 查找图书\n");
printf("4. 打印所有图书信息\n");
printf("5. 退出程序\n");
printf("请选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
delete_book();
break;
case 3:
search_book();
break;
case 4:
print_books();
break;
case 5:
printf("谢谢使用,再见!\n");
exit(0);
default:
printf("输入有误,请重新选择!\n");
break;
}
}
return 0;
}
```
在本示例代码中,我们定义了一个 `Book` 结构体,包含了图书的名称、作者和编号等信息。我们使用全局变量 `head` 来表示链表头。
在 `main()` 函数中,我们使用一个无限循环来等待用户输入操作,根据用户的选择调用不同的函数实现相应的功能。
在 `add_book()` 函数中,我们首先使用 `malloc()` 动态分配内存来创建一个 `Book` 结构体,然后通过 `scanf()` 函数获取用户输入的图书信息,并将其添加到链表末尾。
在 `delete_book()` 函数中,我们首先判断链表是否为空,然后使用 `scanf()` 函数获取用户要删除的图书编号,并遍历链表查找该图书。如果找到该图书,则将其从链表中删除。
在 `search_book()` 函数中,我们首先判断链表是否为空,然后使用 `scanf()` 函数获取用户要查找的图书编号,并遍历链表查找该图书。如果找到该图书,则将其信息打印出来。
在 `print_books()` 函数中,我们首先判断链表是否为空,并打印所有图书的信息。
最后,在用户选择退出程序时,我们使用 `exit()` 函数退出程序。
阅读全文