Python实现ATM提款机系统
csdn博客传送门
github博客传送门
无聊写了个ATM提款机系统有个小bug不影响使用

本章所需知识:

1.简单的SQL语句(建数据库,建表,增删改查)
简单的SQL语句学习点我
2.Python自带的小型数据库SQLite的使用 同理不会的可以看看下面的链接
简单的Python-SQLite数据库学习点我
3.Python的基础知识(如果有不会的可以看我往期教程)
基础知识第一课
基础知识第二课
4.函数的定义
基础知识第三课
5.面向对象
基础知识第四课
6.简单的异常捕获
错误和异常

程序运行部分截图:

好了话不多说,上列子,解释都在注释里.有看不懂的可以留言大家一起交流哦.
文件链接(Python文件和数据库文件):
https://download.csdn.net/download/zhanghao3389/10651270

import sqlite3'''没有数据库时必须先 取消注释这段代码 执行一遍后即可正常使用程序了 再次注释 用户数据就可以保存到数据库了.'''
# def create_database():
#     '''创建了一个数据库结构'''
#     conn = sqlite3.connect(database='atm_data.db')  # 创建一个数据库名称为atm_data.db#     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#     如果创建不了数据库 就把删除USERS表这句注释掉就能创建数据库了.
#     conn.execute("DROP TABLE USERS; ")  # 删除USERS这个表
#     !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#     # 创建一个USERS表 里面创建一些字段 ID PASSWORD NAME MONEY
#     conn.execute('''CREATE TABLE IF NOT EXISTS USERS
#                 (ID INT PRIMARY KEY     NOT NULL ,
#                  PASSWORD    CHAR(16)   NOT NULL ,
#                  NAME        TEXT(10)   NOT NULL ,
#                  MONEY       REAL);''')
#     conn.commit()  # 提交
#     conn.close()  # 关闭连接
# create_database()def insert_db(ID_user, PASSWORD_user, NAME_user, MONEY_user=0):'''将用户输入的用户信息写入到数据库'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接cmd = "INSERT INTO USERS (ID,PASSWORD,NAME,MONEY) VALUES ({},\"{}\",\"{}\",{})".format(ID_user,PASSWORD_user,NAME_user,MONEY_user)  # 将用户输入的信息写入数据库print(cmd)conn.execute(cmd)  # 写入数据到数据库conn.commit()  # 提交conn.close()  # 关闭数据库链接def del_db(user_ID):'''注销账户用,将账户的用户信息删除'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接cmd = "DELETE FROM USERS WHERE ID = {}".format(user_ID)  # 命令conn.execute(cmd)  # 删除该账号# 验证一下用户名 和 密码 确认删除 否则 return 请重新输入账号conn.commit()conn.close()def register_user():'''注册 / 注销 用户输入信息入口'''while True:try:user_ID = int(input('请输入您的账号:\n'))user_password = str(input('请输入您的密码:\n'))user_password2 = str(input('请再次输入您的密码:\n'))user_name = str(input('请输入开户人的姓名:\n'))except:print('输入信息不符合规范,请重试...')continuelistA = [user_ID, user_password, user_password2, user_name]  # 将用户输入的信息以列表的方式返回.return listAdef login_user():'''登录信息录入'''while True:try:user_ID = int(input('请输入您需要登录的账号:\n'))user_password = str(input('请输入您的密码:\n'))except:print('登录信息有误,请重试.')continuelistA = [user_ID, user_password]  # 将用户输入的信息以列表的方式返回.return listAclass Database():'''定义了一个数据库操作类.'''def __init__(self, id):self.id = id  # 当用户登录成功后 记录登录iddef select_db(self):'''查询该账户的所有信息'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接message = conn.execute("SELECT MONEY FROM USERS WHERE ID = {}".format(self.id))  # 查询该用户信息的SQL语句for i in message:print('你余额为:{}'.format(i))conn.commit()conn.close()return ielse:return '没有此用户的信息...'def select_other_db(self, other_ID):'''查询该账户的所有信息'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接message = conn.execute("SELECT MONEY FROM USERS WHERE ID = {}".format(other_ID))  # 查询指定id的余额信息.for i in message:print('你余额为:{}'.format(i))conn.commit()conn.close()return ielse:return '没有此用户的信息...'def updata_db(self, user_password):'''更改密码'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接conn.execute("UPDATE USERS SET PASSWORD = \"{}\" WHERE ID = {}".format(user_password, self.id))  # 传入用户的新密码 进行更改print('更新信息完成.')conn.commit()conn.close()def withdraw(self, user_money):'''取钱'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接before_money = self.select_db()  # 取钱之前的余额conn.execute("UPDATE USERS SET MONEY = \"{}\" WHERE ID = {}".format(before_money[0] - user_money, self.id))  # 执行取钱的SQL操作print('取出{}元,还剩{}元.'.format(user_money, before_money[0] - user_money))  # 打印出 取出的金额和余下的金额conn.commit()conn.close()def transfer_accounts(self, other_ID, turn_money):'''转账'''if self.id == other_ID:print('不能给自己转账')return Noneconn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接user_money = self.select_db()  # 己方转账之前的余额conn.execute("UPDATE USERS SET MONEY = \"{}\" WHERE ID = {}".format(user_money[0] - turn_money, self.id))  # 执行己方的转账操作other_money = self.select_other_db(other_ID)  # 对方转账之前的余额conn.execute("UPDATE USERS SET MONEY = \"{}\" WHERE ID = {}".format(other_money[0] + turn_money, other_ID))  # 执行对方的转账操作print('自己转出:{},还剩{}'.format(turn_money, user_money[0] - turn_money))  # 打印出己方的余额print('对方转入:{},还剩{}'.format(turn_money, other_money[0] + turn_money))  # 打印出对方的余额conn.commit()conn.close()def wallet(self, user_money):'''存钱'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接before_money = self.select_db()  # 存钱之前的余额conn.execute("UPDATE USERS SET MONEY = {} WHERE ID = {}".format(before_money[0] + float(user_money), self.id))  # 执行存钱的操作print('存入{}元,现在{}元.'.format(user_money, before_money[0] + float(user_money)))  # 打印出存钱后的余额conn.commit()conn.close()def checking_money(self, turn_money):'''检查余额是否足够,足够返回True,否则返回False'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接before_money = self.select_db()  # 使用钱之前的钱if before_money[0] - turn_money >= 0:  # 余额不能为负数conn.commit()conn.close()return Trueelse:conn.commit()conn.close()return Falsedef checking_password(self, password):'''检查密码是否正确,正确返回True,否则返回False'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接before_password = conn.execute("SELECT PASSWORD FROM USERS WHERE ID = {}".format(self.id))  # SQL查询正确密码for i in before_password:  # 判断旧密码是否正确if i[0] == password:conn.commit()conn.close()return Trueelse:conn.commit()conn.close()return Falseelse:conn.commit()conn.close()return '没有找到此账户.'class People():def __init__(self, id):self.id = iddef modify_information(self):'''用户修改密码的输入'''while True:try:user_password0 = str(input('请输入你的旧密码:\n'))user_password = str(input('请输入你的新密码:\n'))user_password2 = str(input('请再次输入你的新密码:\n'))except ValueError:print('您的输入不符合规范,请重新输入.')continuelistA = [user_password0, user_password, user_password2]  # 输入合规范后 将数据以列表的方式返回return listAdef cun(self):'''获取存钱的输入'''while True:try:user_money = int(input('请输入您存入的金额:\n'))except:print('您的输入不符合规范,请重试.')continuelistA = [user_money]  # 输入合规范后 将数据以列表的方式返回return listAdef qu(self):'''获取取钱的输入'''while True:try:user_money = int(input('请输入您取出的金额:\n'))except:print('您的输入不符合规范,请重试.')continuelistA = [user_money]  # 输入合规范后 将数据以列表的方式返回return listAdef zhuan(self):'''获取转账的输入'''while True:try:other_ID = int(input('请输入对方账号:\n'))turn_money = float(input('请输入转账金额:\n'))except:print('您的输入不符合规范,请重试.')continuelistA = [other_ID, turn_money]  # 输入合规范后 将数据以列表的方式返回return listAclass Verification():'''检查账户是否合规的类'''def validate_logon(self, user_ID, user_password):'''查询该账户的所有信息,核对密码是否正确'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接check = conn.execute("SELECT PASSWORD FROM USERS WHERE ID = {}".format(user_ID))  # 核对账户密码是否正确for i in check:if i[0] == str(user_password):conn.commit()conn.close()return Trueelse:conn.commit()conn.close()return Falsedef checking_ID(self, user_ID):'''检查该ID是否存在,如已存在返回False,否则返回True'''conn = sqlite3.connect('atm_data.db')  # 创建一个数据库链接check = conn.execute("SELECT ID FROM USERS WHERE ID = {}".format(user_ID))  # 查询数据库中的ID是否存在for i in check:if i[0] == user_ID:conn.commit()conn.close()return Falseelse:conn.commit()conn.close()return Trueelse:return True# 登录之后的主函数
def after_logging():database = Database(listA[0])  # 将登录成功的用户数据库操作类实例化people = People(listA[0])  # 将登录成功的用户输入类实例化while True:print('1.查询\n2.取款\n3.存款\n4.转账\n5.修改密码\n6.退出')try:select2 = int(input('请输入您本次的操作序号:\n'))except (IOError, ValueError):print('输入错误,请重新输入.')continuelist_people = []if select2 == 1:  # 查询余额database.select_db()elif select2 == 2:  # 取款操作list_people = people.qu()  # 获取用户输入的 取款金额 存放在列表里if database.checking_money(list_people[0]):  # 检查用户余额是否足够database.withdraw(list_people[0])  # 执行取钱操作continueelse:print('余额不足,请重试.')continueelif select2 == 3:  # 存款操作list_people = people.cun()  # 获取用户存款的金额if list_people[0] > 0:  # 判断存款金额是否正常database.wallet(list_people[0])continueelse:print('您存款的金额不对请重试.')continueelif select2 == 4:  # 转账操作list_people = people.zhuan()  # 获取对方账号 获取转账金额if verification.checking_ID(list_people[0]) or (not database.checking_money(list_people[1])):  # 检查对方ID存在为False 检查余额不足够就Falseprint('对方账户不存在或转出金额超出余额,请核对后再试...')continueelse:database.transfer_accounts(list_people[0], list_people[1])  # 执行转账操作continueelif select2 == 5:  # 修改密码list_people = people.modify_information()  # 获取一个旧密码 两个新密码if list_people[1] == list_people[2] and database.checking_password(list_people[0]):  # 两个新密码一致 并且 旧密码正确database.updata_db(list_people[1])  # 满足上述条件  执行修改密码操作continueelse:print('旧密码不正确,或两次新密码不一致.')continueelif select2 == 6:  # 退出print('正在退出,请稍候.')return '本次交易已退出'else:print('输入错误,请重新输入.')continueif __name__ == '__main__':  # 主函数入口verification = Verification()  # 实例化一个检查类while True:print('1.登录\n2.注册账号\n3.注销账号\n4.关机')try:select = int(input('请输入您本次的操作序号:\n'))except (IOError, ValueError):print('输入错误,请重新输入.')continueif select == 1:listA = login_user()  # 获取用户账号 密码if verification.validate_logon(listA[0], listA[1]):  # 检查账户密码是否一致print('登录成功')after_logging()  # 进入登录后的主程序continueelse:print('账号或密码错误,请重新登录.')continueelif select == 2:while True:print('您正在执行注册账户的操作.')listA = register_user()  # 获取用户注册信息 账户 密码 用户名if verification.checking_ID(listA[0]) and listA[1] == listA[2]:  # 检查注册ID是否重复 两次密码是否一致insert_db(listA[0], listA[1], listA[3])  # 将用户信息写入数据库print('注册成功,您现在可以登录使用了.')breakelse:print('您没有输入正确账户信息,请重新选择您要操作的选项.')breakelif select == 3:while True:print('您正在执行注销账户的操作,没有取出的余额将不予退还.')listA = register_user()  # 获取 账号 密码 密码 用户名# 检查账户是否存在 账号密码是否一致 两次密码是否一致if (not verification.checking_ID(listA[0])) and verification.validate_logon(listA[0], listA[1]) and (listA[1] == listA[2]):del_db(listA[0])  # 执行注销操作print('注销成功,系统中已经不再有您的个人信息了.')breakelse:print('您没有输入正确的账户信息,请重新选择您要操作的选项.')breakelif select == 4:print('关机中,请稍候...')print('------------------------------')exit()else:print('输入错误,请重新输入.')continue

好吧 还是解释一下那个小 bug 就是比如你存钱 进入了存钱选项 那就必须存了钱才能退出来,否则不能退出来.一般不影响使用. 不想解决了 留给后人 欢迎留言交流…

Python实现ATM相关推荐

  1. 基于[Python]的ATM取款机模拟实战

    基于[Python]的ATM取款机模拟 -------------------------------- 简介 使用python语言来完成一个ATM取款机,要求功能入下: a)实现用户输入密码 b)实 ...

  2. python之ATM

    python之ATM 每次做一点就发出来,大神不要嫌重复 2016/11/4 今天来搞ATM,反正逃不了的,说来惭愧,这个作业是我10/4号20天前拿到的,当时是万脸蒙比的,今天又做了一点,现在算是百 ...

  3. python银行ATM自动取款机

    python银行ATM自动取款机 银行自动取款机 main.py(主程序) admin.py atm.py user.py card.py 总结 银行自动取款机 main.py(主程序) main.p ...

  4. python模拟ATM + 购物商城

    模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还,按欠款总额 ...

  5. Python实现atm机的功能

    主要还是参考网上内容,自己做了修改.虽然代码有小bug,但是不影响学习和测试. 功能: 1.额度:8000 2.可以提现,手续费5% 3.每月最后一天出账单,写入文件 4.记录每月日常消费流水 5.提 ...

  6. 用python写atm自动取款_Python实现atm机的功能

    主要还是参考网上内容,自己做了修改.虽然代码有小bug,但是不影响学习和测试. 功能: 1.额度:8000 2.可以提现,手续费5% 3.每月最后一天出账单,写入文件 4.记录每月日常消费流水 5.提 ...

  7. 基于python的ATM(自动取款机)项目

    用python写了一个ATM(自动取款机),共有十种功能,可用作大学生大作业. 具体实现效果: 1.功能模块 2.姓名.身份证号.电话号码的采集.设置密码.向注册的手机号发送信息(包括异常处理) 3. ...

  8. python编写ATM类_Python中编写类的各种技巧和方法

    有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling).你可以把它当作一个教程, ...

  9. python atm取款系统_基于python的ATM(自动取款机)项目

    __auth__='穆穆max' data='2021/1/4' class User(): def __init__(self,name,idcard,phonenum,card): self.na ...

最新文章

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
  2. Ubuntu 系统安装.deb安装包
  3. Linux那些事儿 之 戏说USB(5)我是谁
  4. java继承中的一些该注意的问题
  5. WinCE下冷启动程序自动安装装载
  6. type python_typepython
  7. python 字符串分割和拼接_python分割和拼接字符串
  8. Python中的端口协议之基于UDP协议的通信传输
  9. 使用Apache配置Tomcat应用整合PHP论坛-Discuz
  10. 视频来了!Visual Studio Online 东半球首秀 @ .NET Conf 2019 中国峰会
  11. 如何通过改造休闲旅行车赚到1000万元?
  12. 回答问题人工智能源码_回答21个最受欢迎的人工智能问题
  13. python字体和图片合成
  14. 客户画像--指标标签体系设计方案----业务视角
  15. python数字排列组合去重_python解决排列组合问题的4种方式
  16. java-第十三章-类的无参方法(一)-模拟一个简单的购房商贷月供计算器
  17. GPRS PDP APN
  18. 常见股票涨跌预警事件
  19. 三条中线分的六个三角形_一个三角形的三条中线分别是3、4、5,求这个三角形的面积...
  20. 最重要的三种能力:思考力、行动力、表达力

热门文章

  1. synchronized对象锁的同步和异步问题
  2. 如何从产品层面做需求分析——产品定位
  3. 奇葩说Cisco router与PC交互(一)
  4. Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要
  5. iOS经典错误library not found for -lXXX
  6. Linux的777权限
  7. 国外大学诸多自学课程
  8. python打开paint并画一个圆
  9. Spring Cloud 升级之路 - 2020.0.x - 1. 背景知识、需求描述与公共依赖
  10. microsoft store 安装包_Microsoft 办公软件免费了?