以下是《Go语言100个实战案例》中的 数据结构与算法篇 - 案例22:使用 map 实现学生成绩管理系统 的完整内容,帮助初学者掌握 map
的使用方式和基础数据管理逻辑。
🎯 案例目标
使用 Go 的 map
数据结构,创建一个简单的学生成绩管理系统,实现添加学生成绩、查询成绩、删除成绩、以及打印所有成绩信息。
🧩 应用场景
- • 模拟学生成绩录入与管理系统
- • 学习
map
的基本操作(增删改查) - • 为将来开发更复杂的数据库系统打基础
🧠 涉及知识点
- •
map[string]float64
的定义与使用 - • 控制结构(
switch
、for
、if
) - •
bufio
与os.Stdin
获取用户输入
💻 示例代码:学生成绩管理系统
go
package main
import (
"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 < 0 || 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 中的项 |
📌 示例运行(片段)
markdown
=== 学生成绩管理系统 ===
1. 添加成绩
2. 查询成绩
3. 删除学生
4. 显示所有成绩
5. 退出系统
请选择操作(1-5):1
请输入学生姓名:Alice
请输入成绩(0-100):87.5
已添加 Alice 的成绩:87.50
请选择操作(1-5):2
请输入要查询的学生姓名:Alice
Alice 的成绩是:87.50
🧪 拓展练习
- • 添加"修改成绩"功能
- • 支持成绩排序输出(从高到低)
- • 使用
struct
扩展为包含"班级"、"学号"等信息 - • 将成绩保存到文件,实现持久化存储
✅ 小结
本案例帮助你熟悉 Go 语言中 map
的实际应用,并通过模拟一个小型的成绩管理系统,锻炼了输入处理、数据操作和交互式控制逻辑。是掌握数据结构基础的必修内容。