py mysql结合面向对象,实现类似超市导购机器的功能【2.用户登录及注册功能】

py mysql结合面向对象,实现类似超市导购机器的功能(自我总结)

需优化:

1.目前只能通过is_login判断当前用户,如果有多个用户的is_login为1,代码会报错

2.没有实现在线购物的操作

3.后期优化为可视化的窗口

步骤2:

编写主类 ,将登录和注册两个功能分写到两个.py文件中,再根据选择类型调用方法:from 类 import 方法

主类 run():

 

class prac01(object):
    def __init__(self):
        # 创建connect连接
        self.conn = connect(host='localhost', port=3306, user='root', password='zhouyl1992', database='jingdong',
                            charset='utf8')
        self.cs1 = self.conn.cursor()

    def __del__(self):
        # 关闭连接
        self.cs1.close()
        self.conn.close()

    def run(self):
        while True:
            print('-----菜单-----')
            print('1.用户登录')
            print('2.用户注册')
            print('3.退出')
            num = input('请输入操作类型:')
            if num == '1':
                _login = customer_logined()
                _login.run()
            elif num == '2':
                _resigned=customer_resigned()
                _resigned.run()
            elif num == '3':
                break
            else:
                print('操作类型错误,请重新输入')

def main():
    p = prac01()
    p.run()


if __name__ == '__main__':
    main()

 

 

 

注册 customer_resigned:

注册时需判断:用户名是否已存在,是否为空;密码是否为空;其他字段为空时需要设置空值(应该还有其他方法,但是目前只会这样处理);超出长度限制时报警

注册成功后,显示登陆页,需要自行登录

    def run(self):
        while True:
            is_exists = False
            print('-----用户注册-----')
            re_name = input('用户名:')
            re_address = input('住址:')
            re_tel = input('联系方式:')
            re_psw = input('密码:')
            if re_address.__len__() > 100:
                print('地址长度不能超过100')
            elif re_address.__len__() == 0:
                re_address = None

            if re_tel.__len__() > 11:
                print('手机号码长度错误')
            elif re_tel.__len__() == 0:
                re_tel = None

            self.cs1.execute('select name from customers')
            for temp in self.cs1.fetchall():
                if re_name in temp:
                    is_exists = True

            if re_name.__len__() == 0 or re_name.__len__() > 30:
                print('用户名长度不能超过30且不能为空')

            elif re_psw.__len__() == 0:
                print('密码不能为空')

            elif is_exists == True:
                print('用户名已存在')

            else:
                params = [re_name, re_address, re_tel, re_psw]
                sql2 = """insert into customers values (default,%s,%s,%s,%s,default)"""
                count = self.cs1.execute(sql2, params)
                self.conn.commit()
                print('用户注册成功,请登录...')
                _logined = customer_logined()
                _logined.run()

登陆 customer_logined:

登陆时需判断:用户名是否存在,若存在,输入的密码是否匹配 

登陆成功后,显示主菜单目录,选择模块进行操作;

登陆成功后,将customers表中用户名对应的is_login字段值强行修改为1,表示已登录,用于后面检测当前使用的用户

    def run(self):
        print('-----用户登录-----')
        l_name = input('登录名:')
        l_psw = input('密码:')
        # 判断用户名是否存在
        sql1 = 'select * from customers where name = %s'
        count1 = self.cs1.execute(sql1, l_name)
        # print(count1)
        # 判断密码是否正确
        params = [l_name, l_psw]
        sql2 = 'select * from customers where name=%s and password=%s'
        count2 = self.cs1.execute(sql2, params)
        # print(count2)
        if count1 == 0:
            print('用户名不存在')
        elif count1 != 0 and count2 == 0:
            print('密码错误')
        else:
            sql="""update customers set is_login=1 where name=%s"""
            count=self.cs1.execute(sql,l_name)
            # print(count)
            self.conn.commit()
            print('用户登录成功,欢迎您,%s' % l_name)
            g_items=goods_items()
            g_items.run()

 

posted @ 2020-08-14 15:19  zhou&zhou  阅读(149)  评论(0)    收藏  举报