用c语言双向链表实现图书管理系统
时间: 2023-11-20 13:07:17 浏览: 129
C语言链表实现图书管理系统
以下是一个简单的用 C 语言双向链表实现图书管理系统的示例代码。该系统可以添加、删除和查找图书,每个图书包括书名、作者、ISBN 号、出版社和数量等信息。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct Book {
char title[50];
char author[50];
char ISBN[20];
char publisher[50];
int quantity;
struct Book *prev;
struct Book *next;
} Book;
// 定义全局变量
Book *head = NULL;
Book *tail = NULL;
// 函数声明
void addBook();
void deleteBook();
void searchBook();
void display();
int main() {
int choice;
// 显示菜单
printf("图书管理系统\n");
printf("1. 添加图书\n");
printf("2. 删除图书\n");
printf("3. 查找图书\n");
printf("4. 显示所有图书\n");
printf("0. 退出\n");
// 处理用户输入
while (1) {
printf("\n请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
addBook();
break;
case 2:
deleteBook();
break;
case 3:
searchBook();
break;
case 4:
display();
break;
case 0:
exit(0);
default:
printf("非法输入,请重新输入\n");
}
}
}
// 添加图书
void addBook() {
Book *p = (Book*) malloc(sizeof(Book));
printf("\n请输入书名:");
scanf("%s", p->title);
printf("请输入作者:");
scanf("%s", p->author);
printf("请输入ISBN号:");
scanf("%s", p->ISBN);
printf("请输入出版社:");
scanf("%s", p->publisher);
printf("请输入数量:");
scanf("%d", &p->quantity);
// 添加节点到链表末尾
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
p->prev = tail;
tail = p;
}
printf("添加成功!\n");
}
// 删除图书
void deleteBook() {
char ISBN[20];
Book *p = head;
printf("\n请输入要删除的图书的ISBN号:");
scanf("%s", ISBN);
// 查找节点并删除
while (p != NULL) {
if (strcmp(p->ISBN, ISBN) == 0) {
if (p == head) {
head = p->next;
if (head != NULL) {
head->prev = NULL;
}
} else if (p == tail) {
tail = p->prev;
tail->next = NULL;
} else {
p->prev->next = p->next;
p->next->prev = p->prev;
}
free(p);
printf("删除成功!\n");
return;
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 查找图书
void searchBook() {
char ISBN[20];
Book *p = head;
printf("\n请输入要查找的图书的ISBN号:");
scanf("%s", ISBN);
// 查找节点并显示信息
while (p != NULL) {
if (strcmp(p->ISBN, ISBN) == 0) {
printf("\n书名:%s\n", p->title);
printf("作者:%s\n", p->author);
printf("ISBN号:%s\n", p->ISBN);
printf("出版社:%s\n", p->publisher);
printf("数量:%d\n", p->quantity);
return;
}
p = p->next;
}
printf("未找到该图书!\n");
}
// 显示所有图书
void display() {
Book *p = head;
printf("\n所有图书信息如下:\n");
while (p != NULL) {
printf("\n书名:%s\n", p->title);
printf("作者:%s\n", p->author);
printf("ISBN号:%s\n", p->ISBN);
printf("出版社:%s\n", p->publisher);
printf("数量:%d\n", p->quantity);
p = p->next;
}
}
```
需要注意的是,在实际应用中,还需要考虑一些其他的因素,例如数据的持久化存储、并发访问的问题等。
阅读全文