zoukankan      html  css  js  c++  java
  • python面向过程编程小程序 -ATM(里面用了终端打印)

    06.09自我总结

    1.文件摆放

    ├── xxxx
    │   ├── run.py
    │   └── fil_mode.py
    │   └── data_time.py
    │   └── loading.py
    │   └── data_time.py
    │   └── register.py
    │   └── login.py
    │   └── top_up.py
    │   └── balance_enquiry.py
    │   └── shopping.py
    │   └── freeze.py
    

    2.运行文件

    1.run

    run.py

    from login import login
    from register import register
    from top_up import top_up
    from shopping import shopping
    from balance_enquiry import balance_enquiry
    from freeze import  freeze
    from login import login_name
    msg_dict ={
        '1':login,
        '0':register,
        '2':top_up,
        '3':balance_enquiry,
        '4':shopping,
        '5':freeze,
        'q':'quit'
    }
    while True:
        print("33[0;31;44m		杨大爷超市欢迎您				33[5m")
        print("33[0;30;42m		输入0进入注册界面			33[5m")
        print("33[0;30;42m		输入1进入登入界面			33[5m")
        print("33[0;30;42m		输入2进入充值界面			33[5m")
        print("33[0;30;42m		输入3进入余额查询界面		33[5m")
        print("33[0;30;42m		输入4进入购物界面			33[5m")
        print("33[0;30;42m		输入5进入解冻界面			33[5m")
        print("33[0;30;42m		输入q退出程序 				33[5m")
        print(38 * '-')
        user_shopping_chiose = input('请输入你要选择的功能')
        if user_shopping_chiose not in msg_dict:
            print('请好好输入')
            continue
        elif user_shopping_chiose=='q':
            print('再见')
            break
        msg_dict[user_shopping_chiose]()
    

    3.自定义辅助模块

    1.用于文件的读取和写入

    fil_mode.py

    import json
    import os
    def fil_add_info_dict(dict,fil='用户注册信息.txt'):
        info_dict = json.dumps(dict)
        with open(fil,'a',encoding='utf8') as fa :
            fa.write(f'{info_dict}
    ')
        return True
    
    def fil_info_name_list(fil='用户注册信息.txt'):
        name_list = list()
        with open(fil,'a+',encoding='utf-8') as fa :
            fa.seek(0)
            data = fa.read()
            if data:
                with open(fil,'r',encoding='utf-8') as fr :
                    for info_dict in fr:
                        info_dict = json.loads(info_dict)
                        name_list.append(info_dict.get('name'))
        return name_list
    
    def fil_info_balance_amend(name,balance,fil='用户注册信息.txt'):
        name_list = fil_info_name_list(fil)  #fil_info_name_list为用字典里面的所有名字生成的列表
        if name in name_list:
            with open(fil,'r',encoding='utf8') as fr,
                open('1.txt','w',encoding='utf8') as fw:
                for info_dict in fr:
                    info_dict = json.loads(info_dict)
                    if name == info_dict['name']:
                        info_dict['balance'] = balance
                    info_dict =json.dumps(info_dict)
                    fw.write(f'{info_dict}
    ')
                    fw.flush()
            os.remove(fil)
            os.rename('1.txt',fil)
    
    def fil_userinfo(name,fil='用户注册信息.txt'):
        with open(fil,'a+',encoding='utf8') as far:
            far.seek(0)
            for a in far:
                a = json.loads(a)
                if a['name'] == name:
                    info_dict = a
                    return info_dict
            return False
    
    def fil_info_frzzez_amend(name,freeze,fil='用户注册信息.txt'):
        name_list = fil_info_name_list(fil)  #fil_info_name_list为用字典里面的所有名字生成的列表
        if name in name_list:
            with open(fil,'r',encoding='utf8') as fr,
                open('1.txt','w',encoding='utf8') as fw:
                for info_dict in fr:
                    info_dict = json.loads(info_dict)
                    if name == info_dict['name']:
                        info_dict["freeze"] = freeze
                    info_dict =json.dumps(info_dict)
                    fw.write(f'{info_dict}
    ')
                    fw.flush()
            os.remove(fil)
            os.rename('1.txt',fil)
    

    2.用于子程序返回主界面来个延迟动画效果

    loading.py

    import time
    def  loading():
        txt = '返回主界面中loading'
        print(f'33[1;42;m{txt}33[0m',end='')
        for a in range(10):
            print(f'33[1;42;m.33[0m',end='')
            time.sleep(0.1)
        print('')
        return True
    

    3.用于记录时间

    data_time.py用于记录时间

    import time
    def data_time():
        return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    

    4.功能模块

    1.注册功能

    register.py

    from fil_mode import *
    from loading import loading
    def register():
        print('33[1;34;46m		欢迎使用注册功能		33[0m')
        register_name_Ture = 0
        name_list = fil_info_name_list()
        while register_name_Ture==0:
            print('33[1;34;43m		请您输入注册账号		33[0m')
            print('33[1;34;43m		账号由全英文组成		33[0m')
            print('33[1;31;m输入Q退出程序	33[0m')
            register_name = input('请输入:').strip()
            if register_name == 'Q':
                loading()
                return False
            elif len(register_name.replace(' ','')) != len(register_name):
                print('33[1;31;m输入账号中有宫格请重新输入	33[0m')
                continue
            elif not register_name.isalpha():
                print('33[1;31;m输入账号不是由全英文组成请重新输入		33[0m')
                continue
            elif register_name in fil_info_name_list():
                print('33[1;31;m输入账号以存在请重新输入		33[0m')
            else:
                register_name_Ture =1
                print('33[1;34;43m		账号名已注册成功		33[0m')
                while True:
                    print('33[1;34;43m		请您输入注册密码		33[0m')
                    print('33[1;34;43m		账号由全数字组成		33[0m')
                    register_pwd = input('请输入:').strip()
                    if len(register_pwd.replace(' ', '')) != len(register_pwd):
                        print('33[1;31;m输入密码中有宫格请重新输入	33[0m')
                        continue
                    elif not register_pwd.isdigit():
                        print('33[1;31;m输入密码不是由全数字组成请重新输入		33[0m')
                        continue
                    else:
                        print('33[1;32;m		注册成功		33[0m')
                        register_info_dict = {'name':None,'pwd':None,'balance':0,'integral':0,'freeze':0}
                        register_info_dict['name'] = register_name
                        register_info_dict['pwd'] = register_pwd
                        fil_add_info_dict(register_info_dict)
                        print('注册成功')
                        loading()
                        break
        return True
    

    2.登入功能

    login.py

    from fil_mode import *
    from loading import loading
    login_name = [None] #用全局可变的受局部影响
    def login():
        print('33[1;34;46m		欢迎使用登入功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            while login_name_Ture == 0:
                print('33[1;34;43m		请您输入账号		33[0m')
                print('33[1;31;m输入Q退出程序	33[0m')
                login_username = input('请输入:').strip()
                if login_username == 'Q':
                    loading()
                    return False
                elif len(login_username.replace(' ', '')) != len(login_username):
                    print('33[1;31;m输入账号中有宫格请重新输入	33[0m')
                    continue
                elif not login_username.isalpha():
                    print('33[1;31;m输入账号不为全英文		33[0m')
                    continue
                elif not login_username in fil_info_name_list():
                    print('33[1;31;m输入账号不存在		33[0m')
                    continue
                else:
                    login_name_Ture = 1
                    print('33[1;34;43m		账号输入正确		33[0m')
                    while login_count < 5:
                        print(f'33[1;34;43m	你有{5-login_count}次机会输入密码		33[0m')
                        print('33[1;34;43m		请您输入密码		33[0m')
                        login_pwd = input('请输入:').strip()
                        if len(login_pwd.replace(' ', '')) != len(login_pwd):
                            print('33[1;31;m输入密码中有宫格请重新输入	33[0m')
                            login_count += 1
                            continue
                        elif not login_pwd.isdigit():
                            print('33[1;31;m输入密码不为全数字		33[0m')
                            login_count += 1
                            continue
                        else:
                            user_dict = fil_userinfo(login_username)
                            if user_dict['pwd'] != login_pwd:
                                print('33[1;31;m输入密码错误请重新输入		33[0m')
                                login_count += 1
                                continue
                            else:
                                if user_dict["freeze"] == 0:
                                    print('33[1;32;m		登入成功		33[0m')
                                    login_name[0] = login_username
                                    loading()
                                    return True
                                else:
                                    print('33[1;31;m登入失败		33[0m')
                                    print(f'33[1;31;m账户{login_username}以被冻结		33[0m')
                                    loading()
                                    return False
                    fil_info_frzzez_amend(login_username,1)
                    print('33[1;31;m		登入失败		33[0m')
                    print(f'33[1;31;m{login_username}账号密码登入失败太多已被冻结33[0m')
                    loading()
                    return False
        while True:
            print(38 * '-')
            print("33[0;40;46m		欢迎使用登入功能			33[0m")
            print(f'账号{login_name[0]}已经登入')
            chiose = input('输入1当前账号退出并退出登入程序
    '
                           '输入2当前账号退出并重新登入程序
    '
                           '输入Q退出当前程序')
            print(38 * '-')
            if chiose == '1':
                login_name[0] = None
                return False
            elif chiose == '2':
                login_name[0] = None
                login()
                return
            elif chiose == 'Q':
                loading()
                return True
            else:
                print('33[1;31;m请正确输入')
    

    3.充值

    top_up.py

    from fil_mode import *
    from login import login_name
    from loading import loading
    def top_up():
        print('33[1;34;46m		欢迎使用充值功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('33[1;31;m没有用户登入请先登入33[0m')
            loading()
            return False
        info_dict = fil_userinfo(login_name[0])
        print(f"33[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元33[0m")
        while True :
            print('33[1;34;43m		请您输入充值的金额		33[0m')
            print('33[1;31;m输入Q退出程序	33[0m')
            balance = input('请输入:').strip()
            if balance == 'Q':
                loading()
                return False
            elif len(balance.replace(' ', '')) != len(balance):
                print('33[1;31;m输入金额中有宫格请重新输入	33[0m')
                continue
            elif not balance.isdigit():
                print('33[1;31;m输入金额不为全数字		33[0m')
                continue
            else:
                balance_int = int(balance)
                info_dict['balance'] += balance_int
                fil_info_balance_amend(login_name[0],info_dict['balance'])
                print(f'33[1;32;m充值成功33[0m')
                print(f"33[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元33[0m")
                print('33[1;34;43m		是否继续充值		33[0m')
                print('33[1;31;m输入Q退出Y为继续	33[0m')
                while True:
                    chiose = input('请输入')
                    if chiose not in ['Q','Y']:
                        print(f'33[1;32;m请好好输入33[0m')
                    elif chiose == 'Q':
                        loading()
                        return False
                    else:
                        break
    

    4.余额查询

    balance_enquiry.py

    from fil_mode import *
    from login import login_name
    from loading import loading
    import time
    def balance_enquiry():
        print('33[1;34;46m		欢迎使用余额查询功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('33[1;31;m没有用户登入请先登入33[0m')
            loading()
            return False
        info_dict = fil_userinfo(login_name[0])
        print(f"33[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元33[0m")
        print('33[1;42;m5秒后返回主界面33[0m',end='')
        loading()
        time.sleep(4)
    

    5.账号解冻功能

    freeze.py

    from fil_mode import *
    from loading import loading
    def freeze():
        
        print('33[1;34;46m		欢迎使用账号解冻功能	33[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count = 0
        if not name_list:
            print('33[1;31;m没有用户注册请先注册33[0m')
            loading()
            return False
        while True :
            print('33[1;34;43m		请您输入解冻账号		33[0m')
            print('33[1;31;m输入Q退出程序	33[0m')
            name = input('请输入:').strip()
            if name == 'Q':
                loading()
                return False
            elif len(name.replace(' ', '')) != len(name):
                print('33[1;31;m输入账号中有宫格请重新输入	33[0m')
                continue
            elif not name.isalpha():
                print('33[1;31;m输入账号不为全英文字母		33[0m')
                continue
            elif name not in name_list:
                print('33[1;31;m输入账号不存在		33[0m')
                continue
            else:
                user_dict = fil_userinfo(name)
                user_freeze = user_dict['freeze']
                user_pwd = user_dict['pwd']
                if user_freeze == 0:
                    print(f'33[1;31;m当前账户{name}未被冻结		33[0m')
                    loading()
                    return
                else:
                    while True :
                        print('-'*50)
                        a = input('输入:杨大爷请帮我解冻
    请输入:')
                        if a != '杨大爷请帮我解冻':
                            print('33[1;31;m想解冻就好好输入33[0m')
                            continue
                        fil_info_frzzez_amend(name, 0)
                        print(f'33[1;32;m账号{name}解冻成功33[0m')
                        loading()
                        return
        
    

    5.自我总结

    1.json

    其中dumps,loads,用于文件
    
    #当有一个字典或者一个列表时候我们可以使用json中的dump,load进行快速修改,多个文件就不行了
    其中dump,load,用于内存
    

    2.python终端颜色打印

    http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190609215521.png

    单行打印

    print(`33[1;(这里前景色和背景色任意选一个代码);(可以不输入)m内容33[0m`)
    

    多行打印同一效果

    print(`33[1;(这里前景色和背景色任意选一个代码);(可以不输入)m内容`)
    print('内容')
    ........
    print('最后的内容33[0m')
    
  • 相关阅读:
    glusterFS空间不够了怎么办
    openshift安装部署
    ELK 安装部署小计
    Android框架汇集
    Android项目实战(四十六):Usb转串口通讯(CH34xUARTDriver)
    Android项目实战(四十五):Zxing二维码切换横屏扫描
    Android项目实战(三十九):Android集成Unity3D项目(图文详解)
    Android项目实战(三十四):蓝牙4.0 BLE 多设备连接
    Android项目实战(二十九):酒店预定日期选择
    Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
  • 原文地址:https://www.cnblogs.com/pythonywy/p/10995079.html
Copyright © 2011-2022 走看看