用Python实现银行系统

#1:分析需要创立的对象

            #需要类 :用户,卡,银行,提款机,管理员

'''

用户:

类明:User

属性:姓名  身份证号  电话号  卡

行为:

卡:

类目:Card

属性:卡号  密码  余额  锁定与否

银行:

类名:

属性:调用txt用户文件

提款机:

类目:ATM

属性:用户字典

行为:开户,查询,取款,存款,转账,改密,锁定,解锁,补卡,销户

管理员:

类名:Admin

属性:

行为:管理员界面  管理员登陆  系统功能界面 

#2:创建所属对象

   # 1:创建main()程序

from admin import Admin

from atm import ATM

import time      

import pickle

import os

def main():

     #管理员开机

    #界面对象

    admin=Admin()

    admin.printAdminView()

    if admin.adminOption():

        return -1   

    #存储所有用户信息

    #提款机对象

    filepath=os.path.join(os.getcwd(),r'作业\银行系统实战\allusers.txt')

    f=open(filepath,'rb')

    allUsers=pickle.load(f)

    atm=ATM(allUsers)

    while True: 

        #等待用户操作

        admin.printSysFunctionView()

        option=input('请输入你的操作:')

        if option =='1':

            #开户

            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 =='t':

            #退出

            if not admin.adminOption():

                #将当前系统中的用户信息保存到文件中

                filePath=os.path.join(os.getcwd(),r'作业\银行系统实战\allusers.txt')

                print(filePath)

                f=open(filePath,'wb')

                pickle.dump(atm.allUsers,f)

                f.close()

                return -1

        time.sleep(2)

if __name__=='__main__':

        main()

#2:创建allusers.txt文档

#3:创建admin()对象

    import time

class Admin(object):

    admin='1'

    passwd='1'    

    def printAdminView(self):

        print('*****************************************************')

        print('*****************************************************')

        print('*                                                   *')

        print('*                   欢迎登录新手银行                *')

        print('*                                                   *')

        print('*****************************************************')

        print('*****************************************************')

    def printSysFunctionView(self):

        print('*****************************************************')

        print('*       开户(1)                   查询(2)            *')

        print('*       取款(3)                   存款(4)            *')

        print('*       转账(5)                   改密(6)            *')

        print('*       锁定(7)                   解锁(8)            *')

        print('*       补卡(9)                   销户(0)            *')

        print('*                     退出(t)                        *')

        print('*****************************************************')

    def adminOption(self):

        printAdmin=input('请输入管理员账户:')

        if self.admin!=printAdmin:

            print('账号输入有误!!')

            return -1 # return -1表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败

        else:

            printPasswd=input('请输入管理员密码:')

            if Admin.passwd!=printPasswd:

                print('密码输入有误!!')

                return -1 #return -1表示返回一个代数值,一般用在子函数结尾。按照程序开发的一般惯例,表示该函数失败

            #能执行到这里说明账号密码正确

            print('操作成功!请稍后······')

            time.sleep(2)

            return 0  #return 0 表示函数正常结束

#4:创建card()对象

class Card(object):

    def __init__(self,cardId,cardPasswd,cardMoney):

        self.cardId=cardId

        self.cardPasswd=cardPasswd

        self.cardMoney=cardMoney

        self.cardLock=False

#5:创建user()对象

class User(object):

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

        self.name=name

        self.idCard=idCard

        self.phone=phone

        self.card=card

#6:创建atm()对象

from user import User

from card import Card

import random

class ATM(object):

    def __init__(self,allUsers):

        self.allUsers=allUsers #卡号对应用户

    def createUser(self):

        #想用户字典中添加键值对(卡号,对象)

        name=input('请输入你的姓名:')

        idCard=input('输入你的身份证号码:')

        phone=input('请输入你的电话号码:')

        prestoreMoney=eval(input('请输入预存款金额:'))

        if prestoreMoney<0:

            print('预存款输入有误!开户失败····')

            return -1

        onePasswd=eval(input('请设置密码:'))

        #验证密码

        if not self.checkPasswd(onePasswd):

            print('密码输入错误!开户失败·····')

            return -1

        #所有信息全了

        cardId=self.randomCardId()

        card=Card(cardId,onePasswd,prestoreMoney)

        user=User(name,idCard,phone,card)

        #保存到字典

        self.allUsers[cardId]=user

        print('开户成功!请牢记卡号%d······'%(cardId))

    def searchUserInfo(self):

        user=self.checkCard()

        if user==-1:

            return -1

        print('账号:%d   余额:%d '%(user.card.cardId,user.card.cardMoney))

    def getMoney(self):

        user=self.checkCard()

        if user==-1:

            return -1

        money=int(input('请输入取款金额:'))

        if money>user.card.cardMoney:

            print('余额不足!!取款失败·····')

            return -1

        #取款

        user.card.cardMoney-=money

        print('取款成功!!余额为%d'%(user.card.cardMoney))

    def saveMoney(self):

        user=self.checkCard()

        if user==-1:

            return -1

        money=int(input('请输入存款金额:'))

        #存款

        user.card.cardMoney+=money

        print('存款成功!!余额为%d'%(user.card.cardMoney))

    def transferMoney(self):

        cardNum=int(input('请输入你的卡号:'))

        #验证是否存在该卡号

        user1=self.allUsers.get(cardNum)

        if not user1:

            print('该卡号不存在!!查询失败·····')

            return -1

        #判断是否锁定

        if user1.card.cardLock==True:

            print('该卡已被锁定!!请解锁后进行其他操作····')

            return -1

            #验证密码

        if  not self.checkPasswd(user1.card.cardPasswd):

            print('密码输入错误!!该卡已被锁定!!请解锁后进行其他操作····')

            user1.card.cardLock=True

            return -1

        cardOther=int(input('请输入你要转账的卡号:'))

        user2=self.allUsers.get(cardOther)

        if not user2:

            print('该卡号不存在!!查询失败·····')

            return -1

        if user2.card.cardLock==True:

            print('该卡已被锁定!!请通知收账人解锁后在进行转账操作····')

            return -1

        money=int(input('请输入你要转账的金额:'))

        if money>user1.card.cardMoney:

            print('你卡号的金额不足!!转账失败······')

            return -1

        user1.card.cardMoney-=money

        user2.card.cardMoney+=money

        print('转账成功!!!当前余额为%d'%(user1.card.cardMoney))

    def changePasswd(self):

        user=self.checkCard()

        if user==-1:

            return -1

        onePasswd=eval(input('请输入你要设定的密码:'))

        if onePasswd==user.card.cardPasswd:

            print('新密码不能与旧密码相同!!改密失败·····')

            return -1

        if not self.checkPasswd(onePasswd):

            print('密码不同!!改密失败····')

        user.card.cardPasswd=onePasswd

        print('改密成功!!请牢记密码%d'%(onePasswd))

    def lockUser(self):

        cardNum=int(input('请输入你的卡号:'))

        #验证是否存在该卡号

        user=self.allUsers.get(cardNum)

        if not user:

            print('该卡号不存在!!锁定失败·····')

            return -1

        if  user.card.cardLock:

            print('该卡已经被锁定!!请解锁后在使用其他功能') 

            return -1

        if  not self.checkPasswd(user.card.cardPasswd):

            print('密码输入错误!!锁定失败·····')

            return -1

        tempIdCard=input('请输入你的身份证号码:')

        if tempIdCard!=user.idCard:

            return -1

        #锁定

        user.card.cardLock=True

        print('锁定成功')    

    def unlockUser(self):

        cardNum=int(input('请输入你的卡号:'))

        #验证是否存在该卡号

        user=self.allUsers.get(cardNum)

        if not user:

            print('该卡号不存在!!锁定失败·····')

            return -1

        if  not user.card.cardLock:

            print('该卡没有被锁定!!无需解锁····') 

            return -1

        if  not self.checkPasswd(user.card.cardPasswd):

            print('密码输入错误!!解锁失败·····')

            return -1

        tempIdCard=input('请输入你的身份证号码:')

        if tempIdCard!=user.idCard:

            return -1

        #锁定

        user.card.cardLock=False

        print('解锁成功')    

    def newCard(self):

        user=self.checkCard()

        if user==-1:

            return -1

        cardId=self.randomCardId()

        card=Card(cardId,user.card.cardPasswd,user.card.cardMoney)

        print('你当前卡号为%d'%(cardId))

        self.allUsers.pop(user.card.cardId)

    def killUser(self):

        user=self.checkCard()

        if user==-1:

            return -1

        if user.card.cardMoney!=0:

            print('你所要注销的卡中还有余额,余额为%d !!请取款或转账后在继续注销操作····'%(user.card.cardMoney))

            return -1

        boolean=input('是否注销卡号为%d的卡的全部  同意则输入yes,不同意则为no'%(user.card.cardId))

        if boolean=='yes':

            self.allUsers.pop(user.card.cardId)

            print('注销成功!!!')

        else:

            print('注销失败!!!!')

    #验证密码

    def checkPasswd(self,realPasswd):

        for i in range(3):

            tempPasswd=int(input('请输入密码'))

            if tempPasswd==realPasswd:

                return True

        return False  

    #生成卡号

    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.allUsers.get(str):

                return int(str)

    def checkCard(self):

        cardNum=int(input('请输入你的卡号:'))

        #验证是否存在该卡号

        user=self.allUsers.get(cardNum)

        if not user:

            print('该卡号不存在!!查询失败·····')

            return -1

        #判断是否锁定

        if user.card.cardLock==True:

            print('该卡已被锁定!!请解锁后进行其他操作····')

            return -1

            #验证密码

        if  not self.checkPasswd(user.card.cardPasswd):

            print('密码输入错误!!该卡已被锁定!!请解锁后进行其他操作····')

            user.card.cardLock=True

            return -1

        return user

#完成操作

#效果展示


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355