容器综合作业

符合类型容器综合案例

/*
封装一个对整形切片 进行排序的函数
随机招收一些学生进班
随机生成学生的成绩
对学生成绩排名并输出
封装一个对全班学生成绩进行排名的函数
将上述封装好的俩个函数丢入mylib包中
在当前工程中调用mylib包内的函数
在其他工程中调用mylib包内的函数
 */

案例

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "math/rand"
 6     "time"
 7 )
 8 
 9 //全局变量
10 
11 var names []string
12 
13 //--包初始化函数,执行在main函数之前.
14 func init() {
15     fmt.Println("***包初始化***")
16     names = make([]string, 0)
17 }
18 
19 func main() {
20     //招生
21     AddStudent("小王", "小红", "小张", "小许", "小明", "小曼")
22     fmt.Println(names)
23 
24     //把学生随机分配成绩 也就是考试
25     scoreMap := TakeExam(names...)
26     fmt.Println(scoreMap)
27 
28     //显示排名
29     ShowRanking(scoreMap)
30 
31 }
32 
33 //对成绩做降序排名  进行排序
34 func ShowRanking(scoreMap map[string]int) {
35 
36     //形成名单,锁死姓名的循序,才能开始排序.
37     names := make([]string, 0)
38     for name, _ := range scoreMap {
39         names = append(names, name)
40     }
41 
42     /*对names 按分数的降序进行排列*/
43     for i := 0; i < len(scoreMap)-1; i++ {
44         //锁定第i位,将i后面的每个人(i),的分数与第i个人比较.
45         // 将剩余的同志中,最高分数的人,调整到当前位置.
46         for j := i + 1; j < len(names); j++ {
47             //如果第四个人的分数比第三个人高,就互换位置.
48             if scoreMap[names[j]] > scoreMap[names[i]] {
49                 names[i], names[j] = names[j], names[i]
50             }
51 
52         }
53 
54     }
55     /*按names的顺序输出姓名和排序*/
56     for i, name := range names {
57         fmt.Printf("第%d名:%-6s 	 %3d
", i+1, name, scoreMap[name])
58     }
59 }
60 
61 
62 //给examres考试,为每个人生成随机成绩.
63 func TakeExam(examers ...string) (scoreMap map[string]int) {
64 
65     //定义出scoreMap里面是空的
66     scoreMap = make(map[string]int)
67 
68     for _, name := range examers {
69         score := GetRandomInt(100)
70         scoreMap[name] = score
71 
72     }
73     return
74 }
75 
76 //生成0-n之间的随机分数
77 func GetRandomInt(n int) int {
78     time.Sleep(time.Nanosecond) //睡1毫秒
79     r := rand.New(rand.NewSource(time.Now().UnixNano()))
80     return r.Intn(n + 1)
81 }
82 
83 //添加学生的函数
84 func AddStudent(newcomers ...string) {
85     names = append(names, newcomers...)
86 
87 }
88 
89 /*
90 ***包初始化***
91 [小王 小红 小张 小许 小明 小曼]
92 map[小张:75 小许:93 小明:25 小曼:39 小王:51 小红:21]
93 第1名:小许               93
94 第2名:小张               75
95 第3名:小王               51
96 第4名:小曼               39
97 第5名:小明               25
98 第6名:小红               21
99  */
原文地址:https://www.cnblogs.com/chaoyangxu/p/11891362.html