Python作业---文章管理系统

Python作业---文章管理系统,第1张

Python作业—文章管理系统

控制台版文章管理系统:
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可以直观的表现出文章的写入时间。

以上便是本系统的全部功能。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/726299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存