python学习之ATM功能实现

# :编写ATM程序实现下述功能,数据来源于文件db.txt# 1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改# 2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱# 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少# 4、查询余额功能:输入账号查询余额

# :登录功能# 用户登录成功后,内存中记录下该状态,上述功能以当前登录状态为准,必须先登录才能操作import os

user_staus = {‘username‘: None}

def ad_credit(username, amount):    """    充值功能    :param username:    :param amount:    :return:    """    if user_staus[‘username‘] is None:        login()    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as f1, \            open(‘db.txt.swap‘, ‘wt‘, encoding=‘utf-8‘)as f2:        while True:            cont = f1.readline()            if len(cont) == 0:                break            name, remain = cont.strip().split(‘:‘)            if username in name:                remain = int(remain) + int(amount)                f2.write(‘{}:{}\n‘.format(name, remain))                print(‘充值成功,{}的余额为{}‘.format(username, remain))            else:                f2.write(cont)    os.remove(‘db.txt‘)    os.rename(‘db.txt.swap‘, ‘db.txt‘)

def transfer(user_out, user_in, amount):    ‘‘‘3    转账功能    :param user_out:    :param user_in:    :param amount:    :return:    ‘‘‘    if user_staus[‘username‘] is None:        login()    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as f1, \            open(‘db.txt.swap‘, ‘wt‘, encoding=‘utf-8‘)as f2:

        userinfo = {}        for line in f1:            name, remind = line.strip().split(‘:‘)            userinfo[name] = int(remind)        if user_out not in userinfo:            print(‘用户不存在‘)            return        if user_in not in userinfo:            print(‘收款方不存在‘)            return        if user_out in userinfo and user_in in userinfo:            if userinfo[user_out] >= int(amount):                userinfo[user_out] -= int(amount)                userinfo[user_in] += int(amount)                print(‘转账成功,已成功从{}向{}汇款{}‘.format(user_out, user_in, amount))            elif userinfo[user_out] < amount:                print(‘余额不足‘)                return        for name, remind in userinfo.items():            f2.write(‘{}:{}\n‘.format(name, remind))

    os.remove(‘db.txt‘)    os.rename(‘db.txt.swap‘, ‘db.txt‘)

def cashon(username, amount):    ‘‘‘    提现功能    :param username:    :param amount:    :return:    ‘‘‘    if user_staus[‘username‘] is None:        login()    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as f1, \            open(‘db.txt.swap‘, ‘wt‘, encoding=‘utf-8‘)as f2:        userinfo = {}        for line in f1:            name, remind = line.strip().split(‘:‘)            userinfo[name] = int(remind)        if username not in userinfo:            print(‘用户不存在‘)            return        if username in userinfo and userinfo[username] >= int(amount):            userinfo[username] -= int(amount)            print(‘已从余额中取出{},现余额为{}‘.format(amount, userinfo[username]))        elif userinfo[username] < amount:            print(‘余额不足,提现失败‘)            return        for name, remind in userinfo.items():            f2.write(‘{}:{}\n‘.format(name, remind))    os.remove(‘db.txt‘)    os.rename(‘db.txt.swap‘, ‘db.txt‘)

def check(username):    ‘‘‘    余额查询功能    :param username:    :return:    ‘‘‘    if user_staus[‘username‘] is None:        login()    with open(‘db.txt‘, ‘rt‘, encoding=‘utf-8‘)as f:        userinfo = {}        for line in f:            name, remind = line.strip().split(‘:‘)            userinfo[name] = remind        if username not in userinfo:            print(‘用户不存在‘)            return        if username in userinfo:            print(‘当前余额为:{}‘.format(userinfo[username]))

def login():    username = input(‘输入用户名‘)    userpassword = input(‘输入密码‘)    with open(‘login.txt‘, ‘rt‘, encoding=‘utf-8‘)as login_f:        login = {}        for line in login_f:            name, psd = line.strip().split(‘:‘)            login[name] = psd            if username in login:                if login[username] == userpassword:                    print(‘登陆成功‘)                    user_staus[‘username‘] = username                    break            elif username not in login:                print(‘用户名不存在‘)                return

def logout():    user_staus[‘username‘] = None    print(‘已成功登出‘)    return

login()tag = Truewhile tag:    cmd = input(‘‘‘    请输入你想使用的功能序号    1:充值    2:转账    3:提现    4:查询余额    0:登出    ‘‘‘)    if cmd == ‘1‘:        username = input(‘输入用户名:‘)        amount = input(‘输入充值金额:‘)        ad_credit(username, amount)    elif cmd == ‘2‘:        user_out = input(‘请输入转账方:‘)        user_in = input(‘请输入接收方:‘)        amount = input(‘输入转账金额:‘)        transfer(user_out, user_in, amount)    elif cmd == ‘3‘:        username = input(‘输入用户名:‘)        amount = input(‘输入提现金额‘)        cashon(username, amount)    elif cmd == ‘4‘:        username = input(‘输入用户名:‘)        check(username)    elif cmd == ‘0‘:        logout()        tag = False    else:        print(‘请正确输入序号‘)

————————————————————————以下是模拟结果————————————————————————————————————————————‘‘‘/Users/chenfeng/PycharmProjects/ATM/venv/bin/python /Users/chenfeng/PycharmProjects/ATM/main.py输入用户名xilou输入密码666登陆成功

    请输入你想使用的功能序号    1:充值    2:转账    3:提现    4:查询余额    0:登出    1输入用户名:xilou输入充值金额:200充值成功,xilou的余额为700

    请输入你想使用的功能序号    1:充值    2:转账    3:提现    4:查询余额    0:登出    2请输入转账方:xilou请输入接收方:heiren输入转账金额:200转账成功,已成功从xilou向heiren汇款200

    请输入你想使用的功能序号    1:充值    2:转账    3:提现    4:查询余额    0:登出    3输入用户名:xilou输入提现金额100已从余额中取出100,现余额为400

    请输入你想使用的功能序号    1:充值    2:转账    3:提现    4:查询余额    0:登出    4输入用户名:xilou当前余额为:400

    请输入你想使用的功能序号    1:充值    2:转账    3:提现    4:查询余额    0:登出    0已成功登出

Process finished with exit code 0

‘‘‘

原文地址:https://www.cnblogs.com/heirenxilou/p/12521102.html

时间: 2024-11-09 02:37:33

python学习之ATM功能实现的相关文章

Python学习day14 BBS功能和聊天室

Created on 2017年5月15日 @author: louts 第1课 作业讲解及装饰器使用 28minutes def check(func): def rec(request,*args,**kargs): return func(request,*args,**kargs) return rec @checkdef index(request,): print request 第2课 自定义装饰器扩展使用 18minutes 第3课 第4课 BBS功能分析及介绍 37minute

Python学习day5作业-ATM和购物商城

Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆,用户间转帐 支持多用户 管理员可添加账户.指定用户额度.冻结用户等 购物车: 商品信息- 数量.单价.名称 用户信息- 帐号.密码.余额 用户可充值 购物历史信息 允许用户多次购买,每次可购买多件 余额不足时进行提醒 用户退出时 ,输出当次购物信息 用户下次登陆时可查看购物历史 商品列表分级显示 1

python学习---购物商场与ATM

[软件说明& 注意事项] 1.购物商场&ATM程序开发环境: OS:64位Windows 7 IDE:pycharm4.0.4 python版本:3.5.1 32位 2.购物商场&ATM程序只做python学习使用,版权有作者所有,未经过作者本人同意,不得将此购物商场&ATM程序应用于商业用途. 目录结构如下: shopmall_atm |--shopmall | |--shopmall_handle.py | |--__init__.py |--atm | |--atm_

python学习第二天

python学习的第二天就是个灾难啊,这天被打击了,自己写的作业被否认了,不说了,写博客还是个好习惯的,要坚持下去,就不知道能坚持到什么时候.呵呵!!! 这天教的知识和第一天的知识相差不大,区别在于比第一天讲的更细了(我们是两个老师教的,风格是不一样的),这次也写那些比较细的知识点. python的简介 (1)你的程序一定要有个主文件. (2)对于python,一切事物都是对象,对象基于类创建.#似懂非懂,不过有那么点似懂. 知识点 #__divmod__ 会把两个数字相除的商和余数以元组的方式

[Python 学习] 二、在Linux平台上使用Python

这一节,主要介绍在Linux平台上如何使用Python 1. Python安装. 现在大部分的发行版本都是自带Python的,所以可以不用安装.如果要安装的话,可以使用对应的系统安装指令. Fedora系统:先以root登入,运行 yum install python Ubuntu系统:在root组的用户, 运行 sudo apt-get install python 2. 使用的Python的脚本 Linux是一个以文件为单位的系统,那么我们使用的Python是哪一个文件呢? 这个可以通过指令

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

Python学习记录day6

Python学习记录day6 学习 python Python学习记录day6 1.反射 2.常用模块 2.1 sys 2.2 os 2.3 hashlib 2.3 re 1.反射 反射:利用字符串的形式去对象(默认)中操作(寻找)成员 cat commons.py #!/usr/bin/env python#_*_coding:utf-8_*_''' * Created on 2016/12/3 21:54. * @author: Chinge_Yang.''' def login(): pr

Python学习笔记--未经排版

Python 学习笔记 Python中如何做到Print() 不换行 答:Print("输出内容",end='不换行的分隔内容'),其中end=后面为2个单引号 注:在Python 2.x中,Print "输出内容", 即在输出内容后加一逗号 Python中 is 和 == 的区别 答:Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来

Python学习笔记_Python对象

Python学习笔记_Python对象 Python对象 标准类型 其他内建类型 类型对象和type类型对象 Python的Null对象None 标准类型操作符 对象值的比较 对象身份比较 布尔类型 标准类型的内建函数 typeObj cmpobj1 obj2 strobj reprobj typeobj isinstanceobj 标准类型的分类 存储模型 更新模型 访问模型 不支持的类型 Python学习笔记_Python对象 首先来理解一个通俗的含义,什么是对象?其实对象无论在什么语言里面