基于Go编写一个人员管理系统案例

news2024/11/18 3:45:01

代码结构

在这里插入图片描述

人员结构体

package entity

// 结构体:人
type Person struct {
	Id   int
	Name string
	Sex  string
	Age  int
}

// 构造函数
func NewPerson(id int, name, sex string, age int) *Person {
	return &Person{
		Id:   id,
		Name: name,
		Sex:  sex,
		Age:  age,
	}
}

人员管理结构体

package service

import (
	"demo/entity"
	"fmt"
)

type PersonService struct {
	num        int              // 人员数量
	personList []*entity.Person // 人员切片
}

// 构造函数
func NewPersonService() *PersonService {
	return &PersonService{
		num:        0,
		personList: make([]*entity.Person, 0, 100),
	}
}

// 1)添加人员
func (personService *PersonService) AddPerson(person *entity.Person) {
	for _, v := range personService.personList {
		if person.Id == v.Id {
			fmt.Println("===========人员ID已存在,添加失败===========")
			return
		}
	}
	personService.personList = append(personService.personList, person)
	personService.num += 1
	fmt.Println("===========添加成功===========")
}

// 2)删除人员
func (personService *PersonService) DeletePerson(id int) {
	for i, v := range personService.personList {
		if id == v.Id {
			personService.personList = append(personService.personList[:i], personService.personList[i+1:]...)
			fmt.Println("===========删除成功===========")
			return
		}
	}
	fmt.Println("===========人员ID不存在,删除失败===========")
}

// 3)修改人员
func (personService *PersonService) UpdatePerson(person *entity.Person) {
	for i, v := range personService.personList {
		if person.Id == v.Id {
			personService.personList[i] = person
			fmt.Println("===========修改成功===========")
			return
		}
	}
	fmt.Println("===========人员ID不存在,修改失败===========")
}

// 4)查询人员
func (personService *PersonService) ListPerson() {
	fmt.Println("ID", "姓名", "性别", "年龄")
	for _, v := range personService.personList {
		fmt.Println(v.Id, v.Name, v.Sex, v.Age)
	}
}

主函数

package main

import (
	"demo/entity"
	"demo/service"
	"fmt"
	"os"
)

func main() {
	// 人员管理系统
	personService := service.NewPersonService()

	for {
		// 打印菜单
		showMenu()

		// 控制台指令
		var command int
		fmt.Scanf("%d\n", &command)

		switch command {
		case 1: // 添加人员
			fmt.Println("【添加人员】")
			fmt.Println("请输入人员的ID、名字、性别、年龄(以空格隔开):")
			p, err := newPersonByScan()
			if err == nil {
				personService.AddPerson(p)
			}
		case 2: // 删除人员
			fmt.Println("【删除人员】")
			fmt.Println("请输入人员的ID:")
			var id int
			// 读取控制台输入
			_, err := fmt.Scanln(&id)
			if err != nil {
				fmt.Println("输入错误,err:", err)
			}
			personService.DeletePerson(id)
		case 3: // 修改人员
			fmt.Println("【修改人员】")
			fmt.Println("请输入人员的ID、名字、性别、年龄(以空格隔开):")
			p, err := newPersonByScan()
			if err == nil {
				personService.UpdatePerson(p)
			}
		case 4: // 查询人员
			fmt.Println("【查询人员】")
			personService.ListPerson()
		case 5: // 退出系统
			fmt.Println("【退出系统】")
			fmt.Println("Bye!")
			os.Exit(0)
		default:
			fmt.Println("指令有误,请重新输入!")
		}
	}
}

// 获取控制台输入,创建人员对象
func newPersonByScan() (*entity.Person, error) {
	var (
		id   int
		name string
		sex  string
		age  int
	)
	// 读取控制台输入
	_, err := fmt.Scanln(&id, &name, &sex, &age)
	// 出错
	if err != nil {
		fmt.Println("输入错误,err:", err)
	}
	return entity.NewPerson(id, name, sex, age), err
}

func showMenu() {
	fmt.Println("********************人员管理系统********************")
	fmt.Println("1、添加人员")
	fmt.Println("2、删除人员")
	fmt.Println("3、修改人员")
	fmt.Println("4、查询人员")
	fmt.Println("5、退出系统")
	fmt.Println("****************************************************")
}

测试

添加人员

在这里插入图片描述

删除人员

在这里插入图片描述

修改人员

在这里插入图片描述

查询人员

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1655863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

揭秘豆瓣网站爬虫:利用lua-resty-request库获取图片链接

介绍 在网络数据采集领域,爬虫技术在图片获取方面具有广泛的应用。而豆瓣网站作为一个内容丰富的综合性平台,其图片资源也是广受关注的热点之一。本文将聚焦于如何利用Lua语言中的lua-resty-request库,高效地从豆瓣网站获取图片链接。我们将…

基于Django图像识别系统毕业设计(付源码)

前言:Django是一个由Python编写的具有完整架站能力的开源Web框架,Django本身基于MVC模型,即Model(模型)View(视图) Controller(控制器)设计模式,因此天然具有…

智慧旅游推动旅游服务智慧化转型:借助智能科技的力量,实现旅游资源的精准匹配和高效利用,为游客提供更加便捷、舒适的旅游环境

目录 一、引言 二、智慧旅游的定义与特点 (一)智慧旅游的定义 (二)智慧旅游的特点 三、智能科技在旅游服务中的应用 (一)大数据分析助力旅游决策 (二)人工智能实现个性化推荐…

Nginx配置/.well-known/pki-validation/

当你需要在Nginx上配置.well-known/pki-validation/时,这通常是为了支持SSL证书的自动续订或其他验证目的。以下是配置步骤: 创建目录结构: 在你的网站根目录下创建一个名为.well-known的目录(SSL证书申请之如何创建/.well-known/…

第二证券|炒股是波段好还是长期好?

炒股长时间比波段好一些,其原因如下: 1、长时间持有费用低 投资者在生意过程中,需求交纳必定的佣金费用、过户费用、印花税,而长时间持有股票,减少生意次数,能够节省一笔生意成本。 2、短期持有容易卖飞…

喜讯!莱佛士学生成功入围2024C-IDEA设计奖提名

近日,由澳大利亚平面设计协会、韩国视觉信息设计协会、波兰波兹南设计节、日本字体设计协会(JTA)、俄罗斯设计师协会、中国台湾高雄广告创意协会多家不同的国际设计机构联合发起组织的国际性设计赛事—— C-IDEA设计奖,公布了2024…

最近关注度比较多的小模型

微软推出的Phi系列中的最新成员——Phi-2。这个小型语言模型虽然参数量相对较小(2.7亿参数),但是它在多项基准测试中展示了杰出的表现,特别是在常识推理和语言理解方面。Phi-2强调了在保持模型相对轻量级的同时,依然能…

以花入曲、引药入曲……酒曲里的门道有多深?

执笔 | 敏 敏 编辑 | 古利特 无论是语文课本中的“唯有牡丹真国色,花开时节动京城”,还是朗朗上口的“等闲识得东风面,万紫千红总是春”,抑或是“若待上林花似锦,出门俱是看花人。”写尽了沉睡了一冬的春之热闹&…

收银系统源码--什么是千呼智慧新零售系统?

千呼智慧新零售系统是一套针对零售行业线上线下一体化收银系统。给门店提供线下称重收银、o2o线上商城、erp进销存、精细化会员管理、丰富营销插件等一体化解决方案。多端数据打通,实现线上线下一体化,提升门店工作效率,实现数字化升级&#…

94、动态规划-最长公共子序列

递归的基本思路: 比较两个字符串的最后一个字符。如果相同,则这个字符一定属于最长公共子序列,然后在剩余的字符串上递归求解。如果最后一个字符不相同,则分两种情况递归求解: 去掉 text1 的最后一个字符,保…

无尘布和无尘擦拭布用途

无尘布和无尘擦拭布都是专门设计用于清洁和擦拭对尘埃、细菌等敏感的表面的布料。它们的主要区别在于材质和特性,但它们的用途有很多重叠之处,特别是在需要高度清洁和无尘环境下的行业和应用中。 半导体生产线芯片、微处理器等: 无尘布和无尘擦拭布都用于…

VisualGDB:Linux动态库项目创建、编译及库的使用

此篇接上篇 《VisualGDB:为Linux项目添加系统依赖库》,在本篇中我们重点分享一下如何基于VisualGDB 在VS中创建Linux动态库项目,如何编译及使用创建的动态库。 一、VisualGDB创建Linux动态库项目 如下,我们创建一个Linux下的动态…

VscodeC/C++环境配置

引言 vscode是一款非常好用的编辑器,集成了大量的插件,具有很高的自由度,因此广受大家的喜爱。但是他本身是不带编译器的,因此如果要使用vscode来编译C/C程序的话,我们需要额外安装编译器并且为vscode配上环境。 编译…

02_SpringBoot程序快速启动

目录 打包命令启动启动成功测试结果 打包 点击package打包命令,会生成target目录,目录下会有生成的jar包 命令启动 打开cmd命令窗口,进入子项目的target目录下,输入命令后,回车… java -jar .\note-boot-core-1.0-SNAPSHOT.j…

跨平台美学!使用DevExpress Reports Office File API时如何管理字体?

DevExpress Office File API是一个专为C#, VB.NET 和 ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装Microsoft Office,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS, XLSx, DOC, DOCx, RTF, CS…

C++ STL 中的二分查找函数(binary_search、lower_bound 和 upper_bound)

二分搜索是竞争性编程或任何算法竞赛的重要组成部分,了解速记函数可以减少编写代码的时间。二分查找是最有效的查找算法。 二分搜索是一种在排序数组中使用的搜索算法,通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息,将时…

AMEYA360代理:稳先微车规WSD7025AD双通道高边智能开关介绍

高边开关是一种保护电子电路在过电流异常时免受电击穿破坏的电子元器件,与传统常规的保险丝不同,它通过负载电流检测防止系统组件因电流过大而造成短路损坏,在不损坏或恶化的条件下确保负载电流始终可控,提高汽车电气系统的可靠性…

统信UOS 1070如何制作GHOST镜像并安装到其他设备

原文链接:统信UOS 1070制作GHOST镜像并安装到其他设备 Hello,大家好啊!对于想要快速部署多台计算机或在硬件更换后恢复系统的用户来说,制作一个GHOST镜像是一种非常高效的方法。今天,我将介绍如何在统信UOS 1070桌面操…

毕业论文怎么写? 推荐4个AI工具

写作这件事一直让我们从小学时期就开始头痛,初高中时期800字的作文让我们焦头烂额,一篇作文里用尽了口水话,拼拼凑凑才勉强完成。 大学时期以为可以轻松顺利毕业,结果毕业前的最后一道坎拦住我们的是毕业论文,这玩意不…

Golang | Leetcode Golang题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; func minDistance(word1 string, word2 string) int {m, n : len(word1), len(word2)dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for i : 0; i < m1; i {dp[i][0] i // word1[i] 变成 word2[0], 删掉 word1[i], …