go语言小型书本管理系统框架

对于一般的管理系统,分为数据层,控制层,应用层三个模块。数据层就是底层数据结构定义和封装,控制层就是对底层数据封装后提供的一些控制操作,应用层就是上层用户的处理。

举例来说:

下面是一个书本对象结构体,就是最底层的数据结构,封装了新建和获取两个接口。

package bookdata

import (
	"fmt"
)

type Book struct {//定义一个书本结构体对象
	Id       int
	Name     string
	Provider string
}

func NewBook(i int, n string, p string) Book {//封装一个新建对象的接口
	return Book{i, n, p}
}
func (b *Book) GetInfo() string {//获取对象的接口
	rs := fmt.Sprintf("%v\t%v\t%v\t\n", b.Id, b.Name, b.Provider)
	return rs
}

下面是一个控制层的服务接口,提供了操作书本对象的一系列常用操作,添加,删除,打印等。

package booksrv

import (
	"fmt"

	"../bookdata"
)

type BookSrv struct {//封装到一个管理结构体,用于对书本对象进行管理。
	books   []bookdata.Book//定义一个书本对象的切片
	booknum int//切片中的数目
}

func NewBookSrv() *BookSrv {//返回一个管理对象。
	bks := &BookSrv{}
	return bks
}
func (bks *BookSrv) Print() ([]bookdata.Book, int) {//返回切片和对应的数目
	return bks.books, bks.booknum
}
func (bks *BookSrv) FindId(id int) int {//根据书本ID查找在切片里的索引
	for i, v := range bks.books {
		if v.Id == id {
			return i
		}
	}
	return -1
}
func (bks *BookSrv) Add(book bookdata.Book) (bool, error) {
	if bks.FindId(book.Id) != -1 {
		return false, fmt.Errorf("此书本ID已存在,无法添加!")
	}
	bks.booknum++
	bks.books = append(bks.books, book)//往切片里添加一个书本对象
	return true, nil
}
func (bks *BookSrv) Del(id int) (bool, error) {
	var index int
	if index = bks.FindId(id); index == -1 {
		return false, fmt.Errorf("此书本ID不存在,无法删除!")
	}
	bks.booknum--
	bks.books = append(bks.books[:index], bks.books[index+1:]...)//从切片里删除指定索引
	return true, nil
}

最后就是实际的用户层模块

package main

import (
	"fmt"

	"../bookdata"
	"../booksrv"
)

func main() {
	bks := booksrv.NewBookSrv()
	book := bookdata.NewBook(1, "学习go语言", "北京精诚出版社")
	if b, err := bks.Add(book); !b {
		fmt.Println(err)
	}
	book = bookdata.NewBook(2, "学习c++语言", "中国人民出版社")
	if b, err := bks.Add(book); !b {
		fmt.Println(err)
	}
	book = bookdata.NewBook(3, "学习c语言", "北京人民出版社")
	if b, err := bks.Add(book); !b {
		fmt.Println(err)
	}
	books, bookn := bks.Print()
	for _, v := range books {
		fmt.Println(v.GetInfo())
	}
	fmt.Println("书本数目:", bookn)

	if b, err := bks.Del(4); !b {
		fmt.Println(err)
	}
	books, bookn = bks.Print()
	for _, v := range books {
		fmt.Println(v.GetInfo())
	}
	fmt.Println("书本数目:", bookn)
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值