Python之路08-模拟实现一个ATM + 购物商城程序

需求:

1.额度 自定义
2.实现购物商城,买东西加入 购物车,调用信用卡接口结账
3.可以提现,手续费5%
4.打印指定日期间购物清单
5.支持多账户
6.支持账户间转账
7.记录每月日常消费流水
8.提供还款接口
9.ATM记录操作所有日志
10.提供管理接口,包括查询账户、添加账户、注销账户,冻结解冻账户等。。。
11.用户认证用装饰器

代码目录结构如下:

Python之路08-模拟实现一个ATM + 购物商城程序

 



对于只有一些Python基础的我来说,这算是个比较大的项目了,先实现了第10点,写了一个用户类,专门提供用户管理。主要功能如下:

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

conf目录下的settings.py

 

Python之路08-模拟实现一个ATM + 购物商城程序
# -*- coding: utf-8 -*-

# 信用卡额度
creditLimit = 15000

# 用户信息文件
userInfoFile = "../db/user-info.json"
settings.py

 

core目录下的users.py

Python之路08-模拟实现一个ATM + 购物商城程序
# -*- coding: utf-8 -*-

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)
                return 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="\t")
        #print(users)

    def checkUser(self,username):
        '''检查用户是否存在'''
        users = self.getUser()
        for userID in users.keys():
            if username in 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('账户\033[42;1m%s\033[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('账户\033[41;1m%s\033[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 checkPassword(self,userID,password):
        '''校验密码是否正确'''
        users = self.getUser()
        if password == users[userID]['password']:
            return True
        else:
            return False

    def changePasswd(self,userID,password):
        '''修改密码'''
        users=self.getUser()
        users[userID]['password'] = password
        self.setUser(users)

    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)
                    old_passwd = input('请输入旧密码:')
                    check = self.checkPassword(userID,old_passwd)
                    if check:
                        new_passwd1 = input('请输入新密码:')
                        new_passwd2 = input('请再次确认新密码:')
                        if new_passwd1 != new_passwd2:
                            print('两次输入的密码不一致!')

                        else:
                            self.changePasswd(userID,new_passwd1)
                            print('密码修改成功!')
                    else:
                        print('旧密码输入错误!')
                    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('请输入有效数字!')




if __name__ == '__main__':
        users=Users()
        users.userManagement()
users.py

部分功能执行效果如下:

C:\Python37-32\python.exe E:/python_test/ATM-Shopping/core/users.py
请选择账户管理操作:
        1、账户信息查询
        2、添加新账户
        3、删除账户
        4、修改密码
        5、修改手机号
        6、冻结账户
        7、解冻账户
        8、修改账户信用额度
1
##################################################
账户名: lixiaoxin
手机号: 12345678901
信用卡额度: 15000
##################################################
账户名: spiderman
手机号: 1234
信用卡额度: 15000
##################################################
账户名: hulk
手机号: 1233432554544
信用卡额度: 15000
##################################################
账户名: caiqinxiong
手机号: 1234545
信用卡额度: 100000
##################################################
***************
1、返回上级
2、退出
***************
请选择:1
请选择账户管理操作:
        1、账户信息查询
        2、添加新账户
        3、删除账户
        4、修改密码
        5、修改手机号
        6、冻结账户
        7、解冻账户
        8、修改账户信用额度
2
请输入用户名:lixiaoxin
账户已存在!
***************
1、返回上级
2、退出
***************
请选择:1
请选择账户管理操作:
        1、账户信息查询
        2、添加新账户
        3、删除账户
        4、修改密码
        5、修改手机号
        6、冻结账户
        7、解冻账户
        8、修改账户信用额度
2
请输入用户名:IronMan
请输入密码:123
请输入手机号:1243245434545
##################################################
账户IronMan添加成功
账户名: IronMan
手机号: 1243245434545
信用卡额度: 15000
##################################################
***************
1、返回上级
2、退出
***************
请选择:1
请选择账户管理操作:
        1、账户信息查询
        2、添加新账户
        3、删除账户
        4、修改密码
        5、修改手机号
        6、冻结账户
        7、解冻账户
        8、修改账户信用额度
3
请输入要删除的账号名:hulk
账户hulk已删除!
***************
1、返回上级
2、退出
***************
请选择:2
谢谢使用!

Process finished with exit code 1

 

上一篇:python之循环与判断


下一篇:Spring事务