大家好,我是被白菜拱的猪。
一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy!
前因
嘀嘀嘀嘀,微信几百年没有消息的我,几个嘀嘀打破了下午的宁静
哥啊,发你一个python…ok,包在我身上。就是这么的热心肠。
但是哈哈哈哈哈
辛苦钱辛苦钱,这给了我几年后的几十万彩礼钱又添了些瓦片。假如我未来的对象现在看到的话,你可一定要感动的稀里哗啦。这么好的男人那里找???好了不扯犊子了,我对象兴许还在上幼儿园呢,哪里现在会看到这篇博客。
功能介绍
我擦泪,答应这么爽快,自己python学的那么菜,一学期都没怎么听课,上哪给他搞这个课设去,于是乎狡诈的我点开了码云和github搜了搜哈哈哈,无奈没有找到合适的,这么不要不需要太复杂,于是我想起了寒假b站学python的时候看了一个视频,里面有一个银行自动提款机系统,ok,就他了。
嗐,为了能让学弟对象整明白,那我也得看一遍敲一遍啊。这里我不禁头涔涔而泪潸潸了。他这个视频还只是部分代码,想哭,还得我独自补全。
好了,废话不多说,下面开始严肃的介绍一个这个小系统,这个系统主要是基于管理员操作,也就是说一切都是管理员操作的,主要有,开户,查询,取款,转账,ok,no picture you say 个 jb!小二,上图片。
是不是还蛮高大上,别那页面那么简单,其实里面考虑的还蛮全面的。像什么密码输入三次要锁定啦,密码要验证啦。另外所有的输入是以字典的形式存入到allusers.txt文件下的。
下面是文件的层次,方便copy,有View界面类,用户类,卡类,ATM类,还有一个主函数,主要的代码还是在atm类里面。
NO 代码 YOU SAY 个 JB!
view.py
其实叫admin类会更好一些,目的弟弟python能力尚浅,见谅见谅
import time
#界面类
class View(object):
#管理员默认账号,密码
admin="admin"
password="admin"
#打印管理员界面
def printAdminView(self):
print("*************************************************")
print("* *")
print("* *")
print("* 欢迎光临 *")
print("* *")
print("* *")
print("*************************************************")
'''
打印好界面之后,然后管理员登录,该系统是管理员实行的,将输入的管理员账号密码
进行比对,为了方便,这里账号密码设置为admin,admin
'''
def login(self):
inputAdmin=input("请输入管理员账号:")
#假如输入的账号与默认账号不匹配,就返回-1
if(self.admin!=inputAdmin):
print("账号输入错误,退出系统...")
return -1
#账号输入正确,开始密码验证,同样不符合返回-1
inputPassword=input("请输入管理员密码:")
if(inputPassword!=self.password):
print("密码输入错误,退出系统...")
return -1
#走到这一步,密码账号都正确了 返回0 代表成功,成功之后就是展示功能页面
print("登录成功,请稍后...")
#延时0.5秒
time.sleep(0.5)
return 0
def printSysFunctionView(self):
#打印功能界面
print("*************************************************")
print("* 开户(1) 查询(2) *")
print("* 取款(3) 存款(4) *")
print("* 转账(5) 改密(6) *")
print("* 锁定(7) 解锁(8) *")
print("* 补卡(9) 销户(0) *")
print("* 退出(q) *")
print("*************************************************")
return 0
user.py
#用户类,包含了姓名,身份证号,手机号,卡
class User(object):
def __init__(self,name,idCard,phone,card):
self.name=name
self.idCard=idCard
self.phone=phone
self.card=card
card.py
#卡类,包含卡号,密码,存款
class Card(object):
def __init__(self,cardId,password,money):
self.cardId=cardId
self.password=password
self.money=money
#锁定,默认是不锁定
self.cardLock=False
atm.py(主要的代码都在里面)
#ATM类(包含各种操作)
import random
import time
from card import Card
from user import User
class ATM(object):
#ATM存储了所有的用户信息
def __init__(self,allUser):
#allUser存用户信息
self.allUser=allUser
#开户
def createUser(self):
#开户的对象使用字典存储,键值对<卡号-用户信息>
name=input("请输入你的姓名:")
idCard=input("请输入你的身份证号码:")
phone=input("请输入你的电话号码:")
preMoney=int(input("请输入你的预存款金额:"))
#钱不不可能是负数,所以在这里做一个判断
if(preMoney<0):
print("你的输入有误,开户失败...")
return -1
#最后输入密码,然后在输入一次密码要验证
onePassword=input("请输入你的密码:")
#验证密码,密码错误
if not self.checkPassword(onePassword):
print("你的输入有误,开户失败...")
return -1
#走到这一步说明密码输入正确,然后随机生成卡号
strId=self.randomCardId()
#创建card对象
card=Card(strId,onePassword,preMoney)
#创建user对象
user=User(name,idCard,phone,card)
#存入字典中,就说明开卡成功
self.allUser[strId]=user
print("开卡成功...请牢记卡号(%s)"%(strId))
time.sleep(1)
#查询,包含个人信息以及卡号信息
def searchUserInfo(self):
cardId=input("请输入你要查询的卡号:")
#验证是否存在卡号
user=self.allUser.get(cardId)
if not user:
print("卡号不存在,查询失败...")
return -1
# 判断卡是否被锁定
if user.card.cardLock:
print("该卡被锁定!请解锁后在进行其他操作...")
return -1
#有该卡号信息,保护隐私,验证密码之后才能显示个人信息
if not self.checkPassword(user.card.password):
user.card.cardLock=True
print("密码输入错误,该卡被锁定,请解锁后在进行操作...")
return -1
#密码输入正确之后展示个人信息
print("-----个人信息-----")
print("姓名:%s"%(user.name))
print("身份证号:%s"%(user.idCard))
print("手机号:%s"%(user.phone))
print("卡号:%s "%(user.card.cardId))
print("余额:%f"%(user.card.money))
time.sleep(1)
# 取款
def getMoney(self):
cardNum = input("请输入您的卡号:")
# 验证是否存在该卡号
user = self.allUser.get(cardNum)
if not user: # 如果有这个用户就不执行下面的语句,没有这个用户就执行
print("该卡号不存在,取款失败...")
return -1
# 判断卡是否被锁定
if user.card.cardLock:
print("该卡被锁定,请解锁后在进行其他操作...")
return -1
# 验证密码
if not self.checkPassword(user.card.password):
print("密码输入错误...该卡已被锁定,请解锁后在进行其他操作...")
user.card.cardLock = True
return -1
# 取款验证
money = int(input("请输入取款金额:"))
if money > user.card.money:
print("余额不足,取款失败...")
return -1
if money < 0:
print("余额输入错误,取款失败...")
return -1
# 取款
user.card.money -= money
print("取款成功,还剩余额: %d" % (user.card.money))
# 存款
def saveMoney(self):
cardNum = input("请输入您的卡号:")
# 验证是否存在该卡号
user = self.allUser.get(cardNum)
if not user: # 如果有这个用户就不执行下面的语句,没有这个用户就执行
print("该卡号不存在,存款失败...")
return -1
# 判断卡是否被锁定
if user.card.cardLock:
print("该卡被锁定,请解锁后在进行其他操作...")
return -1
# 验证密码
if not self.checkPassword(user.card.password):
print("密码输入错误,该卡已被锁定,请解锁后在进行其他操作...")
user.card.cardLock = True
return -1
# 存款验证
money = int(input("验证成功!!请输入您的存款金额:"))
if money <0:
print("存款金额有误,存款失败!")
return -1
# 开始存款
user.card.money += money
print("您存款%d元,最新余额为%d元!"% (money, user.card.money))
# 转账
def transferMoney(self):
cardNum = input("请输入您的卡号:")
# 验证是否存在该卡号
user = self.allUser.get(cardNum)
if not user: # 如果有这个用户就不执行下面的语句,没有这个用户就执行
print("该卡号不存在,转账失败...")
return -1
# 判断卡是否被锁定
if user.card.cardLock:
print("该卡被锁定,请解锁后在进行其他操作...")
return -1
# 验证密码
if not self.checkPassword(user.card.password):
print("密码输入错误,该卡已被锁定!请解锁后在进行其他操作...")
user.card.cardLock = True
return -1
# 转账验证
money = int(input("验证成功!!请输入您的转账金额:"))
if money > user.card.money or money < 0:
print("金额有误,转账失败")
return -1
# 开始转账
newcardNum = input("请输入转入账户:")
toUser = self.allUser.get(newcardNum)
if not toUser:
print("该卡号不存在,转账失败!")
return -1
# 判断要转的账户是否锁定
if toUser.card.cardLock:
print("该卡已被锁定!!请解锁后再使用其功能!")
return -1
user.card.money -= money
toUser.card.money += money
time.sleep(1)
print("转账成功,请稍后...")
time.sleep(1)
print("转账金额%d元,余额为%d元!" % (money, user.card.money))
# 改密
def changePasswd(self):
cardNum = input("请输入您的卡号:")
# 验证是否存在该卡号
user = self.allUser.get(cardNum)
if not user:
print("该卡号不存在,改密失败!")
return -1
# 判断是否被锁
if user.card.cardLock:
print("该卡已锁定,请解锁后在使用其功能...")
return -1
# 验证密码
if not self.checkPassword(user.card.password):
print("密码输入错误,该卡已被锁定,请解锁后在进行其他操作...")
user.card.cardLock = True
return -1
# 开始改密
newPasswd = input("请输入新密码:")
# 如果新密码和原始密码一样就判定为改密失败
if not self.checkPassword(newPasswd):
print("密码错误,改密失败")
return -1
user.card.password = newPasswd
print("改密成功!!请稍后...")
#锁定
def lockUser(self):
cardId = input("请输入你要锁定的卡号:")
# 验证是否存在卡号
user = self.allUser.get(cardId)
if not user:
print("卡号不存在,锁定失败...")
return -1
# 验证卡是否被锁定
if user.card.cardLock:
print("该卡已被锁定!请解锁后在使用其他功能...")
return -1
# 验证密码,判断是否为本人
if not self.checkPassword(user.card.password):
print("密码输入错误!锁定失败...")
return -1
# 验证身份证号码
tempId=input("请输入你的身份证号码:")
if tempId != user.idCard:
print("身份证号码输入错误,锁定失败...")
return -1
# 锁卡
user.card.cardLock = True
print("锁定成功...")
#解锁, 跟锁定逻辑相同
def unlockUser(self):
cardId = input("请输入你要解锁的卡号:")
# 验证是否存在卡号
user = self.allUser.get(cardId)
if not user:
print("卡号不存在,解锁失败...")
return -1
# 验证卡是否被锁定
if not user.card.cardLock:
print("该卡已被解锁!无需解锁...")
return -1
# 验证密码,判断是否为本人
if not self.checkPassword(user.card.password):
print("密码输入错误!解锁失败...")
return -1
# 验证身份证号码
tempId = input("请输入你的身份证号码:")
if tempId != user.idCard:
print("身份证号码输入错误,解锁失败...")
return -1
# 锁卡
user.card.cardLock = False
print("解锁成功...")
# 补卡
def newCard(self):
cardNum = input("请输入您的卡号:")
# 验证是否存在该卡号
#user = self.allUser.get(cardNum)
user = self.allUser.get(cardNum)
if not user:
print("该卡号不存在")
return -1
tempname = input("请输入您的姓名:")
tempidcard = input("请输入您的省份证号码:")
tempphone = input("请输入您的手机号:")
if tempname != self.allUser[cardNum].name\
or tempidcard != self.allUser[cardNum].idCard\
or tempphone != self.allUser[cardNum].phone:
print("信息输入有误,补卡失败!")
return -1
newPasswd = input("请输入您的新密码:")
if not self.checkPassword(newPasswd):
print("密码错误,补卡失败!")
return -1
self.allUser[cardNum].card.cardPasswd = newPasswd
time.sleep(1)
print("补卡成功,请牢记您的新密码...")
# 销户
def killUser(self):
cardNum = input("请输入您的卡号:")
# 验证是否存在该卡号
user = self.allUser.get(cardNum)
if not user:
print("该卡号不存在,销户!")
return -1
# 判断是否锁定
if user.card.cardLock:
print("该卡已锁定,请解锁后再使用其功能...")
return -1
# 验证密码
if not self.checkPassword(user.card.password):
print("密码输入有误,该卡已锁定,请解锁后再使用其功能...")
user.card.cardLock = True
return -1
del self.allUser[cardNum]
time.sleep(1)
print("销户成功,请稍后!")
#判断密码是否输入正确
def checkPassword(self,realPassword):
#输入正确,直接返回,输入错误,有三次判断机会
for i in range(3):
password=input("请输入你的密码:")
if password==realPassword:
return True
return False
# 随机生成6位数的卡号,并且保证了卡号唯一性
def randomCardId(self):
while True:
str = ""
for i in range(6):
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str += ch
# 判断是否重复,假如在字典里面能够根据卡号取到值,则说明卡号存在
if not self.allUser.get(str):
return str
main.py
#引包
from view import View
from atm import ATM
import time
import pickle
#主方法
def main():
filePath = r"./data/allusers.txt"
f = open(filePath, "rb")
allUsers = pickle.load(f)
print(allUsers)
#先创建一个view对象
view=View()
#调用其打印欢迎界面的方法
view.printAdminView()
#然后登录,根据返回值,判断是否登录成功,登录失败,退出程序
if view.login():
return -1
#登录没有问题,就展示功能页面
#创建一个atm的对象
atm=ATM(allUsers)
while True:
#每次执行操作前,先展示功能页面
view.printSysFunctionView()
#等待用户选择操作
option=input("请选择你的操作:")
#展示操作
if option == "1": # 当用户选择选项后调用ATM类
# 开户
atm.createUser()
elif option == "2":
# 查询
atm.searchUserInfo()
elif option == "3":
# 取款
atm.getMoney()
elif option == "4":
# 存款
atm.saveMoney()
elif option == "5":
# 转账
atm.transferMoney()
elif option == "6":
# 改密码
atm.changePasswd()
elif option == "7":
# 锁定
atm.lockUser()
elif option == "8":
# 解锁
atm.unlockUser()
elif option == "9":
# 补卡
atm.newCard()
elif option == "0":
# 销户
atm.killUser()
elif option =="q":
#退出,将user信息保存在allusers.txt中,方面下次使用
f=open(filePath,"wb")
#写入文件
pickle.dump(atm.allUser,f,0)
f.close()
print("退出成功...")
return -1
time.sleep(1)
if __name__=="__main__":
main()
来个完美的收尾
别忘了还有allusers.txt文件哦,上一篇博客还记录如何将该文件打包成了.exe文件
好了,如果喜欢作者就给个小红心吧。
大家好,我是被白菜拱的猪。
一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy!
古德拜~
悲伤的大结局
代码屁颠屁颠的发给他们之后,网上居然有一模一样的,啊啊啊哭泣,当初谁呀跟我一样看那个视频,把代码敲出来放网上了,木得办再写一个,这次独立自主的写个学生成绩管理系统,在一样我就吃屎。太秃然了。早知道就不做了,我计算机网络,概率论还没看呢。唉难受。