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

Posted jasonminghao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
",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 添加成功
",id,name)
    } else {
        fmt.Printf("学生信息 ID:%v、姓名:%v 已存在,请勿重复添加
",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 不存在,删除失败
",id)
    }else{
        // 学生id存在,删除成功
        delete(s.store_student,id)
        fmt.Printf("学生信息 ID:%v 存在,删除成功
",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选项
",choice)
        // 3.执行对应的方法
        switch choice {
        case 1:
            stuManger.showAllStudent()
        case 2:
            stuManger.addStudent()
        case 3:
            stuManger.deleteStudent()
        case 4:
            os.Exit(1)
        default:
            fmt.Println("输入的选项不存在")
        }
    }
}

以上是关于Golang项目之结构体版学生管理系统的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 设计一个学生管理系统(简易结构体版)

MATLAB 设计一个学生管理系统(简易结构体版)

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

ACM-ICPC国际大学生程序设计竞赛北京赛区(2017)网络赛 hihocoder #1586 : Minimum-区间查询最值求区间两数最小乘积+单点更新-线段树(结构体版)

Golang如何体现面向对象三大特性之继承?

数据结构理论与实践之线性表