GO语言实现一个图书管理系统

需求:

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
}

运行结果:

实现一个图书管理系统,具有以下功能:

最后编辑于:2021/12/07作者: 牛逼PHP

发表评论