Go之路(十七):小demo---图书馆管理系统
小demo---图书馆管理系统
目录结构是这样的,管理员那部分偷个小懒,逻辑都不难
因为学的比较快,所以用来做复习,也基本达到了这个效果。
main.go
package main import( "fmt" "strings" "math/rand" "day8/Book_system/model" ) var ( user string options string book_name string ) func main() { Head: fmt.Println(`请选择你的身份,输入Q即可退出 1.学生 2.管理员`) fmt.Scanln(&user) if user == "1"{ stu := new(model.Student) var stu1 model.Stu_functions = stu stu.Name = fmt.Sprintf("stu%d",rand.Intn(100)) stu.Class = rand.Intn(100) stu.Borrow_books = make([]string,3) // 循环获取用户操作 for { fmt.Println(`请选择你接下来的操作: 1.借书 2.还书 3.查询书籍`) fmt.Scanln(&options) for strings.ToUpper(options) != "Q"{ fmt.Println("请输入书名") fmt.Scanln(&book_name) var msg string if options == "1"{ // 借书 msg = stu1.Borrow(book_name) }else if options == "2"{ // 还书 msg =stu1.Back(book_name) }else if options == "3"{ // 查询书籍 msg := stu1.Query(book_name) fmt.Println(msg) } fmt.Println(msg) options = "" msg = "" break } if strings.ToUpper(options) == "Q" { break } } }else if user== "2"{ }else if strings.ToUpper(user)=="Q"{ }else{ fmt.Println("输入有误请重新输入") goto Head } }
book.go
package model type Book struct{ Name string Author string Remain int } func Get_book_list() []*Book { var Book1 = Book{ Name:"book1", Author:"小明", Remain:5, } var Book2 = Book{ Name:"book2", Author:"小明", Remain:9, } var Book3 = Book{ Name:"book3", Author:"小明", Remain:22, } var Book4 = Book{ Name:"book4", Author:"小明", Remain:8, } var Book5 = Book{ Name:"book5", Author:"小明", Remain:19, } var Book_list = []*Book{&Book1,&Book2,&Book3,&Book4,&Book5} return Book_list }
admin.go
package model type Admin_functions interface{ Enter_book() Get_book() Add_stu() Del_stu() Update_stu() Get_stu() } type Admin struct{ Name string }
student.go
package model type Stu_functions interface{ Query(query string)*Book Borrow(name string)string Back(name string)string } type Student struct{ Name string Class int Borrow_books []string } func (self *Student)Query(query string)*Book{ Book_list := Get_book_list() for _,value := range Book_list{ if ((value.Name == query)||(value.Author == query))&&value.Remain != 0{ return value } } return nil } func (self *Student)Borrow(name string)string{ books := self.Query(name) if books != nil{ self.Borrow_books = append(self.Borrow_books, books.Name) books.Remain-- return "借书成功" } return "借书失败,该书不存在或者已经无剩余" } func (self *Student)Back(name string)string{ for index,book_name := range self.Borrow_books{ if book_name == name{ Book_list := Get_book_list() for _,value := range Book_list{ if value.Name == name{ value.Remain++ self.Borrow_books = append(self.Borrow_books[:index],self.Borrow_books[index+1:]...) return "还书成功" } } return "还书失败,书名不正确" } } return "还书失败,你没有借此书或者书名不正确" }
总结:
1.go里面的很多方法都没有现成的接口,如切片里删除元素需要自己
self.Borrow_books = append(self.Borrow_books[:index],self.Borrow_books[index+1:]...)这样子做。。稍微吐槽一下
2.很容易和Python混淆的一点,Python的列表都是用【】存值,Go是{},另外,容易忘记的一点是声明切片等类型需要这样子 var test = []int{1,2,3,4,5}
赋值那边需要再次写变量类型,而左边反而可以省略