C++使用链表实现图书管理系统
引言
链表是一种常见的数据结构,它可以实现动态的存储和操作数据。在实际应用中,我们通常会将链表作为基础数据结构来实现一些更为复杂的问题。本篇文章将介绍如何使用链表来实现一个图书管理系统。
需求分析
首先,我们需要明确需求,以此来确定整个系统的实现思路。本次图书管理系统需要实现以下功能:
- 添加书籍
- 删除书籍
- 修改书籍信息
- 检索书籍
- 显示书籍信息
设计思路
结合需求分析,我们可以得出使用链表来实现图书管理系统的思路:
- 定义一个图书节点的结构体
- 定义一个链表结构体,用于存储所有图书节点
- 按照需求分析,实现对应的功能
系统实现
定义图书节点的结构体
首先,我们需要定义一个图书节点的结构体,它应该包括图书的一些基本信息,如书名、作者、出版社、出版时间等。
struct BookNode{
string title;
string author;
string publisher;
string pub_date;
struct BookNode* next;
};
定义链表结构体
接着,我们需要定义一个链表结构体,用于存储所有图书节点。链表结构体应该包括图书链表的头节点指针、图书总数等信息。
struct BookList{
struct BookNode* head;
int count;
};
实现添加书籍功能
添加书籍功能需要向链表末尾添加一个新的图书节点。我们可以先定义一个新的图书节点,然后遍历链表找到链表末尾并将新节点添加到链表末尾。
bool add_book(BookList &list, BookNode &book){
BookNode* new_book = new BookNode;
new_book->title = book.title;
new_book->author = book.author;
new_book->publisher = book.publisher;
new_book->pub_date = book.pub_date;
new_book->next = NULL;
if(list.head == NULL){
list.head = new_book;
}
else{
BookNode* p = list.head;
while(p->next != NULL){
p = p->next;
}
p->next = new_book;
}
list.count++;
return true;
}
实现删除书籍功能
删除书籍功能可以根据书名或者作者名查找到图书节点,并从链表中删除该节点。
bool delete_book(BookList &list, string title){
if(list.head == NULL){
return false;
}
BookNode* p = list.head;
if(p->title == title){
list.head = p->next;
delete p;
list.count--;
return true;
}
while(p->next != NULL){
if(p->next->title == title){
BookNode* tmp = p->next;
p->next = tmp->next;
delete tmp;
list.count--;
return true;
}
p = p->next;
}
return false;
}
实现修改书籍信息功能
修改书籍信息功能可以先查找到需要修改的图书节点,然后修改其对应的属性。
bool update_book(BookList &list, string title, BookNode &book){
if(list.head == NULL){
return false;
}
BookNode* p = list.head;
while(p != NULL){
if(p->title == title){
p->title = book.title;
p->author = book.author;
p->publisher = book.publisher;
p->pub_date = book.pub_date;
return true;
}
p = p->next;
}
return false;
}
实现检索书籍功能
检索书籍功能可以根据书名或者作者名查找到对应的图书节点,并显示其所有属性。
bool search_book(BookList &list, string keyword){
if(list.head == NULL){
return false;
}
BookNode* p = list.head;
while(p != NULL){
if(p->title == keyword || p->author == keyword){
cout<<"Title: "<<p->title<<endl;
cout<<"Author: "<<p->author<<endl;
cout<<"Publisher: "<<p->publisher<<endl;
cout<<"Publish Date: "<<p->pub_date<<endl;
return true;
}
p = p->next;
}
return false;
}
实现显示书籍信息功能
显示书籍信息功能可以遍历整个链表,显示每一个图书节点的所有属性。
void show_books(BookList &list){
if(list.head == NULL){
cout<<"No books!"<<endl;
return;
}
BookNode* p = list.head;
while(p != NULL){
cout<<"Title: "<<p->title<<endl;
cout<<"Author: "<<p->author<<endl;
cout<<"Publisher: "<<p->publisher<<endl;
cout<<"Publish Date: "<<p->pub_date<<endl;
cout<<endl;
p = p->next;
}
}
示例说明
下面提供两个示例来说明如何使用链表实现图书管理系统。
示例一:添加书籍
int main(){
BookList list;
list.head = NULL;
list.count = 0;
BookNode book1 = {"C++ Primer", "Lippman", "Addison-Wesley", "JAN-01-2022", NULL};
BookNode book2 = {"Thinking in Java", "Eckel", "Prentice Hall", "JAN-01-2022", NULL};
BookNode book3 = {"The C Programming Language", "K&R", "Prentice Hall", "JAN-01-2022", NULL};
add_book(list, book1);
add_book(list, book2);
add_book(list, book3);
show_books(list);
return 0;
}
输出结果:
Title: C++ Primer
Author: Lippman
Publisher: Addison-Wesley
Publish Date: JAN-01-2022
Title: Thinking in Java
Author: Eckel
Publisher: Prentice Hall
Publish Date: JAN-01-2022
Title: The C Programming Language
Author: K&R
Publisher: Prentice Hall
Publish Date: JAN-01-2022
示例二:删除书籍
int main(){
BookList list;
list.head = NULL;
list.count = 0;
BookNode book1 = {"C++ Primer", "Lippman", "Addison-Wesley", "JAN-01-2022", NULL};
BookNode book2 = {"Thinking in Java", "Eckel", "Prentice Hall", "JAN-01-2022", NULL};
BookNode book3 = {"The C Programming Language", "K&R", "Prentice Hall", "JAN-01-2022", NULL};
add_book(list, book1);
add_book(list, book2);
add_book(list, book3);
delete_book(list, "Thinking in Java");
show_books(list);
return 0;
}
输出结果:
Title: C++ Primer
Author: Lippman
Publisher: Addison-Wesley
Publish Date: JAN-01-2022
Title: The C Programming Language
Author: K&R
Publisher: Prentice Hall
Publish Date: JAN-01-2022
总结
本篇文章简要介绍了如何使用链表来实现一个图书管理系统,并提供了两个示例来说明其使用方法。链表是一种十分常用的数据结构,在程序设计中能够发挥重要的作用,我们应当熟练掌握其基本使用方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++使用链表实现图书管理系统 - Python技术站