ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-04 15:02:17  阅读:184  来源: 互联网

标签:username users 账户 Python 08 ATM userID print self


需求:

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

代码目录结构如下:

 



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

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

conf目录下的settings.py

 

# -*- coding: utf-8 -*-

# 信用卡额度
creditLimit = 15000

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

 

core目录下的users.py

# -*- 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

 

标签:username,users,账户,Python,08,ATM,userID,print,self
来源: https://www.cnblogs.com/hulk-1029/p/11132424.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有