#!/usr/bin/env python
# -*- coding: utf-8 -*-
## Author:lzf8989
#引入os,time模块
import os
import time
#用户账户文件,密码本+余额
file = "pass.txt"
#定义时间格式,获取当前时间
ISOTIMEFORMAT = '%Y-%m-%d %X'
this_time = time.strftime(ISOTIMEFORMAT, time.localtime())
print ("当前时间:",this_time)
#设置商品字典
product_dict = {
"手机":[('iphone',5888),('ipad',6888),('xiaomi2',2000),('锤子',4000)],
"汽车":[('特斯拉',888880),("哈佛 H6",140000),("高尔夫",150000),("奔驰S400",170000)],
"家居用品":[('桌子',2000),('椅子',500),('电视',3000),('音响',5000)]
}
#定义购物车列表
shop_car = []
#设置登陆出事计数器=0
user_login_count = 0
#设置用户登录缓存字典
user_login_cache ={}
#计数器初始值
counter = 1
#登陆状态初始值
login_status = 0
#定义密码文件修改函数,方便调用。
def pass_file_change (username_input,salary,change):
pass_file = open(file,'r')
line = pass_file.readline()
new_pass_file = open("pass_new.txt",'w')
#匹配账户,修改文件。
while line:
#整理用户名、密码、状态字段,清理字符串前后的空字符。
username_new_file = line.split()[0].strip()
userpass_file = line.split()[1].strip()
userstatus_file = line.split()[2].strip()
usersalary_file = line.split()[3].strip()
#判断用户名是否匹配,写入用户数据到临时文件。
if username_new_file == username_input and change == 1 :
lock_user_info = username_new_file + " "+userpass_file+" 1"+ " " + str(usersalary_file) +'\n'
new_pass_file.write(lock_user_info)
elif username_new_file == username_input and change == 0 :
lock_user_info = username_new_file + " "+userpass_file+" " +userstatus_file+" "+ str(salary) +'\n'
new_pass_file.write(lock_user_info)
else:
other_user_info = username_new_file+" "+userpass_file+" "+userstatus_file+" "+usersalary_file+'\n'
new_pass_file.write(other_user_info)
line = pass_file.readline()
pass_file.close()
#从临时文件读取信息,写入pass.txt文件。
new_pass_file = open("pass_new.txt")
read_new_pass_file = new_pass_file.read()
old_pass_file = open(file,'w')
old_pass_file.write(read_new_pass_file)
new_pass_file.close()
#删除临时文件
os.unlink("pass_new.txt")
#定义查看用户购买日志函数。
def look_user_log (user_log_file):
file = open(user_log_file,"r")
for line in file:
print (line.strip("/n"))
file.close()
welcome_msg = 'Welcome to SUNNY Shopping Mall'.center(50,'-')
print (welcome_msg)
#主程序开始,循环提示用户输入账户。
while 1:
#获取用户输入信息。去掉空字符。
username_input = input("username:").strip()
password_input = input("pasword:").strip()
if username_input in user_login_cache.keys():
user_login_cache[username_input] += 1
else:
user_login_cache[username_input] = user_login_count
#判断用户输入次数
if user_login_cache[username_input] < 2:
#计数器小于3次,开始逐行读取密码文件。
pass_file = open(file,'r')
line = pass_file.readline()
while line:
#切割字符串,获取密码文件中的账户信息。
username_file = line.split()[0].strip()
userpass_file = line.split()[1].strip()
lock_status = int(line.split()[2])
#print (lock_status)
#匹配用户名、密码如果相同,标记login_status=1
if username_input == username_file and password_input == userpass_file:
login_status = 1
username_ok = username_input
user_salary = line.split()[3].strip()
#print (user_salary)
#匹配用户名相同,lock_status=1,标记login_status=2.
elif username_input == username_file and lock_status == 1:
login_status = 2
elif username_input == username_file and password_input != userpass_file:
login_status = 0
#读取下一行
line = pass_file.readline()
#判断login_status值,输出结果。
if login_status == 1:
welcome_login = '登陆成功'.center(40,'-')
print (welcome_login)
recharge_flag = True
salary = int(user_salary)
print ("账户余额:",user_salary)
while recharge_flag:
salary_input = input("输入工资:")
salary_input = salary_input.strip()
if salary_input.isdigit() :
salary = int(user_salary)
recharge_flag = False
else:
continue
salary = int(salary_input) + int(user_salary)
pass_file_change (username_input,salary,0)
#设置退出标志位
exit_flag = False
#打印商品列表,于用户交互,实现购买。
while not exit_flag:
print ("商品列表".center(50,'-'))
for shop_key_item in enumerate(product_dict.keys()):
print (shop_key_item[0],". ",shop_key_item[1])
user_choice_mulu = input("请选择商品类别(q退出,l购买日志,c已买物品):")
if user_choice_mulu.isdigit():
product_dict_keys = list(product_dict.keys())
#定义菜单标志位
caidan_2_flag = True
#循环控制用户购买商品。
while caidan_2_flag:
if int(user_choice_mulu) < int(len(product_dict_keys)):
user_choice_mulu_name = product_dict_keys[int(user_choice_mulu)]
print (user_choice_mulu_name.center(50,'-'))
user_choice_mulu_name_list = product_dict[user_choice_mulu_name.strip()]
for user_choice_item in enumerate(user_choice_mulu_name_list):
user_choice_item_index = user_choice_item[0]
user_choice_item_name = user_choice_item[1][0]
user_choice_item_jiage = user_choice_item[1][1]
print(user_choice_item_index,".",user_choice_item_name," ",user_choice_item_jiage)
user_choice_commodity = input("请选择需要购买的商品(b返回,q退出,l购买日志,c已买物品):")
#对用户输入字符进行判断,控制购买流程。
if user_choice_commodity.isdigit():
if int(user_choice_commodity) < int(len(user_choice_mulu_name_list)):
p_item = user_choice_mulu_name_list[int(user_choice_commodity)]
num_exit_flag = True
while num_exit_flag:
if int(salary) < int(p_item[1]):
print ("您的余额不足以支付一件该商品")
user_choice = input ("余额不足(r充值,b返回:)")
user_choice = user_choice.strip()
#输入r开始充值,并写入pass.txt文件
if user_choice == "r":
recharge_flag = True
while recharge_flag:
user_choice_recharge = input("输入充值金额:")
user_choice_recharge = user_choice_recharge.strip()
if user_choice_recharge.isdigit():
salary += int(user_choice_recharge)
recharge_flag = False
num_exit_flag = True
#输入b返回长层菜单。
elif user_choice == "b":
num_exit_flag = False
else:
user_choice_num = input("请选择购买数量:")
#print ("OK",int(salary),p_item[1])
if user_choice_num.isdigit():
p_zongjia = int(user_choice_num) * p_item[1]
#判断用户余额是否充足。
if p_zongjia <= salary:
this_time = time.strftime(ISOTIMEFORMAT, time.localtime())
for i in range(int(user_choice_num)):
shop_car.append(p_item)
salary -= p_zongjia
print ("购买成功:",p_item[0],"总售价:",p_zongjia,"购买时间:",this_time)
#设置用户购买日志文件
user_log_file = username_input + ".txt"
user_log = open(user_log_file,'a')
print (user_choice_num)
mai_log = this_time+" "+p_item[0]+" Number:"+ user_choice_num +"price:"+str(p_item[1])+"\n"
#写入日志
user_log.write(mai_log)
user_log.close()
print ("账户余额:",salary)
pass_file_change (username_input,salary,0)
num_exit_flag = False
continue
else:
#print ("钱不够,输入b重新输入购买数量")
user_choice = input ("余额不足(r充值,c继续购买:)")
user_choice = user_choice.strip()
#提示用户充值或者重新选择熟练。
if user_choice == "r":
user_choice_recharge = input("输入充值金额:")
user_choice_recharge = user_choice_recharge.strip()
if user_choice_recharge.isdigit():
salary += int(user_choice_recharge)
pass_file_change (username_input,salary,0)
num_exit_flag = True
elif user_choice == "c":
continue
elif user_choice_commodity == 'b':
caidan_2_flag = False
else:
#用户输入q,退出
if user_choice_commodity == 'q' or user_choice_commodity == 'quit':
print("已购买物品".center(40,"*"))
print("%3s %7s %3s %7s"%("ID","商品","数量","单价"))
#print("ID"," ","p_name"," ","num"," ","total_price")
shop_car_single = set(shop_car)
count = 1
for shop_car_item in (shop_car_single):
shop_car_count = shop_car.count(shop_car_item)
print ("%3d %7s %3s %10s"%(count,shop_car_item[0],shop_car_count,shop_car_item[1]))
#print (count,shop_car_item[0],shop_car_count,shop_car_item[1])
count += 1
print("完成".center(50,"*"))
print("账户余额\033[41;1m[%s]\033[0m" % salary)
exit()
#用户选择c,输出已购买列表。
elif user_choice_commodity == 'c' or user_choice_commodity == 'check':
print("已购买物品".center(40,"*"))
print("%3s %7s %3s %7s"%("ID","商品","数量","单价"))
shop_car_single = set(shop_car)
count = 1
for shop_car_item in (shop_car_single):
shop_car_count = shop_car.count(shop_car_item)
print ("%3d %7s %3s %10s"%(count,shop_car_item[0],shop_car_count,shop_car_item[1]))
count += 1
print("完成".center(50,"*"))
print("账户余额\033[41;1m[%s]\033[0m" % salary)
#exit_flag = True
#输入l,查看购买日志。
elif user_choice_commodity == 'l'or user_choice_commodity == 'look':
user_log_file = username_input + ".txt"
look_user_log (user_log_file)
else:
caidan_2_flag = False
else:
#输入q退出并显示余额
if user_choice_mulu == 'q' or user_choice_mulu == 'quit':
print("已购买物品".center(50,"*"))
print("%3s %7s %3s %7s"%("ID","商品","数量","单价"))
shop_car_single = set(shop_car)
count = 1
for shop_car_item in (shop_car_single):
shop_car_count = shop_car.count(shop_car_item)
print ("%3d %7s %3s %10s"%(count,shop_car_item[0],shop_car_count,shop_car_item[1]))
count += 1
print("完成".center(50,"*"))
print("账户余额\033[41;1m[%s]\033[0m" % salary)
exit()
#查看购买记录
elif user_choice_mulu == 'l'or user_choice_mulu == 'look':
user_log_file = username_input + ".txt"
look_user_log (user_log_file)
#输入c查看已购买物品,显示余额。
elif user_choice_mulu == 'c' or user_choice_mulu == 'check':
print("已购买物品".center(50,"*"))
print("%3s %7s %3s %7s"%("ID","商品","数量","单价"))
shop_car_single = set(shop_car)
count = 1
for shop_car_item in (shop_car_single):
shop_car_count = shop_car.count(shop_car_item)
print ("%3d %7s %3s %10s"%(count,shop_car_item[0],shop_car_count,shop_car_item[1]))
count += 1
print("完成".center(40,"*"))
print("账户剩余\033[41;1m[%s]\033[0m" % salary)
#exit_flag = True
continue
#用户已被锁定,提示用户。
elif login_status == 2:
print ("账户锁定中!!!")
counter += 1 #计数器+1,开始下一次循环。
#用户密码错误,提示。
else:
print ("用户名或密码错误,请重新输入")
counter += 1 #计数器+1,开始下一次循环。
else:
#计数器大于3次,输出提示,锁定账户。
print ("输入次数过多,锁定账户",username_input)
#逐行读取,并设置临时文件
pass_file_change (username_input,salary,1)
break
pass_file.close()