> 技术文档 > Go语言实战案例-使用map实现学生成绩管理

Go语言实战案例-使用map实现学生成绩管理

以下是《Go语言100个实战案例》中的 数据结构与算法篇 - 案例22:使用 map 实现学生成绩管理系统 的完整内容,帮助初学者掌握 map 的使用方式和基础数据管理逻辑。


🎯 案例目标

使用 Go 的 map 数据结构,创建一个简单的学生成绩管理系统,实现添加学生成绩、查询成绩、删除成绩、以及打印所有成绩信息。


🧩 应用场景

  • • 模拟学生成绩录入与管理系统
  • • 学习 map 的基本操作(增删改查)
  • • 为将来开发更复杂的数据库系统打基础

🧠 涉及知识点

  • • map[string]float64 的定义与使用
  • • 控制结构(switchforif
  • • bufio 与 os.Stdin 获取用户输入

💻 示例代码:学生成绩管理系统

package mainimport (    \"bufio\"    \"fmt\"    \"os\"    \"strconv\"    \"strings\")func main() {    // 学生成绩表:key 是学生姓名,value 是成绩    scores := make(map[string]float64)    reader := bufio.NewReader(os.Stdin)    for {        fmt.Println(\"\\n=== 学生成绩管理系统 ===\")        fmt.Println(\"1. 添加成绩\")        fmt.Println(\"2. 查询成绩\")        fmt.Println(\"3. 删除学生\")        fmt.Println(\"4. 显示所有成绩\")        fmt.Println(\"5. 退出系统\")        fmt.Print(\"请选择操作(1-5):\")        input, _ := reader.ReadString(\'\\n\')        choice := strings.TrimSpace(input)        switch choice {        case \"1\":            fmt.Print(\"请输入学生姓名:\")            name, _ := reader.ReadString(\'\\n\')            name = strings.TrimSpace(name)            fmt.Print(\"请输入成绩(0-100):\")            scoreStr, _ := reader.ReadString(\'\\n\')            scoreStr = strings.TrimSpace(scoreStr)            score, err := strconv.ParseFloat(scoreStr, 64)            if err != nil || score  100 {                fmt.Println(\"成绩输入不合法\")                continue            }            scores[name] = score            fmt.Printf(\"已添加 %s 的成绩:%.2f\\n\", name, score)        case \"2\":            fmt.Print(\"请输入要查询的学生姓名:\")            name, _ := reader.ReadString(\'\\n\')            name = strings.TrimSpace(name)            score, exists := scores[name]            if exists {                fmt.Printf(\"%s 的成绩是:%.2f\\n\", name, score)            } else {                fmt.Println(\"查无此人\")            }        case \"3\":            fmt.Print(\"请输入要删除的学生姓名:\")            name, _ := reader.ReadString(\'\\n\')            name = strings.TrimSpace(name)            _, exists := scores[name]            if exists {                delete(scores, name)                fmt.Println(\"删除成功\")            } else {                fmt.Println(\"查无此人\")            }        case \"4\":            fmt.Println(\"当前所有学生成绩如下:\")            if len(scores) == 0 {                fmt.Println(\"暂无数据\")            }            for name, score := range scores {                fmt.Printf(\"%s:%.2f\\n\", name, score)            }        case \"5\":            fmt.Println(\"退出系统,再见!\")            return        default:            fmt.Println(\"无效的选择,请输入1-5\")        }    }}

🛠 技术说明

技术点 用法 map 存储学生姓名与成绩 bufio.NewReader 读取用户输入 strconv.ParseFloat 将字符串转为浮点数 delete(map, key) 删除 map 中的项

📌 示例运行(片段)

=== 学生成绩管理系统 ===1. 添加成绩2. 查询成绩3. 删除学生4. 显示所有成绩5. 退出系统请选择操作(1-5):1请输入学生姓名:Alice请输入成绩(0-100):87.5已添加 Alice 的成绩:87.50请选择操作(1-5):2请输入要查询的学生姓名:AliceAlice 的成绩是:87.50

🧪 拓展练习

  • • 添加“修改成绩”功能
  • • 支持成绩排序输出(从高到低)
  • • 使用 struct 扩展为包含“班级”、“学号”等信息
  • • 将成绩保存到文件,实现持久化存储

✅ 小结

本案例帮助你熟悉 Go 语言中 map 的实际应用,并通过模拟一个小型的成绩管理系统,锻炼了输入处理、数据操作和交互式控制逻辑。是掌握数据结构基础的必修内容。