以下是《Go语言100个实战案例》中的 数据结构与算法篇 - 案例22:使用 map 实现学生成绩管理系统 的完整内容,帮助初学者掌握 map 的使用方式和基础数据管理逻辑。
🎯 案例目标
使用 Go 的 map 数据结构,创建一个简单的学生成绩管理系统,实现添加学生成绩、查询成绩、删除成绩、以及打印所有成绩信息。
🧩 应用场景
- • 模拟学生成绩录入与管理系统
- • 学习
map的基本操作(增删改查) - • 为将来开发更复杂的数据库系统打基础
🧠 涉及知识点
- •
map[string]float64的定义与使用 - • 控制结构(
switch、for、if) - •
bufio与os.Stdin获取用户输入
💻 示例代码:学生成绩管理系统
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 中的项 |
📌 示例运行(片段)
=== 学生成绩管理系统 === 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 的实际应用,并通过模拟一个小型的成绩管理系统,锻炼了输入处理、数据操作和交互式控制逻辑。是掌握数据结构基础的必修内容。