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中threading模块

    当谈及多线程编程时,Python提供了一个很好的标准模块——threading,该模块中包含了许多便于开发者编写高效线程的方法和类。本文将是一个浅显易懂、最常见用法的Python中的threading模块教程。让我们开始吧! 创建线程 首先就是要创建一个线程。Python使用threading模块创建和管理线程,其余语言通常是用类似pthreads的多线程库…

    python 2023年5月19日
    00
  • 利用python如何处理nc数据详解

    使用Python处理nc数据是数据科学中的重要领域,操作非常方便且适用于各行业。下面我们来详细讲解如何利用Python处理nc数据的完整攻略。 1. 安装依赖 首先,我们需要安装几个Python的依赖: numpy: 用于处理数组 netCDF4: 用于读写nc数据 matplotlib: 用于可视化处理结果 basemap: 用于地图绘制 可以使用pip工…

    python 2023年6月3日
    00
  • python time.strptime格式化实例详解

    Python time.strptime格式化实例详解 介绍 在 Python 中,time.strptime 函数可以将字符串解析为时间元组(time tuple),并支持自定义解析格式(format)。本文将详细介绍 time.strptime 的使用方法和示例。 函数定义 time.strptime(string[, format]) 函数接收两个参数…

    python 2023年6月2日
    00
  • Python for Informatics 第11章之正则表达式(四)

    以下是“PythonforInformatics第11章之正则表达式(四)”的完整攻略: 一、问题描述 在PythonforInformatics第11章中,我们学习了如何使用Python的re模块进行正则表达式匹配。本文将详细讲解PythonforInformatics第11章之正则表达式(四),并提供两个示例说明。 二、解决方案 2.1 re模块中的su…

    python 2023年5月14日
    00
  • Python实现从文件中加载数据的方法详解

    在Python中,我们可以使用多种方法从文件中加载数据。本文将详细讲解Python实现从文件中加载数据的方法,包括使用内置函数、使用第三方库和自定义方法。同时,我们将提供两个示例,以便更好地理解这些方法的使用。 使用内置函数 Python中的内置函数open()可以用于打开文件,并返回一个文件对象。我们可以使用文件对象的read()方法来读取文件中的数据。以…

    python 2023年5月15日
    00
  • Python编程实现生成特定范围内不重复多个随机数的2种方法

    Python编程实现生成特定范围内不重复多个随机数的2种方法 在Python中,实现生成特定范围内不重复多个随机数的方法有很多,本篇文章将重点介绍2种方法。 方法一:使用random.sample函数 random.sample函数是Python标准库random中的一个函数,可以快速生成特定范围内不重复的随机数。 以下是使用random.sample函数生…

    python 2023年6月3日
    00
  • python循环定时中断执行某一段程序的实例

    针对“python循环定时中断执行某一段程序”的需求,可以采用Python中的time模块和signal模块来实现。 一、使用time模块实现定时循环中断 1.1 示例说明 下面我们先通过示例来说明如何使用time模块实现定时循环中断。以下示例的需求是:每隔1秒执行一次某一段程序,并在等待3秒后中断程序。 import time def func(): pr…

    python 2023年6月3日
    00
  • Python的一些用法分享

    Python是一种高级编程语言,具有简单易学、功能强大、可扩展性强等特点。在Python中,有许多有用的用法和技巧,本文将分享一些常用的Python用法,包括列表推导式、lambda函数、装饰器等,并提供示例说明。 列表推导式 列表推导式是一种简洁的语法,用于从一个列表中生成另一个列表。它的语法如下: new_list = [expression for i…

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