ByteEdu教育平臺(tái)會(huì)員抽獎(jiǎng)小工具v1.0.1

| * * *
github代碼: https://github.com/Golangltd/codeclass/tree/master/ByteEdu.Com |

image
image
image
image

Rand.go:

package main

import (
        "math/rand"
        "time"
)

/*
   作者:彬哥
   來(lái)自:LollipopGo游戲服務(wù)器架構(gòu)
*/

func init() {
        rand.Seed(time.Now().UnixNano())
}

func RandGroup_LollipopGo(p ...uint32) int {
        if p == nil {
                panic("args not found")
        }

        r := make([]uint32, len(p))
        for i := 0; i < len(p); i++ {
                if i == 0 {
                        r[0] = p[0]
                } else {
                        r[i] = r[i-1] + p[i]
                }
        }

        rl := r[len(r)-1]
        if rl == 0 {
                return 0
        }

        rn := uint32(rand.Int63n(int64(rl)))
        for i := 0; i < len(r); i++ {
                if rn < r[i] {
                        return i
                }
        }

        panic("bug")
}

func RandInterval_LollipopGo(b1, b2 int32) int32 {
        if b1 == b2 {
                return b1
        }

        min, max := int64(b1), int64(b2)
        if min > max {
                min, max = max, min
        }
        return int32(rand.Int63n(max-min+1) + min)
}

func RandIntervalN_LollipopGo(b1, b2 int32, n uint32) []int32 {
        if b1 == b2 {
                return []int32{b1}
        }

        min, max := int64(b1), int64(b2)
        if min > max {
                min, max = max, min
        }
        l := max - min + 1
        if int64(n) > l {
                n = uint32(l)
        }

        r := make([]int32, n)
        m := make(map[int32]int32)
        for i := uint32(0); i < n; i++ {
                v := int32(rand.Int63n(l) + min)

                if mv, ok := m[v]; ok {
                        r[i] = mv
                } else {
                        r[i] = v
                }

                lv := int32(l - 1 + min)
                if v != lv {
                        if mv, ok := m[lv]; ok {
                                m[v] = mv
                        } else {
                                m[v] = lv
                        }
                }

                l--
        }

        return r
}

WriteFile.go:

package main

import (
        "fmt"
        "os"
)

/*
   作者:彬哥
   來(lái)自:LollipopGo游戲服務(wù)器架構(gòu)
*/

func WriteFileData(data string) {

        f, err := os.OpenFile("ByteEdu.txt", os.O_APPEND|os.O_WRONLY, 0644)
        if err != nil {
                fmt.Println(err)
                f.Close()
                return
        }
        fmt.Fprintln(f, data)

        err = f.Close()
        if err != nil {
                fmt.Println(err)
                return
        }
}

tmain.go:

package main

import (
        "bufio"
        "fmt"
        "os"
        "strconv"
        "strings"
)

/*
  Go語(yǔ)言控制臺(tái)抽獎(jiǎng)
  1. 抽獎(jiǎng)人,讀取配置文件(CSV)
  2. 隨機(jī)方法,隨機(jī)數(shù)
  3. 中獎(jiǎng)人信息寫入文件
*/

func init() {

}

func main() {
        reader := bufio.NewReader(os.Stdin)
        fmt.Println("--= www.ByteEdu.Com =--")
        fmt.Println("--------活動(dòng)抽獎(jiǎng)--------")
        fmt.Println("輸入規(guī)則:")
        fmt.Println("A|1:  A表示一等獎(jiǎng),1表示數(shù)量")
        fmt.Println("B|2:  B表示二等獎(jiǎng),2表示數(shù)量")
        fmt.Println("C|3:  C表示三等獎(jiǎng),3表示數(shù)量")
        fmt.Println("注:  數(shù)量可以變化,例如A|12等")

        tmpmap := make(map[int]int)
        for {
                fmt.Print("-> ")
                text, _ := reader.ReadString('\n')
                text = strings.Replace(text, "\r\n", "", -1)
                // 截取字符
                data := strings.Split(text, "|")
                if len(data) != 2 {
                        fmt.Print("輸入錯(cuò)誤!")
                        continue
                }
                // 獲取隨機(jī)數(shù)
                count, errrr := strconv.Atoi(data[1])
                if errrr != nil {
                        fmt.Println(errrr)
                        return
                }
                if count >= len(G_ByteEdu) {
                        fmt.Println("全體中獎(jiǎng)!,本輪抽獎(jiǎng)結(jié)束!")
                        return
                }
                var icount []int
                for iBINGE := 0; iBINGE < int(count); iBINGE++ {
                        ii := RandInterval_LollipopGo(0, int32(len(G_ByteEdu)))
                        icount = append(icount, int(ii))
                }
                if len(icount) == 0 {
                        fmt.Println("抽獎(jiǎng)名單為空,請(qǐng)檢查抽獎(jiǎng)名單!,抽獎(jiǎng)結(jié)束!")
                        return
                }
                switch data[0] {
                case "A":
                        {
                                fmt.Println("抽取一等獎(jiǎng)!")
                                for i, v := range icount {
                                        fmt.Println(i, v)
                                        _, ok := tmpmap[v]
                                        if !ok {
                                                msg := "恭喜:" + G_ByteEdu[v].Name + ",獲得一等獎(jiǎng)!"
                                                fmt.Println(msg)
                                                tmpmap[v] = v
                                                WriteFileData(msg)
                                        } else {
                                                fmt.Println("很遺憾,無(wú)人中獎(jiǎng)!")
                                        }
                                }
                        }
                case "B":
                        {
                                fmt.Println("抽取二等獎(jiǎng)!")
                                for i, v := range icount {
                                        fmt.Println(i, v)
                                        _, ok := tmpmap[v]
                                        if !ok {
                                                fmt.Println("恭喜:" + G_ByteEdu[v].Name + ",獲得二等獎(jiǎng)!")
                                                tmpmap[v] = v
                                        } else {
                                                fmt.Println("很遺憾,無(wú)人中獎(jiǎng)!")
                                        }
                                }
                        }
                case "C":
                        {
                                fmt.Println("抽取三等獎(jiǎng)!")
                                for i, v := range icount {
                                        fmt.Println(i, v)
                                        _, ok := tmpmap[v]
                                        if !ok {
                                                fmt.Println("恭喜:" + G_ByteEdu[v].Name + ",獲得三等獎(jiǎng)!")
                                                tmpmap[v] = v
                                        } else {
                                                fmt.Println("很遺憾,無(wú)人中獎(jiǎng)!")
                                        }
                                }
                        }
                default:
                        fmt.Println("沒有中獎(jiǎng)!")
                }
        }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容