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

2023-10-13 14:40

本文主要是介绍go语言小型书本管理系统框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

举例来说:

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

package bookdataimport ("fmt"
)type Book struct {//定义一个书本结构体对象Id       intName     stringProvider 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 booksrvimport ("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 intif 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 mainimport ("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)
}

这篇关于go语言小型书本管理系统框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/203932

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return