控制台版文章管理系统:
1、用户管理系统
2、文章的管理和控制
|-- 密码加密
|-- 时间API
|-- 实现数据的持久化
废话少说,先上代码:
import hashlib
import os
import time
import datetime
import sys
def Init(): #初始化
global USER_LIST
isExist = os.path.exists("./data")
if not isExist:
os.mkdir("./data")
os.chdir("./data")
else:
os.chdir("./data")
isExistf = os.path.exists("users.txt")
if isExistf:
file = open("users.txt","r")
USER_LIST = eval(file.read())
file.close()
def SaveUser(): #保存用户信息
global USER_LIST
isExist = os.path.exists("./data/users.txt")
if not isExist:
file = open("users.txt","w")
file.write(str(USER_LIST))
else:
file = open("users.txt","a")
file.write(str(USER_LIST))
file.close()
def ShowMenu(): #显示菜单
print("\n\n\n\n")
print(" 文章管理系统 ")
print("******************************")
print("[1]用户登录")
print("[2]用户注册")
print("[3]退出")
while True:
i = int(input("请选择:"))
if i == 1 or i == 2 or i == 3:
return i
def GetMD5(pw): #密码MD5加密
salt = "*%(^"
obj = hashlib.md5((pw+salt).encode('UTF-8'))
result = obj.hexdigest()
return result
def register(): #用户注册
global USER_LIST
user = input("请输入用户名:")
pwd = input("请输入密码:")
pwd1 = input("请确认密码:")
if pwd == pwd1:
temp = {'username':user,'password':GetMD5(pwd)}
USER_LIST.append(temp)
SaveUser()
print("注册成功!")
else:
print("两次密码不一致!")
register()
def login(): #用户登录
global USER_LIST
global ActUser
user = input("请输入用户名:")
pwd = input("请输入密码:")
for obj in USER_LIST:
if obj['username'] == user and obj['password'] == GetMD5(pwd):
print("******************************")
print("登录成功!")
ActUser = user
TxtManage()
return True
print("登陆失败!")
return False
def NewTxt(): #新建文章
global ActUser
title = input("请输入文章标题:")
file_path = "./" + ActUser + "/"
isExist = os.path.exists("./" + ActUser)
if isExist == False:
os.mkdir("./" + ActUser)
os.chdir("./" + ActUser)
else:
os.chdir("./" + ActUser)
file = open(title + ".txt","w")
file.write("标题:" + title + "\r\n")
file.write("时间:" + datetime.datetime.now().strftime('%Y-%m-%d') + "\r\n")
print("请输入文章内容[单独输入'q'保存退出]:")
while True:
content = input()
if content != 'q':
file.write("%s\n"%content)
else:
break
file.close()
print("文章已保存")
os.chdir("..")
return True
def ShowTxt(): #显示用户文章列表
global ActUser
isExist = os.path.exists("./" + ActUser)
if isExist == False:
os.mkdir("./" + ActUser)
os.chdir("./" + ActUser)
else:
os.chdir("./" + ActUser)
dirs = os.listdir(os.getcwd())
print("\n\n\n\n")
print("文章列表:")
for file in dirs:
print(file)
os.chdir("..")
def DelTxt(): #删除文章
global ActUser
isExist = os.path.exists("./" + ActUser)
if isExist == False:
os.mkdir("./" + ActUser)
os.chdir("./" + ActUser)
else:
os.chdir("./" + ActUser)
txt = input("请输入要删除的文章标题")
if isExist == os.path.exists(txt + ".txt"):
os.remove(txt + ".txt")
print("删除成功!")
os.chdir("..")
return True
else:
print("文章不存在!请重新输入")
os.chdir("..")
DelTxt()
def TxtManage(): #文章管理
while True:
ShowTxt()
print("******************************")
print("[1]新建文章")
print("[2]查看文章")
print("[3]删除文章")
print("[4]退出登录")
while True:
i = input("请选择要进行的 *** 作:")
if i == '1':
NewTxt()
break
elif i == '2':
ShowTxtContent()
break
elif i == '3':
DelTxt()
break
elif i == '4':
return True
def ShowTxtContent(): #显示文件内容
global ActUser
isExist = os.path.exists("./" + ActUser)
if isExist == False:
os.mkdir("./" + ActUser)
os.chdir("./" + ActUser)
else:
os.chdir("./" + ActUser)
txt = input("请输入要查看的文章的标题")
file = open(txt + ".txt")
line = file.readline()
print("\n\n\n\n")
while line:
print(line,end='')
line = file.readline()
file.close()
os.chdir("..")
ActUser = '#' #当前用户
USER_LIST=[]
Init()
while True:
i = ShowMenu()
if i == 2:
register()
elif i == 1:
login()
else:
os._exit(0)
这个问题可以分为两个模块:
第一个是用户管理模块,用户可以进行注册和登录等 *** 作,要点在于实现用户列表的文件存储和用户账号信息的加密处理。
文件存储:为实现持久化,每次USER_LIST有更新,也就是用户注册成功的时候,就将USER_LIST中的信息加密并存入本地的txt文件,每次程序运行时进行初始化来检索这个文件,如果有文件,就将文件中的USER_LIST信息读入到程序的USER_LIST全局变量中。
密码加密:这里使用MD5加密,增加盐值混淆,在用户注册成功之后就将密码进行MD5加密并存入USER_LIST中,登录时将登陆密码用同样的加密手段加密并比较,这样在用户账号文件中就无法直接看到密码,增加安全性。
第二个是文章管理模块,用户可以写文章,删除文章,查看已有文章,要点在于不同用户只能查看自己的文章,以及写入文章时的格式问题。
要解决第一个要点,我的思路是给每个用户生成一个用户自己的文件夹来存放文章,届时只需要到相应的文件夹内去找文章即可,因此给定全局变量ActUser表示当前用户,以确定用户文章的文件夹名称。
第二个要点便是输入问题,我们知道write()方法是不会自动换行的,因此我们给定一个输入结束的标识’q’,然后进行循环输入,在末尾手动添加换行,就可以达到正常文章中的换行效果,我们可以直接将一篇文章粘贴到复制台中来完成输入。
而时间API可以直观的表现出文章的写入时间。
以上便是本系统的全部功能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)