Dynamic publishing system based on pymqsql

A dynamic publishing system based on pymqsql .

The main functions are: log in and register, change password, publish news, delete news, view news.

image-20230502163942690

import pymysql
import re
import time
import io
import sys

try:
    mydb = pymysql.connect(
        host="localhost",
        user="root",
        password="******"
    )
    print("连接成功")
except:
    print("连接连接失败")

mycursor = mydb.cursor()
mycursor.execute("use dc")

mycursor.execute("CREATE TABLE if not exists user (id INT PRIMARY KEY,user_name varchar(20),password varchar(20))")
mycursor.execute(
    "CREATE TABLE if not exists commit_data (id INT,num INT, issure_time varchar(255),c_data varchar(255))")


class System:
    pd_login = False
    pd_issue = False
    up_pwd = False
    #存储用户id和发布的动态个数
    issue_num_list = [1, 1]

    # def __init__(self,pd_login):
    #     self.login=pd_login

    def system1_welcome(self):
        print("1,登录")
        print("2,注册")
        print("3,退出")
        self.system()

    def system2_welcome(self):
        print("欢迎进入发布界面".center(30, "-"))
        print("1,修改密码")
        print("2,发布动态")
        print("3,删除动态")
        print("4,查看动态")
        print("5,退出")
        self.system3()

    def system(self):
        a = int(input("请输入选项:"))
        if a == 1:
            self.login()
            self.system2()
        if a == 2:
            self.logon()
        if a == 3:
            mycursor.close()
            mydb.close()
            sys.exit(0)

    def system2(self):
        if self.pd_login == True:
            print("登录成功")
            self.system2_welcome()
        else:
            print("登录失败进入主页面--------------")
            self.system1_welcome()

    def system3(self):
        sele = int(input("请输入选项:"))
        if sele == 1:
            self.update_pwd()
        elif sele == 2:
            self.issue()
        elif sele == 3:
            self.del_issue()
        elif sele == 4:
            self.read_dc()
        elif sele == 5:
            #退出登录
            #把登录状态设置为false
            #把用户数据列表都初始化为0
            self.pd_login = False
            self.issue_num_list[0] = 0
            self.issue_num_list[1] = 0
            return self.system1_welcome()

    def login(self):
        print("欢迎进入登录界面")
        user_id = input("请输入要用户的id:")
        # 该list第一项存id,第二项存该用户存储已发布动态数目
        self.issue_num_list[0] = user_id
        self.issue_num_list[1] = 0
        mycursor.execute("select user_name,password from user where id={}".format(user_id))
        db = mycursor.fetchall()
        print(db)
        db_list = []
        # 把数据存到列表中
        # 发现db是一个两重元组,第一个元组中才是想要的数据,所以使用两层for循环
        for a in db:
            for b in a:
                db_list.append(b)
            break
        user_name = input("用户名:")
        password = input("密码:")
        index = 2
        for a in db_list:
            if index == 2:
                if user_name == a:
                    index -= 1
                    self.pd_login = True
                    continue
                else:
                    break
            if index == 1:
                if password == a:
                    self.pd_login = True
                else:
                    self.pd_login = False
        return self.pd_login

    def logon(self):
        print("欢迎来到注册界面")
        contin = (int)(input("注册请输入1,退出注册请输入0:"))
        if contin == 1:
            user_id = input("请选择用户id(输入数字):")
            user_name = input("请输入用户名:")
            password = input("请输入密码(由3~18位数字、大写小写字母和特殊符号组成):")
            result = re.match("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W).{3,18}$", password)
            if result:
                mycursor.execute(
                    "INSERT INTO user (id,user_name,password) VALUES ({},'{}','{}')".format(user_id, user_name,
                                                                                            password))
                mydb.commit()
                print("注册成功,返回登录主页面")
                return self.system1_welcome()
            else:
                print("密码输入格式错误")
                self.logon()
        else:
            return self.system1_welcome()

    def update_pwd(self):
        # up_pwd_userid = input("请输入要修改密码的用户id:")
        up_pwd = input("请输入要修改的密码(由3~18位数字、大写小写字母和特殊符号组成):")
        result = re.match("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W).{3,18}$", up_pwd)
        if result:
            mycursor.execute(
                "UPDATE user SET password='{}' WHERE id={}".format(up_pwd, self.issue_num_list[0]))
            mydb.commit()
            print("密码修改成功!返回登录页面")
            self.login()
            return self.system2()
        else:
            print("密码格式错误!请重新注册")
            self.update_pwd()

    def issue(self):
        while True:
            issue_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
            # id = input("请输入用户id:")
            # num = input("请输入第几个动态:")
            mycursor.execute(
                "SELECT * FROM commit_data WHERE id={}".format(self.issue_num_list[0]))
            db = mycursor.fetchall()
            for a in db:
                print("您发布的第{}条动态,时间:{}\n内容:{}\n".format(a[1], a[2], a[3]))
            print("----------------------------------")
            self.issue_num_list[1] += 1
            c_data = input("发布内容:")
            mycursor.execute(
                "INSERT INTO commit_data(id,num,issure_time,c_data) VALUES({},{},'{}','{}')".format(
                    self.issue_num_list[0], self.issue_num_list[1], issue_time,
                    c_data))
            mydb.commit()
            pd = (int)(input("输入1继续发布动态,输入0则退出:"))
            if pd == 0:
                # self.pd_issue = True
                # return self.pd_issue
                return self.system2()

    def del_issue(self):
        print("您发布的所有动态:")
        mycursor.execute(
            "SELECT * FROM commit_data WHERE id={}".format(self.issue_num_list[0]))
        db = mycursor.fetchall()
        for a in db:
            print("您发布的第{}条动态,时间:{}\n内容:{}\n".format(a[1], a[2], a[3]))
        print("----------------------------------")
        num = input("请输入您要删除的第几个动态:")
        mycursor.execute(
            "DELETE FROM commit_data WHERE id={} and num={}".format(self.issue_num_list[0], num))
        mydb.commit()
        print("删除成功!请查看:")
        mycursor.execute(
            "SELECT * FROM commit_data WHERE id={}".format(self.issue_num_list[0]))
        db = mycursor.fetchall()
        for a in db:
            print("您发布的第{}条动态,时间:{},内容:{}\n".format(a[1], a[2], a[3]))
        print("----------------------------------")
        pd = (int)(input("输入1继续删除动态,输入0则退出:"))
        if pd == 0:
            return self.system2()
        else:
            self.del_issue()

    def read_dc(self):
        print("----------朋友圈------------")
        mycursor.execute(
            "SELECT * FROM commit_data")
        db = mycursor.fetchall()
        for a in db:
            print("id为{}的用户,发布的第{}条动态,时间:{}\n内容:{}\n".format(a[0], a[1], a[2], a[3]))
        pd = (int)(input("退出请输入0,保存朋友圈数据请输入1:"))
        if pd == 0:
            return self.system2_welcome()
        elif pd==1:
            fl_name = str(input("请输入要保存的文件名:"))
            fo = open("{}.txt".format(fl_name), "w")
            for a in db:
                str_="id为{}的用户,发布的第{}条动态,时间:{}\n内容:{}\n".format(a[0], a[1], a[2], a[3])
                fo.write(str_)
            print("保存完成!")
            fo.close()
            return self.read_dc()


if __name__ == '__main__':
    s1 = System()
    s1.system1_welcome()

Guess you like

Origin blog.csdn.net/m0_59598325/article/details/130464722