ATM购物车布局

项目开发流程

  # 公司中的项目流程几乎都可以分为以下五个步骤
  '''假设我们是一家外包公司 专门给别人编写软件'''
  # 1.需求分析
  	产品经理带着开发部门老大(架构师、研发经理)去客户公司寻求客户的需求
    	见客户之前架构师和研发经理会先大致了解一下客户的需求
      然后琢磨出一套比较容易编写的流程
      之后在于客户交谈中引导客户按照提前设想好的流程提需求
      ps:这么做的目的是为了防止客户提出一些无厘头的要求!!!

  # 2.架构设计
  	架构师会根据具体的业务需求选择
    	开发的编程语言、
      项目的后端框架、
      项目所需的数据库(主库、从库)
      项目组织结构(软件开发目录规范、自定义结构)
   		项目功能划分(将一个大项目拆分成多个小项目)
      项目的报价(开发人员数量 天数等:  一个程序员一天按照1500+算)
      	还需要产品经理继续叠加报价(其他部分人员开销等)

  # 3.分组开发
  	将项目拆分之后的多个小项目交给不同开发部门下的多个编程人员编写
    	每个人可能只会写很小的一部分(降低复杂度 提升开发效率 缩短开发周期)
      ps:码畜 >>> 码农

  # 4.项目测试
  	交给测试部门全面测试
    	语法错误千万不要提交到测试部门才被发现 这样可能会扣绩效甚至三次之后直接全铺盖走人!!!
    ps:跟测试小姐姐搞好关系 这样的话很多bug都不需要提交报告 私下提醒并修改即可

  # 5.交付上线
  	将项目打包给运维人员运行维护即可
  """
  小公司可能需要你一个人完成上面所有的事情
  	小公司很累 但是成长速度很快(整体参与)
  	大公司轻松 但是成长速度缓慢(只拧螺丝)
  """

需求分析

  # 项目大致需求
    - 额度15000或自定义
    - 支持多账户登录
    - 可以查看账户余额
    - 可以提现(可自定义手续费比例)
    - 提供还款接口
    - 支持账户间转账
    - 记录每月日常消费流水
    - 实现购物商城,买东西加入购物车,调用信用卡接口结账
    - 提供管理接口,包括添加账户、用户额度,冻结账户等
    - ATM记录操作日志
    - 用户认证功能

提炼项目功能

    1.用户注册
    2.登录功能
    3.查看余额
    4.余额提现
    5.账户充值
    6.金额转账
    7.查看流水
    8.添加购物车
    9.查看购物车
    10.结算购物车
    11.管理员功能

  # 项目大致技术栈
    1.python基础核心编程
    2.函数(装饰器)
    3.常见内置模块(os,sys,json)

架构设计

  """
  回顾编程经历
  	1.面条版(从上往下堆代码)
  	2.函数版(开始封装代码)
  	ps:都是在一个py文件中写代码>>>:类似于创业型公司 所有员工身兼数职
  	
  	3.模块版(开始划分文件)
  	ps:根据功能的不同划分不同文件>>>:类似于大型公司 所有员工部门精细化

  疑问:
  	为什么需要分文件 导来导去
  		为什么大型公司需要分部门 分员工 分职责
  			答案:各自干各自最擅长的部分 提高效率 节省时间
  	
  如何体会到分文件的好处
  	将ATM项目多敲几遍 既然会感觉到!!!
  		5遍起步之后才慢慢体会到
  """

研究常见软件架构(重点)

    百度:
      百度账户登录 
      	需要获取用户名和密码 然后校验用户名和密码
        	问:在哪里校验?
            	肯定不在你的电脑上(如果在 难道所有人的数据你的电脑上都有?)
          是基于网络将用户名和密码发送到百度的后台进行校验
          		后台去专门存储数据的地方校数据
      # 大致分了三层
      	浏览器	后台 数据库
    淘宝:
     	购物结算功能
      	商品价格的最终核算和账户扣款在哪里完成
        	肯定不在你当前计算机上!!!
    	# 大致分了三层
      	浏览器 后台 用户数据库
  '''
  ps:很多程序其实都是三层架构
  	第一层用户层只做简单的数据展示
  	第二层是整个程序的核心层
  		做具体业务逻辑
  	第三层是数据存取


  其实我们刚刚分析的三层就是以后开发项目的固定结构
  	第一层其实叫做			前端
  	第二层其实叫做			后端
  	第三层其实叫做			数据库
  '''

  基于上述架构分析 我们也应该将ATM分为三层架构
  	展示层
    	只展示功能选项 基本逻辑
  	逻辑层
    	所有业务逻辑
    数据层
    	给逻辑层提供数据存取
      
  ################################################
  ATM架构牛逼之处!!!
  	程序的扩展性非常的强
    	比如展示层等我们以后学了前端可以直接替换成页面
      	展示层目前是cmd操作 可以换成页面
      核心逻辑层以后学了框架之后替换成框架
      	逻辑层目前是普通的python代码 可以换成django框架
      数据存取层以后学了数据库直接替换成数据库
      	数据层目前是json文件 可以换成MySQL数据库
  ################################################

分组开发

  # 1.搭建项目目录
        针对启动脚本文件start.py可以放在bin目录下  也可以直接放在项目根目录
    将第二层分为三个文件(根据功能的不同)
        start.py  # 操作文件少时,可以直接创建一个star.py文件
    conf
        settings.py  # 存放程序的配置文件
    lib
        common.py  # 放公共的功能
    core
        src.py  # 存放程序的核心代码
    interface
        user_interface.py  # 用户接口
        bank_interface.py  # 银行接口
        shop_interface.py  # 购物接口
    db  # 存放程序产生的数据
    log  # 记录日志记录
    readme  # 程序的说明

  # 2.功能框架搭建
          利用空函数
  # 3.注册功能
          为了能够让你更加清晰的理解  我们先写面条版本  然后进行拆分!!!

ATM购物车

搭建一个项目目录

  针对启动脚本文件start.py可以放在bin目录下 也可以直接放在项目根目录
  将第二层分为三个文件(根据功能的不同)
  	start.py  
    conf  
    	settings.py  
    lib
    	common.py 
    core
    	src.py  
    interface
      user_interface  
      bank_interface  
      shop_interface  
    db  
    log  
    readme  

搭建一个功能框架

  # 用户注册
  def register():
      pass
  # 用户登录
  def login():
      pass

  # 查看余额
  def look_balance():
      pass
    
  # 余额提现
  def Withdraw():
      pass

  # 账户充值
  def pay():
      pass

  # 转账
  def tranfer():
      pass

  # 查看流水
  def cheak_water():
      pass

  # 添加购物车
  def add_shop_car():
      pass


  # 查看购物车
  def view_shop_car():
      pass


  # 结算
  def clear_shop_car():
      pass

  # 管理员
  def admin():
      pass

  # 功能字典
  func_dict = {
      '1': register,
      '2': login,
      '3': look_balance,
      '4': Withdraw,
      '5': pay,
      '6': tranfer,
      '7': cheak_water,
      '8': add_shop_car,
      '9': view_shop_car,
      '10': clear_shop_car,
      '11': admin


  }



  while True:
      print("""
        1.用户注册
        2.登录功能
        3.查看余额
        4.余额提现
        5.账户充值
        6.金额转账
        7.查看流水
        8.添加购物车
        9.查看购物车
        10.结算购物车
        11.管理员功能
      """)

      choice = input('请输入功能编号>>>:').strip()
      if choice in func_dict:
          func_name = func_dict.get(choice)
          func_name()
      else:
          print('好好输!')
          
     
  # 调用start.py文件
  import os
  import sys

  # sys.path.append(os.path.dirname(__file__))  # 等于 base = os.path.dirname(__file__)   sys.path.append(base_dir)


  base_dir = os.path.dirname(__file__)
  sys.path.append(base_dir)

  # 从core里面调src
  from core import src

  # 简易使用脚本的方式
  if __name__ == '__main__':
      src.run()

用户注册

展示层

  from ATM.interface import user_lnterface
  def register():
      # 获取用户  (第一层)可以给用户看,所以说不需要拆走
      username = input('请输入用户名>>>:').strip()
      password = input('请输入密码>>>:').strip()
      again_pwd = input('请确认密码>>>:').strip()
      # 验证两次密码是否一致  也可以给用户看
      if not password == again_pwd:
          print('两次密码不一致')
          return
      #  需要验证用户是否已存在
      res = user_lnterface.check_user_interface(username)
      if res:
          print(res)
          return
      # 分好之后。我们只需要把想要的调过来使用就可以了
      msg = user_lnterface.register_interface(username, password)
      print(msg)

逻辑层

  from ATM.db import db_handler  # 调用handler
  def register_interface(username, password):  # 这里我们就需要传两个参数
      #  用户字典就不能给用户看到,防止修改
      user_dict = {
          'username': username,
          'password': password,
          'balance': 0,  # 默认起始金额o
          'flow': [],  # 记录流水
          'is_Admin': False,  # 验证是不是管理员
          'shop_car': {},  # 购物车
          'is_lock': False  # 用户是否被冻结
      }
      db_handler.save(user_dict)
      return f'用户{username}注册成功'

  def check_user_interface(username):
      res = db_handler.select(username)
      if res:
          return '用户已存在'

数据处理层

  # 数据存取层里面,专门处理存储数据
  import os
  import json
  from ATM.conf import setting

  def save(user_dict):
      username = user_dict.get('username')
      file_path = os.path.join(setting.DB_DIR, f'{username}.json')  # 拼接路径
      with open(file_path, 'w', encoding='utf8')as f:
          json.dump(user_dict, f)

  def select(username):
      file_path = os.path.join(setting.DB_DIR, f'{username}.json')
      if os.path.exists(file_path):  # 判断
          with open(file_path, 'r', encoding='utf8')as f:
              return json.load(f)

用户登陆

  # 展示层  用户登陆
  def login():
    username = input('请输入用户名>>>:').strip()
    password = input('请输入密码>>>:').strip()
    flag, data = user_lnterface.login_interface(username)
    if flag:
        if password == data.get('password'):
            print(f'用户{username}登录成功')
            is_login['username'] = username
        else:
            print('用户名或密码错误')
    else:
        print(data)
  # 逻辑层
  from ATM.db import db_handler  # 调用
  def login_interface(username):
      res = db_handler.select(username)
      if res:
          return True, res
      else:
          return False, '用户名不存在'
  # 处理层
  import os
  import json
  from ATM.conf import setting
  def select(username):
      file_path = os.path.join(setting.DB_DIR, f'{username}.json')
      if os.path.exists(file_path):  # 判断
          with open(file_path, 'r', encoding='utf8')as f:
              return json.load(f)
posted @ 2022-04-05 01:25  吴起龙Lamb  阅读(44)  评论(0)    收藏  举报