Python实战之ATM取款机的实现

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

示例

示例一:

  1. 创建一个用户名为"test",密码为"123456"的用户:
    python
    create_user("test", "123456")

    输出:
    用户创建成功!

  2. 以该用户身份登录:
    python
    login("test", "123456")

    输出:
    登录成功!

  3. 查询余额:
    python
    check_balance(1)

    输出:
    您的余额为:0

  4. 取款100元:
    python
    withdraw(1, 100)

    输出:
    余额不足,请重新输入取款金额!

示例二:

  1. 创建一个用户名为"test2",密码为"123456"的用户:
    python
    create_user("test2", "123456")

    输出:
    用户创建成功!

  2. 以该用户身份登录:
    python
    login("test2", "123456")

    输出:
    登录成功!

  3. 查询余额:
    python
    check_balance(2)

    输出:
    您的余额为:0

  4. 存款500元:
    python
    deposit(2, 500)

    输出:
    成功存款:500

  5. 查询余额:
    python
    check_balance(2)

    输出:
    您的余额为:500

  6. 取款100元:
    python
    withdraw(2, 100)

    输出:
    成功取款:100

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实战之ATM取款机的实现 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python常见格式化字符串方法小结【百分号与format方法】

    下面是Python常见格式化字符串方法小结的完整攻略。 Python常见格式化字符串方法小结【百分号与format方法】 介绍 在Python中,格式化字符串是一个经常用到的功能。Python提供了两种常见的格式化字符串方法,分别是百分号(%)方法和format方法。这两种方法可以让我们方便地将变量、常量等数据组合成字符串,有很广泛的应用场景。本文将对这两种…

    python 2023年6月5日
    00
  • 如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?

    【问题标题】:How to check S_ISREG for a Windows NTFS file over SFTP in Python?如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件? 【发布时间】:2023-04-02 10:49:01 【问题描述】: 我正在连接到 SFTP 服务器 (NTFS…

    Python开发 2023年4月8日
    00
  • 使用python+pandas读写xlsx格式中的数据

    下面是使用Python和Pandas读写xlsx格式中的数据的完整实例教程。 1. 安装Pandas 在开始之前,我们需要确保已经安装了Pandas库。如果还没有安装的话,可以使用以下命令进行安装: pip install pandas 2. 读取Excel文件 使用Pandas读取Excel文件是非常简单的。下面的代码演示了如何读取一个Excel文件: i…

    python 2023年5月13日
    00
  • Spring事件监听器之@EventListener原理分析

    下面我将详细讲解“Spring事件监听器之@EventListener原理分析”的完整攻略。 一、事件驱动模型 在讲解Spring的@EventListener原理之前,我们需要先掌握事件驱动模型的基本概念。 事件驱动模型是一种异步编程模型,通过在应用程序中抛出事件,以处理异步任务或响应用户输入。事件处理器通过监听事件并相应地响应事件来处理任务。事件和事件处…

    python 2023年6月13日
    00
  • python爬取足球直播吧五大联赛积分榜

    本攻略将介绍如何使用Python爬取足球直播吧五大联赛积分榜的爬虫实例。我们将使用requests库获取网页内容,并使用BeautifulSoup库解析HTML文档。我们将提供两个示例,分别用于获取英超和西甲的积分榜。 获取英超积分榜 以下是一个示例代码,用于获取英超积分榜: import requests from bs4 import Beautiful…

    python 2023年5月15日
    00
  • python两种遍历字典(dict)的方法比较

    当我们需要遍历 Python 中的字典(dict)时,通常会使用两种方法:for循环和迭代器。在本篇攻略中,我们将比较这两种方法的异同点,并通过示例代码演示它们的用法和特点。下面分别进行介绍: 1. 使用for循环遍历字典 使用for循环遍历字典是最基本的方法,对于不熟悉迭代器的初学者非常友好。下面是使用for循环遍历字典的示例代码: dict = {‘a’…

    python 2023年5月13日
    00
  • Python 通用的group-by归约

    下面是针对Python通用的group-by归约的使用方法的详细攻略。 什么是group-by归约 group-by归约是一种对数据进行分组操作的方法。通过该方法,可以将数据按照指定的一列或多列进行分组,然后对每组数据进行计算或操作。 通常情况下,group-by归约适合于数据集合非常大的情况,因为该方法可以将数据尽可能地合并到更小的集合(组)中,从而提高计…

    python-answer 2023年3月25日
    00
  • python将xml xsl文件生成html文件存储示例讲解

    将XML和XSL转换为HTML是一种将数据可视化的方法。下面是Python将XML和XSL转换为HTML并存储为文件的方法: 使用lxml库将XML和XSL转换为HTML并存储为文件 lxml是一个强大的XML处理库,可以轻松地将XML和XSL转换为HTML。以下是一个将XML和XSL转换为HTML并存储为文件的示例: from lxml import et…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部