Go 语言入门三部曲(二):能用 Go 语言写管理系统

简介:

@[toc]

草草写了个 ATM,颇有收获。数据层我就不写了,毕竟最后一个暑假了,我也想去歇歇。

目录结构

没什么需求分析,管理系统写来写去也就那些功能还能玩出花儿来么哈哈。

在这里插入图片描述

main.go

每个项目里总要有个 main 入口嘛。

package main

import (
    run "go/run"
    ui "go/ui"
)

func main() {
    run.Run()
    ui.Hello_ui()
}

ui.go

所有界面都在里面了。麻雀虽小,还是跟业务层解耦了。

package ui

import (
    "fmt"
    run "go/run"
    "os"
)

var user_id int

func Hello_ui() {
    var flag int

    fmt.Println("\t\t\t欢迎来到 ATM 系统  \t\t\t")
    fmt.Println("\t\t\t\t\t1、登录 2、注册")

    fmt.Scan(&flag)

    choose(flag)
}

func choose(flag int) {
    if flag == 1 {
        login()
    } else if flag == 2 {
        reg()
    } else {
        fmt.Println("请重新选择")
        fmt.Scan(&flag)
        choose(flag)
    }
}

func get_msg(s []int) int {

    handle := run.Get_handle(s[0])
    role := handle(s)
    return role
}

func login() {
    var pwd int
    fmt.Println("请输入账号:")
    fmt.Scan(&user_id)
    fmt.Println("请输入密码:")
    fmt.Scan(&pwd)

    var s = []int{1, user_id, pwd}
    role := get_msg(s)
    if 2 == role {
        fmt.Println("登录失败,请重新登录···")
        login()
    } else {
        for {
            menu(role)
        }
    }
}

func reg() {
    var pwd int
    fmt.Println("请输入密码:")
    fmt.Scan(&pwd)

    var s = []int{2, 123456}
    id := get_msg(s)

    fmt.Println("生成账号为:", id)
    fmt.Println("现在切换回登录界面")
    login()
}

func menu(role int) {
    var choose int
    fmt.Println("\t\t\t 菜单选择 \t\t\t")

    if 0 == role {
        //普通用户菜单
        fmt.Println("\t\t\t 1、新增管理员 \t\t\t")
        fmt.Println("\t\t\t 2、查看用户量 \t\t\t")
        fmt.Println("\t\t\t 3、查询流水账 \t\t\t")
        fmt.Println("\t\t\t 4、用户  销户 \t\t\t")
        fmt.Println("\t\t\t 其他、退出系统 \t\t\t")
        fmt.Scan(&choose)
        switch choose {
        case 1:
            add_master()
        case 2:
            search_user_num()
        case 3:
            search_log()
        case 4:
            del_user()
        default:
            os.Exit(1)
        }
    } else {
        //管理员菜单
        fmt.Println("\t\t\t 1、查询余额 \t\t\t")
        fmt.Println("\t\t\t 2、存款 \t\t\t")
        fmt.Println("\t\t\t 3、取款 \t\t\t")
        fmt.Println("\t\t\t 4、转账 \t\t\t")
        fmt.Println("\t\t\t 5、查询交易记录 \t\t\t")
        fmt.Println("\t\t\t 其他、退出系统 \t\t\t")
        fmt.Scan(&choose)
        switch choose {
        case 1:
            search_money()
        case 2:
            in_money()
        case 3:
            out_money()
        case 4:
            move_money()
        case 5:
            search_user_log()
        default:
            os.Exit(1)
        }
    }
}

func add_master() {
    fmt.Println("跟注册没啥两样,不实现了")
}

func search_user_num() {
    user_num := get_msg([]int{3})
    fmt.Println("用户数量为:%d", user_num)
}

//这两个查账的业务比较特殊,一会儿单独做
func search_log() {
    handle := run.Get_handle2(1)
    s := handle(user_id)

    //开始批量输出
    fmt.Println("管理员查询流水账,", s[0])
}

func del_user() {
    var id int
    fmt.Println("请输入将要注销的用户 id:")
    fmt.Scan(&id)

    id = get_msg([]int{4, id})
    if 0 == id {
        fmt.Println("销户失败")
    } else {
        fmt.Println("销户  成功", id)
    }
}

func search_money() {
    money := get_msg([]int{5, user_id})

    fmt.Println("用户账户余额为:", money)
}

func in_money() {
    var in int
    fmt.Println("请输入存款金额:")
    fmt.Scan(&in)

    money := get_msg([]int{6, user_id, in})

    if -1 == money {
        fmt.Println("存款失败,请联系银行管理员")
    } else {
        fmt.Println("用户账户余额为:", money)
    }
}

func out_money() {
    var out int
    fmt.Println("请输入取款金额:")
    fmt.Scan(&out)

    money := get_msg([]int{6, user_id, out})

    if -1 == money {
        fmt.Println("取款失败,请联系银行管理员")
    } else {
        fmt.Println("用户账户余额为:", money)
    }
}

func move_money() {
    var move, to_id int
    fmt.Println("请输入对方账号:")
    fmt.Scan(&to_id)
    fmt.Println("请输入转账金额:")
    fmt.Scan(&move)

    money := get_msg([]int{6, user_id, to_id, move})

    if -1 == money {
        fmt.Println("转账失败,请联系银行管理员")
    } else {
        fmt.Println("用户账户余额为:", money)
    }
}

// 这个也比较特殊,稍后处理
func search_user_log() {
    handle := run.Get_handle2(2)
    s := handle(user_id)

    //开始批量输出
    fmt.Println("用户查询交易记录,", s[0])
}

worker.go

业务层面,“命令 + 门面” 这套手法是越来越熟了哈。

这里面本该连接数据层的地方我全用注释了。

package worker

type fn func([]int) int
type fn2 func(int) []int

var handle_Map = make(map[int]fn)
var handle_Map2 = make(map[int]fn2)

func login(s []int) int {

    //校验账号密码
    if s[1] == 123456 && s[2] == 123456 {
        return 0
        //超级用户 返回0;普通用户,返回1,登录失败,返回2
    } else {
        return 2
    }
}

func reg(s []int) int {

    //获取 id
    var id = s[1]

    return id
}

func search_user_num(s []int) int {
    //获取用户数量
    return 0
}

func del_user(s []int) int {
    //销户
    return s[1]
}

func search_money(s []int) int {
    //查询余额
    return 0
}

func in_money(s []int) int {
    //用户存款
    return 0
}

func out_money(s []int) int {
    //用户取款
    return 0
}

func move_money(s []int) int {
    //用户转账
    return 0
}

func search_log(s int) []int {
    //查询所有信息
    return []int{}
}

func search_user_log(s int) []int {
    //查询用户账本
    return []int{}
}

func Run() {
    handle_Map[1] = login
    handle_Map[2] = reg
    handle_Map[3] = search_user_num
    handle_Map[4] = del_user
    handle_Map[5] = search_money
    handle_Map[6] = in_money
    handle_Map[7] = out_money
    handle_Map[8] = move_money

    handle_Map2[1] = search_log
    handle_Map2[2] = search_user_log

}

func Get_handle(flag int) fn {
    return handle_Map[flag]
}

func Get_handle2(flag int) fn2 {
    return handle_Map2[flag]
}

相关文章
|
12天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
52 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
106 67
|
6天前
|
算法 安全 Go
Go 语言中实现 RSA 加解密、签名验证算法
随着互联网的发展,安全需求日益增长。非对称加密算法RSA成为密码学中的重要代表。本文介绍如何使用Go语言和[forgoer/openssl](https://github.com/forgoer/openssl)库简化RSA加解密操作,包括秘钥生成、加解密及签名验证。该库还支持AES、DES等常用算法,安装简便,代码示例清晰易懂。
35 12
|
9天前
|
监控 算法 安全
解锁企业计算机监控的关键:基于 Go 语言的精准洞察算法
企业计算机监控在数字化浪潮下至关重要,旨在保障信息资产安全与高效运营。利用Go语言的并发编程和系统交互能力,通过进程监控、网络行为分析及应用程序使用记录等手段,实时掌握计算机运行状态。具体实现包括获取进程信息、解析网络数据包、记录应用使用时长等,确保企业信息安全合规,提升工作效率。本文转载自:[VIPShare](https://www.vipshare.com)。
19 0
|
23天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
Java 编译器 Go
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
前面介绍了Go语言的基础语法,所谓磨刀不误砍柴工,希望大家还是能熟悉掌握这些基础知识,这样后面真正学起Go来才会得心应手。 作为初学者。Go语言的语法有些和java类似,但也有很多不一样的地方。刚开始都会遇到各种各样的坑。下面就来总结下学习go语言的过程中,遇到的各种坑。
一起学Golang系列(五)初次接触Go语言可能遇到的各种坑!
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
41 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
102 71
|
1月前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
102 62