Golang项目之结构体版学生管理系统

前言

学习第4天,基于结构体的方式对函数版本重构编写小项目:学生管理系统

代码

package main

import (
    "fmt"
    "os"
)

// 菜单系统(将菜单系统封装到函数中)
func showMenu(){
    fmt.Println("欢迎光临学生管理系统")
    fmt.Println(`
        1.查看所有学生
        2.新增学生
        3.删除学生
        4.退出
    `)
}

// 造一个存储学生数据的类型
type student struct{
    id int64
    name string
}

// newStudent是一个student类型的构造函数
func newStudent(id int64,name string)*student{
    return &student{
        id:id,
        name:name,
    }
}

// 造一个学生管理者(将学生数据存储到该类型中)
type sutdentManager struct{
    store_student map[int64]*student
}

func (s sutdentManager)showAllStudent(){
    // 显示所有学生信息(从学生管理者:sutdentManager存储的变量store_student获取到学生数据数据)
    for _,stu := range s.store_student {
        fmt.Printf("学号:%d 姓名:%s\n",stu.id,stu.name)
    }
}

func (s sutdentManager)addStudent(){
    // 添加学生
    // 1.请输入学生的id和姓名
    var (
        id int64
        name string
    )
    fmt.Print("请输入学生id:")
    fmt.Scanln(&id)

    fmt.Print("请输入学生姓名:")
    fmt.Scanln(&name)

    // 2.判断学生是否存在
    if _,ok := s.store_student[id]; ! ok {
        newStu := newStudent(id,name)
        s.store_student[id] = newStu
        fmt.Printf("学生信息 ID:%v、姓名:%v 添加成功\n",id,name)
    } else {
        fmt.Printf("学生信息 ID:%v、姓名:%v 已存在,请勿重复添加\n",id,name)
    }
    // 3.将学生信息添加到信息存储系统(store_student)
}

func (s sutdentManager)deleteStudent(){
    // 删除学生
    // 1.判断学生是否存在
    var id int64
    fmt.Print("请输入学生id:")
    fmt.Scanln(&id)

    // 2.根据学生id删除对应的学生信息
    if _,ok := s.store_student[id]; ! ok {
        // 学生id不存在
        fmt.Printf("学生信息 ID:%v 不存在,删除失败\n",id)
    }else{
        // 学生id存在,删除成功
        delete(s.store_student,id)
        fmt.Printf("学生信息 ID:%v 存在,删除成功\n",id)
    }
}

func main(){
    // 初始化学生数据存储变量(开辟内存空间)
    stuManger := sutdentManager{
        store_student: make(map[int64]*student,200),
    }
    for {
        // 1. 打印选项菜单

        showMenu() 

        // 2.等待用户输入选项
        var choice int
        fmt.Print("选项:")
        fmt.Scanln(&choice)
        fmt.Printf("你选择了:%d选项\n",choice)
        // 3.执行对应的方法
        switch choice {
        case 1:
            stuManger.showAllStudent()
        case 2:
            stuManger.addStudent()
        case 3:
            stuManger.deleteStudent()
        case 4:
            os.Exit(1)
        default:
            fmt.Println("输入的选项不存在")
        }
    }
}

原文地址:https://www.cnblogs.com/jasonminghao/p/12309652.html

时间: 2024-09-28 18:49:12

Golang项目之结构体版学生管理系统的相关文章

Golang项目之函数版学生管理系统

前言 学习第3天,基于函数的方式编写小项目:学生管理系统 代码 package main import ( "fmt" "os" ) /* 函数版学生管理系统 写一个系统能够查看所有的学生/新增学生/删除学生 */ var ( allStudent map[int64]*student // 变量声明 ) type student struct{ id int64 name string } // newStudent是一个student类型的构造函数 func n

s1考试 图书管理系统 结构体版

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

用结构体书写图书管理系统(C#程序)

图书管理系统的需求: 用结构体来实现图书管理系统,需要在cmd中运行 用MonoDevelop或者VS进行编码 用结构体写图书管理系统,此代码可以在Monodevelop上或者在VS上运行 需要实现的第一个功能是能够进行图书的添加将图书的信息保存到一个数组中,数组的类型为结构体所命名的类型 第二个功能能够进行图书的删除 第三个功能能够进行图书的修改 第四个功能能够进行图书的查询 第五个功能能够进行图书系统的退出 代码如下: using System; using System.Threading

Golang项目目录结构组织

其实golang的工程管理还是挺简单的,完全使用目录结构还有package名来推导工程结构和构建顺序. 当然,首先要说的是环境变量$GOPATH,项目构建全靠它.这么说吧,想要构建一个项目,就要将这个项目添加到$GOPATH中,多个项目用";"分隔. Golang项目目录下一般有三个子目录: src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 我们重点要关注的其实就是src文件夹中的目录结构. 举个例子比啥都强,目录结构如下: <proj> |--<

golang 使用匿名结构体的问题

golang允许使用匿名结构体,形如 type Test struct { param1 struct { param2 string } } 一般在使用的时候可以直接这样初始化 a := Test{ param1: struct{ param2 string }{param2: "test"}, } 或者 b := new(Test) b.param1.param2 = "test" 但今天遇到一种情况 匿名结构体的成员上有tag声明,形如 type Test s

golang 服务或结构体可选参数的赋值

// 服务结构体 type Server struct { opts options //可选参数变量 addr string } //可选参数列表 type options struct { A int B string C bool D int } // 为可选参数赋值的函数 type ServerOption func(*options) func Afunc(a int) ServerOption { return func(o *options) { o.A = a } } func

Golang基础之结构体

Go语言中没有"类"的概念,也不支持"类"的继承等面向对象的概念.Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性. 类型别名和自定义类型 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义.例如: // 将MyInt定义为int类型 type MyInt i

Golang中函数结构体,将函数转换为接口

函数结构体,将函数转换为接口 定义一个函数类型 F,并且实现接口 A 的方法,然后在这个方法中调用自己.这是 Go 语言中将其他函数转换为接口 A 的常用技巧(参数返回值定义与 F 一致) 实现一个动态生成的"回调函数",比如缓存中,当key不存在,则需要从数据库或文件等远程数据源中取数据.所以回调函数不能写死. 采用用户自定义回调函数的方法,因此,在缓存的数据结构中,有一个成员方法变量为回调函数. 下面这段代码就是一个示例. type Getter interface { Get(k

第十七周项目7-电子词典结构体版

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:Project4.cpp * 作 者:冷基栋 * 完成日期:2014年12月23日 * 版 本 号:v1.0 * 问题描述:做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个, 英文与释义间用'\t'隔开.编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文, 由用户输入英文词,显示中文意思.运