import os, sys
import pandas as pd
import csv
import getpass
goods = [
{"name": "电脑", "price": 1999},
{"name": "鼠标", "price": 10},
{"name": "游艇", "price": 20},
{"name": "美女", "price": 998},
]
f = open('UerInforMation.csv', 'a') # 先建一个空的csv文件用来存用户数据,同时以追加的形式打开。
f.close()
products_car = [] # 创建一个空列表,存买的商品
print('*' * 50)
user_list = [] # 存放已经登录的用户
i = 100 # 设置任意的循环数
def shopping(cost):
balance=int(cost)
while True:
user_cash = input('请输入你当前金额:').strip()
if user_cash.isdigit:
cash_start = user_cash
user_cash = int(user_cash)
user_cash+=balance
print("这是你目前的总金额%d" %user_cash)
flag=True
while flag:
for i, key in enumerate(goods):
print(i, key)
number = input("请输入选择的物品编号").strip()
if number.isdigit:
number = int(number)
if number <= len(goods) - 1:
if user_cash >= int(goods[number]['price']):
user_cash -= int(goods[number]['price'])
cashend = user_cash
products_car.append([goods[number]['name'], goods[number]['price']])
print("已加入购物车,你的余额为%d" % user_cash)
while True:
print("继续购买输入Y或者y,退出输入b")
userin = input('请输入选择:').strip()
if userin == 'Y' or userin == 'y':
break
elif userin == 'b':
print("这是你购买的物品")
print('=' * 50)
for key in products_car:
print(key)
print("你的余额为%d" % user_cash)
print('=' * 50)
save(username2, password2, 0, cash_start, products_car, cashend)
sys.exit(0)
else:
print("非法输入,重新输入")
continue
else:
print("你的余额,不能购买该商品你的余额为%d,退出输入b,继续输入Y或y" % user_cash)
userin = input('请输入选择:').strip()
if userin == 'Y' or userin == 'y':
continue
elif userin == 'b':
print("这是你购买的物品")
print('=' * 50)
for key in products_car:
print(key)
print("你的余额为%d" % user_cash)
print('=' * 50)
save(username2, password2, 0, cash_start, products_car, cashend)
sys.exit(0)
else:
print("非法输入,重新输入")
continue
else:
print("输入物品编号错误,重新输入")
else:
print("输入物品编号错误,重新输入")
else:
print("输入金额有误")
def save(user,code,mark,start,data,end):
test=[]
T=[]
with open('UerInforMation.csv','r',encoding='utf-8')as f:
reader=csv.reader(f)
for i,line in enumerate(reader):
if i==0:
continue
if len(line)==6:
test.append(line)
i=i+1
for i,line in enumerate(test):
if line[0]==user:
T.append([user,code,mark,start,data,end])
else:
T.append(line)
f=open('UerInforMation.csv','w',encoding='utf-8')
f.close()
data_tset=pd.DataFrame(columns=['用户名','密码','标记','初始金额','已买商品','所剩金额'])
data_tset.to_csv('UerInforMation.csv',mode='a',index=False)
with open('UerInforMation.csv','a+',encoding='utf-8')as f:
writer=csv.writer(f)
for row in T:
writer.writerow(row)
while True:
print("输入数字1创建用户:") # 选择输入或者创建用户或者退出
print("输入数字2登录:")
print("输入数字3退出:")
number = input()
if number == '1': # 数字1创建用户
while 1:
username = input("请输入用户名:")
# 首先判断是否是第一次创建用户这里我用的是判断最开始的csv文件是否为空
# 如果为空直接创建用户
if os.path.getsize('UerInforMation.csv') == 0:
# password=getpass.getpass("请输入密码:").strip()#为csv文件添加header,其实也可以用下面添加行的方法
password = input("请输入密码:").strip()
data_tset = pd.DataFrame(columns=['用户名', '密码', '标记', '初始金额', '已买商品', '所剩金额'])
data_tset.to_csv('UerInforMation.csv', mode='a', index=False)
with open('UerInforMation.csv', 'a+',
encoding='utf-8')as f: # 向csv文件添加一行用户数据
csv_write = csv.writer(f) # 这里0表示未被锁定如果为1表示已锁定
data_row = [username, password, '0', '0', 'None', '0']
csv_write.writerow(data_row)
df = pd.read_csv('UerInforMation.csv')
print('创建成功,是否退出创建,退出输入Y或者y,继续创建输入任意数字')
quit = input("退出创建回到主页面输入Y或者y:").strip()
if quit == 'y' or quit == 'Y':
break
else:
continue
else: # 如果不为空再判断创建用户是否已经存在或已被锁定
df = pd.read_csv('UerInforMation.csv')
flag = 0
for i in range(len(df)):
if str(df.iloc[i][2]) == '1' and str(df.iloc[i][0]) == username:
print("非法操作,用户%s已被锁定,系统将自动退出" % username)
sys.exit(1)
if str(df.iloc[i][0]) == username:
print("用户%s已存在,请回到主界面重新选择" % username)
flag = 1
break
if flag == 1:
break
if flag == 0: # 判断通过后添加到csv文件
# password=getpass.getpass("请输入密码:").strip()
password = input("请输入密码:").strip()
with open('UerInforMation.csv', 'a+', encoding='utf-8')as f:
csv_write = csv.writer(f)
data_row = [username, password, '0', '0', 'None', '0']
csv_write.writerow(data_row)
print('创建成功,是否退出创建,退出输入Y或者y,继续创建输入任意数字')
quit = input("退出创建回到主页面输入Y或者y:").strip()
if quit == 'y' or quit == 'Y':
break
else:
continue
# 数字2登录
if number == '2':
print("=" * 50)
if os.path.getsize('UerInforMation.csv') == 0:
print("检测到您并未创建用户,请先创建用户再进行登录")
continue
df = pd.read_csv('UerInforMation.csv')
username2 = input("输入用户:").strip()
# 判断该用户是否注册
flag4 = 0
for i in range(len(df)):
if str(df.iloc[i][0]) == username2:
flag4 = 1
index = i
if flag4 == 0:
print("别乱来啊,你没有注册该用户,请注册后登录")
continue
# 判断用户是否被锁定
for i in range(len(df)):
if str(df.iloc[i][0]) == username2 and str(df.iloc[i][2]) == '1':
print("用户已被锁定,系统将自动退出")
sys.exit(1)
# 验证密码是否正确
print('=' * 50)
n = 3
flag2 = 0
while n > 0:
# password2=getpass.getpass("请输入密码:").strip()
password2 = input("请输入密码:").strip()
for i in range(len(df)):
if str(df.iloc[i][0]) == username2 and str(df.iloc[i][1]) == password2:
# print("success2")
# df里的数据类型不同不能比较所以导出数据转类型再比较
flag2 = 1
break
# 密码正确跳出循环
if flag2 == 1:
index = i
break
if flag2 == 0:
n = n - 1
print("密码错误,你还有%d次机会重新输入" % n)
# 密码正确存入user_list并显示已经登录的用户
if flag2 == 1:
user_list.append(username2)
print("******** 欢迎%s登录********" % username2)
# 检查是否购买过商品,如果没有买过直接购买
if str(df.iloc[index][4]) == 'None':
shopping(0)
# 买过商品,先询问是否打印历史购物信息
else:
# 先打印消费记录,然后输入金额会累积到上次余额
print("这是你上次购买的商品")
print(df.iloc[index][4])
# for i,key in enumerate(df.iloc[index][4]):
# print(i,key)
print("这是你上次的余额%d" % df.iloc[index][5])
# print("dvar",type(df.iloc[index][5]))
shopping(df.iloc[index][5])
# 密码错误,锁定用户并自动退出
if flag2 == 0:
save(username2, password2, 1, df.iloc[index][3], df.iloc[index][4], df.iloc[index][5])
print("用户已被锁定,系统将会自动退出")
sys.exit(1)
# 数字3退出
if number == '3':
break
i = i - 1
if number != '1' and number != '2' and number != 3:
print("乱输入啥呢你,再给你次机会好好输入")