需求:定义一个账户类,可以创建账户、存款、取款 、查询余额、以及销户等操作
分析:
类的组成:属性(描述信息)和方法【成员】
定义类的关键字-class
创建账户、存款、取款 、查询余额、以及销户 功能,行为,动作,对应的是类里面的方法
存款:余额加上要存储的金额
属性:姓名,卡号,密码,余额
优化:一个完整的功能应该包含的内容,1.校验,2操作
校验:正确校验,错误校验,边界校验
如果输出正确应该怎么样?
如果输入错误应该怎么样?
如果刚刚好是临界值怎么样?
"""
import time,random
from decimal import Decimal
class Account:
def __init__(self,name:str,password:str,money=0):
"""
创建账户,自动生成卡号
@parame name:持卡人姓名
@parame password:账户密码
@parame money:账户余额
"""
self.name = name
self.password = password
self.money = Decimal(str(money))
t = int(time.time()*100)
r = random.randint(10,99)
self.number = '%s%s'%(t,r)
def setMoney(self,money):
"""
存款
@parame money:要存入的金额
"""
if not isinstance(money,(int,float)):
print('输入的数据类型错误')
return False
elif money < 0:
print('金额不能小于0')
return False
else:
self.money += Decimal(str(money))
return True
def getMoney(self,money):
"""
取款
@parame money:要取的金额
"""
if not isinstance(money,(int,float)):
print('输入的数据类型错误')
return False
elif money > self.money:
print('余额不足')
return False
else:
self.money -= Decimal(str(money))
return True
def selectMoney(self):
"""
查询余额
@return Decimal:余额
"""
return self.money
def __del__(self):
print(f'卡号:{self.number},持有人:{self.name}。销户成功!')
if __name__ == '__main__':
# 界面 测试
# 加载所有账户信息 文件保存的,进阶存在数据库当中
accounts = []
print('*'*10,'欢迎使用PythonATM机','*'*10)
def func(i):
while True:
menu = input('菜单:\n1.存款\n2.取款\n3.查询余额\n4.销户\n输入exit退出:')
if menu == '1':
money = float(input('请输入你要存入的金额:'))
res = i.setMoney(money)
if res:
money_i = i.selectMoney()
print(f'存入成功,卡上余额为:{money_i}')
elif menu == '2':
money = float(input('请输入你要取出的金额:'))
res = i.getMoney(money)
if res:
money_i = i.selectMoney()
print(f'取出成功,卡上余额为:{money_i}')
elif menu == '3':
print(f'卡号:{i.number}。持卡人:{i.name}。卡上余额为:{i.selectMoney()}')
elif menu == '4':
accounts.remove(i) # 把列表里面的账户清除
del i # 把当前登陆的账户清除
return True
elif menu == 'exit':
break
else:
print('输入的信息有误,请确认后重新输入')
return False
while True:
menu = input('菜单:\n1.开户\n2.登陆\n输入exit退出:')
if menu == '1':
name = input('请输入您的姓名:')
password = input('请输入您的密码:')
password_re = input('请再次输入您的密码进行确认:')
while password != password_re:# 一直输入密码,直到输入的密码和确认的密码一致才结束循环,不继续输入
password = input('请输入您的密码:')
password_re = input('请再次输入您的密码进行确认:')
account = Account(name,password)
accounts.append(account)
print(f'开卡成功,尊敬的{name},您的卡号为:{account.number}')
del account # 注意,开户之后需要把account清除
elif menu == '2':
number = input('请输入您的卡号:')
password = input('请输入您的密码:')
for i in accounts:
if i.number == number and i.password == password:
print(f'登陆成功!欢迎{i.name}')
res = func(i)
if res:
del i # 注意
break
else:
print('输入的信息有误,请确认后重新输入')
elif menu == 'exit':
break
else:
print('请进行正确的操作')