python全栈学习项目案例(一)atm+购物车

news2024/12/23 5:04:43

atm+购物车

文章目录

  • atm+购物车
  • 一、项目需求
  • 二、项目构架图
  • 三、视图的实现
  • 四、登录认证
  • 五、转账功能
  • 六、购物功能

一、项目需求

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、项目构架图

在这里插入图片描述
其中用户功能层中有呈现给用户的视图、各个功能的简单函数(这些简单函数需要调用接口层中函数的具体功能)
接口层存放各个功能的具体代码
数据层中存放着一些操作文件的函数
日志中存放着日志相关的函数,common中存放通用的函数

下面对项目中部分功能的实现方法作个简单的介绍:

三、视图的实现

将函数的地址存放于字典中,用户通过输入数字选择需要的功能以此来调用字典中的函数。

choice={'注册':0,'登录':1,'查询余额':2,'转账':3,'提现':4,'借款':5,'还款':6,'购物':7,'查询流水':8}
choice0={'0':register,'1':login_in,'2':check_surplus,'3':transfer,'4':withdrawal,'5':lend,repay,'6':buy,'7':check_flowing,'8':checkout}

def user_view():
	while True:
		print(choice)
	    ch=input('请选择功能,输入exit退出')
	    if ch=='exit':
	        break
	    if ch.isdigit():
	        if ch not in choice0:
	            print('请重新输入')
	            continue
	    else:
	        print('请重新输入')
	        continue
	    choice0[ch]()

四、登录认证

对于3-9的功能,我们希望让用户登录以后才能选择,如果用户在未登录时选择了这些功能,就让用户先登录再运行功能,这个一个如何实现呢?稍微梳理一下,我们希望3-9的函数功能不做任何修改并且要在这些函数上添加登录认证功能,这就可以用到装饰器了。

from lib.common import user
def authen(func):
    def rapper(*args,**kwargs):
        if user==None:
            print('请先登录')
            user=login_in()
        else:
            return func(*args,**kwargs)
    return rapper

首先需要在common文件中写入user变量以记录用户的登录信息,咱们在写装饰器的文件中调用uesr,如果user中没有用户信息就是用户没有登录,咱们调用登录函数让用户先登录,如果user中存在用户信息,直接的返回被装饰函数即可。

五、转账功能

转账功能需要先将转出账户信息和转入账户信息从文件中读出来,确定转出账户的余额可以转出以后,再将操作后的转出账户信息和转入账户信息重新写入文件中去。

#文件操作函数
def file_operation(dest,mode,content=None):
    with open(dest,mode,encoding='utf-8') as f:
        if mode=='w' or mode=='a':
            f.write(content)
        if mode=='r':
            return f.readlines()

#保存转出账户信息和转入账户信息
def modify(money,user=None,r=None,s=None):
    with open(dest,'r',encoding='utf-8') as f:
        while True:
            content=f.readline().split('_')
            if s==None:
                if content==['']:
                    break
                if content[0]==user and user != None:
                    content[2]=str(eval(content[2])-eval(money))
                    content[2]=f'{content[2]}'
                if content[0]==r and r != None:
                    content[2]=str(eval(content[2])+eval(money))
                    content[2]=f'{content[2]}'
            elif s==True:
                content[4]=f'{money}\n'
            file_operation(dest0,'a',f'{content[0]}_{content[1]}_{content[2]}_{content[3]}_{content[4]}')
            if s == True:break
    os.remove(dest)
    os.rename(dest0,dest)


#转账函数
@authen
def transfer(user):
    while True:
        r=input('请输入转入的用户名').strip()
        if r==user:
            print('转出账户无法与转入账户相同')
            continue
        r_surplus=None
        for i in file_operation(dest, 'r'):
            if i.split('_')[0]==user:
                user_surplus=i.split('_')[2]
            if i.split('_')[0]==r:
                r_surplus=i.split('_')[2]
        if r_surplus==None:
            print('该用户不存在,请重新输入')
        else:
            break
    while True:
        money=input('输入转账金额')
        if not money.isdigit():
            print('请输入正确的金额数')
        elif eval(money)>eval(user_surplus):
            print('转账金额不足,请重新输入')
        else:
            break
    modify(money,user,r)
    print('转账完成!')
    file_operation(os.path.join(root,f'./db/{user}.txt'),'a',f'转账支出:-{money}\n')
    count(user)
    get_logger(user,f'转账支出:-{money}')
    file_operation(os.path.join(root, f'./db/{r}.txt'), 'a', f'转账收入:{money}\n')
    count(r)
    get_logger(user, f'转账收入:-{money}')

六、购物功能

购物功能分为了两部分,第一部分让用户选择需要的商品加入购物车中,第二部分为扣款功能,首先和核算账户的余额是否可以负担购物的消费,如果可以负担则扣除用户账户中消费的金额。

goods=[('牛奶',10),('饼干',15),('牛肉干',20)]
good=['牛奶','饼干','牛肉干']
shopping_cart=[]
def show_goods():
    for i,j in enumerate(goods):
        print(f'{i}  {j[0]}:{j[1]}')

@authen
def add_to_cart(user):
    for i in eval(read_surplus(user).split('_')[4]):
        shopping=i.split('*')
        shopping_cart.append([shopping[0],int(shopping[1]),goods[good.index(shopping[0])][1]*int(shopping[1])])
    while True:
        print([f'{i[0]}*{i[1]}' for i in shopping_cart])
        while True:
            mode=input('按z键增加购物车商品,按x键减少购物车商品,按c键退出购物')
            if re.findall('[zxc]',mode)==[] or len(mode)>1:
                print('请重新选择')
            else:
                break
        if mode=='c':
            modify([f'{i[0]}*{i[1]}' for i in shopping_cart],s=True)
            break
        show_goods()
        while True:
            choice=input('选择您要操作的商品')
            if choice.isdigit():
                if not 0<=int(choice)<len(goods):
                    print('请重新输入')
                else:
                    break
            else:
                print('请重新输入')
        while True:
            num = input('选择输入您需要操作的数量')
            if not num.isdigit():
                print('请重新输入')
            else:
                break
        if mode=='z':
            if goods[int(choice)][0] not in [i[0] for i in shopping_cart]:
                shopping_cart.append([f'{goods[int(choice)][0]}',int(num),int(num)*goods[int(choice)][1]])
            else:
                indexx = [i[0] for i in shopping_cart].index(goods[int(choice)][0])
                shopping_cart[indexx][1] += int(num)
        if mode=='x':
            if goods[int(choice)][0] not in [i[0] for i in shopping_cart]:
                print('未购买商品,无法删减购物车')
            else:
                indexx = [i[0] for i in shopping_cart].index(goods[int(choice)][0])
                if shopping_cart[indexx][1]<int(num):
                    print('购物车商品数量小于删减数量')
                else:
                    shopping_cart[indexx][1]-=int(num)
                    if shopping_cart[indexx][1]==0:
                        shopping_cart.pop(indexx)


@authen
def checkout(user):
    for i in eval(read_surplus(user).split('_')[4]):
        shopping=i.split('*')
        shopping_cart.append([shopping[0],int(shopping[1]),goods[good.index(shopping[0])][1]*int(shopping[1])])
        print(shopping_cart)
    sum=0
    out='您购买了'
    for i in shopping_cart:
        out+=f'{i[0]}*{i[1]},'
        sum+=i[2]
    out=f'{out}一共{sum}元'
    print(out)
    money=eval(read_surplus(user).split('_')[2])
    if money<sum:
        print('余额不足')
    else:
        modify(str(sum),user)
        print('付款成功')
        shopping_cart.clear()
        modify([], s=True)
    file_operation(os.path.join(root, f'./db/{user}.txt'), 'a', f'购物支付:-{sum}\n')
    count(user)
    get_logger(user, f'购物支付:-{money}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试数据管理问题

在自动化测试中&#xff0c;关于数据管理的更好实践确实存在&#xff0c;这些实践可以帮助提高测试的效率和质量。以下是一些推荐的最佳实践&#xff1a;1. 使用Test Data Builder模式&#xff1a;这种模式可以帮助隐藏测试数据准备的细节&#xff0c;在测试代码中只显示地对测…

每日OJ题_牛客_NC1大数加法_高精度加法

目录 牛客_NC1大数加法_高精度加法 题目解析 C代码 Java代码 牛客_NC1大数加法_高精度加法 题目解析 模版类型的算法题&#xff0c;模拟加法列竖式运算的过程即可。 假定算法流程&#xff1a; 设定 i&#xff0c;j 两指针分别指向 s&#xff0c;t 尾部&#xff0c;模拟…

2024网络安全面试指南(非常详细)收藏这一篇就够了

1.1 网络安全行业现状 安全行业起步晚。安全行业整体起来才没几年&#xff0c;多数企业因为资源投入和建设时间原因导致覆盖面和深入度都不够&#xff0c;这其中甚至包括一些国内大厂&#xff0c;并没有想象的那么安全。其安全水位仅能应付一些白帽子级别&#xff0c;针对专业…

记录一次学习--委派攻击学习

目录 为什么要使用委派 什么账号可以使用委派 非约束性委派 这里有一张图 利用 流程 约束性委派 这里有一张图 如何利用 条件 具体流程 为什么要使用委派 这个是因为可能A服务需要B服务的支持&#xff0c;但是A服务的权限不可以使用B服务。然后这时就可以让域用户将…

2024年【烟花爆竹经营单位主要负责人】免费试题及烟花爆竹经营单位主要负责人考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 烟花爆竹经营单位主要负责人免费试题是安全生产模拟考试一点通总题库中生成的一套烟花爆竹经营单位主要负责人考试技巧&#xff0c;安全生产模拟考试一点通上烟花爆竹经营单位主要负责人作业手机同步练习。2024年【烟…

吉林大学微机接口实验五:D/A转换

1.实验内容 2.实验原理/预备知识 D/A转换器TLC7528是关键&#xff0c;其用法参见&#xff1a; 芯片部件汇总&#xff1a;常用功能部件大全-CSDN博客 直接找"TLC7528 D/A数模转换器"&#xff08;实际上学校的讲义已经讲的很清楚&#xff0c;我只是给搬到了博客里&…

C++ | Leetcode C++题解之第430题扁平化多级双向链表

题目&#xff1a; 题解&#xff1a; class Solution { public:Node* flatten(Node* head) {function<Node*(Node*)> dfs [&](Node* node) {Node* cur node;// 记录链表的最后一个节点Node* last nullptr;while (cur) {Node* next cur->next;// 如果有子节点…

【源码+文档+调试讲解】重庆旅游景点数据分析系统python

摘 要 重庆旅游景点数据分析系统是一个专门为旅游管理部门和景点运营商设计的信息化工具&#xff0c;它通过集成和分析各种数据来优化景点管理和提升游客体验。该系统能够实时收集游客流量、景点信息、满意度反馈等关键信息&#xff0c;帮助管理者洞察游客行为和市场趋势。系统…

C++ const成员函数

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;C知识点的补充_Jason_from_China的博客-CSDN博客 C const引用常量 使用规则 引用常量对象&#xff1a;可以引用一个常量对象&#xff0…

Unity 的Event的Use()方法

对于Event的Use方法&#xff0c;其在调用后将不会再判断同类型的事件 这种情况下&#xff0c;第二个MosueDown不会进入&#xff0c;因为已经Use 如果把Use注释掉 依旧能进入第二个MosueDown 也就是说当使用了Use方法&#xff0c;相同的事件类型不会进第二遍

【文心智能体】从零到一的优质智能体构建全攻略

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 创作平台&#xff1a;文心智能体平台&#xff1a; 基本配置智能体名称与简介人物设定回复逻辑prompt提示词的编写开场白设定与开场白…

利士策分享,领导者素养自检:五维审视法

利士策分享&#xff0c;领导者素养自检&#xff1a;五维审视法 在人生的广阔舞台上&#xff0c;每个人都蕴藏着成为领导者的潜力&#xff0c;但如何知晓自己是否已具备那份独特的素养&#xff1f; 这需要我们进行一次深刻而诚实的自我审视。 以下五个维度&#xff0c;或许能为你…

K8s Calico替换为Cilium,以及安装Cilium过程(鲁莽版)

迁移CNI插件的3种办法&#xff1a; 1、创建一个新的集群&#xff0c;通过Gitops的方式迁移负载&#xff0c;然而&#xff0c;这可能涉及大量的准备工作和潜在的中断。 2、另一种方法是重新配置/etc/cni/net.d/指向Cilium。但是&#xff0c;现有的pod仍将由旧的…

AI 驱动的数据库 TDSQL-C 实战与电商可视分析

目录 一、背景介绍二、实验介绍三、效果展示四、实操指导4.1 系统设计4.2 环境搭建4.2.1 购买 TDSQL-C Mysql Serverless 实例4.2.2 部署HAI高算力服务器本地python环境搭建 4.3 应用构建4.3.1 搭建项目框架4.3.2 TDSQL-C 数据库&HAI云算力配置4.3.3 应用开发4.3.4 运行程序…

将本地文件上传至虚拟机

1、查看虚拟机ip地址 ip addr 2、xshell连接上虚拟机 连接root连接不上的解决办法更改配置文件vim /etc/ssh/sshd_config 重启&#xff08;sudo service ssh restart&#xff09;并查看是否开启ssh服务&#xff08;sudo ps -e | grep ssh&#xff09; 即可连接成功 3、复制文…

深度学习500问——Chapter15:异构计算,GPU和框架选型(2)

文章目录 15.5 GPU硬件环境配置推荐 15.5.1 GPU主要性能指标 15.5.2 购买建议 15.6 软件环境搭建 15.6.1 操作系统选择 15.6.2 常用基础软件安装 15.5 GPU硬件环境配置推荐 15.5.1 GPU主要性能指标 GPU的性能主要由以下三个参数构成&#xff1a; 计算能力。通常我们关心的是…

Python酷库之旅-第三方库Pandas(127)

目录 一、用法精讲 566、pandas.DataFrame.swapaxes方法 566-1、语法 566-2、参数 566-3、功能 566-4、返回值 566-5、说明 566-6、用法 566-6-1、数据准备 566-6-2、代码示例 566-6-3、结果输出 567、pandas.DataFrame.melt方法 567-1、语法 567-2、参数 567-3…

sheng的学习笔记-AI-蒙特卡罗强化学习

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 强化学习&#xff1a;sheng的学习笔记-AI-强化学习&#xff08;Reinforcement Learning, RL&#xff09;-CSDN博客 K-摇臂赌博机&#xff08;K-armed bandit&#xff09;&#xff1a;https://blog.csdn.net/coldstarry/ar…

【AAOS】CarService -- Android汽车服务

概述 Android Automative OS理解为Android OS + Android Automative Service,而CarService就是提供汽车相关功能的最主要模块。 CarService与Android OS的关系:CarService运行于独立的进程中,其作为原有Android服务的补充,在汽车设备上运行。CarService在整体车载通信中起…