使用单链表编写一个图书管理系统
时间: 2023-05-19 07:01:08 浏览: 48
非常感谢您的提问。以下是使用单链表编写的图书管理系统的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct Book {
char name[50]; // 书名
char author[20]; // 作者
int year; // 出版年份
struct Book *next; // 指向下一本书的指针
} Book;
// 定义全局变量,指向链表头
Book *head = NULL;
// 添加图书
void add_book() {
Book *new_book = (Book*)malloc(sizeof(Book)); // 创建新的图书节点
printf("请输入书名:");
scanf("%s", new_book->name);
printf("请输入作者:");
scanf("%s", new_book->author);
printf("请输入出版年份:");
scanf("%d", &new_book->year);
new_book->next = NULL;
if (head == NULL) { // 如果链表为空,直接将新节点作为头节点
head = new_book;
} else { // 否则将新节点插入到链表末尾
Book *p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = new_book;
}
printf("添加成功!\n");
}
// 删除图书
void delete_book() {
if (head == NULL) { // 如果链表为空,直接返回
printf("链表为空!\n");
return;
}
char name[50];
printf("请输入要删除的书名:");
scanf("%s", name);
Book *p = head;
Book *prev = NULL;
while (p != NULL) {
if (strcmp(p->name, name) == 0) { // 找到要删除的节点
if (prev == NULL) { // 如果要删除的是头节点
head = p->next;
} else {
prev->next = p->next;
}
free(p); // 释放节点内存
printf("删除成功!\n");
return;
}
prev = p;
p = p->next;
}
printf("未找到要删除的书!\n");
}
// 显示所有图书
void show_books() {
if (head == NULL) { // 如果链表为空,直接返回
printf("链表为空!\n");
return;
}
printf("所有图书如下:\n");
Book *p = head;
while (p != NULL) {
printf("%s\t%s\t%d\n", p->name, p->author, p->year);
p = p->next;
}
}
// 主函数
int main() {
int choice;
while (1) {
printf("请选择操作:\n");
printf("1. 添加图书\n");
printf("2. 删除图书\n");
printf("3. 显示所有图书\n");
printf("4. 退出程序\n");
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
delete_book();
break;
case 3:
show_books();
break;
case 4:
return 0;
default:
printf("无效的选择!\n");
}
}
}
希望这个示例代码能够帮助您实现图书管理系统。如果您有任何问题,请随时联系我。