python的基础以及提高

Python day27_mysql与Python交互

2018-06-04  本文已影响0人  g_s_007

jingdong用户登录注册查询功能的实现

准备数据

创建数据表格

-- 创建 "jingdong" 数据库
create database jing_dong charset=utf8;

-- 使用 "jingdong" 数据库
use jing_dong;

-- 创建一个商品goods数据表
create table goods(
    id int unsigned primary key auto_increment not null,
    name varchar(150) not null,
    cate_name varchar(40) not null,
    brand_name varchar(40) not null,
    price decimal(10,3) not null default 0,
    is_show bit not null default 1,
    is_saleoff bit not null default 0
);

插入数据

-- 向goods表中插入数据

insert into goods values(0,'r510vc 15.6英寸笔记本','笔记本','华硕','3399',default,default); 
insert into goods values(0,'y400n 14.0英寸笔记本电脑','笔记本','联想','4999',default,default);
insert into goods values(0,'g150th 15.6英寸游戏本','游戏本','雷神','8499',default,default); 
insert into goods values(0,'x550cc 15.6英寸笔记本','笔记本','华硕','2799',default,default); 
insert into goods values(0,'x240 超极本','超级本','联想','4880',default,default); 
insert into goods values(0,'u330p 13.3英寸超极本','超级本','联想','4299',default,default); 
insert into goods values(0,'svp13226scb 触控超极本','超级本','索尼','7999',default,default); 
insert into goods values(0,'ipad mini 7.9英寸平板电脑','平板电脑','苹果','1998',default,default);
insert into goods values(0,'ipad air 9.7英寸平板电脑','平板电脑','苹果','3388',default,default); 
insert into goods values(0,'ipad mini 配备 retina 显示屏','平板电脑','苹果','2788',default,default); 
insert into goods values(0,'ideacentre c340 20英寸一体电脑 ','台式机','联想','3499',default,default); 
insert into goods values(0,'vostro 3800-r1206 台式电脑','台式机','戴尔','2899',default,default); 
insert into goods values(0,'imac me086ch/a 21.5英寸一体电脑','台式机','苹果','9188',default,default); 
insert into goods values(0,'at7-7414lp 台式电脑 linux )','台式机','宏碁','3699',default,default); 
insert into goods values(0,'z220sff f4f06pa工作站','服务器/工作站','惠普','4288',default,default); 
insert into goods values(0,'poweredge ii服务器','服务器/工作站','戴尔','5388',default,default); 
insert into goods values(0,'mac pro专业级台式电脑','服务器/工作站','苹果','28888',default,default); 
insert into goods values(0,'hmz-t3w 头戴显示设备','笔记本配件','索尼','6999',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default); 
insert into goods values(0,'x3250 m4机架式服务器','服务器/工作站','ibm','6888',default,default); 
insert into goods values(0,'商务双肩背包','笔记本配件','索尼','99',default,default);

操作要求

"""-- 表结构说明
    1.jingdong商品表 goods
        -- 表结构和之前一样
    2.jingdong用户表 users   自己创建用户表
        -- id  用户名(字符串)  密码(字符串)

-- 操作流程及功能要求
    1. 用户注册
        1.1 用户名在数据库中唯一,用户在注册的时候需要校验用户名在数据库中是否存在,并做相应提示
        1.2 用户名和密码长度6-12位之间(除了长度限制自己可以扩展其他的,如:用户名指定组成等)
        1.3 用户密码输入两次并校验两次密码是否一致
    2. 用户登陆
        2.1 账号密码通过用户表校验是否正确
        2.2 登陆失败or成功做对应的提示
    3. 用户操作jingdong商品表
        3.1 登陆成功以后才可以操作goods表
        3.2 对商品表进行增删改查
"""

根据要求写代码

面向函数编程
import re
from pymysql import connect

# 定义一个用户信息类
class Userdata(object):
    def __init__(self):
        # 连接数据库
        self.conn = connect(host='localhost', port=3306, user='root', password='mysql', database='jing_dong', charset='utf8')
        # 获取游标对象
        self.cs1 = self.conn.cursor()

    def __enter__(self):
        return self.cs1,self.conn

    def __exit__(self,*args):
        # 关闭
        self.cs1.close()
        self.conn.close()


def register():
    """注册系统"""
    with Userdata() as (cs1,conn):
        # 执行sql 语句
        sql = """select name from users;"""
        cs1.execute(sql)
        # 获取用户信息
        user_info = cs1.fetchall()
    while True:
        user_name = input("请输入注册名6-12:")
        match = re.match(r'[0-9a-zA-Z]{6,12}',user_name)
        if match:
            if (user_name,) not in user_info:
                pwd1 = input("请输入注册密码:")
                pwd2 = input("请再次输入:")
                if pwd1 == pwd2:
                    with Userdata() as (cs1,conn):
                        sql = """insert into users(name,password) values(%s,%s);"""
                        cs1.execute(sql,(user_name,pwd1))
                        conn.commit()
                    print("注册成功!")
                    break
                else:
                    print("密码确认错误 请重新输入")
                    continue
            else:
                print("这个名字已经被注册过啦,请换一个")
                continue
        else:
            print("用户名必须在6-12位,请重新输入")
            continue


def find_info():
    """查询"""
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """select * from goods;"""
        cs1.execute(sql)
        info = cs1.fetchall()
    # 打印数据
    for tmp in info:
        print(tmp)


def add_info():
    """增加商品种类"""
    cate_name = input("请输入要增加的商品种类名:")
    with Userdata() as (cs1,conn):
        # 执行sql 语句
        sql = """insert into good_cates(name) values(%s);"""
        cs1.execute(sql,(cate_name,))
        conn.commit()
        cate_info =cs1.fetchall()


def modify_info():
    """查询并修改商品品牌"""
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """select * from good_brands;"""
        cs1.execute(sql)
        brand_info = cs1.fetchall()
    for tmp in brand_info:
        print(tmp)
    brand_id = input("请输入你想修改的品牌id")
    brand_name = input("请输入你想修改成什么:")
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """update good_brands set name = %s where id= %s;"""
        cs1.execute(sql,(brand_name,brand_id))
        conn.commit()


def delete_info():
    """删除商品信息"""
    delete_name = input("请输入你想删除的商品名字:")
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """delete from goods where name =%s"""
        cs1.execute(sql,(delete_name,))
        conn.commit()


def operate():
    """对jingdong商品表进行增删改查"""
    print("1>查询商品信息")
    print("2>增加商品种类")
    print("3>修改商品品牌")
    print("4>删除商品信息")
    print("0>退出")
    while True:
        cmd = input("请输入要执行的操作指令")
        if cmd == "1":
            find_info()
        elif cmd =="2":
            add_info()
        elif cmd =='3':
            modify_info()
        elif cmd =='4':
            delete_info()
        elif cmd =='0':
            print("期待亲再次光临~")
            break




def login():
    """登陆系统"""
    with Userdata() as (cs1,conn):
        # 执行sql语句
        sql = """select name,password from users;"""
        cs1.execute(sql)
        user_table = cs1.fetchall()
    while True:
        user_name = input("请输入用户名:")
        pwd = input("请输入密码:")
        if (user_name,pwd) not in user_table:
            print("用户不存在或者密码输入错误 请重试")
            continue
        else:
            print("登陆成功!")
            print("进入主页~")
            operate()
            break





def main():
    """用户注册登陆操作系统"""
    print("欢迎进入jing_dong购物界面")
    print("注册请输入1")
    print("登陆请输入2")
    while True:
        cmd = input("请输入:")
        if cmd == '1':
            # 用户注册
            register()
        if cmd == '2':
            # 用户登陆
            login()

if __name__ == '__main__':
    main()
上一篇下一篇

猜你喜欢

热点阅读