伙伴匹配系统---05
发布人:shili8
发布时间:2023-06-05 11:45
阅读次数:62
伙伴匹配系统是一种常见的社交应用,它可以帮助用户找到与自己兴趣爱好相似的人,建立起良好的社交关系。在本文中,我们将介绍一种基于Python语言实现的伙伴匹配系统,其中包括了部分代码示例和代码注释,帮助读者更好地理解系统的实现过程。
1. 数据库设计
在伙伴匹配系统中,我们需要存储用户的个人信息和兴趣爱好等数据,因此需要设计一个数据库来存储这些信息。我们可以使用MySQL数据库来实现,以下是数据库的设计:
sql CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT name VARCHAR(50) NOT NULL age INT NOT NULL gender VARCHAR(10) NOT NULL email VARCHAR(50) NOT NULL password VARCHAR(50) NOT NULL ); CREATE TABLE interests ( id INT PRIMARY KEY AUTO_INCREMENT name VARCHAR(50) NOT NULL ); CREATE TABLE user_interests ( user_id INT NOT NULL interest_id INT NOT NULL FOREIGN KEY (user_id) REFERENCES users(id) FOREIGN KEY (interest_id) REFERENCES interests(id) );
在上述代码中,我们创建了三个表:users、interests和user_interests。其中,users表用于存储用户的个人信息,包括id、name、age、gender、email和password等字段;interests表用于存储用户的兴趣爱好,包括id和name两个字段;user_interests表用于存储用户和兴趣爱好之间的关系,包括user_id和interest_id两个字段,同时还设置了外键约束,确保数据的完整性和一致性。
2. 用户注册和登录
在伙伴匹配系统中,用户需要先进行注册,然后才能登录系统。以下是用户注册和登录的代码示例:
import hashlib import mysql.connector # 连接MySQL数据库 db = mysql.connector.connect( host=localhost user=root password=123456 database=buddy_match ) # 用户注册 def register(name age gender email password): cursor = db.cursor() # 对密码进行加密处理 password = hashlib.sha256(password.encode()).hexdigest() # 插入用户数据到users表中 sql = INSERT INTO users (name age gender email password) VALUES (%s %s %s %s %s) val = (name age gender email password) cursor.execute(sql val) db.commit() print(注册成功!) # 用户登录 def login(email password): cursor = db.cursor() # 对密码进行加密处理 password = hashlib.sha256(password.encode()).hexdigest() # 查询用户数据 sql = SELECT * FROM users WHERE email = %s AND password = %s val = (email password) cursor.execute(sql val) result = cursor.fetchone() if result: print(登录成功!) else: print(登录失败!) # 测试代码 register(张三 20 男 zhangsan@qq.com 123456) login(zhangsan@qq.com 123456)
在上述代码中,我们首先使用mysql.connector模块连接到MySQL数据库,然后定义了register和login两个函数,分别用于用户注册和登录。在register函数中,我们对用户输入的密码进行了加密处理,然后将用户数据插入到users表中;在login函数中,我们同样对用户输入的密码进行了加密处理,然后查询users表中是否存在该用户,如果存在则登录成功,否则登录失败。
3. 用户兴趣爱好管理
在伙伴匹配系统中,用户可以添加、删除和查看自己的兴趣爱好。以下是用户兴趣爱好管理的代码示例:
# 添加兴趣爱好 def add_interest(user_id interest_name): cursor = db.cursor() # 查询interests表中是否已存在该兴趣爱好 sql = SELECT * FROM interests WHERE name = %s val = (interest_name) cursor.execute(sql val) result = cursor.fetchone() if result: interest_id = result[0] else: # 如果不存在,则插入到interests表中 sql = INSERT INTO interests (name) VALUES (%s) val = (interest_name) cursor.execute(sql val) db.commit() interest_id = cursor.lastrowid # 插入用户和兴趣爱好之间的关系到user_interests表中 sql = INSERT INTO user_interests (user_id interest_id) VALUES (%s %s) val = (user_id interest_id) cursor.execute(sql val) db.commit() print(添加成功!) # 删除兴趣爱好 def delete_interest(user_id interest_name): cursor = db.cursor() # 查询interests表中是否存在该兴趣爱好 sql = SELECT * FROM interests WHERE name = %s val = (interest_name) cursor.execute(sql val) result = cursor.fetchone() if result: interest_id = result[0] # 删除user_interests表中的关系数据 sql = DELETE FROM user_interests WHERE user_id = %s AND interest_id = %s val = (user_id interest_id) cursor.execute(sql val) db.commit() print(删除成功!) else: print(该兴趣爱好不存在!) # 查看兴趣爱好 def view_interests(user_id): cursor = db.cursor() # 查询user_interests表中的关系数据 sql = SELECT interests.name FROM interests INNER JOIN user_interests ON interests.id = user_interests.interest_id WHERE user_interests.user_id = %s val = (user_id) cursor.execute(sql val) result = cursor.fetchall() if result: print(您的兴趣爱好:) for row in result: print(row[0]) else: print(您还没有添加兴趣爱好!) # 测试代码 user_id = 1 add_interest(user_id 游泳) add_interest(user_id 旅游) view_interests(user_id) delete_interest(user_id 游泳) view_interests(user_id)
在上述代码中,我们定义了add_interest、delete_interest和view_interests三个函数,分别用于添加、删除和查看用户的兴趣爱好。在add_interest函数中,我们首先查询interests表中是否已存在该兴趣爱好,如果存在则获取其id,否则将其插入到interests表中,并获取其自动生成的id;然后将用户和兴趣爱好之间的关系插入到user_interests表中。在delete_interest函数中,我们同样查询interests表中是否存在该兴趣爱好,如果存在则删除user_interests表中的关系数据;否则提示该兴趣爱好不存在。在view_interests函数中,我们查询user_interests表中的关系数据,并通过INNER JOIN语句将其与interests表关联起来,最后输出用户的兴趣爱好列表。
4. 用户匹配
在伙伴匹配系统中,用户可以通过自己的兴趣爱好来寻找与自己相似的人,建立起良好的社交关系。以下是用户匹配的代码示例:
# 用户匹配 def match(user_id): cursor = db.cursor() # 查询用户的兴趣爱好 sql = SELECT interest_id FROM user_interests WHERE user_id = %s val = (user_id) cursor.execute(sql val) result = cursor.fetchall() if result: interest_ids = [row[0] for row in result] # 查询与用户兴趣爱好相似的其他用户 sql = SELECT user_id COUNT(*) AS count FROM user_interests WHERE interest_id IN %s AND user_id != %s GROUP BY user_id