Python实现ATM

Python实现ATM提款机系统[csdn博客传送门](https://blog.csdn.net/zhanghao3389)[github博客传送门](https://mrzhang3389.github.io/)

无聊写了个ATM提款机系统有个小bug不影响使用

本章所需知识:

1.简单的SQL语句(建数据库,建表,增删改查)[简单的SQL语句学习点我](https://blog.csdn.net/zhanghao3389/article/details/82596863)

2.Python自带的小型数据库SQLite的使用 同理不会的可以看看下面的链接[简单的Python-SQLite数据库学习点我](https://blog.csdn.net/zhanghao3389/article/details/82597085)

3.Python的基础知识(如果有不会的可以看我往期教程)[基础知识第一课](https://blog.csdn.net/zhanghao3389/article/details/82117105)[基础知识第二课](https://blog.csdn.net/zhanghao3389/article/details/82118215)

4.函数的定义[基础知识第三课](https://blog.csdn.net/zhanghao3389/article/details/82119999)

5.面向对象[基础知识第四课](https://blog.csdn.net/zhanghao3389/article/details/82216780)

6.简单的异常捕获[错误和异常](https://blog.csdn.net/zhanghao3389/article/details/82347067)

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

代码如下importsqlite3

'''没有数据库时必须先 取消注释这段代码 执行一遍后即可正常使用程序了 再次注释 用户数据就可以保存到数据库了.'''

# 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()

definsert_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()# 关闭数据库链接

defdel_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()

defregister_user():

'''注册 / 注销 用户输入信息入口'''

whileTrue:

try:

user_ID=int(input('请输入您的账号:\n'))

user_password=str(input('请输入您的密码:\n'))

user_password2=str(input('请再次输入您的密码:\n'))

user_name=str(input('请输入开户人的姓名:\n'))

except:

print('输入信息不符合规范,请重试...')

continue

listA=[user_ID,user_password,user_password2,user_name]# 将用户输入的信息以列表的方式返回.

returnlistA

deflogin_user():

'''登录信息录入'''

whileTrue:

try:

user_ID=int(input('请输入您需要登录的账号:\n'))

user_password=str(input('请输入您的密码:\n'))

except:

print('登录信息有误,请重试.')

continue

listA=[user_ID,user_password]# 将用户输入的信息以列表的方式返回.

returnlistA

classDatabase():

'''定义了一个数据库操作类.'''

def__init__(self,id):

self.id=id# 当用户登录成功后 记录登录id

defselect_db(self):

'''查询该账户的所有信息'''

conn=sqlite3.connect('atm_data.db')# 创建一个数据库链接

message=conn.execute("SELECT MONEY FROM USERS WHERE ID = {}".format(self.id))# 查询该用户信息的SQL语句

foriinmessage:

print('你余额为:{}'.format(i))

conn.commit()

conn.close()

returni

else:

return'没有此用户的信息...'

defselect_other_db(self,other_ID):

'''查询该账户的所有信息'''

conn=sqlite3.connect('atm_data.db')# 创建一个数据库链接

message=conn.execute("SELECT MONEY FROM USERS WHERE ID = {}".format(other_ID))# 查询指定id的余额信息.

foriinmessage:

print('你余额为:{}'.format(i))

conn.commit()

conn.close()

returni

else:

return'没有此用户的信息...'

defupdata_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()

defwithdraw(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()

deftransfer_accounts(self,other_ID,turn_money):

'''转账'''

ifself.id==other_ID:

print('不能给自己转账')

returnNone

conn=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()

defwallet(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()

defchecking_money(self,turn_money):

'''检查余额是否足够,足够返回True,否则返回False'''

conn=sqlite3.connect('atm_data.db')# 创建一个数据库链接

before_money=self.select_db()# 使用钱之前的钱

ifbefore_money[0]-turn_money>=0:# 余额不能为负数

conn.commit()

conn.close()

returnTrue

else:

conn.commit()

conn.close()

returnFalse

defchecking_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查询正确密码

foriinbefore_password:# 判断旧密码是否正确

ifi[0]==password:

conn.commit()

conn.close()

returnTrue

else:

conn.commit()

conn.close()

returnFalse

else:

conn.commit()

conn.close()

return'没有找到此账户.'

classPeople():

def__init__(self,id):

self.id=id

defmodify_information(self):

'''用户修改密码的输入'''

whileTrue:

try:

user_password0=str(input('请输入你的旧密码:\n'))

user_password=str(input('请输入你的新密码:\n'))

user_password2=str(input('请再次输入你的新密码:\n'))

exceptValueError:

print('您的输入不符合规范,请重新输入.')

continue

listA=[user_password0,user_password,user_password2]# 输入合规范后 将数据以列表的方式返回

returnlistA

defcun(self):

'''获取存钱的输入'''

whileTrue:

try:

user_money=int(input('请输入您存入的金额:\n'))

except:

print('您的输入不符合规范,请重试.')

continue

listA=[user_money]# 输入合规范后 将数据以列表的方式返回

returnlistA

defqu(self):

'''获取取钱的输入'''

whileTrue:

try:

user_money=int(input('请输入您取出的金额:\n'))

except:

print('您的输入不符合规范,请重试.')

continue

listA=[user_money]# 输入合规范后 将数据以列表的方式返回

returnlistA

defzhuan(self):

'''获取转账的输入'''

whileTrue:

try:

other_ID=int(input('请输入对方账号:\n'))

turn_money=float(input('请输入转账金额:\n'))

except:

print('您的输入不符合规范,请重试.')

continue

listA=[other_ID,turn_money]# 输入合规范后 将数据以列表的方式返回

returnlistA

classVerification():

'''检查账户是否合规的类'''

defvalidate_logon(self,user_ID,user_password):

'''查询该账户的所有信息,核对密码是否正确'''

conn=sqlite3.connect('atm_data.db')# 创建一个数据库链接

check=conn.execute("SELECT PASSWORD FROM USERS WHERE ID = {}".format(user_ID))# 核对账户密码是否正确

foriincheck:

ifi[0]==str(user_password):

conn.commit()

conn.close()

returnTrue

else:

conn.commit()

conn.close()

returnFalse

defchecking_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是否存在

foriincheck:

ifi[0]==user_ID:

conn.commit()

conn.close()

returnFalse

else:

conn.commit()

conn.close()

returnTrue

else:

returnTrue

# 登录之后的主函数

defafter_logging():

database=Database(listA[0])# 将登录成功的用户数据库操作类实例化

people=People(listA[0])# 将登录成功的用户输入类实例化

whileTrue:

print('1.查询\n2.取款\n3.存款\n4.转账\n5.修改密码\n6.退出')

try:

select2=int(input('请输入您本次的操作序号:\n'))

except(IOError,ValueError):

print('输入错误,请重新输入.')

continue

list_people=[]

ifselect2==1:# 查询余额

database.select_db()

elifselect2==2:# 取款操作

list_people=people.qu()# 获取用户输入的 取款金额 存放在列表里

ifdatabase.checking_money(list_people[0]):# 检查用户余额是否足够

database.withdraw(list_people[0])# 执行取钱操作

continue

else:

print('余额不足,请重试.')

continue

elifselect2==3:# 存款操作

list_people=people.cun()# 获取用户存款的金额

iflist_people[0]>0:# 判断存款金额是否正常

database.wallet(list_people[0])

continue

else:

print('您存款的金额不对请重试.')

continue

elifselect2==4:# 转账操作

list_people=people.zhuan()# 获取对方账号 获取转账金额

ifverification.checking_ID(list_people[0])or(

notdatabase.checking_money(list_people[1])):# 检查对方ID存在为False 检查余额不足够就False

print('对方账户不存在或转出金额超出余额,请核对后再试...')

continue

else:

database.transfer_accounts(list_people[0],list_people[1])# 执行转账操作

continue

elifselect2==5:# 修改密码

list_people=people.modify_information()# 获取一个旧密码 两个新密码

iflist_people[1]==list_people[2]anddatabase.checking_password(list_people[0]):# 两个新密码一致 并且 旧密码正确

database.updata_db(list_people[1])# 满足上述条件  执行修改密码操作

continue

else:

print('旧密码不正确,或两次新密码不一致.')

continue

elifselect2==6:# 退出

print('正在退出,请稍候.')

return'本次交易已退出'

else:

print('输入错误,请重新输入.')

continue

if__name__=='__main__':# 主函数入口

verification=Verification()# 实例化一个检查类

whileTrue:

print('1.登录\n2.注册账号\n3.注销账号\n4.关机')

try:

select=int(input('请输入您本次的操作序号:\n'))

except(IOError,ValueError):

print('输入错误,请重新输入.')

continue

ifselect==1:

listA=login_user()# 获取用户账号 密码

ifverification.validate_logon(listA[0],listA[1]):# 检查账户密码是否一致

print('登录成功')

after_logging()# 进入登录后的主程序

continue

else:

print('账号或密码错误,请重新登录.')

continue

elifselect==2:

whileTrue:

print('您正在执行注册账户的操作.')

listA=register_user()# 获取用户注册信息 账户 密码 用户名

ifverification.checking_ID(listA[0])andlistA[1]==listA[2]:# 检查注册ID是否重复 两次密码是否一致

insert_db(listA[0],listA[1],listA[3])# 将用户信息写入数据库

print('注册成功,您现在可以登录使用了.')

break

else:

print('您没有输入正确账户信息,请重新选择您要操作的选项.')

break

elifselect==3:

whileTrue:

print('您正在执行注销账户的操作,没有取出的余额将不予退还.')

listA=register_user()# 获取 账号 密码 密码 用户名

# 检查账户是否存在 账号密码是否一致 两次密码是否一致

if(notverification.checking_ID(listA[0]))andverification.validate_logon(listA[0],listA[1])and(listA[1]==listA[2]):

del_db(listA[0])# 执行注销操作

print('注销成功,系统中已经不再有您的个人信息了.')

break

else:

print('您没有输入正确的账户信息,请重新选择您要操作的选项.')

break

elifselect==4:

print('关机中,请稍候...')

print('------------------------------')

exit()

else:

print('输入错误,请重新输入.')

continue

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

python 类和对象 atm_Python实现ATM提款机系统相关推荐

  1. python sqlite3 带密码_Python实现ATM提款机系统

    原文在此 https://mp.weixin.qq.com/s?__biz=MzU2NTc1MTc5MQ==&mid=2247484014&idx=1&sn=6f43e5833 ...

  2. python 类和对象 atm_Python 类和对象

    1.python中初始化实例属性 必须在__init__(self,-)方法内(注意:双下划线)初始化实例,第一个参数必须为self. 如需动态添加属性,可用 **kw class Person(ob ...

  3. python类包含对象的个数_python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  4. Python类与对象实验

    一.任务描述   本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. ...

  5. 【Python基础入门系列】第10天:Python 类与对象

    首先,我已经假定你是个萌新或已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿,我觉得有必要找一篇生动形象的示例来讲解. 由于你可能没有编程经验, 所以无法从学过 ...

  6. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  7. python类和对象_Python类和对象

    python类和对象 Python is an object-oriented programming language. Python Classes and Objects are the cor ...

  8. python中对象的特性_python中类与对象之继承,python类和对象理解,面对对象的三大特性之...

    python中类与对象之继承,python类和对象理解,面对对象的三大特性之 面对对象的三大特性之继承 1.什么是继承? 在程序中,继承指的是class与class之间的关系 继承是一种关系,必须存在 ...

  9. python类、对象、方法、属性之类与对象笔记

    为什么80%的码农都做不了架构师?>>>    python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象...... ...

最新文章

  1. cacti sendmail发送告警邮件
  2. Computer:成功解决安装软件时需要系统空间环境辅助程序(比如Microsoft Visual C++2010 x86 Redistributable安装失败)
  3. 语音识别-过零率和短时能量-端点检测
  4. ubuntu16.04安装R及RStudio
  5. css实现透明度(兼容IE6、火狐等)
  6. PHP多种序列化/反序列化的方法 (转载)
  7. 全向轮底盘磁导轨寻迹
  8. Windows Server 2012活动目录基础配置与应用(新手教程)之3---将客户机加入到指定域...
  9. ImPan免费版 百度云网盘第三方不限速下载工具
  10. java11 scala_JDK1.10+scala环境的搭建之windows环境
  11. 7-7 用扑克牌计算24点 (25 分)
  12. Oracle中的sql操作符 和分析函数
  13. 屏幕距离和坐便转换工具_简单好用的视频分辨率转换器推荐
  14. YYKit-YYDispatchQueuePool分析
  15. android html 布局设计工具,教你使用Android SDK布局优化工具layoutopt
  16. Swagger2.0和resful规范
  17. 删除github中的repository仓库
  18. Linux-linux系统函数
  19. 获取平均评分最高的10部电影
  20. 算法分析与设计——近似算法

热门文章

  1. Rust 从入门到精通01-简介
  2. c语言幼儿园自动分班,【资源学习】c语言程序代码,登录幼儿园200个小朋友的数据...
  3. 中小型企业要抓住中产阶级消费带来的机会
  4. php+ffmpeg视频增加转场合并
  5. Win11 与 macOS 12 界面对比
  6. 8086汇编(10、int9键盘中断)
  7. 通用Mmapper配置
  8. VB不能加载MSCOMCTL.OCX所需文件
  9. 操作系统简史(1)东方会有新的操作系统诞生吗?让历史告诉未来
  10. 天猫魔盒挂载ext4移动硬盘