ATM 练习

bank.py

__author__ = 'zhaobin022'
import json
import  tools
import getpass
import  datetime

class DatabaseHelper:
    def __init__(self):
        self.database = 'db.json'
        '''
        self.accountDic = {'zhangsan':
                              {'total':0,
                               'password':tools.getMd5Password('123'),
                               'status':True
                               },
                          'lisi':
                              {'total':0,
                                'password':tools.getMd5Password('456'),
                                'status':True
                               }
                         }
        '''
        self.accountDic =  self.readJson()
       # self.__writeJson()
    def readJson(self):
        with open(self.database) as f:
            return  json.load(f)

    def writeJson(self):
        with open(self.database,'w') as f:
            json.dump(self.accountDic,f)

class Bank:
    def __init__(self):
        self.dh = DatabaseHelper()
    def __login(f):
        def inner(self,*args, **kwargs):
            username = raw_input("username : ")
            username = username.strip()
            accountDic = self.dh.accountDic
            if  accountDic.get(username):
                self.username = username
                count = 0
                if not accountDic[username]['status']: return False,'You account has been locked !'
                while True:
                    password = raw_input("passowrd : ")
                    if accountDic[username]['password'] == tools.getMd5Password(password):
                        return  f(self,*args,**kwargs)
                    else:
                        print "Please input the right password :"
                        count += 1
                        if count == 3:
                            accountDic[username]['status'] = False
                            self.dh.writeJson()
                            return False,'Your account have been locked ! You have inputed wrong password  three times '
            else:
                return False , '''Don't have this account'''
        return inner
    def logout(self,username,password):
        pass

    @__login
    def getMoney(self,  number):
        #number = kwargs['number']
        if number <= 0: return False,"Please input the right number"
        accountDic = self.dh.accountDic.get(self.username)
        if accountDic['total'] >= number:
            accountDic['total']-=float('%0.2f'%number)
            accountDic['total']=float('%0.2f'%accountDic['total'])
            self.dh.writeJson()
            return True,'get %0.2f money , your balance is %0.2f ' % (number,accountDic['total'])
        else:
            return False, """You don't have enough money !"""

    @__login
    def queryMoney(self):
        if self.dh.accountDic.get(self.username):
            return True,self.dh.accountDic.get(self.username).get('total')

    @__login
    def returnMoney(self,number):
        number = float('%s'% number)
        if number <= 0: return False,"Please input the right number"
        accountDic = self.dh.accountDic.get(self.username)
        accountDic['total']+=float('%0.2f'%number)
        self.dh.writeJson()
        return True,'You change %0.2f , and your balance is %0.2f ' % (number,accountDic['total'])

    @__login
    def forwardMoney(self):
        destinationnAccount = raw_input("destinationnAccount")
        destinationnAccount = self.dh.accountDic.get(destinationnAccount.strip())
        account = self.dh.accountDic.get(self.username)
        if destinationnAccount:
            number = raw_input("number :")
            number = float('%s'% number.strip())
            if account['total'] >= number:
                account['total']-=number
                account['total']=float('%0.2f'%account['total'])
                destinationnAccount['total']+=number
                self.dh.writeJson()
                return True,'your balance is %0.2f ' % (account['total'])
            else:
                return False,"You don't have money to transfer accounts !"
        else:
            return False,'The destinationn account not exist !'

    @__login
    def flushCard(self,number):
        if number <= 0: return False,"Please input the right number"
        account = self.dh.accountDic.get(self.username)
        if account['total'] >= number:
            account['total']-=float('%0.2f'%number)
            account['total']=float('%0.2f'%account['total'])
            self.dh.writeJson()
            return True,'flush  %0.2f money , your balance is %0.2f ' % (number,account['total'])
        else:
            return False, """You don't have enough money !"""

db.json

{"lisi": {"status": true, "password": "250cf8b51c773f3f8dc8b4be867a9a02", "total": 2950.0}, "zhangsan": {"status": true, "password": "202cb962ac59075b964b07152d234b70", "total": 11000.0}}

goods.json

{"Python": {"count": 2, "price": 50}, "TV": {"count": 10, "price": 1500}, "Bike": {"count": 3, "price": 500}}

main.py

__author__ = 'zhaobin022'

from bank import Bank
from shop import Shop
from prettytable import PrettyTable



if '__main__' == __name__:
    while True:
        print '''
           1 . Shoping
           2 . ATM
           3 . Quit
           '''
        choice = raw_input("input your choice")
        choice = int(choice)
        if choice == 1:
            s = Shop()
            while True:
                goodDic = s.listGoods()
                print 'go to make deal input (commit) exit input exit'
                good_choice = raw_input("input your choice")


                if good_choice in goodDic.keys():
                    count = raw_input("please input the count")
                    print goodDic[good_choice]
                    print s.addCart(goodDic[good_choice],count)
                    print 'Cart List'
                    s.listCart()
                elif good_choice.strip() == 'commit':
                    print s.makeDeal('lisi')
                elif good_choice.strip() == 'exit':
                    break

        elif choice == 2:
            b = Bank()
            while True:
                print '''
                1 . getMoney
                2 . queryMoney
                3 . returnMoney
                4 . forwardMoney
                5 . quit
                '''
                choice = raw_input("input your choice :")
                if choice.strip() == '1':
                    #username =  raw_input("input your username  :")
                    number = raw_input("input your number :")
                    print b.getMoney(number=int(number))
                elif choice.strip() == '2':
                   # username =  raw_input("input your username  :")
                    print b.queryMoney()
                elif choice.strip() == '3':
                    number = raw_input("input your number :")
                    print b.returnMoney(number=number)
                elif choice.strip() == '4':
                    print b.forwardMoney()
                elif choice.strip() == '5':
                    break
        elif choice == 3:
            break



   # b = Bank()
#  s = Shop()
#  print 'goods list'
#  s.listGoods()
#  print 'cart list'
#  s.listCart()
#  print s.addCart('Bike',2)

#  s.listCart()
#  s.makeDeal(username='lisi')#


#    status , obj = b.queryMoney(username='lisi')
   #print b.getMoney(username='zhangsan',number=5.23)
 #   print b.returnMoney(username='zhangsan',number=0.77)
  #  print b.forwardMoney(username='zhangsan',number=0.77,destinationnAccount='lisi')

shop.py

__author__ = 'zhaobin022'

import bank
import json
import copy
from prettytable import PrettyTable

class DatabaseHelper:
    def __init__(self):
        self.database = 'goods.json'
        '''
        self.goods = {
            'Bike':{'price':500,'count':4},
            'Python':{'price':50,'count':2},
            'TV':{'price':1500,'count':3},
            }
        '''
        self.goods = self.readJson()
     #   self.__writeJson()
    def readJson(self):
       # f = open(self.database)
        with open(self.database) as f:
            self.goods = json.load(f)
            return self.goods


    def writeJson(self):
      #  f = open(self.database,'w')
        with open(self.database,'w') as f:
            json.dump(self.goods,f)

class Shop:
    def __init__(self):
        self.dh = DatabaseHelper()
        self.shopCart = {}

    def addCart(self,name,count):
        if self.dh.goods.has_key(name):
            v = copy.deepcopy(self.dh.goods.get(name))
            if v.get('count') >= int(count):
                v['count'] = int(count)
                self.shopCart[name]=v
                return True,'''add cart successfull'''
            else:
                return False,'''don't have enough goods '''


    def delFromCart(self,name,count):
        if self.shopCart.get(name):
            v = self.shopCart.get(name)
            if count <= v['count']:
                v['count'] -= count
                self.shopCart[name]=v
                return True , '''del Cart successfull'''
            else:
                return False,'''cart don't have enough good '''

    def listCart(self):
        x = PrettyTable(["Name", "Count", "UnitPrice"])
        sum = 0
        for k,v in self.shopCart.items():
            x.add_row([k,v['count'], v['price']])
            sum += v['price']*v['count']

        print x
        print 'Total : %s' % sum
    def listGoods(self):
        tempDic = {}
        print "Goods List"
        x = PrettyTable(["Id", "Name", "Count"])
        x.padding_width = 1
        for k,v in enumerate(self.dh.goods.items()):
            x.add_row([k,v[0], v[1]['count']])
          #  print k,'----------',v[0],'---------',v[1]['count']
            tempDic[str(k)]=v[0]
        print x
        return tempDic
    def makeDeal(self,username):
        sum = 0
        for k,v in self.shopCart.items():
            sum += v.get('price') * v.get('count')
        b = bank.Bank()
        status,obj = b.flushCard(number=sum)
        if status:
            for k,v in self.shopCart.items():
                self.dh.goods[k]['count'] -= v['count']
            self.dh.writeJson()
            return status,obj
        else:
            return False,obj

tools.py

__author__ = 'zhaobin022'


import hashlib

def getMd5Password(password):
     m = hashlib.md5()
     m.update(password)
     return m.hexdigest()
原文地址:https://www.cnblogs.com/zhaobin022/p/5054200.html