用Go模拟了一张卡的存、取、查的简单功能。未加入对卡号的识别功能。
package main
import (
"fmt"
)
//定义一个账户的结构体
type Account struct {
ActNo string
Pwd string
Balance float64
}
func (account *Account) Deposite(pwd string,money int) (isOk bool,bal float64) {
isOk = false
if pwd != (*account).Pwd || money <= 0 {
isOk = true
bal = 0
} else {
isOk = false
bal = (*account).Balance + float64(money)
}
(*account).Balance = bal
return isOk,bal
}
func (account *Account) WithDraw(pwd string,money int) (isOk bool,bal float64) {
isOk = false
if pwd != (*account).Pwd || money > int((*account).Balance) {
isOk = true
bal = 0
} else {
isOk = false
bal = (*account).Balance - float64(money)
}
(*account).Balance = bal
return isOk,bal
}
func (account *Account) Check(pwd string) (isOk bool,balance float64){
isOk = false
if pwd != (*account).Pwd {
isOk = true
} else {
isOk = false
balance = (*account).Balance
}
return isOk,balance
}
func main() {
//模拟一张银行卡
account := &Account{
ActNo: "cs10101010",
Pwd: "888888",
Balance: 1000.0,
}
var (
money int
pwd string
operator int
)
//内置函数
deposite := func (){
for i := 1; i <= 3; i ++ {
fmt.Println("请输入密码...")
fmt.Scanln(&pwd)
fmt.Println ("请输入存款金额...")
fmt.Scanln(&money)
//调用存款功能方法
isSuccess,balance := (*account).Deposite(pwd,money)
if !isSuccess {
fmt.Printf("您存入的金额是 %v, 当前的账户余额是%v \n",money,balance)
break
} else {
fmt.Printf("输入有误,请重新输入,您还有%d次机会 \n", 3-i )
}
if i == 3 {
fmt.Println("输入错误已满3次,系统退出..." )
break
}
}
}
//内置函数
withdraw := func (){
for i := 1; i <= 3; i ++ {
fmt.Println("请输入密码...")
fmt.Scanln(&pwd)
fmt.Println ("请输入取款金额...")
fmt.Scanln(&money)
//调用取款功能方法
isSuccess,balance := (*account).WithDraw(pwd,money)
if !isSuccess {
fmt.Printf("您要取款的金额是 %v, 当前的账户余额是%v \n",money,balance)
break
} else {
fmt.Printf("输入有误,请重新输入,您还有%d次机会 \n", 3-i )
}
if i == 3 {
fmt.Println("输入错误已满3次,系统退出..." )
break
}
}
}
//内置函数
check := func() {
for i := 1; i <= 3; i ++{
fmt.Println("请输入密码...")
fmt.Scanln(&pwd)
//调用查询功能的方法
isSuccess,bal := (*account).Check(pwd)
if isSuccess {
fmt.Printf("输入有误,请重新输入,您还有%d次机会 \n", 3-i )
} else {
fmt.Printf("您的账户余额为: %.2f \n",bal)
break
}
if i == 3 {
fmt.Println("输入错误已满3次,系统退出..." )
break
}
}
}
a://for循环的标签
for {
fmt.Println("请输入您需要的服务: 1.存款; 2.取款; 3.查询; 4.退出")
fmt.Scanln(&operator)
switch operator {
case 1:
deposite() //调用存款的内置函数
case 2:
withdraw() //调用取款的内置函数
case 3:
check() //调用余额查询的内置函数
case 4:
break a
default:
fmt.Println("输入有误,没有您选择的服务项目...")
}
}
}
输出的结果: