package main
import (
"fmt"
"strings"
)
type Book struct {
ID int
Name string
Author string
Publisher string
Price float64
}
type BookManager struct {
books []Book
}
func (bm *BookManager) AddBook(book Book) {
bm.books = append(bm.books, book)
}
func (bm *BookManager) DeleteBook(id int, name string) bool {
for i, b := range bm.books {
if b.ID == id || b.Name == name {
bm.books = append(bm.books[:i], bm.books[i+1:]...)
return true
}
}
return false
}
func (bm *BookManager) FindBook(id int, name, author string) []Book {
var foundBooks []Book
for _, b := range bm.books {
if b.ID == id || b.Name == name || b.Author == author {
foundBooks = append(foundBooks, b)
}
}
return foundBooks
}
func (bm *BookManager) UpdateBook(id int, newBook Book) bool {
for i, b := range bm.books {
if b.ID == id {
bm.books[i] = newBook
return true
}
}
return false
}
func (bm *BookManager) ShowBooks() {
for _, b := range bm.books {
fmt.Printf("ID: %d, Name: %s, Author: %s, Publisher: %s, Price: %.2f\n",
b.ID, b.Name, b.Author, b.Publisher, b.Price)
}
}
func main() {
var bm BookManager
bm.AddBook(Book{ID: 1, Name: "Go Programming", Author: "Alan A. A. Donovan", Publisher: "O'Reilly", Price: 49.99})
bm.AddBook(Book{ID: 2, Name: "Effective Go", Author: "Rob Pike", Publisher: "Addison-Wesley", Price: 29.99})
bm.ShowBooks()
found := bm.FindBook(1, "", "")
for _, b := range found {
fmt.Printf("Found book: %s\n", b.Name)
}
updatedBook := Book{ID: 1, Name: "Go Programming (Updated)", Author: "Alan A. A. Donovan", Publisher: "O'Reilly", Price: 59.99}
bm.UpdateBook(1, updatedBook)
bm.ShowBooks()
bm.DeleteBook(2, "")
bm.ShowBooks()
}