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()