@[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]
}