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

Posted 看,未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 = []int1, 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 = []int2, 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([]int3)
	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([]int4, id)
	if 0 == id 
		fmt.Println("销户失败")
	 else 
		fmt.Println("销户  成功", id)
	


func search_money() 
	money := get_msg([]int5, user_id)

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


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

	money := get_msg([]int6, 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([]int6, 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([]int6, 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]


以上是关于Go 语言入门三部曲:能用 Go 语言写管理系统的主要内容,如果未能解决你的问题,请参考以下文章

Go 语言入门三部曲:能看懂 Go 语言

Go语言入门指南零基础入门 go 语言 | Golang 入门指南

Go语言入门指南零基础入门 go 语言 | Golang 入门指南

Go语言入门2--字符串详解

Go语言基准测试(benchmark)三部曲之二:内存篇

Go语言基准测试(benchmark)三部曲之三:提高篇