zoukankan      html  css  js  c++  java
  • 模拟实现一个ATM + 购物商城程序

    需求:

    1.额度1500或自定义
    2.实现购物商城,买东西加入 购物车,调用信用卡接口结账
    3.可以提现、存款、余额查询和转账等
    4.打印指定日期间购物清单
    5.支持多账户
    6.ATM记录操作所有日志
    7.提供管理接口,包括查询账户、添加账户、注销账户,冻结解冻账户等
    8.日志功能用装饰器

    写这个小项目之前先构思了一下,画个流程图,然后设置好代码的目录结构,实现方式等,把框架写好了,接下来就是一个个小功能的实现啦。
    流程图如下:


    代码目录结构如下:


    我先写了一个用户类,专门提供用户管理。主要功能如下:

      1、账户信息查询
      2、添加新账户
      3、删除账户
      4、修改密码
      5、修改手机号
      6、冻结账户
      7、解冻账户
      8、修改账户信用额度

    把一些环境变量信息写在conf目录下的settings.py里

    # -*- coding: utf-8 -*-
    import time
    import os
    from core import users as u
    
    # 管理员账号密码
    adminName = 'admin'
    adminPassword = 'admin'
    
    # 当前时间
    timeYear = time.strftime('%Y%m%d', time.localtime(time.time()))
    timeDay = time.strftime('%H%M%S', time.localtime(time.time()))
    
    # 信用卡额度
    creditLimit = 15000
    
    # 用户信息文件
    userInfoFile = "../db/user-info.json"
    
    # 商品信息文件
    goodsInfoFile = '../db/goods-info.json'
    
    # 用户购物车文件
    def ShoppingCarFile(username,year=timeYear,day=timeDay):
        dirs = '../db/shoppinCar/%s' % username
        if not os.path.exists(dirs):
            os.makedirs(dirs)
        shoppingInfoFile = '%s/shopping-info_%s%s.json' % (dirs,year,day)
        #print(shoppingInfoFile)
        return shoppingInfoFile
    
    # 日志文件
    logFile = '../log/atm.log'
    
    # log功能,使用装饰器
    def log(func):
        def wrapper(*args, **kwargs):
            users = u.Users().getUser()
            f = open(logFile, "a", encoding="utf-8")
            if func.__doc__ != '查询余额' and func.__doc__ != '修改密码':
                f.write('%s	%s%s%s元
    ' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),users[args[1]]['username'],func.__doc__,args[-1]))
            else:
                f.write('%s	%s%s
    ' % (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),users[args[1]]['username'],func.__doc__))
            f.close()
            return func(*args, **kwargs)
        return wrapper
    settings.py

    接下来就是开始写core目录下的users.py了,把以上的各个小功能逐一实现。

    # -*- coding: utf-8 -*-
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    from conf import settings as ss
    import json
    
    class Users(object):
        '''用户类,管理用户接口'''
    
        def getUser(self):
            '''获取账户信息'''
            try:
                with open(ss.userInfoFile, "r", encoding="utf-8") as f:
                    users = json.load(f)
                    #print(users)
            except:
                print('have no users inof!')
                users = {}
            return users
    
        def setUser(self,users):
            '''重新写入账户信息'''
            with open(ss.userInfoFile, 'w') as f :
                json.dump(users , f , indent="	")
            #print(users)
    
        def checkUser(self,username):
            '''检查用户是否存在'''
            users = self.getUser()
            for userID in users.keys():
                if username == users[userID]['username']:
                    #print('账户名已存在!')
                    return True
            return False
    
        def getUserID(self,username):
            '''通过账户名获取账户id值'''
            users = self.getUser()
            for userID in users.keys():
                if username == users[userID]['username']:
                    return userID
            print('账户不存在!!!')
            return self.turnBack()
    
        def addUser(self,username,password,phone=None,limit=ss.creditLimit,isLock=False):
            '''添加账户'''
            users=self.getUser()
            # 字典key值自动加1
            max_id = "000000"
            if users != {}:
                max_id = max(users.keys())
    
            userID = str(int(max_id) + 1).zfill(6)  # id自动+1,补足6位
            users[userID] = {
                'username':username,
                'password':password,
                'phone':phone,
                'limit':limit,
                'isLock':isLock
            }
            self.setUser(users)
            print(''.center(50,'#'))
            print('账户33[42;1m%s33[0m添加成功' % users[userID]['username'])
            print('账户名: %s' % users[userID]['username'])
            print('手机号: %s' % users[userID]['phone'])
            print('信用卡额度: %s' % users[userID]['limit'])
            print(''.center(50,'#'))
            return True
    
        def delUser(self,userID):
            '''账户注销'''
            users=self.getUser()
            try:
                print('账户33[41;1m%s33[0m已删除!' % users[userID]['username'])
                users.pop(userID)
            except:
                print('账户不存在!')
                return False
            self.setUser(users)
            return True
    
        def frozenUser(self,userID):
            '''冻结账户'''
            users=self.getUser()
            users[userID]['isLock'] = True
            self.setUser(users)
            print('账户%s已冻结!' % users[userID]['username'] )
    
        def thawUser(self,userID):
            '''解冻账户'''
            users=self.getUser()
            users[userID]['isLock'] = False
            self.setUser(users)
            print('账户%s已解除冻结!' % users[userID]['username'] )
    
        def userLoggin(self):
            '''用户登录验证'''
            for i in range (1,4):
                username = input('请输入用户名:')
                if self.checkUser(username):
                    userID = self.getUserID(username)
                    users=self.getUser()
                    if users[userID]['isLock']:
                        print('账户已被冻结,请联系管理员!')
                        exit(-1)
                    password = input('请输入密码:')
                    if self.checkPassword(userID,password):
                        return username,userID
                    else:
                        print('密码错误!')
                else:
                    print('账户不存在!')
            print('操作过于频繁!')
            return False,False
    
        def checkPassword(self,userID,password):
            '''校验密码是否正确'''
            users = self.getUser()
            if password == users[userID]['password']:
                return True
            else:
                return False
    
        @ss.log
        def changePasswd(self,userID):
            '''修改密码'''
            for i in range(1,4):
                old_passwd = input('请输入旧密码:')
                # 校验旧密码是否正确
                check = self.checkPassword(userID,old_passwd)
                if check:
                    for j in range(1,4):
                        if j == 3:
                            print('操作过于频繁')
                            return False
                        new_passwd1 = input('请输入新密码:')
                        if len(new_passwd1) < 8:
                            print('密码不能少于8位!')
                            continue
                        if new_passwd1 == old_passwd:
                            print('新密码不能和旧密码一样!')
                            continue
                        new_passwd2 = input('请再次确认新密码:')
                        if new_passwd1 != new_passwd2:
                            print('两次输入的密码不一致!')
                            continue
                        else:
                            users=self.getUser()
                            users[userID]['password'] = new_passwd1
                            self.setUser(users)
                            print('密码修改成功!')
                            return True
                else:
                    print('旧密码输入错误!')
            print('操作过于频繁。')
            return False
    
        def changePhone(self,userID,phone):
            '''修改手机号'''
            users=self.getUser()
            users[userID]['phone'] = phone
            self.setUser(users)
            print('手机号修改完成!')
            print('账户名: %s' % users[userID]['username'])
            print('手机号: %s' % users[userID]['phone'])
    
        def changeLimit(self,userID,limit):
            '''修改账户信用额度'''
            users=self.getUser()
            users[userID]['limit'] = limit
            self.setUser(users)
            print('账户%s的信用额度已更新为%s' % (users[userID]['username'],users[userID]['limit']))
    
        def turnBack(self):
            '''返回上级菜单'''
            print(''.center(15,'*'))
            print( "1、返回上级")
            print( "2、退出")
            print(''.center(15,'*'))
            while True:
                choise = input("请选择:")
                if choise == '1':
                    self.userManagement()
                elif choise == '2':
                    print ("谢谢使用!")
                    exit(-1)
                else:
                    print ("输入有误,请重新输入!")
    
        def userManagement(self):
            '''账户管理,总入口函数'''
            print('''请选择账户管理操作:
            1、账户信息查询
            2、添加新账户
            3、删除账户
            4、修改密码
            5、修改手机号
            6、冻结账户
            7、解冻账户
            8、修改账户信用额度''')
    
            while True:
                choise=input().strip()
                if choise.isdigit():
                    if '1' == choise:
                        # 账户信息查询
                        users = self.getUser()
                        print(''.center(50,'#'))
                        for i in users.keys():
                            print('账户名: %s' % users[i]['username'])
                            print('手机号: %s' % users[i]['phone'])
                            print('信用卡额度: %s' % users[i]['limit'])
                            print(''.center(50,'#'))
                        self.turnBack()
                        break
                    elif '2' == choise:
                        # 添加新账户
                        username = input('请输入用户名:')
                         # 校验用户名是否已存在
                        if self.checkUser(username):
                            print('账户已存在!')
                            self.turnBack()
                            break
                        password = input('请输入密码:')
                        phone = input('请输入手机号:')
                        self.addUser(username,password,phone)
                        self.turnBack()
                        break
                    elif '3' == choise:
                        # 删除账户
                        username = input('请输入要删除的账号名:')
                        userID = self.getUserID(username)
                        self.delUser(userID)
                        self.turnBack()
                        break
                    elif '4' == choise:
                        # 修改密码
                        username = input('请输入要修改密码的账号名:')
                        userID = self.getUserID(username)
                        self.changePasswd(userID)
                        self.turnBack()
                        break
                    elif '5' == choise:
                        # 修改手机号
                        username = input('请输入要修改手机号的账号名:')
                        userID = self.getUserID(username)
                        phone = input('请输入新手机号:')
                        self.changePhone(userID,phone)
                        self.turnBack()
                        break
                    elif '6' == choise:
                        # 冻结账户
                        username = input('请输入要冻结的账号名:')
                        userID = self.getUserID(username)
                        self.frozenUser(userID)
                        self.turnBack()
                        break
                    elif '7' == choise:
                        # 解冻账户
                        username = input('请输入要解除冻结的账号名:')
                        userID = self.getUserID(username)
                        self.thawUser(userID)
                        self.turnBack()
                        break
                    elif '8' == choise:
                        # 修改账户信用额度
                        username = input('请输入要更改信用额度的账号名:')
                        userID = self.getUserID(username)
                        limit = input('请输入要更改的信用额度:')
                        if limit.isdigit():
                            self.changeLimit(userID,limit)
                        else:
                            print('输入无效,更新失败!')
                        self.turnBack()
                        break
    
                    else:
                        print('请输入有效数字!')
    
                else:
                    print('请输入有效数字!')
    
    def run():
        users=Users()
        users.userManagement()
    
    if __name__ == '__main__':
        run()
    users.py

    把用户类实现后,接下来是管理员的商品类啦,可以实现商品的上架、下架、修改商品价格已经商品查询功能等

    # -*- coding: utf-8 -*-
    
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    from conf import settings as ss
    import json
    
    class Goods(object):
        '''商品类'''
    
        def getGoods(self):
            '''获取账户信息'''
            try:
                with open(ss.goodsInfoFile, "r", encoding="utf-8") as f:
                    goods = json.load(f)
                    #print(goods)
            except:
                print('have no goods inof!')
                goods = []
            #print(goods)
            return goods
    
        def setGoods(self,goods):
            '''写入商品信息'''
            with open(ss.goodsInfoFile, "w", encoding="utf-8") as f:
                json.dump(goods, f, ensure_ascii=False, indent="	")
    
        def printGoods(self):
            '''打印商品列表'''
            goods = self.getGoods()
            print(''.center(20,'-'))
            print('所有商品列表如下:')
            print(''.center(20,'-'))
            print('序号		名称		价格')
            print(''.center(20,'-'))
            for name,price in goods:
                print(goods.index([name,price]), '	', name,"	",price)
                print(''.center(20,'-'))
    
        def checkPrice(self,price):
            '''校验输入的价格是否为有效数字'''
            if price.isdigit():
                return int(price.strip())
            else:
                print('请输入有效数字!')
                return False
    
        def checkName(self,name):
            '''校验商品名称是否存在'''
            goods = self.getGoods()
            for goodName,price in goods:
                if name == goodName:
                    return True
            return False
    
        def goodsShelves(self):
            '''商品上架'''
            name = input("请输入要上架的商品名称").strip()
            if self.checkName(name):
                print('商品已存在!')
                return False
            price=input("请输入该商品的价格")
            if self.checkPrice(price):
                goods = self.getGoods()
                goods.append([name,int(price)])
                print('商品33[32;1m%s33[0m已上架完成!价格为:33[32;1m%s33[0m' % (name,int(price)))
                self.setGoods(goods)
                return True
    
        def goodDelete(self):
            '''商品下架'''
            name = input("请输入要下架的商品名称").strip()
            if not self.checkName(name):
                print('商品不存在!')
                return False
            else:
                goods = self.getGoods()
                for goodName,goodsPrice in goods:
                    if goodName == name:
                        goods.remove([goodName,goodsPrice])
                        #print(goods)
                        print('商品33[41;1m%s33[0m已下架成功!' % name)
                        self.setGoods(goods)
                        return True
    
        def goodSearch(self,name):
            '''商品搜索查询'''
            if not self.checkName(name):
                print('商品不存在!')
                return False
            else:
                goods = self.getGoods()
                for goodName,goodsPrice in goods:
                    if name == goodName:
                        # 获取商品在list中的index值
                        index = goods.index([goodName,goodsPrice])
                        #print(index)
                        print('商品价格为:')
                        print(name,'	',goods[index][1])
                        return (goods,index,True)
    
        def goodModify(self,name):
            '''修改商品价格'''
            goods,index,Flag = self.goodSearch(name)
            #print(Flag,'
    ',goods,"
    ",index)
            price=input("请要修改商品的价格")
            if self.checkPrice(price):
                goods[index][1] = int(price)
                self.setGoods(goods)
                print('商品价格修改完成!')
                print(goods[index][0],"	","33[32;1m%s33[0m"  % goods[index][1] )
                return True
    
        def turnBack(self):
            '''返回上级菜单'''
            print(''.center(15,'*'))
            print( "1、返回上级")
            print( "2、退出")
            print(''.center(15,'*'))
            while True:
                choise = input("请选择:")
                if choise == '1':
                    self.goodManagement()
                elif choise == '2':
                    print ("谢谢使用!")
                    exit(-1)
                else:
                    print ("输入有误,请重新输入!")
    
        def goodManagement(self):
            '''用户选择'''
            print("请选择操作:")
            print("1、打印商品列表")
            print("2、商品上架")
            print("3、商品下架")
            print("4、修改商品价格")
            print("5、商品查询")
            while True:
                choice = input().strip()
                if choice.isdigit():
                    choice = int(choice)
                    if 1 == choice:
                        # 打印商品列表
                        self.printGoods()
                        self.turnBack()
                        break
                    elif 2 == choice:
                        # 商品上架
                        self.goodsShelves()
                        self.turnBack()
                        break
                    elif 3 == choice:
                        # 商品下架
                        self.goodDelete()
                        self.turnBack()
                        break
                    elif 4 == choice:
                        # 修改商品价格
                        name = input("请要修改商品价格的名称:").strip()
                        self.goodModify(name)
                        self.turnBack()
                        break
                    elif 5 == choice:
                        # 商品查询
                        name = input("请输入要查询商品价格的名称:").strip()
                        self.goodSearch(name)
                        self.turnBack()
                        break
                    else:
                        print("输入有误,请重新输入")
                else:
                    print("请输入有效数字!")
    
    def run():
        goods = Goods()
        goods.goodManagement()
    
    if __name__ == '__main__':
        run()
    goods.py

    emmm,管理员的两大块就完成啦,接下来就是普通用户的一些操作啦,这个开发顺序也是要稍微注意一下的,先实现管理员的功能,就有了普通用户的信息嘛,然后再实现普通用户,这就可以直接用已有的账户信息啦,然后接着实现ATM功能,再实现购物功能,这样购物结算的时候就可以调用AMT结算啦。

    废话不多说,看看ATM类的主要功能:

    1、存款
    2、取款
    3、转账
    4、查询余额
    5、修改密码

    # -*- coding: utf-8 -*-
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    from core import users as u
    from conf import settings as ss
    
    class ATM(object):
        '''ATM类'''
    
        @ss.log
        def deposit(self,userID,money):
            '''存款'''
            # 调用用户类的获取用户信息方法
            users = u.Users().getUser()
            try:
                users[userID]['money'] = int(users[userID]['money']) +  money
            except:
                # 第一次存钱
                users[userID]['money'] = money
            # 调用用户类,重新写入用户信息
            u.Users().setUser(users)
            #print('账户%s已存入%s元!' % (users[userID]['username'],money) )
            #print('总余额为: %s 元' % users[userID]['money'])
            return True
        @ss.log
        def withdrawals(self,userID,money):
            '''取款'''
            users = u.Users().getUser()
            try:
                int(users[userID]['money'])
                if money > users[userID]['money']:
                    print('余额不足!!')
                    return False
                else:
                    users[userID]['money'] -= money
            except:
                print('余额不足!')
                return False
            u.Users().setUser(users)
            #print('账户%s已取出%s元!' % (users[userID]['username'],money) )
            #print('总余额为: %s 元' % users[userID]['money'])
            return True
        @ss.log
        def transfer(self,userID1,userID2,money):
            '''转账'''
            # 直接调用取款、存款函数,取款成功了再存款。
            if self.withdrawals(userID1,money):
                self.deposit(userID2,money)
                return True
            return False
    
        @ss.log
        def queryBalance(self,userID):
            '''查询余额'''
            users = u.Users().getUser()
            try:
                print('账户%s的余额为:
    %s元' % (users[userID]['username'],users[userID]['money']))
            except:
                print('账户%s的余额为:
    0元' % (users[userID]['username']))
    
        def turnBack(self,userID):
            '''返回上级菜单'''
            print(''.center(15,'*'))
            print( "1、返回上级")
            print( "2、退出")
            print(''.center(15,'*'))
            while True:
                choise = input("请选择:")
                if choise == '1':
                    self.atmOperation(userID)
                elif choise == '2':
                    print ("谢谢使用!")
                    exit(-1)
                else:
                    print ("输入有误,请重新输入!")
    
        def inputMoney(self,userID):
            '''输入金额'''
            money = input()
            if money.isdigit():
                return int(money)
            else:
                print('输入不是有效数字!')
            return  self.turnBack(userID)
    
        def atmOperation(self,userID):
            '''ATM操作,总入口函数'''
    
            print('''请选择:
            1、存款
            2、取款
            3、转账
            4、查询余额
            5、修改密码''')
            while True:
                choise=input().strip()
                if '1' == choise:
                    # 存款
                    print('请输入存款金额:')
                    money = self.inputMoney(userID)
                    self.deposit(userID,money)
                    print('存入%s元成功!' % (money))
                    self.turnBack(userID)
                    break
                elif '2' == choise:
                    # 取款
                    print('请输入取款金额!')
                    money = self.inputMoney(userID)
                    if self.withdrawals(userID,money):
                        print('已取出%s元!请收好!' % (money))
                    self.turnBack(userID)
                    break
                elif '3' == choise:
                    # 转账
                    username = input('请输入要转账的账户名:')
                    checkUser =  u.Users().checkUser(username)
                    if checkUser:
                        print('请输入要转账金额:')
                        money = self.inputMoney(userID)
                        userID2 = u.Users().getUserID(username)
                        if self.transfer(userID,userID2,money):
                            print('已成功向%s转账%s元!' % (username, money))
                    else:
                        print('账户不存在!')
                    self.turnBack(userID)
                    break
                elif '4' == choise:
                    # 查询余额
                    self.queryBalance(userID)
                    self.turnBack(userID)
                    break
    
                elif '5' == choise:
                    # 修改密码
                    u.Users().changePasswd(userID)
                    self.turnBack(userID)
                    break
                else:
                    print('输入有误!')
    
    def run():
        atm = ATM()
        print('欢迎登录瑞士银行!!')
        # 登录验证,通过后返回userID值
        username,userID = u.Users().userLoggin()
        if userID:
            atm.atmOperation(userID)
    
    if __name__ == '__main__':
        run()
    atm.py

    接下来就是普通用户的购物,这个比其他功能复杂点的地方就是不同的用户购物信息要分类存储。

    # -*- coding: utf-8 -*-
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    from core import goods as g
    from core import atm as a
    from conf import settings as ss
    from core import users as u
    import json
    
    class ShoppingCar(object):
        '''用户购物'''
    
        def getBuyList(self,username):
            '''读取用户购物车清单'''
            try:
                with open(ss.ShoppingCarFile(username), "r", encoding="utf-8") as f:
                    buyList = json.load(f)
                    #print(buyList)
            except:
                print('have no goods inof!')
                buyList = []
            #print(buyList)
            return buyList
    
        def setBuyList(self,username,buyList):
            '''将用户购物清单写入文件中'''
            with open(ss.ShoppingCarFile(username), "w", encoding="utf-8") as f:
                json.dump(buyList, f, ensure_ascii=False, indent="	")
    
        def printBuyList(self,username):
            '''打印购物车列表'''
            sum = 0
            buyList = self.getBuyList(username)
            print(''.center(20,'-'))
            print('购买商品列表如下:')
            print(''.center(20,'-'))
            print('名称		价格')
            print(''.center(20,'-'))
            for name,price in buyList:
                print(name,"	",price)
                sum = sum + int(price)
            print(''.center(20,'-'))
            print('总计:	 %s' % sum)
            return sum
    
        def buyList(self,username,choice):
            '''请选择购物'''
            buyList = self.getBuyList(username)
            goods = g.Goods().getGoods()
            if choice < len(goods) and choice >=0:
                print(goods[choice])
                buyList.append(goods[choice])
                #print(buyList)
                self.setBuyList(username,buyList)
                print('加入购物车成功')
            else:
                print('商品未上架!')
            return buyList
    
        def shopping(self,username,userID):
            '''购物'''
            goods = g.Goods().printGoods()
            print(goods)
            while True:
                print('请选择,停止购物按q')
                choice = input().strip()
                if choice != 'q':
                    if choice.isdigit():
                        choice = int(choice)
                        self.buyList(username,choice)
                    else:
                        print('请输入有效数字!')
                else:
                    # 获取购物车总价
                    sum = self.printBuyList(username)
                    print('开始结算!')
                    n = 2
                    while n >=0:
                        password = input('请输入银行卡密码:')
                        if u.Users().checkPassword(userID,password):
                            # 调用银行卡接口结算
                            if a.ATM().withdrawals(userID,sum):
                                print('结算成功!')
                                return True
                            else:
                                print('结算失败!')
                        else:
                            if n !=0:
                                print('密码错误!你还有%s次尝试机会!' % n)
                            else:
                                print('尝试次数已用完,结算失败!')
                        n -=1
                    # 清空本次购物信息
                    #buyList = ['结算失败!']
                    #self.setBuyList(username, buyList)
                    os.remove(ss.ShoppingCarFile(username))
                    return False
    
    
    def run():
        s = ShoppingCar()
        print('欢迎登录XXX网上购物商城!')
        # 登录验证,通过后返回userID值
        username,userID = u.Users().userLoggin()
        if userID:
            s.shopping(username,userID)
    
    if __name__ == '__main__':
        run()
    shopping.py

    最后就是写一个总的入口功能啦,在bin/main.py里去实现调用以上各个功能。

    # -*- coding: utf-8 -*-
    # 2019/7/10 16:57
    
    import os,sys
    BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_DIR)
    from core import goods as g
    from core import atm as a
    from conf import settings as ss
    from core import users as u
    from core import shopping as s
    
    def checkAdmin():
        '''校验管理员账号密码'''
        i = 2
        while i >= 0:
            username = input('请输入管理员账号:')
            if username == ss.adminName:
                j = 2
                while j >= 0:
                    password = input('请输入管理员密码:')
                    if password == ss.adminPassword:
                        return True
                    else:
                        print('管理员密码输入有误!')
                        if j == 0:
                            print('账号已锁定,请10分钟后重新尝试!')
                            return False
                        else:
                            print('你还有%s次尝试机会!' % j)
                    j -=1
    
            else:
                print('管理员账号输入有误!')
                if i != 0:
                    print('你还有%s次尝试机会!' % i)
                else:
                    print('账号已锁定,请10分钟后重新尝试!')
            i -=1
        return False
    
    def averageUser():
        '''普通用户操作'''
        print('''请选择操作:
        1、购买商品
        2、ATM操作''')
        while True:
            choice = input().strip()
            if '1' == choice:
                s.run()
                break
            elif '2' == choice:
                a.run()
                break
            else:
                print('输入有误!')
    
    def adminManagement():
        '''管理员操作'''
        print('''请选择操作:
        1、商品管理
        2、用户管理''')
        while True:
            choice = input().strip()
            if '1' == choice:
                g.run()
                break
            elif '2' == choice:
                u.run()
                break
            else:
                print('输入有误!')
    
    
    def run():
        '''程序入口函数'''
        print('''欢迎进入ATM+购物程序!
        请选择操作:
        1、普通用户
        2、管理员''')
        while True:
            choice = input().strip()
            if '1' == choice:
                averageUser()
                break
            elif '2' == choice:
                if checkAdmin():
                    adminManagement()
                break
            else:
                print('输入有误!')
    
    
    if __name__ == '__main__':
        run()
    main.py

    再给ATM的操作加上日志功能,这里用了装饰器,直接应用到ATM操作的函数上,而不改变原来函数的调用方式。就写了一个log函数,放在settings.py里啦,就不再单独写一个py文件。

    源码链接:https://github.com/caiqinxiong/ATM-Shopping.git

  • 相关阅读:
    centos 安装Phpstorm
    PostgreSQL 里面的 BIGSERIAL
    如何下载symfony
    换行
    javaScript 真经 小感 this 指向
    css3 抖动
    jq 抖动效果
    还是 js 替代 vw vh 了
    常用 Math 属性及方法
    js 判断浏览器类型及版本
  • 原文地址:https://www.cnblogs.com/hulk-1029/p/11132424.html
Copyright © 2011-2022 走看看