python学习笔记(十五) 银行自动提款机系统

系统具有以下功能:

1、开户(open)
2、查询(search)
3、取款(withdraw)
4、存款(deposit)    
5、转账(transfer) 
6、改密(changepwd)  
7、冻结账户(lock) 
8、解冻账户(unlock) 
9、补卡(replace)  
10、销户(close) 
0、退出(exit)     

我们对整个系统进行分析,可以得到如下几个类

1、用户-User类;

属性:name、IDcard、phone、card

2、卡-Card类:

属性:cardID、cardPassword、cardMoney

3、atm机-ATM类:

属性:用户-卡号

方法:系统所需每个功能的实现

4、系统界面类-view:

属性:系统登录账号、系统登录密码

方法:登录界面、功能界面、登录判断

5、Main函数

对整个系统进行整体调控

代码如下:

'''
主函数
'''
from view import View
from atm import ATM
import pickle
import os
import time

def main():

	# 界面对象
	view = View()

	# 管理员开机
	view.printAdminview()
	if view.adminOption():
		return -1

	#取款机对象
	filePath = os.path.join(os.getcwd(), "allUsers.txt")
	f =open(filePath,"rb")
	allUsers = pickle.load(f)
	print("***************")
	print(allUsers)
	atm = ATM(allUsers)

	while True:
		view.printsysFunctionView()
		#等待用户操作
		option =input("请选择所需业务:")
		#开户
		if option =="1":
			#print("开户")
			atm.createUser()


		#查询
		elif option=="2":
			atm.searchUserInfo()

		#取款
		elif option=="3":
			atm.withDrawals()

		# 存款
		elif option=="4":
			atm.deposit()

		# 转账
		elif option=="5":
			atm.transfromMoney()

		# 修改密码
		elif option=="6":
			atm.changePwd()

		# 锁定
		elif option=="7":
			atm.lock()

		# 解锁
		elif option=="8":
			atm.unlock()

		# 补卡
		elif option=="9":
			atm.replace()

		# 销户
		elif option=="10":
			atm.logoutUserInfo()

		# 退出
		elif option == "0":
			q =input("确定退出系统吗? y/n")
			if q == "y":
				#将用户信息储存数据保存
				atm.saveUserInfo()
				return False


		time.sleep(1)


if __name__=="__main__":
	main()
'''
界面
'''
import time

class View(object):
	admin ="lc"
	password = "123"

	#登录界面
	def printAdminview(self):
		print("*****************************************")
		print("*                                       *")
		print("*                                       *")
		print("*      欢迎登录银行自助银行系统         *")
		print("*                                       *")
		print("*                                       *")
		print("*****************************************")

	#功能界面
	def printsysFunctionView(self):
		print("********************************************")
		print("*   1、开户(open)      2、查询(search)     *")
		print("*   3、取款(withdraw)  4、存款(deposit)    *")
		print("*   5、转账(transfer)  6、改密(changepwd)  *")
		print("*   7、冻结账户(lock)  8、解冻账户(unlock) *")
		print("*   9、补卡(replace)   10、销户(close)     *")
		print("*               0、退出(exit)            *")
		print("********************************************")

	#判断函数
	def adminOption(self):
		# 判断账号
		inputAdmin = input("请输入管理员账号:")
		if self.admin != inputAdmin:
			print("账号输入有误!!")
			return -1

		# 判断密码
		inputPwd = input("请输入管理员密码:")
		if self.password != inputPwd:
			print("密码错误!")
			return -1

		print("登录成功,请稍后....")
		time.sleep(2)
		return 0

 

'''
card类
'''

class Card(object):
	def __init__(self,cardId,cardPwd,cardMoney):
		self.cardId = cardId
		self.cardPwd = cardPwd
		self.cardMoney = cardMoney
		self.cardLock = False
'''
user类
'''


class User(object):
	def __init__(self,name,idCard,phone,card):
		self.name = name
		self.idCard = idCard
		self.phone = phone
		self.card = card

'''
ATM类
'''

from card import Card
from user import User
import os
import random
import pickle



class ATM(object):
	def __init__(self,allUsers):
		self.allUsers=allUsers #卡号-用户


	#开户
	def createUser(self):
		#目标:向用户字典中添加一对键值对(卡号-用户)
		name = input("请输入您的姓名:")
		idCard = input("输入您的身份证号码:")
		phone = input("请输入您的电话号码:")

		prestoreMoney =int(input("请输入预存款金额:"))
		if prestoreMoney < 0:
			print("预存款金额有误!开户失败...")
			return -1

		onePwd = input("请设置密码:")
		if not self.checkPwd(onePwd):
			print("密码输入错误!开户失败....")
			return 1

		#用户信息
		cardStr=self.randomCard()
		card =Card(cardStr,onePwd,prestoreMoney)
		user = User(name, idCard, phone,card)

		#存到字典
		self.allUsers[cardStr] = user
		print("开户成功!请记住您的卡号(%s)...."%(cardStr))

	#信息判断
	def userInfoJudg(self):
		cardNum = input("请输入您的卡号:")
		# 验证该卡号是否存在
		user = self.allUsers.get(cardNum)
		if not user:
			print("该卡号不存在")
			return False
		if user.card.cardLock:
			print("该卡已经被锁定!如需使用其他功能,请解锁")
			return False

		# 验证密码
		if not self.checkPwd(user.card.cardPwd):
			user.card.cardLock = True
			print("密码三次输入错误!该卡已被锁定!请解锁后再试.....")
			return False

		return user


	#查询信息
	def searchUserInfo(self):
		judg=self.userInfoJudg()
		if judg:
			print("账号:%s  余额:%d"%(judg.card.cardId,judg.card.cardMoney))


	#取款
	def withDrawals(self):

		judg = self.userInfoJudg()
		money = int(input("请输入取款金额:"))
		if money > judg.card.cardMoney:
			print("余额不足!!取款失败!")
			return -1
		if money < 0:
			print("输入金额错误!!请重试")
			return -1

		#取款
		judg.card.cardMoney -=money
		print("取款成功,剩余余额:%d"%(judg.card.cardMoney))

	#存款
	def deposit(self):
		judg = self.userInfoJudg()
		money = int(input("请输入存款金额:"))
		print("当前金额为:%d,存入%d" % (judg.card.cardMoney, money))
		#存款
		judg.card.cardMoney += money
		print("存款成功,当前余额为%d"%(judg.card.cardMoney))

	#转账
	def transfromMoney(self):
		judg = self.userInfoJudg()

		tCard = input("请输入您要转账的卡号:")
		if not tCard:
			print("该卡号不存在")
			return False
		tUser = self.allUsers.get(tCard)
		if tUser.card.cardLock:
			print("该卡已经被锁定!无法转账!")
			return False

		tMoney = int(input("请输入转账金额:"))
		inquire = input("确认转账吗?y/n")
		if inquire == "y":
			if tMoney > judg.card.cardMoney:
				print("卡内余额不足,转账失败")
			if tMoney < 0:
				print("输入金额错误")

			#转账
			judg.card.cardMoney -=tMoney
			tUser.card.cardMoney +=tMoney
			print("转账成功,请稍后查询到账信息....")

	#修改密码
	def changePwd(self):
		judg = self.userInfoJudg()
		tempIdCard = input("请输入您的身份证号码:")
		if tempIdCard != judg.idCard:
			print("身份证输入错误!请重试...")
			return -1
		newPwd = input("请输入新密码")
		newPwd2 = input("请再次输入")
		if newPwd == newPwd2:
			judg.card.cardPwd = newPwd2
			print("密码修改成功,请牢记您的新密码")
		else:
			print("两次输入密码不一致,请重试!")
			return -1


	#锁定
	def lock(self):
		judg = self.userInfoJudg()
		tempIdCard = input("请输入您的身份证号码:")
		if tempIdCard != judg.idCard:
			print("身份证输入错误!锁定失败...")
			return -1

		#锁定
		judg.card.cardLock =True
		print("锁定成功")



	#解锁
	def unlock(self):
		cardNum = input("请输入您的卡号:")
		# 验证该卡号是否存在
		user = self.allUsers.get(cardNum)
		if not user:
			print("该卡号不存在")
			return -1
		if not user.card.cardLock:
			print("此卡没有被锁定,无需解锁!")
			return -1

		# 验证密码
		if not self.checkPwd(user.card.cardPwd):
			print("密码输入错误!解锁失败.....")
			return -1

		tempIdCard = input("请输入您的身份证号码:")
		if tempIdCard != user.idCard:
			print("身份证输入错误!解锁失败...")
			return -1

		#解锁
		user.card.cardLock = False
		print("解锁成功")

	#补卡
	def replace(self):
		judg = self.userInfoJudg()
		ask = input("请确认您的账号,是否继续操作?y/n")
		if ask=="y":
			name = input("请输入您的姓名:")
			idCard = input("输入您的身份证号码:")
			phone = input("请输入您的电话号码:")

			onePwd = input("请设置密码:")
			if not self.checkPwd(onePwd):
				print("密码输入错误!开户失败....")
				return 1

			# 用户信息
			cardStr = self.randomCard()
			ask2 = input("是否将所有金额转至新卡,该操作不可逆?y/n")
			if ask2 == "y":
				newMoney = judg.card.cardMoney
				judg.card.cardMoney = 0
			else:
				print("操作取消!")
				return -1

			card = Card(cardStr, onePwd, newMoney)
			user = User(name, idCard, phone, card)

			# 存到字典
			self.allUsers[cardStr] = user
			print("补卡成功!请记住您的新卡号(%s)...." % (cardStr))

		else:
			print("操作取消!")

	#销户
	def logoutUserInfo(self):
		judg = self.userInfoJudg()
		tempIdCard = input("请输入您的身份证号码:")
		if tempIdCard != judg.idCard:
			print("身份证输入错误!锁定失败...")
			return -1
		kCard = judg.card.cardId
		ask3 = input("您确认要注销账户吗?此操作不可逆 y/n")
		if ask3 == "y":
			self.allUsers.pop(kCard)
			print("账户已注销!")
		else:
			print("操作取消")


	#验证密码
	def checkPwd(self,realPwd):
		for i in range(3):
			tempPwd = input("请输入密码:")
			if tempPwd == realPwd:
				return True
		return False

	#生成卡号:
	def randomCard(self):
		while True:
			str =""
			for i in range(6):
				# 随机生成一个数字
				ch = chr(random.randrange(ord('0'), ord('9') + 1))
				str += ch
			#判断是否重复
			if not self.allUsers.get(str):
				return str

	#用户信息存储到库
	def saveUserInfo(self):
		filePath = os.path.join(os.getcwd(),"allUsers.txt")
		f =open(filePath,"wb")
		pickle.dump(self.allUsers,f)
		f.close()






 

信息存入文件中,每次打开系统时,从文件中读取用户卡号信息。

第一次登入系统时,可以先自己在文件中放入测试数据,否则读取不到文件中的内容

或者可以第一次登入时先不读取文件,自己设定一个字典存入数据,然后将字典数据存入文件中再读取。

源码:https://download.csdn.net/download/qq_38830964/11486484

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值