需求:
1. 实现一个图书管理系统,具有以下功能:
a. 书籍录入功能,书籍信息包括书名、副本数、作者、出版日期
b. 书籍查询功能,按照书名、作者、出版日期等条件检索
c. 学生信息管理功能,管理每个学生的姓名、年级、身份证、性别、借了什么书等信息
d. 借书功能,学生可以查询想要的书籍,进行借出
e. 书籍管理功能,可以看到每种书被哪些人借出了
项目目录:
main.go代码:
package main import ( "fmt" "go_dev/day1/jieshu/model" ) func main() { xiaom := model.CreateStu("小明", 1) xiaog := model.CreateStu("小刚", 2) model.CreateBook("本草纲目", "李时珍", 10) model.CreateBook("易经", "周文王", 10) err := xiaom.AddBook("本草纲目", 3) if err != nil { fmt.Println("借书失败,原因:", err) return } err = xiaog.AddBook("易经", 5) if err != nil { fmt.Println("借书失败,原因:", err) } err = xiaog.DelBook("易经", 6) if err != nil { fmt.Println("还书失败,原因:", err) } fmt.Println() fmt.Println("小刚:") for _, v := range xiaog.Book { fmt.Println(*v) } fmt.Println() fmt.Println("小明:") for _, v := range xiaom.Book { fmt.Println(*v) } fmt.Println() fmt.Println("剩余:") for _, v := range model.Books { fmt.Println(*v) } fmt.Println() }
book.go代码:
package model import ( "errors" ) var ( NotBook = errors.New("没有书了") Books []*Book ) type Book struct { Name string Au string Num int } func CreateBook(name, au string, num int) (p *Book) { p = &Book{ Name: name, Au: au, Num: num, } Books = append(Books, p) return } func (b *Book) DecBook(num int) (err error) { if b.Num < num { err = NotBook return } b.Num -= num return } func (b *Book) AddBook(num int) (res bool) { b.Num += num return true }
stu.go代码:
package model import "fmt" type Stu struct { Name string Id int Book []*Book Book2 *Book } func CreateStu(name string, id int) (stu *Stu) { stu = &Stu{ Name: name, Id: id, Book: []*Book{}, } return } func (s *Stu) AddBook(name string, num int) (err error) { for _, v := range Books { if v.Name == name { vv := Book{ Name: v.Name, Au: v.Au, Num: num, } err = v.DecBook(num) if err != nil { return } s.Book = append(s.Book, &vv) s.Book2 = v fmt.Printf("%s成功借了%d本《%s》,还剩%d本", s.Name, num, v.Name, v.Num) fmt.Println() fmt.Println() return } } err = NotBook return } func (s *Stu) DelBook(name string, num int) (err error) { for k, v := range s.Book { if v.Name == name { if v.Num < num { err = NotBook return } if v.Num == num { right := s.Book[:k] left := s.Book[k+1:] s.Book = append(right, left...) s.Book2.AddBook(num) fmt.Printf("%s成功还了%d本《%s》,还剩%d本", s.Name, num, v.Name, s.Book2.Num) fmt.Println() fmt.Println() return } s.Book2.AddBook(num) fmt.Printf("%s成功还了%d本《%s》,还剩%d本", s.Name, num, v.Name, s.Book2.Num) fmt.Println() fmt.Println() v.Num -= num return } } err = NotBook return }
运行结果:
发表评论