Python基础学习(12)环境搭建/ATM1

一、MVC开发模式

为了提高开发效率 让开发者在项目设计与开发的时候 专注力 效率更高的一种开发模式
前端 – 给用户看的东西
后端 – 在后台实现功能

mvc指的是一个开发理念 在发一个项目的时候 把项目分为三部分 让他们独立的分工合作 可以各司其职

Model:模块层 --> 负责处理数据的对接 让数据能在前后端之间进行交互 处理操作数据
View: 视图层 --> 给用户看的到的东西属于视图层 可操作页面 网页
Controller: 控制器 --> 功能性代码的实现 注册 跳转 激活 等等各种功能控制层

M:处理用户数据
V:显示东西给用户看
C:实现用户要操作的功能

二、项目开发流程

项目立项阶段->项目开发阶段
产品部门: 市场调研 提出想法/需求 内部进行开发

UE:产品原型图设计师 设计一个草图项目的原型图 设计一个概念图 并且概念图里面会有具体的排版 参数细节说明
UI:美工 用户可视化界面开发素材 画图标 图片
FE:前端开发 网页开发 / 客户端 /小程序 可视化界面开发 给用户看的到的东西
RD:后端开发 功能的实现 数据的处理
QA:测试 用各种方法测试写的项目 有没有bug
OP:运维 管家 负责对上线的项目/服务器进行管理/优化/维护

养成一个好的习惯
1.先做好架构分析:
架构分析: 我要做个项目 适合用什么语言 框架 数据库 操作系统
2.做好项目的分成 拆分
你的项目由什么组成 可以拆封多少个模块
3.整理思路 可以在生活中找到灵感
4.写一份readme文档 说明文档 项目使用说明 注意事项
5.在脑子里先大搞形成一个彩色画面 先脑补一下做好的成品大概是怎么样子

三、项目搭建

例子:银行

1.注册
2.登录
3.余额
4.存款
5.取款
6.账单

1.API

业务逻辑

user_i.py -- 用户的业务逻辑(注册 登录)
from DB import db_handle


def register_info(user_name, password):
    user_info = {
        'user_name': user_name,
        'password': password,
        'money': 100,
        'account': []  #
    }
    user_data = db_handle.get_data(user_name)
    if user_data:
        return False, '注册失败 该用户已经存在'
    db_handle.save_data(user_info)
    return True, f'{user_name}注册成功'


# 保存好用户数据 最后返回两个值 1.注册结果 为布尔类型 2.说明信息 为字符串类型


def longin_info(user_name, password):
    user_data = db_handle.get_data(user_name)  # 通过用户名获取数据
    if user_data:
        if password == user_data['password']:
            return True, f'{user_name}登录成功'
        else:
            return False, '登录失败 密码错误 请重新输入'

    return False, '登录失败 用户不存在 请重新输入'

bank_i.py -- 银行的业务逻辑(存钱 取钱 余额 账单)
import time
from DB import db_handle


def check_money(user_name):
    user_data = db_handle.get_data(user_name)  # 通过用户名获取数据 返回用户数据里的金钱
    return user_data['money']


now_time = time.strftime('%x %X')  # 当前时间


def talk_money(login_user, money):
    user_data = db_handle.get_data(login_user)
    if user_data['money'] >= money:
        user_data['money'] -= money
        acc_info = f'{now_time}取款{money}元 当前余额为{user_data["money"]}元' # 生成流水账单信息
        user_data['account'].append(acc_info)
        db_handle.save_data(user_data)
        return True, acc_info
    return False, '取款失败 余额不足 请重新输入'

# 进行取款逻辑处理 1.让用户金额减去取款金额 2.生成一条流水账单信息 3.给用户数据添加流水
# 4.重新保存数据 5.返回取款结果 成功+流水账单


def recharge(login_user, money):
    user_data = db_handle.get_data(login_user)
    user_data['money'] += money
    acc_info = f'{now_time}存款{money}元 当前余额为{user_data["money"]}元' # 生成流水账单信息
    user_data['account'].append(acc_info)
    db_handle.save_data(user_data)
    return True, acc_info


def get_acc(login_user):
    user_data=db_handle.get_data(login_user)
    return user_data['account']

2.config

配置信息(数据库账户 python版本信息 模块说明 数据存储的位置)

file_path=r'C:\Users\EDY\PycharmProjects\untitled5\DB\user_data'
setting.py -- 用户数据存储位置

3.core

核心文件 主要写用户交互内容

src.py -- 功能文件 给用户看的文件
# 注册
from api import user_i
from lib.common import is_login
from api import bank_i


def register():
    while True:
        user_name = input('请输入你的姓名>>>')
        password = input('请输入你的密码>>>')
        re_password = input('请确认你的密码>>>')
        if password == re_password:
            flag, msg = user_i.register_info(user_name, password)
            # 把用户名和密码传进注册逻辑处理函数 得到两个值1注册结果 2补充说明
            if flag:
                print(msg)
                break
            else:
                print(msg)
        else:
            print('密码不对 请重新注册')


login_user = None  # 初始值 默认是没登录的状态 在登录后用用户名覆盖


# 登录
def login():
    while True:
        user_name = input('请输入你的姓名>>>')
        password = input('请输入你的密码>>>')
        flag, msg = user_i.longin_info(user_name, password)
        if flag:
            print(msg)
            global login_user
            login_user = user_name  # 用这个变量来表示已经是登录的状态 有值就是登录没有值就是没有登录
            break
        else:
            print(msg)


# 余额
@is_login
def check_money():
    money = bank_i.check_money(login_user)
    print(f'{login_user}当前账户余额为{money}元')


# 存款
@is_login
def recharge():
    while True:
        money = float(input('请输入存款金额'))
        flag, msg = bank_i.recharge(login_user, money)
        if flag:
            print(msg)
            break
        else:
            print(msg)


# 取款
@is_login
def get_money():
    while True:
        money = float(input('请输入取款金额'))
        flag, msg = bank_i.talk_money(login_user, money)
        if flag:
            print(msg)
            break
        else:
            print(msg)


# 账单
@is_login
def account():
    acc = bank_i.get_acc(login_user)
    if acc:  # 有流水账单的情况下 就为真
        for i in acc:
            print(i)
    else:
        print('该用户没有流水信息')


fun_select = {
    0: ['退出', exit],  # exit是内置函数 程序结束
    1: ['注册', register],
    2: ['登录', login],
    3: ['查看余额', check_money],
    4: ['存款', recharge],
    5: ['取钱', get_money],
    6: ['账单', account],
}


def run():
    while True:
        print('欢迎来到婷婷牌ATM系统'.center(30))
        for k in fun_select:
            print(k, fun_select[k][0])
        select = int(input('请选择你要做的操作>>>'))
        if select in fun_select:
            fun_select[select][1]()
        else:
            print('输入错误')

4.DB

-存储/操作数据 由于还没有学数据库 所以这里先把数据用json文件保存

db_handle.py -- 数据处理层 负责实现数据的增删改查
import json
import os

from config.setting import file_path


def save_data(user_info):
    name = user_info['user_name']
    with open(fr'{file_path}\{name}.json', 'w', encoding='utf-8')as f:
        json.dump(user_info, f)

# 文件保存了 文件名是什么? 用户名.json

def get_data(user_name):
    user = fr'{file_path}\{user_name}.json'
    if os.path.exists(user):  # 如果文件存在为True
        with open(user, 'r', encoding='utf-8')as f:
            user_data = json.load(f) #把数据提取出来 赋值给user_data
            return user_data


user_data -- 保护用户数据的文件夹

5.lib

功能模块 把一些功能插件写到这 装饰器

common.py -- 在项目中会用得到的功能就可以写到这个模块里 判断用户是否登录
from core import src


def is_login(f):
    def check(*args, **kwargs):
        if src.login_user: # 如果这个变量有值=登录状态 没有值=未登录
            res = f(*args, **kwargs)
            return res
        else:
            print('你还未登录 请登录后再使用该功能')
            src.login()

    return check

6.run.py

– 项目的启动文件

from core import src
if __name__ == '__main__':
    src.run()

7.readme.md

– 项目的说明文档


1.启动界面 死循环 显示功能菜单 用户输入选择 进入对应功能

2.注册界面 死循环 用户输入用户名 密码 确认密码 判断密码与输入的是否一致 再进行后续操作 一致 进行注册逻辑判断处理 -->转交给user_i 不一致 输出密码不一致 重新注册

3.注册逻辑实现 声明一个函数 用户处理注册逻辑 该函数会接收两个参数 为用户名和密码 用一个合适的容器 保存用户数据 字典 合法的情况下 保存用户数据(如果这个用户名已经存在 就是不合法)

4.用户数据存储 设置数据保存的位置 保存文件

登录界面(src) 登录逻辑实现(user_i) 获取用户数据(db_handle) 认证是否登录(common) 1.登录界面 死循环 用户输入用户名 密码 把用户信息转交给处理登录逻辑函数 让他去判断是否合法 根据flag输出登录成功/失败

2.登录逻辑实现 接收用户输入的用户名和密码 获取到用户名.json文件的数据 判断用户是否存在 如果存在就进行下一步 不存在返回登录失败+说明信息 判断用户输入密码 和 json文件里存储的是否一致 如果密码一致 返回登录成功 说明信息 不一致返回登录失败说明信息

3.获取用户数据 定义函数 接收用户名 生成一个变量用来表示文件信息: 文件路径+用户名.json 判断文件是否存在 如果存在就获取并且返回用户数据 不存在默认返回None

4.认证是否登录 判断src里的login_user是否有值 如果有就正常运行 如果没有 就跳转到登录界面

2.取款 取款界面 死循环 输入取款金额

取款的功能 接收用户名 取款金额 获取用户数据 判断余额是否足够 用户余额>=取款金额 足够的话就进行扣款 并且保存数据 不够的话返回取款失败 余额不足 成功的话保存数据后 返回取款成功+取款说明

流水账单信息 生成变量 = 时间+取款金额+用户余额 追加信息
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只特立独行猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值