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}
赋值那边需要再次写变量类型,而左边反而可以省略

浙公网安备 33010602011771号