1. 首页
  2. Python

还在为不知做什么项目上手好?python教你开发银行系统

“u003Cdivu003Eu003Cpu003E众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石。下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办业务时候会有个自助的ATM机,现在大部分业务都是由他来解决的。首先自己想一想,用面向对象的思想该怎样实现这个系统呢?都有哪些对象?他们各自的功能都有什么?想到的越多越好,在实现的时候,碰到一个问题解决一个问题,过程当中问题很多,也不是很容易解决,不过也就是这样的过程才能学到新的东西。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002F4cb29290-f931-43e6-8dbb-c6d3dc87f7a5″ img_width=”1024″ img_height=”576″ alt=”还在为不知做什么项目上手好?python教你开发银行系统” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E u003Cstrongu003E一、准备工作u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E首先走进银行的大门,会有工作人员来询问需要办理什么业务,当然得实话实说了,不过这个和系统没什么关系(* ̄︶ ̄)。接下来,如果要办理的业务是比较大众化的,可以在机器上完成,那么她就会带着我们到一个庞大的小机器旁边。前面他还需要操作几下,来让机器可以为我们工作,有时可以见到招呼一个更高级的员工来输下指纹。这些我们可以理解为管理员来启动系统(有些人是不是觉得哪有这么麻烦,主要我这里说的是银行里面那几台功能比较全的,不单单是简单的自动取款机)。u003Cu002Fpu003Eu003Cpu003E接下来该办理我们的业务了,都有哪些业务呢?先列举一些:查余额,存款,取款,转账,改个密码,还可以挂失锁卡,对应还能解锁,把最基本的忘记了,没有办卡哪有这些操作呢,开户也得算上,补卡,销户等等。u003Cu002Fpu003Eu003Cpu003E到这里了,我们和实际情况相比没有实体的卡,所以会有一些差异。剩下的过程中想到了再说。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fdfic-imagehandleru002F74b39883-baad-475c-aca2-e4c7536c1c1f” img_width=”1023″ img_height=”683″ alt=”还在为不知做什么项目上手好?python教你开发银行系统” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E二、转换思想u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E前面大概确定了需要实现的功能,最终我们还是要写成代码,所以得从编程的思想来考虑那些需求。u003Cu002Fpu003Eu003Cpu003E首先要考虑这个系统中有哪些对象,从人到银行的ATM机都有哪些事物。人,银行卡,ATM机,这三个是必须有的了,还需要什么,开始办理业务时候那个帮我们操作的人有很多和我们用户不一样的操作,把他也当做一个对象。u003Cu002Fpu003Eu003Cpu003E人。人这个对象有哪些属性呢?人有自己的一些信息,还有银行卡,剩下要办理的业务我们人为的给定。u003Cu002Fpu003Eu003Cpu003E卡。卡也有本身的一些信息。u003Cu002Fpu003Eu003Cpu003EATM。atm机的功能就要多一些了,首先就是上面整理出来的那些存取款等等的功能,他都得实现。除此之外还有个工作人员对他的操作,他也得处理一下。u003Cu002Fpu003Eu003Cpu003E工作人员。他们有启用和关闭这个系统的权利。u003Cu002Fpu003Eu003Cpu003E大体方向有了,剩下的就一点点的完善。u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E三、功能实现u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E先从简单的开始,前面说到,客户和卡的属性还是比较单纯的,那就先把他们解决了。u003Cu002Fpu003Eu003Cpreu003E1 # 银行卡:卡号,卡的密码,余额u003Cbru003E2 class Card(object):u003Cbru003E3 def __init__(self, cardId, cardPasswd, cardMoney):u003Cbru003E4 self.cardId = cardIdu003Cbru003E5 self.cardPasswd = cardPasswdu003Cbru003E6 self.cardMony = cardMoneyu003Cbru003Eu003Cu002Fpreu003Eu003Cpreu003E1 # 客户:姓名,身份证号,手机号,银行卡(性别年龄那些只是多了个属性,操作时一样的,就不多写了)u003Cbru003E2 class User(object):u003Cbru003E3 def __init__(self, name, idCard, phone, card):u003Cbru003E4 self.name = nameu003Cbru003E5 self.idCard = idCardu003Cbru003E6 self.phone = phoneu003Cbru003E7 self.card = cardu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E以上两个类是对银行卡的客户的一个初始化,里面都是列写了一下必要的属性,比如补卡得用身份证,这里通过身份证号代替,等等。其中人的属性里的卡就是上面定义的卡,人的这一个卡属性就包括卡的内部几个属性。u003Cu002Fpu003Eu003Cpu003E接下来写一下管理员的功能:u003Cu002Fpu003Eu003Cpreu003E 1 import timeu003Cbru003E 2 u003Cbru003E 3 class Admin(object):u003Cbru003E 4 # 为管理员设置个账号密码,为了不随便让人能操作一些危险的内容。u003Cbru003E 5 admin = “1”u003Cbru003E 6 passwd = “1”u003Cbru003E 7 u003Cbru003E 8 # 我们把初始的界面就放在管理员的类里了,他是第一个操作这个机器的嘛u003Cbru003E 9 def printAdminView(self):u003Cbru003E10 print(“****************************************************”)u003Cbru003E11 print(“* *”)u003Cbru003E12 print(“* *”)u003Cbru003E13 print(“* 欢迎登陆银行 *”)u003Cbru003E14 print(“* *”)u003Cbru003E15 print(“* *”)u003Cbru003E16 print(“****************************************************”)u003Cbru003E17 u003Cbru003E18 def printSysFunctionView(self):u003Cbru003E19 print(“****************************************************”)u003Cbru003E20 print(“* 开户(1) 查询(2) *”)u003Cbru003E21 print(“* 取款(3) 存款(4) *”)u003Cbru003E22 print(“* 转账(5) 改密(6) *”)u003Cbru003E23 print(“* 锁定(7) 解锁(8) *”)u003Cbru003E24 print(“* 补卡(9) 销户(0) *”)u003Cbru003E25 print(“* 退出(q) *”)u003Cbru003E26 print(“****************************************************”)u003Cbru003E27 u003Cbru003E28 # 这里就是开始时候得验证一下是不是管理员,然后再决定是不是给他这些权利u003Cbru003E29 def adminOption(self):u003Cbru003E30 inputAdmin = input(“请输入管理员账号:”) u003Cbru003E31 if self.admin != inputAdmin:u003Cbru003E32 print(“输入账号有误!”)u003Cbru003E33 return -1u003Cbru003E34 inputPasswd = input(“请输入管理员密码:”)u003Cbru003E35 if self.passwd != inputPasswd:u003Cbru003E36 print(“密码输入有误!”)u003Cbru003E37 return -1u003Cbru003E38 u003Cbru003E39 # 能执行到这里说明账号密码正确u003Cbru003E40 print(“操作成功,请稍后······”)u003Cbru003E41 time.sleep(2)u003Cbru003E42 return 0u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上面的代码中有个time.sleep(),这个是为了让系统更生动一些,设置的延迟,来模拟系统在大量数据时操作的时延。u003Cu002Fpu003Eu003Cpu003E前面几个是比较好理解的,现在开始实现我们的系统的功能。这些就放在ATM机的模块里了,有需求就再修改添加策略。u003Cu002Fpu003Eu003Cpu003E按照上面的那个目录的顺序来,第一个要实现的功能就是开户。开户就得创建出那一系列的属性。并且这些信息我们还需要存储起来,要不然下次再来的时候就发现自己办的卡已经无效了。这些信息可以使用一个键值对来存储,那么key用哪个属性呢。考虑一下,姓名:可能有重名的,身份证号:这个人也许会办不止一张卡,最保险的就是卡号了,不会有卡号相同的吧。那么卡号作为key,其他的个人信息,银行卡信息都存到value中去。现在就在ATM下初始化一个字典(这里还有点问题,稍后再说)。u003Cu002Fpu003Eu003Cpreu003E1 def __init__(self, allUsers):u003Cbru003E2 self.allUsers = allUsers # 用户字典u003Cbru003Eu003Cu002Fpreu003Eu003Cpreu003E1 # 开户u003Cbru003E 2 def creatUser(self):u003Cbru003E 3 # 目标:向用户字典中添加一对键值对(卡号->用户)u003Cbru003E 4 name = input(“请输入您的名字:”)u003Cbru003E 5 idCard = input(“请输入您的身份证号:”)u003Cbru003E 6 phone = input(“请输入您的电话号码:”)u003Cbru003E 7 prestoreMoney = int(input(“请输入预存款金额:”))u003Cbru003E 8 if prestoreMoney < 0:u003Cbru003E 9 print(“预存款输入有误!开户失败”)u003Cbru003E10 return -1u003Cbru003E11 u003Cbru003E12 onePasswd = input(“请设置密码:”)u003Cbru003E13 u003Cbru003E14 # 生成银行卡号u003Cbru003E15 cardStr = self.randomCardId() #生成号码通过一个函数来实现,让这里的逻辑更清晰一点u003Cbru003E16 card = Card(cardStr, onePasswd, prestoreMoney) # 把卡的信息放到这张卡的对象中u003Cbru003E17 u003Cbru003E18 user = User(name, idCard, phone, card) # 个人信息也存入客户的对象中u003Cbru003E19 # 存到字典u003Cbru003E20 self.allUsers[cardStr] = user # 这就实现了通过一个银行卡号来索引个人信息以及里面的银行卡属性u003Cbru003E21 print(“开户成功!请记住卡号:” + cardStr)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上面有个生成银行卡没有说,这个其实不难,只要随机生成一组数就可以了,不过这个随机生成的得保证不能和前面已经有的卡号重复了,否则索引就有问题了。u003Cu002Fpu003Eu003Cpreu003E 1 # 生成卡号u003Cbru003E 2 def randomCardId(self):u003Cbru003E 3 while True:u003Cbru003E 4 str = “”u003Cbru003E 5 for i in range(6):u003Cbru003E 6 ch = chr(random.randrange(ord(“0”), ord(“9”) + 1))u003Cbru003E 7 str += chu003Cbru003E 8 # 判断是否重复u003Cbru003E 9 if not self.allUsers.get(str): # 这里是通过找一下原来的字典中是否有这个key,如果没有的话那么这个卡号就合法,前面要有个not,没有找到这个卡号那么我们创建这个卡号u003Cbru003E10 return stru003Cbru003E u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上面已经可以开通一个账户并存储了,不过我们在真正开户时候都需要输入两次密码来确保密码不会不小心输错,其实后面有些功能也需要验证密码。可以再写一个函数来验证密码,以后使用的时候也可以直接调用。u003Cu002Fpu003Eu003Cpreu003E1 # 验证密码u003Cbru003E2 def checkPasswd(self, realPasswd): # 这里传入的参数就是我们第一次输入的密码,下面要检验第一次输入是不是有误u003Cbru003E3 for i in range(3):u003Cbru003E4 tempPasswd = input(“请输入密码:”)u003Cbru003E5 if tempPasswd == realPasswd:u003Cbru003E6 return Trueu003Cbru003E7 return Falseu003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E其实后面的一些功能和这个是类似的,这里就不赘述了,先动手试一试,尽量的想的全面些。我会把完整的代码放在最后,可以参考一下。u003Cu002Fpu003Eu003Cpu003E最终要实现这些功能还是再写一个主程序比较好,更直观,也方便把理清他们之间的关系。首先主程序里需要调用管理员的登录,之后是客户的使用。管理员的登录上面写了,再调用一下就可以。客户的需求需要把每项功能和操作对应起来。先显示出都有哪些功能可以选择,再操作。比如像这样:u003Cu002Fpu003Eu003Cpreu003E 1 while True:u003Cbru003E 2 admin.printSysFunctionView()u003Cbru003E 3 # 等待用户操作u003Cbru003E 4 option = input(“请输入您的操作:”)u003Cbru003E 5 if option == “1”:u003Cbru003E 6 # print(‘开户’)u003Cbru003E 7 atm.creatUser()u003Cbru003E 8 elif option == “2”:u003Cbru003E 9 # print(“查询”)u003Cbru003E10 atm.searchUserInfo()u003Cbru003E11 elif option == “3”:u003Cbru003E12 # print(“取款”)u003Cbru003E13 atm.getMoney()u003Cbru003E14 elif option == “4”:u003Cbru003E15 # print(“存储”)u003Cbru003E16 atm.saveMoney()u003Cbru003E17 elif option == “5”:u003Cbru003E18 # print(“转账”)u003Cbru003E19 atm.transferMoney()u003Cbru003E20 elif option == “6”:u003Cbru003E21 # print(“改密”)u003Cbru003E22 atm.changePasswd()u003Cbru003E23 elif option == “7”:u003Cbru003E24 # print(“锁定”)u003Cbru003E25 atm.lockUser()u003Cbru003E26 elif option == “8”:u003Cbru003E27 # print(“解锁”)u003Cbru003E28 atm.unlockUser()u003Cbru003E29 elif option == “9”:u003Cbru003E30 # print(“补卡”)u003Cbru003E31 atm.newCard()u003Cbru003E32 elif option == “0”:u003Cbru003E33 # print(“销户”)u003Cbru003E34 atm.killUser()u003Cbru003E35 elif option == “q”:u003Cbru003E36 # print(“退出”)u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上面这所有的操作,都需要最终长期存储到键值对中,我们这里先用文件来储存,也可以存储到数据库中。既然要长期存储起来,就得把他序列化到磁盘上,使用pickle库。u003Cu002Fpu003Eu003Cpreu003E1 # 每次使用前,需要把内容先加载下来u003Cbru003E 2 filepath = os.path.join(os.getcwd(), “allusers.txt”)u003Cbru003E 3 f = open(filepath, “rb”)u003Cbru003E 4 allUsers = pickle.load(f)u003Cbru003E 5 atm = ATM(allUsers)u003Cbru003E 6 u003Cbru003E 7 # 而在操作结束的时候,要把操作过的内容重新写到磁盘中u003Cbru003E 8 f = open(filepath, “wb”)u003Cbru003E 9 pickle.dump(atm.allUsers, f)u003Cbru003E10 f.close()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E到这里就出现了个问题,pickle.load(),当我们第一次使用时里面并没有存储东西,他自然也就不知道我们想要存储什么样格式的内容。所以第一次我们得手动的创建一个空字典,然后将一组信息存进去。下回使用的时候就可以直接load来使用。u003Cu002Fpu003Eu003Cpu003E在一开始测试的时候记不得里面存储的内容,我就先写了个查看信息的隐藏功能。后来感觉也许银行后台应该也有这样的功能,就没有删掉,虽然是很简单的显示,至少可以体现出他的思想。有兴趣的同学可以做的更好点。u003Cu002Fpu003Eu003Cpreu003E1 # 这是上面使用这个功能的入口,并没有显式的展示出来,仅当管理员这样操作时会调用函数u003Cbru003E2 elif option == “1122332244”:u003Cbru003E3 admin.ban(allUsers)u003Cbru003E4 u003Cbru003E5 # 这里是调用函数后显示所有存储的信息的内容u003Cbru003E6 def ban(self, allUsers):u003Cbru003E7 for key in allUsers:u003Cbru003E8 print(“账号:” + key + “\n” + “姓名:” + allUsers[key].name + “\n” + “身份证号:” + allUsers[key].idCard + “\n” + “电话号码:” + allUsers[u003Cbru003E9 key].phone + “\n” + “银行卡密码:” + allUsers[key].card.cardPasswd + “\n”)u003Cbru003E u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上面我只是把系统的其中一部分拿出来解释了一下,需要把里面的功能完善一下。比如把密码验证等等得放到功能里面,还有一些面向对象的操作,需要创建对象,还需要考虑到每个对象之间的关系,比如银行卡的对象作为客户对象的属性,需要通过参数传进去。仔细琢磨一下,把这个系统完成。在下面放上完整的程序,上面东西不是很清晰的话,那就一点一点的看下面的代码,找找感觉。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fdfic-imagehandleru002Fb0b8b25d-190e-4019-b328-08d8fe9dfb9f” img_width=”1200″ img_height=”800″ alt=”还在为不知做什么项目上手好?python教你开发银行系统” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpreu003Eimport timeu003Cbru003Eimport randomu003Cbru003Eimport pickleu003Cbru003Eimport osu003Cbru003E u003Cbru003E u003Cbru003Eclass Card(object):u003Cbru003E def __init__(self, cardId, cardPasswd, cardMoney):u003Cbru003E self.cardId = cardIdu003Cbru003E self.cardPasswd = cardPasswdu003Cbru003E self.cardMony = cardMoneyu003Cbru003E self.cardLock = False # 后面到了锁卡的时候需要有个卡的状态u003Cbru003E u003Cbru003E u003Cbru003Eclass User(object):u003Cbru003E def __init__(self, name, idCard, phone, card):u003Cbru003E self.name = nameu003Cbru003E self.idCard = idCardu003Cbru003E self.phone = phoneu003Cbru003E self.card = cardu003Cbru003E u003Cbru003E u003Cbru003Eclass Admin(object):u003Cbru003E admin = “1”u003Cbru003E passwd = “1”u003Cbru003E u003Cbru003E def printAdminView(self):u003Cbru003E print(“****************************************************”)u003Cbru003E print(“* *”)u003Cbru003E print(“* *”)u003Cbru003E print(“* 欢迎登陆银行 *”)u003Cbru003E print(“* *”)u003Cbru003E print(“* *”)u003Cbru003E print(“****************************************************”)u003Cbru003E u003Cbru003E def printSysFunctionView(self):u003Cbru003E print(“****************************************************”)u003Cbru003E print(“* 开户(1) 查询(2) *”)u003Cbru003E print(“* 取款(3) 存款(4) *”)u003Cbru003E print(“* 转账(5) 改密(6) *”)u003Cbru003E print(“* 锁定(7) 解锁(8) *”)u003Cbru003E print(“* 补卡(9) 销户(0) *”)u003Cbru003E print(“* 退出(q) *”)u003Cbru003E print(“****************************************************”)u003Cbru003E u003Cbru003E def adminOption(self):u003Cbru003E inputAdmin = input(“请输入管理员账号:”)u003Cbru003E if self.admin != inputAdmin:u003Cbru003E print(“输入账号有误!”)u003Cbru003E return -1u003Cbru003E inputPasswd = input(“请输入管理员密码:”)u003Cbru003E if self.passwd != inputPasswd:u003Cbru003E print(“密码输入有误!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 能执行到这里说明账号密码正确u003Cbru003E print(“操作成功,请稍后······”)u003Cbru003E time.sleep(2)u003Cbru003E return 0u003Cbru003E u003Cbru003E def ban(self, allUsers):u003Cbru003E for key in allUsers:u003Cbru003E print(“账号:” + key + “\n” + “姓名:” + allUsers[key].name + “\n” + “身份证号:” + allUsers[key].idCard + “\n” + “电话号码:” + allUsers[u003Cbru003E key].phone + “\n” + “银行卡密码:” + allUsers[key].card.cardPasswd + “\n”)u003Cbru003E u003Cbru003E u003Cbru003Eclass ATM(object):u003Cbru003E def __init__(self, allUsers):u003Cbru003E self.allUsers = allUsers # 用户字典u003Cbru003E u003Cbru003E # 开户u003Cbru003E def creatUser(self):u003Cbru003E # 目标:向用户字典中添加一对键值对(卡号->用户)u003Cbru003E name = input(“请输入您的名字:”)u003Cbru003E idCard = input(“请输入您的身份证号:”)u003Cbru003E phone = input(“请输入您的电话号码:”)u003Cbru003E prestoreMoney = int(input(“请输入预存款金额:”))u003Cbru003E if prestoreMoney < 0:u003Cbru003E print(“预存款输入有误!开户失败”)u003Cbru003E return -1u003Cbru003E u003Cbru003E onePasswd = input(“请设置密码:”)u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(onePasswd):u003Cbru003E print(“输入密码错误,开户失败!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 生成银行卡号u003Cbru003E cardStr = self.randomCardId()u003Cbru003E card = Card(cardStr, onePasswd, prestoreMoney)u003Cbru003E u003Cbru003E user = User(name, idCard, phone, card)u003Cbru003E # 存到字典u003Cbru003E self.allUsers[cardStr] = useru003Cbru003E print(“开户成功!请记住卡号:” + cardStr)u003Cbru003E u003Cbru003E # 查询u003Cbru003E def searchUserInfo(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,查询失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E user.card.cardLock = Trueu003Cbru003E return -1u003Cbru003E print(“账号:%s 余额:%d” % (user.card.cardId, user.card.cardMony))u003Cbru003E u003Cbru003E # 取款u003Cbru003E def getMoney(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,取款失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E user.card.cardLock = Trueu003Cbru003E return -1u003Cbru003E u003Cbru003E # 开始取款u003Cbru003E amount = int(input(“验证成功!请输入取款金额:”))u003Cbru003E if amount > user.card.cardMony:u003Cbru003E print(“取款金额有误,取款失败!”)u003Cbru003E return -1u003Cbru003E if amount < 0:u003Cbru003E print(“取款金额有误,取款失败!”)u003Cbru003E return -1u003Cbru003E user.card.cardMony -= amountu003Cbru003E print(“您取款%d元,余额为%d元!” % (amount, user.card.cardMony))u003Cbru003E u003Cbru003E # 存款u003Cbru003E def saveMoney(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,存款失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E user.card.cardLock = Trueu003Cbru003E return -1u003Cbru003E u003Cbru003E # 开始存款u003Cbru003E amount = int(input(“验证成功!请输入存款金额:”))u003Cbru003E if amount < 0:u003Cbru003E print(“存款金额有误,存款失败!”)u003Cbru003E return -1u003Cbru003E user.card.cardMony += amountu003Cbru003E print(“您存款%d元,最新余额为%d元!” % (amount, user.card.cardMony))u003Cbru003E u003Cbru003E # 转账u003Cbru003E def transferMoney(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,转账失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E user.card.cardLock = Trueu003Cbru003E return -1u003Cbru003E u003Cbru003E # 开始转账u003Cbru003E amount = int(input(“验证成功!请输入转账金额:”))u003Cbru003E if amount > user.card.cardMony or amount < 0:u003Cbru003E print(“金额有误,转账失败!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E newcard = input(“请输入转入账户:”)u003Cbru003E newuser = self.allUsers.get(newcard)u003Cbru003E if not newuser:u003Cbru003E print(“该卡号不存在,转账失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if newuser.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E user.card.cardMony -= amountu003Cbru003E newuser.card.cardMony += amountu003Cbru003E time.sleep(1)u003Cbru003E print(“转账成功,请稍后···”)u003Cbru003E time.sleep(1)u003Cbru003E print(“转账金额%d元,余额为%d元!” % (amount, user.card.cardMony))u003Cbru003E u003Cbru003E # 改密u003Cbru003E def changePasswd(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,改密失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E user.card.cardLock = Trueu003Cbru003E return -1u003Cbru003E print(“正在验证,请稍等···”)u003Cbru003E time.sleep(1)u003Cbru003E print(“验证成功!”)u003Cbru003E time.sleep(1)u003Cbru003E u003Cbru003E # 开始改密u003Cbru003E newPasswd = input(“请输入新密码:”)u003Cbru003E if not self.checkPasswd(newPasswd):u003Cbru003E print(“密码错误,改密失败!”)u003Cbru003E return -1u003Cbru003E user.card.cardPasswd = newPasswdu003Cbru003E print(“改密成功!请稍后!”)u003Cbru003E u003Cbru003E # 锁定u003Cbru003E def lockUser(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,锁定失败!”)u003Cbru003E return -1u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已被锁定,请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,锁定失败!”)u003Cbru003E return -1u003Cbru003E tempIdCard = input(“请输入您的身份证号码:”)u003Cbru003E if tempIdCard != user.idCard:u003Cbru003E print(“身份证号输入有误,锁定失败!”)u003Cbru003E return -1u003Cbru003E # 锁定u003Cbru003E user.card.cardLock = Trueu003Cbru003E print(“锁定成功!”)u003Cbru003E u003Cbru003E u003Cbru003E # 解锁u003Cbru003E def unlockUser(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,解锁失败!”)u003Cbru003E return -1u003Cbru003E if not user.card.cardLock:u003Cbru003E print(“该卡未被锁定,无需解锁!”)u003Cbru003E return -1u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,解锁失败!”)u003Cbru003E return -1u003Cbru003E tempIdCard = input(“请输入您的身份证号码:”)u003Cbru003E if tempIdCard != user.idCard:u003Cbru003E print(“身份证号输入有误,解锁失败!”)u003Cbru003E return -1u003Cbru003E # 解锁u003Cbru003E user.card.cardLock = Falseu003Cbru003E print(“解锁成功!”)u003Cbru003E u003Cbru003E # 补卡u003Cbru003E def newCard(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在!”)u003Cbru003E return -1u003Cbru003E tempname = input(“请输入您的姓名:”)u003Cbru003E tempidcard = input(“请输入您的身份证号码:”)u003Cbru003E tempphone = input(“请输入您的手机号码:”)u003Cbru003E if tempname != self.allUsers[cardNum].name\u003Cbru003E or tempidcard != self.allUsers.idCard\u003Cbru003E or tempphone != self.allUsers.phone:u003Cbru003E print(“信息有误,补卡失败!”)u003Cbru003E return -1u003Cbru003E newPasswd = input(“请输入您的新密码:”)u003Cbru003E if not self.checkPasswd(newPasswd):u003Cbru003E print(“密码错误,补卡失败!”)u003Cbru003E return -1u003Cbru003E self.allUsers.card.cardPasswd = newPasswdu003Cbru003E time.sleep(1)u003Cbru003E print(“补卡成功,请牢记您的新密码!”)u003Cbru003E u003Cbru003E # 销户u003Cbru003E def killUser(self):u003Cbru003E cardNum = input(“请输入您的卡号:”)u003Cbru003E # 验证是否存在该卡号u003Cbru003E user = self.allUsers.get(cardNum)u003Cbru003E if not user:u003Cbru003E print(“该卡号不存在,转账失败!”)u003Cbru003E return -1u003Cbru003E # 判断是否锁定u003Cbru003E if user.card.cardLock:u003Cbru003E print(“该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E return -1u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E if not self.checkPasswd(user.card.cardPasswd):u003Cbru003E print(“密码输入有误,该卡已锁定!请解锁后再使用其功能!”)u003Cbru003E user.card.cardLock = Trueu003Cbru003E return -1u003Cbru003E u003Cbru003E del self.allUsers[cardNum]u003Cbru003E time.sleep(1)u003Cbru003E print(“销户成功,请稍后!”)u003Cbru003E u003Cbru003E # 验证密码u003Cbru003E def checkPasswd(self, realPasswd):u003Cbru003E for i in range(3):u003Cbru003E tempPasswd = input(“请输入密码:”)u003Cbru003E if tempPasswd == realPasswd:u003Cbru003E return Trueu003Cbru003E return Falseu003Cbru003E u003Cbru003E # 生成卡号u003Cbru003E def randomCardId(self):u003Cbru003E while True:u003Cbru003E str = “”u003Cbru003E for i in range(6):u003Cbru003E ch = chr(random.randrange(ord(“0”), ord(“9”) + 1))u003Cbru003E str += chu003Cbru003E # 判断是否重复u003Cbru003E if not self.allUsers.get(str):u003Cbru003E return stru003Cbru003E u003Cbru003E u003Cbru003E# 主函数,不在上面的类中u003Cbru003Edef main():u003Cbru003E # 界面对象u003Cbru003E admin = Admin()u003Cbru003E u003Cbru003E # 管理员开机u003Cbru003E admin.printAdminView()u003Cbru003E if admin.adminOption():u003Cbru003E return -1u003Cbru003E u003Cbru003E # 由于一开始文件里并没有数据,不知道要存的是个字典,先存一个,后面再把这个关了u003Cbru003E # allUsers = {}u003Cbru003E u003Cbru003E # 提款机对象u003Cbru003E filepath = os.path.join(os.getcwd(), “allusers.txt”)u003Cbru003E f = open(filepath, “rb”)u003Cbru003E allUsers = pickle.load(f)u003Cbru003E atm = ATM(allUsers)u003Cbru003E u003Cbru003E while True:u003Cbru003E admin.printSysFunctionView()u003Cbru003E # 等待用户操作u003Cbru003E option = input(“请输入您的操作:”)u003Cbru003E if option == “1”:u003Cbru003E # print(‘开户’)u003Cbru003E atm.creatUser()u003Cbru003E elif option == “2”:u003Cbru003E # print(“查询”)u003Cbru003E atm.searchUserInfo()u003Cbru003E elif option == “3”:u003Cbru003E # print(“取款”)u003Cbru003E atm.getMoney()u003Cbru003E elif option == “4”:u003Cbru003E # print(“存储”)u003Cbru003E atm.saveMoney()u003Cbru003E elif option == “5”:u003Cbru003E # print(“转账”)u003Cbru003E atm.transferMoney()u003Cbru003E elif option == “6”:u003Cbru003E # print(“改密”)u003Cbru003E atm.changePasswd()u003Cbru003E elif option == “7”:u003Cbru003E # print(“锁定”)u003Cbru003E atm.lockUser()u003Cbru003E elif option == “8”:u003Cbru003E # print(“解锁”)u003Cbru003E atm.unlockUser()u003Cbru003E elif option == “9”:u003Cbru003E # print(“补卡”)u003Cbru003E atm.newCard()u003Cbru003E elif option == “0”:u003Cbru003E # print(“销户”)u003Cbru003E atm.killUser()u003Cbru003E elif option == “q”:u003Cbru003E # print(“退出”)u003Cbru003E if not admin.adminOption():u003Cbru003E # 将当前系统中的用户信息保存到文件当中u003Cbru003E f = open(filepath, “wb”)u003Cbru003E pickle.dump(atm.allUsers, f)u003Cbru003E f.close()u003Cbru003E return -1u003Cbru003E elif option == “1122332244”:u003Cbru003E admin.ban(allUsers)u003Cbru003E u003Cbru003E time.sleep(2)u003Cbru003E u003Cbru003Eif __name__ == “__main__”:u003Cbru003E main()u003Cbru003Eu003Cu002Fpreu003Eu003Cpu003E上面就是整个系统了,其实主要还是思想,模块较多,没有全部解释,如果程序当中有哪里不理解,可以留言讨论。注意上述完整代码主要是供大家了解整个系统,想要实现还需在自己电脑上重新配置,注意那些文件的路径,还有一个存放信息的txt文件,把他搞懂后,相信让他运行起来不难。u003Cu002Fpu003Eu003Cpu003E最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。u003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:还在为不知做什么项目上手好?python教你开发银行系统

主题测试文章,只做测试使用。发布者:逗乐男神i,转转请注明出处:http://www.cxybcw.com/12920.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code