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

草草写了个 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]
}

猜你喜欢

转载自blog.csdn.net/qq_43762191/article/details/125329212
今日推荐