注意:程序中涉及到文件路径的,可以酌情修改电脑本地路径
这是我的Python语言的课程设计作业,代码有很多不足,望大佬不吝赐教!
''' Python面向对象实现简单博客管理系统
要求:1.实现用户登录、注册界面
2.实现对博客文章的增、删、查、改等功能
3.博客文章保存到文件
4.用户信息保存到json文件中
'''
import time
import os
import json
import datetime
class Main_interface():
''' 主界面 '''
def __init__(self):
self.user = User()
self.article = Article()
def welcome_interface(self):
''' 欢迎界面 '''
print("欢迎使用博客管理系统!")
print("1.登录")
print("2.注册")
print("3.退出")
user = input("请输入序号:")
if user == '1':
self.user.login()
elif user == '2':
self.user.register()
else:
exit()
class After_login_interface():
''' 登录后界面类'''
def __init__(self):
# 实例化Article
self.article = Article()
def after_login(self):
''' 登录后界面 '''
print("1.写文章")
print("2.查看文章")
print("3.全部文章")
print("4.修改文章")
print("5.删除文章")
print("0.退出系统")
user = input("请输入序号:")
if user == '1':
self.article.add_article()
elif user == '2':
self.article.find_one_articel()
elif user == '3':
self.article.show_all_article()
elif user == '4':
self.article.modify_article()
elif user == '5':
self.article.del_article()
elif user == '0':
exit()
else:
print("请输入正确的序号:")
self.after_login()
class User():
''' 用户类 '''
def __init__(self):
self.after_login_interface = After_login_interface()
self.info_dict = {
} # 以字典形式临时存放用户注册信息,便于随后存到json文件中
self.username = ''
self.name_info = []
self.password = ''
def login(self):
''' 用户登录 '''
print("正在登录...")
self.username = input("请输入用户名:")
with open(r"H:\untitled\Spider\BlogData\user_info.json", 'r') as f:
for info in f.readlines():
try:
self.name_info.append(str(json.loads(info).keys()))
self.password = str(json.loads(info)[self.username])
except:
pass
if str("dict_keys(['" + self.username + "'])") in self.name_info:
password = input("请输入密码:")
if password == self.password:
print("登陆成功!")
self.after_login_interface.after_login()
else:
print("密码错误!")
else:
print('用户名不存在!')
self.re_login()
def re_login(self):
'''重新登录 '''
user_desicion = input("是否注册(1.注册帐号 2.重新登录 3.退出系统)")
if user_desicion == '1':
self.register()
elif user_desicion == '2':
self.login()
elif user_desicion == '3':
exit()
else:
print('输入有误,请重新输入!')
self.re_login()
def register(self):
''' 用户注册 '''
print("正在注册...")
self.username = input("请输入您想要使用的用户名:")
with open(r"H:\untitled\Spider\BlogData\user_info.json", 'r') as f:
for info in f.readlines():
try:
self.name_info.append(str(json.loads(info).keys()))
except:
pass
#print(str("dict_keys([" + "'" + self.username + "'" + "])"))
if str("dict_keys(['" + self.username + "'])") in self.name_info:
print('您输入的用户名已存在,请重新输入:')
self.register()
else:
# self.info_dict['self.username'] = self.username # 将用户输入的self.username存到字典中
password = input("请输入您想要使用的密码:")
verify_password = input("请再次确认密码:")
if password == verify_password:
print("注册成功!")
# 注册成功后创建一个名为self.username的文件夹
try:
if not os.path.exists("H://untitled//Spider//BlogData//" + self.username + "//"):
os.mkdir("H://untitled//Spider//BlogData//" + self.username + "//")
except:
print("个人文件夹创建失败")
self.info_dict[self.username] = password # 将用户输入的password存到字典
# print(self.info_dict)
json_str = json.dumps(self.info_dict) # 将用户输入的self.username和password转换为json格式并存入json文件
with open(r"H:\untitled\Spider\BlogData\user_info.json", 'a+') as json_file:
json_file.write(json_str + '\n')
json_file.close()
print("正在返回登录界面,请稍后...")
time.sleep(3)
self.login()
else:
print("两次输入的密码不相同,注册失败!")
print("正在返回注册界面,请稍后...")
time.sleep(3)
self.register()
class Article():
''' 博客文章类 '''
def __init__(self):
self.username = ''
self.article_list = []
def add_article(self):
''' 添加文章 -- 写文章 '''
self.username = input("请验证您的用户名:")
title = input("请输入文章名:")
file_path = "H://untitled//Spider//BlogData//" + self.username + "//"
if title in os.listdir(file_path):
print('文章已存在!请重新输入')
self.add_article()
else:
try:
with open("H://untitled//Spider//BlogData//" + self.username + "//"+ title + ".txt", 'w') as file:
file.write('标题:' + title )
file.write('时间:' + datetime.datetime.now().strftime('%Y-%m-%d'))
content = input("请输入文章内容:")
file.write('正文:'+ content)
file.close()
print('文章已保存!')
except:
print("用户名验证失败!")
user_decision = input("是否继续写文章(1.继续 2.退出系统)")
if user_decision == '1':
self.add_article()
else:
exit()
def find_one_articel(self):
''' 查找文章 '''
print("正在调用查找一篇文章方法")
self.show_all_article()
def show_all_article(self):
''' 展示所有文章 '''
print("正在调用展示所有文章方法")
self.username = input("请验证您的用户名:")
file_path = "H://untitled//Spider//BlogData//" + self.username + "//"
self.article_list = os.listdir(file_path)
print("*" * 20)
if len(self.article_list) == 0:
print("您还没有写文章!")
exit()
for article_name in self.article_list:
print(article_name)
print("*" * 20)
user_decision = input("输入文章名:") + '.txt'
if user_decision in self.article_list:
with open("H://untitled//Spider//BlogData//" + self.username + "//" + user_decision, 'r') as f:
for text in f.readlines():
print(text)
else:
print("您查找的文章不存在!")
def del_article(self):
''' 删除文章 '''
print("正在调用删除文章方法")
self.username = input("请验证您的用户名:")
file_path = "H://untitled//Spider//BlogData//" + self.username + "//"
self.article_list = os.listdir(file_path)
print("*" * 20)
if len(self.article_list) == 0:
print("您还没有写文章!")
for article_name in self.article_list:
print(article_name)
print("*" * 20)
user_decision = input("请输入要删除的文章名:") + '.txt'
del_path = "H://untitled//Spider//BlogData//" + self.username + "//" + user_decision
os.remove(del_path)
if user_decision + '.txt' not in self.article_list:
print("删除成功!")
else:
print('删除失败!')
def modify_article(self):
''' 修改文章 '''
print("正在调用修改文章方法")
self.username = input("请验证您的用户名:")
file_path = "H://untitled//Spider//BlogData//" + self.username + "//"
self.article_list = os.listdir(file_path)
print("*" * 20)
if len(self.article_list) == 0:
print("您还没有写文章!")
for article_name in self.article_list:
print(article_name)
print("*" * 20)
user_decision = input("请输入要修改的文章名:") + '.txt'
change_path = "H://untitled//Spider//BlogData//" + self.username + "//" + user_decision
user_selection = input("1.追加内容 2.覆盖内容")
if user_selection == '1':
text = input("请输入追加内容:")
with open(change_path, 'a+') as fp:
fp.write(text)
fp.close()
elif user_selection == '2':
text = input("请输入覆盖内容:")
with open(change_path, 'w') as fp:
fp.write(text)
fp.close()
def make_dirs():
''' 创建文件 '''
file = os.path.exists('BlogData')
if not file:
os.makedirs('BlogData')
print("创建成功,博客系统数据将保存在'BlogData'文件夹")
print('请重新启动程序!')
exit()
else:
print("文件已存在,博客系统数据将保存在'BlogData'文件夹")
make_dirs()
MI = Main_interface()
MI.welcome_interface()
文章浏览阅读1.3w次,点赞15次,收藏98次。SKlearn学习笔记——神经网络概述1 打开深度学习的大门:神经网络概述1.1 打开深度学习的大门1.2 神经网络的基本原理1.3 sklearn中的神经网络2 neural_network.MLPClassifier2.1 隐藏层与神经元:重要参数hidden_layer_sizes2.2 激活函数:重要参数activation2.3 反向传播与梯度下降前言: scikit-learn,又写作sklearn,是一个开源的基于python语言的机器学习工具包。它通过NumPy, SciPy和Matp_sklearn.neural_network
文章浏览阅读1.4k次。百度论坛里面有很多好的方法,借鉴. 重点:因为项目是StringBoot所以我用的是下面的方法很好使: Service.... service = (Service....) Con..._websocket调用service
文章浏览阅读5.1k次,点赞2次,收藏7次。一. RoseHA的工作原理 RoseHA双机系统的两台服务器(主机)都与磁盘阵列(共享存储)系统直接连接,用户的操作系统、应用软件和RoseHA高可用软件分别安装在两台主机上,数据库等共享数据存放在存储系统上,两台主机之间通过私用心跳网络连接。配置好的系统主机开始工作后,RoseHA软件开始监控系统,通过私用网络传递的心跳信息,每台主机上的RoseHA软件都可监控另一台主机的状态。当工作主机..._rose主备切换
文章浏览阅读2.7k次。一、前言上2个章节已经实现了mysql和MongoDB的多租户切实现方案,本章将继续学习Redis的多数据源切换。Redis服务器默认有16个database,我们可以将每个租户的数据放到其中一个database中,也可以部署多台Redis服务器,每个租户使用一个Redis服务器,也可以把两者结合起来,Redis服务器部署多台,先在一台的16个Database上放,放满了16个Database然后再往下一台Redis服务器上放。这种方式需要有一个MySQL数据库表存储每台Redis服务器的Databa
文章浏览阅读2.3k次。win10触摸键盘通过::SendMessage隐藏方式没有效果HWND hWnd = ::FindWindow(L"OSKMainClass", NULL);if ( hWnd ){::SendMessage(hWnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);} win10触摸键盘无法找到状态窗口状态,isWidowsVisible,GetWindowPlacement,GetWindowLong,状态没有变化 ..._tabtip
文章浏览阅读1.5k次。9月25日 通过波形图比较声音的特性中考频度:★★☆☆☆难易程度:★☆☆☆☆(2019·广东初二期末)把频率为256 Hz音叉发出的声音信号输入示波器,示波器展现的波形如图甲所示。若把频率为512 Hz音叉发出的声音信号输入同一设备的示波器,其波形可能图中的__________。【参考答案】丁【试题解析】由题知,原来音叉发出声音的频率为256 Hz,现在音叉发出声音的频率为512 Hz..._规格为256hz音叉声音波形如图所示,将512hz音叉的声音输入同一设置的示波器后,其波
文章浏览阅读499次。数学:求欧拉函数算法模板求欧拉函数求欧拉函数int phi(int x){ int res = x; for (int i = 2; i <= x / i; i ++ ) if (x % i == 0) { res = res / i * (i - 1); while (x % i == 0) x /= i; } if (x > 1) res = res / x * .
文章浏览阅读8.8k次,点赞3次,收藏8次。横纵坐标字体大小调节:通过fontsize可以进行调节ax1.set_ylabel("AUC",fontsize=20)ax2.set_ylabel("Logloss",fontsize=20)图例字体大小调节:在plt.legend中加一个prop={"size":18,"weight":"black"}即可_matplotlib绘图横纵坐标设置
文章浏览阅读1w次,点赞2次,收藏19次。作为前端开发者,我们肯定都使用过非常多的jQuery插件,毋庸置疑,jQuery非常流行,尤其是结合HTML5和CSS3以后,让这些jQuery插件有了更多地动画效果,更为绚丽多彩。下面分享了一些超炫酷的jQuery/HTML5应用,一起来看看。1、HTML5/CSS3一组可爱的3D按钮这是一款利用HTML5和CSS3制作而成的按钮组合,这款CSS按钮非常具有个性化。该CSS3按钮_html5 特效按钮
文章浏览阅读1.8w次,点赞4次,收藏43次。参考连接: link.1、查看树莓派蓝牙开启状态_树莓派连接蓝牙耳机并使用麦克风
文章浏览阅读3.3k次,点赞3次,收藏12次。介绍了输入(input)、输出(print),及字符串格式化(F-string、format与%)方式_%s.%d' %()
文章浏览阅读9.3k次。问题:EL表达式比较字符串或是数字格式的数值是否相等,为true,却不执行为true时的代码。示例:true原因:有可能是test="${ 1 == 1}(这里多个空格)",即大括号与双引号之间多了空格,这个时候,就不会打印true。去掉多余的空格就可以了_el 表达式 判断字符串和数字相等