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')