go实现一个简单的图书管理系统

需求如下:
使用函数实现一个简单的图书管理系统
每本书有书名,作者,价格,上架信息
用户可以在控制台添加书籍,修改书籍信息,打印所有的书籍列表
1打印菜单
2等待用户输入菜单选项
3添加书籍的函数
4修改书籍的函数
5展示书籍的函数
6退出
(该项目不涉及文件操作,在线操作等,仅是一个终端运行的小项目)
思路如下:
1首先先定义一个结构体,包含书籍各项信息。定义一个书籍切片,存放所有书籍。
2先写一个做出主界面函数,主界面函数只需要显示出各选项打印出来的内容即可。3主函数写一个无限循环,根据输入可以退出。调用主界面函数,再写四个条件语句分别对应添加书籍,修改书籍,展示所有书籍,退出。4然后做一个输入函数初始化书籍结构体,向其中变量地址输入信息并返回输入信息。5然后就是添加书籍函数,该函数调用输入函数,并遍历切片判断是否书籍是否存在,存在直接返回,不存在则添加到书籍切片中。6更新书籍的函数也是遍历切片,这个是有书的话可以更新,没有的话则提示没有。7展示书籍的函数则判断有无书籍,并打印出相关信息。

package main

import (
	"fmt"
	"os"
)

//需求:使用函数实现一个简单的图书管理系统
//每本书有书名,作者,价格,上架信息
//用户可以在控制台添加书籍,修改书籍信息,打印所有的书籍列表
//1打印菜单
//2等待用户输入菜单选项
//3添加书籍的函数
//4修改书籍的函数
//5展示书籍的函数
//6退出
type book struct{
    
    
	title string
	author string
	price float32
	publish bool
}
//定义一个新书的构造函数
func newBook(title,author string,price float32,publish bool) *book {
    
     //内容比较多的返回指针比较省内存,减少内存的拷贝
	return &book{
    
    
		title:title,
		author:author,
		price:price,
		publish:publish,
	}
}
var allBooks=make([]*book,0,200)  //定义一个存放book指针的切片,用来存储所有的书籍
func showMenu() {
    
    
	fmt.Println("欢迎登录BMS")
	fmt.Println("1.添加书籍")
	fmt.Println("2.修改书籍信息")
	fmt.Println("3.展示所有书籍")
	fmt.Println("4退出")
}
func userInput() *book{
    
    
	var (
		title string
		author string
		price float32
		publish bool
	)
	//1获取用户输入
	fmt.Println("请根据提示输入相关内容")
	fmt.Print("请输入书名")
	fmt.Scanln(&title)
	fmt.Print("请输入作者")
	fmt.Scanln(&author)
	fmt.Print("请输入价格")
	fmt.Scanln(&price)
	fmt.Print("请输入是否上架[true|false]")
	fmt.Scanln(&publish)
	fmt.Println(title,author,price,publish)
	//2创建一本新书
	book :=newBook(title,author,price,publish)
	return book
}
func addBook(){
    
    
	book:=userInput()
	//3把书添加到allBooks切片中
	//3.3.1判断新增的书名是否已经存在
	for _,b := range allBooks{
    
    
		if b.title == book.title{
    
    
			fmt.Printf("(%s)这本书已经存在了!",book.title)
			return
		}
	}
	allBooks = append(allBooks,book)
	fmt.Println("书籍添加成功!")

}
func updateBook(){
    
    
	book:=userInput()
	//4.1遍历所有的忽视根据书名找到要修改的那本书,把信息更新一下
	for index,b :=range allBooks{
    
    
		//如果遍历到这本书的书名正好等于book.title就更新
		if b.title == book.title {
    
    
			allBooks[index] = book
			fmt.Println("书名:《%s》更新成功!", book.title)
			return
		}
	}
	fmt.Printf("书名《%s》不存在!\n",book.title)
}
func showBook(){
    
    
	if len(allBooks)==0 {
    
    
		fmt.Println("还没有书")
	}
	for _,b := range allBooks{
    
    
		fmt.Printf("(%s) 作者:%s 价格:%.2f 是否上架销售:%t\n",b.title,b.author,b.price,b.publish)
	}

}

func main(){
    
    
	for{
    
    
	showMenu()
	//2.等待用户输入菜单选项
	var option int
	fmt.Scanln(&option)
	switch option{
    
    
	case 1:
		addBook()
	case 2:
		updateBook()
	case 3:
		showBook()
	case 4:
		os.Exit(0)
	}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_45701131/article/details/109572326