python atm银行取款系统_银行 ATM 系统项目

取钱:卡是否存在,是否冻结,取钱金额是否正确

转账:把一个卡里的钱转到其他卡内 (卡是否存在,是否冻结,对方账户是否存在,转账的金额是否正确)

改密:(1)原密码改密 (2)身份证改密

解卡:判断卡号和身份证是否正确在选择解卡

补卡:将旧用户的所有信息和新卡绑定(包括名字,余额等所有卡信息和用户信息,数据重新绑定)

# 类型要判断

姓名不能为空,

密码6位包含字母数字大小写,

身份证号用正则匹配且不能为空,一个身份证号只能注册一次不能重复.

不能给自己转账

from ATM.package.view import View

from ATM.package.operation import Operation

class Main():

@staticmethod

def run():

if View.login():

obj= Operation()

while True:

name=input("请输入您要办理的序号")

if name=="1":

obj.register()

elif name=="2":

obj.query()

elif name=="3":

obj.save_money()

elif name=="4":

obj.Withd_money()

elif name=="5":

obj.Transfer_counts()

elif name=="6":

obj.Modify_density()

elif name=="7":

obj.lock()

elif name=="8":

obj.unlock()

elif name=="9":

obj.new_card()

elif name=="0":

obj.save()

break

if __name__ == '__main__':

Main.run()

# ###建立卡类

# card卡类:

# 卡号,密码,余额,锁定状态

# cardid , password , money , islock

class Card():

def __init__(self,cardid,password,money):

self.cardid=cardid

self.password =password

self.money=money

self.islock=False

###建立用户类person

# person 用户类:

# 用户名 身份证号 手机号 卡

# name userid phone card

class Person():

def __init__(self,name,userid,phone,card):

self.name=name

self.userid=userid

self.phone=phone

self.card=card

### view 视图类

# 登录, 打印欢迎界面 , 打印操作界面

import time

class View():

def login():

user=input('请输入登录账号:')

pwd=input("请输入用名密码")

if user=="admin" and pwd =="111":

# 打印欢迎页面

View.longin_view()

#设置延迟一秒

time.sleep(1)

# 打印操作页面

View.operation_view()

return True

else:

print("抱歉,你的账户或密码不正确")

def longin_view():

print("%s" % ('=' * 50))

print()

print('%25s' % ('欢迎来到界面'))

print()

print("%s" % ("=" * 50))

def operation_view():

print("%s" % ('=' * 50))

print("%20s%-40s" % ('开户:(1)','查询:(2)'))

print("%20s%-40s" % ( '存钱:(3)','取钱:(4)'))

print("%20s%-40s" % ( '转账:(5)','改密:(6)'))

print("%20s%-40s" % ( '锁卡:(7)','解卡:(8)'))

print("%20s%-40s" % ('补卡:(9)','退出:(0)'))

print("%s" % ('=' * 50))

if __name__ == '__main__':

View.login()

### operation 操作类

# 把十个功能都在operation里面完成实现

import pickle

import os

import random

from .person import Person

from.card import Card

import re

class Operation():

# 当进入到系统的时,优先把数据库中的数据拿出来

def __init__(self):

self.load_user()

self.load_userid()

# {卡号:用户}

print(self.user_dict)

# (身份证号:卡号)

print(self.user_id_dict)

# 加载{卡号:用户} 字典数据

def load_user(self):

if os.path.exists("user.txt"):

with open("user.txt","rb") as fp:

self.user_dict = pickle.load(fp)

else:

self.user_dict = {}

# 加载{身份证号:卡号} 字典数据

def load_userid(self):

if os.path.exists("userid.txt"):

with open("userid.txt","rb") as fp:

self.user_id_dict = pickle.load(fp)

else:

self.user_id_dict = {}

# 当点击退出时,把数据重新更新到数据库

def save(self):

with open("user.txt", "wb") as fp:

pickle.dump(self.user_dict,fp)

with open("userid.txt","wb") as fp:

pickle.dump(self.user_id_dict,fp)

# 开户注册

def register(self):

while True:

name = input("请输入您的姓名:")

if name=='':

print("账号不能为空请从新输入")

else:

break

while True:

phone = input("请输入您的身份证号码(18位):")

obj = re.search("[1-9][\d+]{16}.", phone)

if obj == None:

print("输入身份证号码有误():")

else:

userid = obj.group()

break

while True:

phone = input("请输入您的手机号(11位):")

obj = re.search("^1[\d+]{10}", phone)

if obj == None:

print("请输入以1开头11位手机号")

else:

phone=obj.group()

break

# userid = input("请输入您的身份证号:")

# phone = input("请输入您的手机号码:")

if name == userid == phone == "":

print('您输入的信息有误请从新输入')

else:

# 获取密码

password =self.get_pwd()

# 获取卡号

cardid =self.get_cardid()

money =10

# 创建一张卡

card =Card(cardid,password,money)

# 创建一个用户

user =Person(name,userid,phone,card)

# 更新字典

self.user_dict[cardid]=user

self.user_id_dict[userid]=cardid

print("恭喜%s开卡成功,您的卡号为:%s,卡内余额%s元"%(name,cardid,money))

# 获取密码

def get_pwd(self):

while True:

pwd1 = input("请输入密码:").strip()

pwd2 = input("请再次输入密码:").strip()

if pwd1 ==pwd2 and pwd1!="":

return pwd1

else:

print('您输入两次密码不一致,请从新输入:')

# 获取卡号

def get_cardid(self):

while True:

cardid =str(random.randrange(100000,1000000))

# 如果当前不在字典中,证明卡号可用

if cardid not in self.user_dict:

return cardid

# 查询(得有卡信息才能查询)

def query(self):

card =self.get_card_info()

if not card:

print("抱歉,输入卡号不存在")

else:

if card.islock:

print("抱歉,您的卡被锁住了")

else:

# 卡没有被锁住的情况下,让用户输入密码

if self.check_pwd(card):

print('您卡内余额是%s元'%(card.money))

#卡的信息

def get_card_info(self):

cardid =input("请输入您的卡号信息:")

if cardid not in self.user_dict:

return False

else:

user =self.user_dict[cardid]

card =user.card

return card

#检测密码(输入三次后锁卡)

def check_pwd(self,card):

count =1

while count<4:

pwd = input("请输入您的密码:").strip()

if pwd == card.password:

return True

else:

# 剩余次数 =总次数 - 已经有的次数

print('密码错误,还剩余%s次机会'%(3-count))

if count==3:

card.islock=True

print('抱歉,您输入密码次数已超过三次,卡已锁住')

count+=1

# 存钱业务

def save_money(self):

card=self.get_card_info()

if not card:

print('抱歉,您的卡不存在')

else:

if card.islock:

print('抱歉,卡已锁住,请先解锁')

else:

user = self.user_dict[card.cardid]

print("您这张卡的用名名是:%s"%(user.name))

key_sure=input("确认存款请按 1 ,任意键返回上一层")

if key_sure =="1":

str_money=input("请输入您要存款金额").strip()

if str_money.isdecimal():

money=int(str_money)

card.money+=money

print("成功存入金额%s"%(money))

else:

print('您输入的金额有误')

# 取款业务

def Withd_money(self):

card=self.get_card_info()

if not card:

print('抱歉,您的卡不存在')

else:

if card.islock:

print("抱歉,卡已锁住,请先解锁")

else:

pwd=self.check_pwd(card)

wd_money=input("请输入取款金额:")

if wd_money.isdecimal():

money=int(wd_money)

if money>card.money:

print('您的余额不足,请从新输入:')

else:

card.money-=money

print("您已成功取款%s元,卡内余额%s元"%(money,card.money))

# 转账业务

def Transfer_counts(self):

card=self.get_card_info()

if not card:

print('抱歉,您的卡不存在')

else:

if card.islock:

print('抱歉,卡已锁住,请先解锁')

else:

self.check_pwd(card)

Other_party=input('请输入对方卡号:')

if Other_party == card.cardid:

print("抱歉,账号不能为空或给自己转账")

return False

if Other_party not in self.user_dict:

print("抱歉,账号不能为空或给自己转账")

return False

else:

user = self.user_dict[Other_party]

Other_party= user.card

count=input("您将给%s进行转账,确认请按 1 返回按任意键"%(user.name))

if count=="1":

Other_count = input("请输入转账金额:")

Other_count=int(Other_count)

if card.money

print("抱歉,您的余额不足")

else:

# 原账号减掉的剩余的钱

card.money-=Other_count

# 对方账号

Other_party.money+=Other_count

print("您已经成功向%s转账%s元"%(user.name,Other_count))

else:

return False

# 改密

def Modify_density(self):

card=self.get_card_info()

if not card:

print('抱歉,你的卡不存在')

else:

if card.islock:

print('抱歉,卡已锁住,请先解锁后才能更改密码')

else:

Modify_count=input("请选择改密方式: (1) 原密修改 (2) 身份证信息验证")

if Modify_count=="1":

self.check_pwd(card)

card.password=self.get_pwd2()

print("=======改密成功=======")

elif Modify_count =="2":

while True:

Modify_userid=input("请输入您的身份证号码:")

# user=self.userid_dict[card.cardid]

user=self.user_dict[card.cardid]

if Modify_userid ==user.userid:

self.check_pwd(card)

card.password = self.get_pwd2()

print("=======改密成功=======")

break

else:

print("您输入身份证号码有误请从新输入")

# 设置更改新密码 self.userid_dict[userid]

def get_pwd2(self):

while True:

pwd1 = input("请输入新密码:").strip()

pwd2 = input("请再次输新密码:").strip()

if pwd1 ==pwd2 and pwd1!='':

return pwd1

else:

print('您输入两次密码不一致,请从新输入:')

# 锁卡业务

def lock(self):

card =self.get_card_info()

if not card:

print('抱歉.卡不存在')

else:

num =input('1:使用密码冻结 2:使用身份证号冻结')

if num =="1":

if self.check_pwd(card):

card.islock=True

print('=======锁卡成功=======')

elif num =="2":

userid =input('请输入您身份证号码:').strip()

user =self.user_dict[card.cardid]

if userid == user.userid:

card.islock =True

print('=======锁卡成功=======')

else:

print('=======锁卡失败=======')

# 解卡

def unlock(self):

card =self.get_card_info()

if not card:

print("抱歉,卡不存在")

else:

userid=input('请输入您的身份证号')

user =self.user_dict[card.cardid]

if userid == user.userid:

card.islock=False

print("=======解卡成功=======")

else:

print("=======解卡失败=======")

# 补卡

def new_card(self):

card =self.get_card_info()

if not card:

print('抱歉,卡不存在')

else:

if card.islock:

print('抱歉,卡已锁住,请先解锁后才能更补卡')

else:

userid=input("请输入身份证号:")

user=self.user_dict[card.cardid]

if userid==user.userid and userid!="":

# print(card.cardid)

del self.user_dict[card.cardid]

card.cardid=self.get_cardid()

self.user_dict[card.cardid] = user

self.user_id_dict[userid] = card.cardid

print('补卡成功,补卡号为:%s,当前余额为%s元'%(card.cardid,card.money))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值