Python实战之ATM取款机的实现

yizhihongxing

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 与 C 中打印空字符(“\x00”)

    【问题标题】:Printing Null Character (“\x00”) in Python vs C在 Python 与 C 中打印空字符(“\x00”) 【发布时间】:2023-04-06 20:29:02 【问题描述】: 当我编写代码并运行语句时: print “\x00\x00\x00” 在 Python 中,它输出三个空格,后跟一个换行符。但…

    Python开发 2023年4月7日
    00
  • Python与Appium实现手机APP自动化测试的示例代码

    下面是Python与Appium实现手机APP自动化测试的完整攻略: 1. 准备工作 1.1 安装Appium Appium是一款用于移动应用程序自动化测试的工具,我们可以到 Appium官网 上下载安装包并进行安装。 1.2 安装Appium-Python-Client Appium-Python-Client是Python中与Appium交互的库,我们可…

    python 2023年6月6日
    00
  • Python dict的使用误区你知道吗

    当我们使用Python开发过程中,使用Python字典是非常常见的。然而,许多开发者存在着困惑和误区,这会导致他们在编写代码的过程中出现各种问题。下面是Python dict使用误区的攻略。 误区1:认为字典是按顺序的 Python字典是无序的。虽然你在Python3.7中会发现字典数据会按特定的顺序打印,但实际上并没有保证字典的顺序。如果你需要按特定顺序处…

    python 2023年5月13日
    00
  • Python多进程与多线程的使用场景详解

    Python多进程与多线程的使用场景详解 Python中提供了多进程和多线程两种方式来实现并发操作。本文将详细讲解它们的使用场景及示例说明,以帮助你更好地选择使用方法。 多进程适合的场景 多进程主要是针对CPU密集型任务,即需要大量计算的任务。因为Python解释器的GIL(Global Interpreter Lock)机制,多线程无法充分利用多核CPU,…

    python 2023年5月18日
    00
  • python中有关时间日期格式转换问题

    下面我就来详细讲解Python中有关时间日期格式转换问题的完整攻略。 1. 时间和日期的常用表现形式 在Python中,日期和时间的表现形式有如下几种: timestamp,指一个距离1970年1月1日00:00:00 UTC的浮点数,精确到秒或毫秒,可用于时间的比较和运算。 datetime.datetime,表示日期和时间的类,包括年、月、日、时、分、秒…

    python 2023年6月2日
    00
  • Python函数装饰器原理与用法详解

    Python函数装饰器原理与用法详解 在Python中,函数装饰器是一种用于增强函数功能的语法结构。本文将深入探讨Python函数装饰器的原理和用法,让你能够充分理解并应用装饰器。 装饰器的基本概念 装饰器是一个callable对象,它接受函数对象作为参数,并返回一个新的函数对象(或修改原有的函数对象)。 当你使用装饰器语法将装饰器应用于某个函数时,实际上是…

    python 2023年6月5日
    00
  • python模块导入的细节详解

    Python模块导入的细节详解 在 Python 中,一个模块是一个包含了 Python 定义和语句的文件。模块能够被别的程序引入,这样就可以使用模块中的函数,类和变量等资源。Python 模块的导入方式有三种: import 模块名 import 模块名 as 别名 from 模块名 import 模块元素名 模块搜索路径 在模块导入时,Python 会从…

    python 2023年6月3日
    00
  • Python时间差中seconds和total_seconds的区别详解

    Python时间差中seconds和total_seconds的区别详解 在使用Python中的datetime库进行时间计算时,经常会遇到计算时间差(timedelta)的情况。其中,timedelta对象拥有seconds属性和total_seconds()方法,它们都可以用来计算时间差。本文将深入解析seconds和total_seconds之间的区别…

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