Python实战之ATM取款机的实现
简介
ATM(Automatic Teller Machine)自动取款机是现代银行业务中很常见的一个自动化设备。本文将演示如何使用Python实现ATM取款机,实现用户创建、登录、查询余额、取款等常见业务流程。
环境与依赖
本文使用Python3.7版本进行编码,需要安装以下依赖:
- PyMySQL:Python操作MySQL数据库的库。
可以使用pip命令进行安装:pip install PyMySQL
数据库设计
在MySQL中创建ATM数据库,并分别创建users和transactions两个数据表。
- users 数据表包含以下字段:
字段名 | 数据类型 | 描述 |
---|---|---|
id | int | 用户ID |
username | varchar | 用户名 |
password | varchar | 登录密码 |
balance | float | 余额 |
- transactions 数据表包含以下字段:
字段名 | 数据类型 | 描述 |
---|---|---|
id | int | 交易ID |
user_id | int | 用户ID |
type | varchar | 交易类型(存款/取款) |
amount | float | 交易金额 |
timestamp | datetime | 交易时间戳 |
代码实现
首先,需要导入PyMySQL库并建立与MySQL数据库的连接:
import pymysql
db_connection = pymysql.connect(
host="localhost",
user="root",
password="password",
db="ATM"
)
用户创建
用户可以通过输入用户名和密码来创建账户。创建用户时需要检查该用户名是否已经存在,如果已存在,则提示用户重新输入。
def create_user(username, password):
cursor = db_connection.cursor()
# 检查用户名是否已存在
cursor.execute("SELECT COUNT(*) FROM users WHERE username=%s", (username,))
if cursor.fetchone()[0]:
return "该用户名已存在,请重新输入!"
# 否则添加用户
cursor.execute("INSERT INTO users (username, password, balance) VALUES (%s, %s, 0)", (username, password))
db_connection.commit()
return "用户创建成功!"
用户登录
用户需要输入已创建的用户名和密码进行登录。如果输入的用户名不存在或密码错误,则登录失败。
def login(username, password):
cursor = db_connection.cursor()
# 检查用户名和密码是否匹配
cursor.execute("SELECT COUNT(*) FROM users WHERE username=%s AND password=%s", (username, password))
if not cursor.fetchone()[0]:
return "用户名或密码错误!"
return "登录成功!"
查询余额
用户可以查看自己的账户余额。
def check_balance(user_id):
cursor = db_connection.cursor()
# 查询余额
cursor.execute("SELECT balance FROM users WHERE id=%s", (user_id,))
balance = cursor.fetchone()[0]
return "您的余额为:%s" % balance
取款
用户可以输入取款金额进行取款操作。系统需要检查用户余额是否足够,如果余额不足,则提示用户重新输入取款金额。
def withdraw(user_id, amount):
cursor = db_connection.cursor()
# 检查余额
cursor.execute("SELECT balance FROM users WHERE id=%s", (user_id,))
balance = cursor.fetchone()[0]
if balance < amount:
return "余额不足,请重新输入取款金额!"
# 更新余额和交易记录
cursor.execute("UPDATE users SET balance=balance-%s WHERE id=%s", (amount, user_id))
cursor.execute("INSERT INTO transactions (user_id, type, amount, timestamp) VALUES (%s, '取款', %s, NOW())", (user_id, amount))
db_connection.commit()
return "成功取款:%s" % amount
示例
示例一:
-
创建一个用户名为"test",密码为"123456"的用户:
python
create_user("test", "123456")
输出:
用户创建成功!
-
以该用户身份登录:
python
login("test", "123456")
输出:
登录成功!
-
查询余额:
python
check_balance(1)
输出:
您的余额为:0
-
取款100元:
python
withdraw(1, 100)
输出:
余额不足,请重新输入取款金额!
示例二:
-
创建一个用户名为"test2",密码为"123456"的用户:
python
create_user("test2", "123456")
输出:
用户创建成功!
-
以该用户身份登录:
python
login("test2", "123456")
输出:
登录成功!
-
查询余额:
python
check_balance(2)
输出:
您的余额为:0
-
存款500元:
python
deposit(2, 500)
输出:
成功存款:500
-
查询余额:
python
check_balance(2)
输出:
您的余额为:500
-
取款100元:
python
withdraw(2, 100)
输出:
成功取款:100
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实战之ATM取款机的实现 - Python技术站