链表做图书馆管理系统c语言
时间: 2023-12-30 11:22:49 浏览: 80
链表是一种常用的数据结构,可以用来实现图书馆管理系统。下面是一个简单的C语言链表实现的图书馆管理系统的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义图书结构体
typedef struct book {
char name[50]; // 书名
char author[50]; // 作者
int id; // 书籍编号
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->id);
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() {
int id;
printf("请输入要删除的书籍编号:");
scanf("%d", &id);
if (head == NULL) { // 如果链表为空,无法删除
printf("链表为空,无法删除!\n");
return;
}
Book *p = head;
Book *pre = NULL;
while (p != NULL) {
if (p->id == id) { // 找到要删除的节点
if (pre == NULL) { // 如果要删除的节点是头节点
head = p->next;
} else {
pre->next = p->next;
}
free(p); // 释放内存
printf("删除成功!\n");
return;
}
pre = p;
p = p->next;
}
printf("未找到要删除的书籍!\n");
}
// 修改书籍信息
void modify_book() {
int id;
printf("请输入要修改的书籍编号:");
scanf("%d", &id);
if (head == NULL) { // 如果链表为空,无法修改
printf("链表为空,无法修改!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (p->id == id) { // 找到要修改的节点
printf("请输入新的书名:");
scanf("%s", p->name);
printf("请输入新的作者:");
scanf("%s", p->author);
printf("修改成功!\n");
return;
}
p = p->next;
}
printf("未找到要修改的书籍!\n");
}
// 查找书籍
void search_book() {
int id;
printf("请输入要查找的书籍编号:");
scanf("%d", &id);
if (head == NULL) { // 如果链表为空,无法查找
printf("链表为空,无法查找!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (p->id == id) { // 找到要查找的节点
printf("书名:%s\n", p->name);
printf("作者:%s\n", p->author);
printf("书籍编号:%d\n", p->id);
return;
}
p = p->next;
}
printf("未找到要查找的书籍!\n");
}
// 显示所有书籍
void show_books() {
if (head == NULL) { // 如果链表为空,无法显示
printf("链表为空,无法显示!\n");
return;
}
Book *p = head;
while (p != NULL) {
printf("书名:%s\n", p->name);
printf("作者:%s\n", p->author);
printf("书籍编号:%d\n", p->id);
p = p->next;
}
}
// 借书
void borrow_book() {
int id;
printf("请输入要借阅的书籍编号:");
scanf("%d", &id);
if (head == NULL) { // 如果链表为空,无法借阅
printf("链表为空,无法借阅!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (p->id == id) { // 找到要借阅的节点
printf("借阅成功!\n");
return;
}
p = p->next;
}
printf("未找到要借阅的书籍!\n");
}
// 还书
void return_book() {
int id;
printf("请输入要归还的书籍编号:");
scanf("%d", &id);
if (head == NULL) { // 如果链表为空,无法归还
printf("链表为空,无法归还!\n");
return;
}
Book *p = head;
while (p != NULL) {
if (p->id == id) { // 找到要归还的节点
printf("归还成功!\n");
return;
}
p = p->next;
}
printf("未找到要归还的书籍!\n");
}
// 主函数
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("6.借书\n");
printf("7.还书\n");
printf("0.退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_book();
break;
case 2:
delete_book();
break;
case 3:
modify_book();
break;
case 4:
search_book();
break;
case 5:
show_books();
break;
case 6:
borrow_book();
break;
case 7:
return_book();
break;
case 0:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
阅读全文