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("\033[0;31;44m\t\t杨大爷超市欢迎您\t\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入0进入注册界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入1进入登入界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入2进入充值界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入3进入余额查询界面\t\t\033[5m")
print("\033[0;30;42m\t\t输入4进入购物界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入5进入解冻界面\t\t\t\033[5m")
print("\033[0;30;42m\t\t输入q退出程序 \t\t\t\t\033[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}\n')
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}\n')
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}\n')
fw.flush()
os.remove(fil)
os.rename('1.txt',fil)
2.用于子程序返回主界面来个延迟动画效果
loading.py
import time
def loading():
txt = '返回主界面中loading'
print(f'\033[1;42;m{txt}\033[0m',end='')
for a in range(10):
print(f'\033[1;42;m.\033[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('\033[1;34;46m\t\t欢迎使用注册功能\t\t\033[0m')
register_name_Ture = 0
name_list = fil_info_name_list()
while register_name_Ture==0:
print('\033[1;34;43m\t\t请您输入注册账号\t\t\033[0m')
print('\033[1;34;43m\t\t账号由全英文组成\t\t\033[0m')
print('\033[1;31;m输入Q退出程序\t\033[0m')
register_name = input('请输入:').strip()
if register_name == 'Q':
loading()
return False
elif len(register_name.replace(' ','')) != len(register_name):
print('\033[1;31;m输入账号中有宫格请重新输入\t\033[0m')
continue
elif not register_name.isalpha():
print('\033[1;31;m输入账号不是由全英文组成请重新输入\t\t\033[0m')
continue
elif register_name in fil_info_name_list():
print('\033[1;31;m输入账号以存在请重新输入\t\t\033[0m')
else:
register_name_Ture =1
print('\033[1;34;43m\t\t账号名已注册成功\t\t\033[0m')
while True:
print('\033[1;34;43m\t\t请您输入注册密码\t\t\033[0m')
print('\033[1;34;43m\t\t账号由全数字组成\t\t\033[0m')
register_pwd = input('请输入:').strip()
if len(register_pwd.replace(' ', '')) != len(register_pwd):
print('\033[1;31;m输入密码中有宫格请重新输入\t\033[0m')
continue
elif not register_pwd.isdigit():
print('\033[1;31;m输入密码不是由全数字组成请重新输入\t\t\033[0m')
continue
else:
print('\033[1;32;m\t\t注册成功\t\t\033[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('\033[1;34;46m\t\t欢迎使用登入功能\t\033[0m')
name_list = fil_info_name_list()
login_name_Ture = 0
login_count =0
if not name_list:
print('\033[1;31;m没有用户注册请先注册\033[0m')
loading()
return False
global login_name
if not login_name[0]:
while login_name_Ture == 0:
print('\033[1;34;43m\t\t请您输入账号\t\t\033[0m')
print('\033[1;31;m输入Q退出程序\t\033[0m')
login_username = input('请输入:').strip()
if login_username == 'Q':
loading()
return False
elif len(login_username.replace(' ', '')) != len(login_username):
print('\033[1;31;m输入账号中有宫格请重新输入\t\033[0m')
continue
elif not login_username.isalpha():
print('\033[1;31;m输入账号不为全英文\t\t\033[0m')
continue
elif not login_username in fil_info_name_list():
print('\033[1;31;m输入账号不存在\t\t\033[0m')
continue
else:
login_name_Ture = 1
print('\033[1;34;43m\t\t账号输入正确\t\t\033[0m')
while login_count < 5:
print(f'\033[1;34;43m\t你有{5-login_count}次机会输入密码\t\t\033[0m')
print('\033[1;34;43m\t\t请您输入密码\t\t\033[0m')
login_pwd = input('请输入:').strip()
if len(login_pwd.replace(' ', '')) != len(login_pwd):
print('\033[1;31;m输入密码中有宫格请重新输入\t\033[0m')
login_count += 1
continue
elif not login_pwd.isdigit():
print('\033[1;31;m输入密码不为全数字\t\t\033[0m')
login_count += 1
continue
else:
user_dict = fil_userinfo(login_username)
if user_dict['pwd'] != login_pwd:
print('\033[1;31;m输入密码错误请重新输入\t\t\033[0m')
login_count += 1
continue
else:
if user_dict["freeze"] == 0:
print('\033[1;32;m\t\t登入成功\t\t\033[0m')
login_name[0] = login_username
loading()
return True
else:
print('\033[1;31;m登入失败\t\t\033[0m')
print(f'\033[1;31;m账户{login_username}以被冻结\t\t\033[0m')
loading()
return False
fil_info_frzzez_amend(login_username,1)
print('\033[1;31;m\t\t登入失败\t\t\033[0m')
print(f'\033[1;31;m{login_username}账号密码登入失败太多已被冻结\033[0m')
loading()
return False
while True:
print(38 * '-')
print("\033[0;40;46m\t\t欢迎使用登入功能\t\t\t\033[0m")
print(f'账号{login_name[0]}已经登入')
chiose = input('输入1当前账号退出并退出登入程序\n'
'输入2当前账号退出并重新登入程序\n'
'输入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('\033[1;31;m请正确输入')
3.充值
top_up.py
from fil_mode import *
from login import login_name
from loading import loading
def top_up():
print('\033[1;34;46m\t\t欢迎使用充值功能\t\033[0m')
name_list = fil_info_name_list()
login_name_Ture = 0
login_count =0
if not name_list:
print('\033[1;31;m没有用户注册请先注册\033[0m')
loading()
return False
global login_name
if not login_name[0]:
print('\033[1;31;m没有用户登入请先登入\033[0m')
loading()
return False
info_dict = fil_userinfo(login_name[0])
print(f"\033[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元\033[0m")
while True :
print('\033[1;34;43m\t\t请您输入充值的金额\t\t\033[0m')
print('\033[1;31;m输入Q退出程序\t\033[0m')
balance = input('请输入:').strip()
if balance == 'Q':
loading()
return False
elif len(balance.replace(' ', '')) != len(balance):
print('\033[1;31;m输入金额中有宫格请重新输入\t\033[0m')
continue
elif not balance.isdigit():
print('\033[1;31;m输入金额不为全数字\t\t\033[0m')
continue
else:
balance_int = int(balance)
info_dict['balance'] += balance_int
fil_info_balance_amend(login_name[0],info_dict['balance'])
print(f'\033[1;32;m充值成功\033[0m')
print(f"\033[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元\033[0m")
print('\033[1;34;43m\t\t是否继续充值\t\t\033[0m')
print('\033[1;31;m输入Q退出Y为继续\t\033[0m')
while True:
chiose = input('请输入')
if chiose not in ['Q','Y']:
print(f'\033[1;32;m请好好输入\033[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('\033[1;34;46m\t\t欢迎使用余额查询功能\t\033[0m')
name_list = fil_info_name_list()
login_name_Ture = 0
login_count =0
if not name_list:
print('\033[1;31;m没有用户注册请先注册\033[0m')
loading()
return False
global login_name
if not login_name[0]:
print('\033[1;31;m没有用户登入请先登入\033[0m')
loading()
return False
info_dict = fil_userinfo(login_name[0])
print(f"\033[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元\033[0m")
print('\033[1;42;m5秒后返回主界面\033[0m',end='')
loading()
time.sleep(4)
5.账号解冻功能
freeze.py
from fil_mode import *
from loading import loading
def freeze():
print('\033[1;34;46m\t\t欢迎使用账号解冻功能\t\033[0m')
name_list = fil_info_name_list()
login_name_Ture = 0
login_count = 0
if not name_list:
print('\033[1;31;m没有用户注册请先注册\033[0m')
loading()
return False
while True :
print('\033[1;34;43m\t\t请您输入解冻账号\t\t\033[0m')
print('\033[1;31;m输入Q退出程序\t\033[0m')
name = input('请输入:').strip()
if name == 'Q':
loading()
return False
elif len(name.replace(' ', '')) != len(name):
print('\033[1;31;m输入账号中有宫格请重新输入\t\033[0m')
continue
elif not name.isalpha():
print('\033[1;31;m输入账号不为全英文字母\t\t\033[0m')
continue
elif name not in name_list:
print('\033[1;31;m输入账号不存在\t\t\033[0m')
continue
else:
user_dict = fil_userinfo(name)
user_freeze = user_dict['freeze']
user_pwd = user_dict['pwd']
if user_freeze == 0:
print(f'\033[1;31;m当前账户{name}未被冻结\t\t\033[0m')
loading()
return
else:
while True :
print('-'*50)
a = input('输入:杨大爷请帮我解冻\n请输入:')
if a != '杨大爷请帮我解冻':
print('\033[1;31;m想解冻就好好输入\033[0m')
continue
fil_info_frzzez_amend(name, 0)
print(f'\033[1;32;m账号{name}解冻成功\033[0m')
loading()
return
5.自我总结
1.json
其中dumps,loads,用于文件
#当有一个字典或者一个列表时候我们可以使用json中的dump,load进行快速修改,多个文件就不行了
其中dump,load,用于内存
2.python终端颜色打印

单行打印
print(`\033[1;(这里前景色和背景色任意选一个代码);(可以不输入)m内容\033[0m`)
多行打印同一效果
print(`\033[1;(这里前景色和背景色任意选一个代码);(可以不输入)m内容`)
print('内容')
........
print('最后的内容\033[0m')
python面向过程编程小程序 -ATM(里面用了终端打印)的更多相关文章
- python面向过程编程小程序- 模拟超市收银系统
6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式 ...
- 【Python精华】100个Python练手小程序
100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同 ...
- 整理了适合新手的20个Python练手小程序
100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python. 本文附带基础视频教程:私信回复[基础]就可以获取的 [程序1] ...
- 利用python实现微信小程序游戏跳一跳详细教程
利用python实现微信小程序游戏跳一跳详细教程 1 先安装python 然后再安装pip <a href="http://newmiracle.cn/wp-content/uploa ...
- 微信小程序开发:python+sanic 实现小程序登录注册
开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...
- Python实现微信小程序支付功能
由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 当然具体的参数配置可以参考官 ...
- Python - 文件分发小程序
一.概述 该小程序实现从源端到目标端的文件一键拷贝,源端和目标段都在一台电脑上面,只是目录不同而已 二.参数文件说明 1. settings.txt的说明 a. 通过配置settings.txt,填源 ...
- Python 发送微信小程序的模板消息
在小程序的开发过程中,会存在模板消息的发送,具体文档见 这里,模板消息的发送是和语言无关的,这里将简要写一下怎么用 Python 给用户发送模板消息. 通过文档可以知道,发送的时候,需要使用小 ...
- Python编写购物小程序
购物车要求: 用户名和密码存放于文件中 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够 ...
随机推荐
- Android View 滚动边界的测量
最近一直在用Android TV的RecyclerView,实现视频搜索列表卡片的滚动显示,由于采用了双排滚动,打破了系统默认的单排滚动,且每一屏幕显示10个完整卡片5个半漏边卡片,每个完整卡片的左下 ...
- Q_DECLARE_METATYPE(继承QObject的类都已经自动注册),注册后的类型可以作为QVariant的自定义类型
简介 这个宏用来注册一个类(含默认构造.默认析构.拷贝构造函数)为QMetaType类型 ,注册后的类型可以作为QVariant的自定义类型. 这个宏应该放在类或者结构体外面的下面,也可以放在一个非公 ...
- springmvc拦截请求
springmvc.xml <!--拦截请求 --> <mvc:interceptors> <mvc:interceptor> <!-- 要拦截的请求类型 / ...
- Spark之SparkSql
-- Spark SQL 以编程方式指定模式 val sqlContext = new org.apache.spark.sql.SQLContext(sc) val employee = sc.te ...
- Markdown教程<3> 数学公式(1)
# Markdown教程<3> 数学公式(1) 1.如何在markdown中使用公式 公式分为行内公式与行间公式,其中: 行内公式使用$ 数学公式 $ 行间公式使用$$ 数学公式 $$ 2 ...
- 自定义实现一个loghub(或kafka)的动态分片消费者负载均衡?
一般地,像kafka之类的消息中间件,作为一个可以保持历史消息的组件,其消费模型一般是主动拉取方式.这是为了给消费者足够的自由,回滚或者前进. 然而,也正是由于将消费消息的权力交给了消费者,所以,消费 ...
- Storm 学习之路(五)—— Storm编程模型详解
一.简介 下图为Strom的运行流程图,在开发Storm流处理程序时,我们需要采用内置或自定义实现spout(数据源)和bolt(处理单元),并通过TopologyBuilder将它们之间进行关联,形 ...
- bitmap-如何判断某个整数是否存在40亿个整数中?
有这样一道面试题:现有40亿个整数,如果再给定一个新的整数,怎么判断这个整数是否在这40亿个整数中? 你可能首先会想到用一个set存储,那个新数只需判断是否在set中.但是如果用set存储的话,如果一 ...
- Java基础篇01
01. 面向对象 --> 什么是面向对象 面向对象 面向对象程序设计,简称OOP(Object Oriented Programming). 对象: 指人们要研究的任何事物,不管是物理上具体的事 ...
- 面试中的作用域题和THIS 指向的问题
作用域的面试题 1. fn() function fn () { console.log(12) } var as = function () { console.log(45) } 2. var a ...