python实例-银行管理系统(特简单的那种)
python实例学习--极简银行管理系统任务分析任务实现管理员类用户类银行卡类ATM类主函数任务分析任务实现这个实例要求实现一个银行管理系统,系统开始运行时,进入欢迎界面,工作人员输入管理员账户和密码,输入失败直接退出,输入成功进入功能界面;用户选择,开户,查询等功能。其中开`在这里插入代码片`户时需要将信息存储到.txt文件中,并随机生成六位数代码。管理员类用户类银行卡类ATM类主函数...
任务分析
这个实例要求实现一个银行管理系统,系统开始运行时,进入欢迎界面,工作人员输入管理员账户和密码,输入失败直接退出,输入成功进入功能界面;用户选择,开户,查询等功能。其中开户时需要将信息存储到.txt文件中,并随机生成六位数的银行卡号。
这个实例的类写在all_class.py中,然后在mian.py里面运行。
涉及内容:类与对象
字典
读写文件
管理员类
程序运行时需要由工作人员输入管理员账户密码才能进行下一步的功能选择。
#类名:Admin
#属性:
#行为:行为:管理员界面,管理员验证
class Admin(object):
admin = '1' # 设置账户为1
passwd = '1' # 设置密码为1
# 管理员界面
def Adminview(self):
print("****************************************************")
print("* *")
print("* 欢迎登录银行 *")
print("* *")
print("****************************************************")
def Check(self):
inputAdmin = input("请输入管理员账户: ")
if self.admin != inputAdmin:
print("账号输入错误!")
return -1
inputPasswd = input("请输入管理员密码: ")
if self.passwd != inputPasswd:
print("密码输入错误!")
return -1
print("操作成功")
return 0
ATM类
通过该类实现程序的主要功能,其中用户信息通过字典保存。在这个类里面设置了两个字典类型属性:allusers和Data,其中allusers的键是卡号,Data是作为allusers的键值,Data包括了银行卡和用户信息。
# ATM类
class ATM(object):
def __init__(self, allusers, Data):
# 存储所有用户的信息,用字典
self.allUsers = allusers
self.Data = Data
# 服务界面
def atmview(self):
print("**********************************************")
print("* 开户(1) 查询(2) *")
print("* 存款(3) 取款(4) *")
print("* 退出(0) *")
print("**********************************************")
# 开户
def CreatUser(self):
name = input("请输入您的姓名:")
idCard = input("请输入您的身份证号:")
phone = input("请输入您的电话号码:")
Passwd = input("请输入密码:")
cardid = str(randint(100000, 999999)) # 随机生成六位数卡号
preMoney = int(input("请输入您的预存款金额:"))
if preMoney < 0:
print("预存款输入有误,开户失败......")
return -1
# card = Card(cardid, Passwd, preMoney)
# user = User(name, idCard, phone, card)
self.Data["Passwd"] = Passwd
self.Data["preMoney"] = preMoney
self.Data["name"] = name
self.Data["idCard"] = idCard
self.Data["phone"] = phone
self.allUsers[cardid] = self.Data
print("开户成功,请牢记卡号:(%s)" % cardid)
# 查询
def SerchUser(self):
cardnum = input("请输入您的卡号:")
user = self.allUsers.get(cardnum)
if user:
cardpass = input("请输入您的密码:")
if self.allUsers[cardnum]["Passwd"] != cardpass:
print("密码输入错误")
return -1
else:
print("卡号输入错误")
return -1
print("账号:%s 余额:%s" % (cardnum, self.allUsers[cardnum]["preMoney"]))
# 取款
def AddMony(self):
cardnum = input("请输入您的卡号:")
user = self.allUsers.get(cardnum)
if user:
cardpass = input("请输入您的密码:")
if self.allUsers[cardnum]["Passwd"] != cardpass:
print("密码输入错误")
return -1
else:
print("卡号输入错误")
return -1
addmony = int(input("请输入存款金额:"))
self.allUsers[cardnum]["preMoney"] = self.allUsers[cardnum]["preMoney"] + addmony
print("账号:%s 余额:%s" % (cardnum, self.allUsers[cardnum]["preMoney"]))
# 取款
def GetMony(self):
cardnum = input("请输入您的卡号:")
user = self.allUsers.get(cardnum)
if user:
cardpass = input("请输入您的密码:")
if self.allUsers[cardnum]["Passwd"] != cardpass:
print("密码输入错误")
return -1
else:
print("卡号输入错误")
return -1
getmony = int(input("请输入取款金额:"))
if user.card.cardMoney < getmony:
print("余额不足,取款失败")
self.allUsers[cardnum]["preMoney"] = self.allUsers[cardnum]["preMoney"] - getmony
print("账号:%s 余额:%s" % (cardnum, self.allUsers[cardnum]["preMoney"]))
主函数
主函数是在另一个文件运行的,所以不要忘了从上面的文件导入写的类。函数一开始实例化管理员类,对管理员进行检测;然后判断.txt文件里面是否有内容,如果没有,初始化一个空的字典,实例化ATM类,开始在while循环里面运行相关内容。
from all_class import ATM
from all_class import Admin
import os
def main():
admin = Admin()
admin.Adminview()
# 检测管理员
if admin.Check():
return -1
# 判断.txt是否有内容
fr = open("data.txt", 'r+')
if os.path.getsize("data.txt"):
allusers = eval(fr.read())
print(allusers)
else:
allusers = {}
Data = {}
fr.close()
atm = ATM(allusers, Data)
while True:
atm.atmview()
option = input("请输入操作:")
if option == "1":
atm.CreatUser()
elif option == "2":
atm.SerchUser()
elif option == "3":
atm.AddMony()
elif option == "4":
atm.GetMony()
elif option == "0":
fr = open("data.txt", "w+")
fr.write(str(atm.allUsers))
return -1
if __name__ == '__main__':
main()
注意
1)很多人都是将银行卡与用户写成两个类的形式,然后对类的属性赋值,再进行后续操作,但在实现的时候,直接在一个类里面多加个字典类型的属性来存储数据会比那种方便的多。(主要是因为作者在用第一种方法的时候没写出来。。。)
2)这个任务还有一个要求,让用新卡号来重新命名存储数据的.txt文件,需要用到os.rename()方法。这个没有在文章中体现出来(这个是因为每次重命名之后,下一次运行程序的时候打开文件还得改路径名,所以觉得徒增麻烦就没写)
3)定义类的那个文件里面还有个from random import randint,需要移植的话不用忘记加上。
4)在从编辑器里将程序复制过来时不排除手残,或多或少复制错行的情况,如果移植时出现问题,欢迎指正
更多推荐
所有评论(0)