欢迎访问宙启技术站
智能推送

使用Haskell编写一个程序来模拟简单的银行账户管理系统

发布时间:2023-12-09 20:33:38

下面是一个使用Haskell编写的简单银行账户管理系统的程序:

module Main where

import Control.Monad.State

-- 定义账户数据类型
data Account = Account { owner :: String, balance :: Double } deriving (Show)

-- 存款
deposit :: Double -> State Account ()
deposit amount = modify (\acc -> acc { balance = balance acc + amount })

-- 取款
withdraw :: Double -> State Account ()
withdraw amount = modify (\acc -> acc { balance = balance acc - amount })

-- 查询余额
checkBalance :: State Account Double
checkBalance = gets balance

-- 使用例子
main :: IO ()
main = do
  let account = Account { owner = "John", balance = 100 }
  -- 存入100
  let updatedAccount = execState (deposit 100) account
  -- 查询余额
  let newBalance = evalState checkBalance updatedAccount
  putStrLn $ "New Balance: " ++ show newBalance
  -- 取款50
  let updatedAccount' = execState (withdraw 50) updatedAccount
  -- 查询余额
  let newBalance' = evalState checkBalance updatedAccount'
  putStrLn $ "New Balance: " ++ show newBalance'

这个程序中,我们使用了Haskell的State Monad来管理账户状态。Account数据类型表示一个账户,其中包含所有者的姓名和账户余额。

我们定义了三个操作:deposit用于存款,withdraw用于取款,checkBalance用于查询余额。这些操作都是使用Haskell的State Monad来实现的。

main函数中,我们创建了一个初始账户,并使用State Monad的execState函数执行存款操作,并将结果绑定到updatedAccount变量。然后,我们使用State Monad的evalState函数查询新的余额,并将结果绑定到newBalance变量。

接下来,我们执行取款操作,并使用State Monad的execStateevalState函数获取更新后的余额,并将结果打印到控制台。

运行上述程序将会输出:

New Balance: 200.0
New Balance: 150.0

这个简单的银行账户管理系统程序是用Haskell编写的,使用了Haskell中的State Monad来管理账户状态。通过定义不同的操作和使用State Monad的函数,我们可以方便地进行存款、取款和查询余额等操作。