# 按要求完成明星投票系统的相关功能.
# 功能需求:
# 1.用户注册.将用户名和密码保存在文件中.
# 2.登录功能.不需要三次登录.正常反复无限登录就可以.直到登录成功为止
# 3.用户登录后可以查看所有明星信息.明星信息保存在明星文件中.
# 例如:
# 1 林俊杰 1
# 2 周杰伦 0
# 3 麻花藤 0
# 第⼀位是序号, 第二位是名字, 第三位是得票数
# 4. 给明星进行投票
# 5. 每个人每24小时只能投⼀次票(扩展功能, 装饰器)
# 思路: 每次用户投票之后.都从文件中查询一下用户上⼀次投票时间.让用户上⼀次投票时间和当前系统时间做时间差.
# 如果大于24小时.则可以进行投票.如果小于24小时, 则提示用户不能进行投票.时间处理请自行百度.
# 使用知识点:
# 1.函数, 请将以上功能尽可能的封装成函数.用函数来描述每⼀个功能是我们以后开发经常使用的⼀种写法和思路
# 2.文件读写.由于暂时没有数据库的支持.我们只能用文件来完成相关操作.这里涉及到
# 一个非常麻烦的地方就是如何保存用户投票成功的时间.这个是本题的⼀个考点.
# 3.循环以及⼀些基础数据类型的相关知识.
# 以下是我给出的运行效果大概展示思路.如果你有更好, 更合理的思路也可以自行设计.
# 运行效果:
# 欢迎进入明星投票系统:
# 1.注册
# 2.登录
# 3.查看明星
# 4.明星投票
# 5.退出系统
import os
import time
dic = {'状态':None}
def register():
l = True
while l:
username = input('请输入要注册的用户名:').strip()
with open('t1.txt',encoding='utf-8',mode='r+')as f1:
for line in f1:
s = line.strip().split(' ')
if username == s[0]:
print('用户名已存在,请重新注册')
break
else:
password = input('请输入要注册的密码:').strip()
f1.write('\n%s %s'%(username,password))
return '注册成功'
def login():
l = True
while l:
username1 = input('请输入用户名:').strip()
password1 = input('请输入密码:').strip()
with open('t1.txt',encoding='utf-8')as f2:
for line in f2:
s = line.strip().split(' ')
if username1 == s[0] and password1 == s[1]:
return '登录成功'
else:
print('登录失败,请重新登录')
def quire():
with open('quire.txt',encoding='utf-8')as f3:
return f3.read()
def func():
def wrapper(f):
def inner(*args,**kwargs):
with open('time',encoding='utf-8')as f5:
print('你上次投票时间为{}'.format(time.strftime('%Y-%m-%d-%H:%M:%S',time.localtime(int(f5.read().strip())))))
f5.seek(0,0)
ret = float(int(f5.read()))
if time.time() - ret < 86400: # 一天为86400秒
print('两次投票间隔小于24小时,无法投票')
else:
ret = f(*args,**kwargs)
with open('time',encoding='utf-8',mode='w')as f5:
print('投票成功')
f5.write(str(int(time.time())))
return ret
return inner
@wrapper
def vote():
with open('quire.txt',encoding='utf-8')as f3,open('new_quire.txt',encoding='utf-8',mode='w')as f4:
s = int(input('请输入你要投票的明星:').strip())
for line in f3:
new_line = line.strip().split(' ')
if s == int(new_line[0]):
new_line[2] = str(int(new_line[2]) + 1)
new_line1 = ' '.join(new_line)
f4.write('{}\n'.format(new_line1))
else:
new_line1 = ' '.join(new_line)
f4.write('{}\n'.format(new_line1))
os.remove('quire.txt')
os.rename('new_quire.txt','quire.txt')
vote()
l = True
while l:
print('''欢迎进入明星投票系统:
1.注册
2.登录
3.查看明星
4.明星投票
5.退出系统''')
n = int(input('请输入您的选项:').strip())
if n == 1:
print(register())
elif n == 2:
if login() == '登录成功':
print('登录成功,您已可以查看所有明星信息')
dic['状态'] = '已登录'
elif n == 3:
if dic['状态'] == '已登录':
print(quire())
else:
print('请先登录,登录后才可执行此操作')
elif n == 4:
if dic['状态'] == '已登录':
func()
else:
print('请先登录,登录后才可执行此操作')
elif n == 5:
print('您已退出系统')
l = False