# 学生通讯录管理系统 基于PYQT5和Sqlite3
[TOC]
## 实现基本功能
- 采用数据库管理用户名和密码
- 添加学生地址 手机号 性别等信息
- 管理信息包括**增加** **删除** **修改** 按不同信息**查找**
- 导出信息到PDF文件
- 采用PYQT框架,数据库链接前端TableWidget控件
## 登陆界面
<img src="source\loginUI.jpg" alt="loginUI" style="zoom: 67%;" />
输入用户名和密码,可以进行注册或登录操作,注册则保存到user.db数据库中,登录则查询数据库中是否有匹配的username和password
<img src="source\database_user.jpg" alt="database_user" style="zoom:67%;" />
```python
class login_window(QtWidgets.QMainWindow, Ui_Form):
"""登录界面类
使用同一组lineEdit登录或注册 初始化存储用户数据的数据库‘user.db’
Methods:
register_button:注册后用户名和密码将存储到user.db的user表格中
login_button:登录时用当前lineEdit匹配数据库中的信息 验证密码
"""
def __init__(self):
super(login_window, self).__init__()
self.setupUi(self) # 创建窗体对象
self.init()
def init(self):
self.pushButton.clicked.connect(self.login_button) # 连接槽
self.pushButtonreg.clicked.connect(self.register_button)
# 连接数据库
self.conn = sqlite3.connect('user.db')
self.conn.row_factory = sqlite3.Row # 设置返回结果为字典形式
# 创建一个游标对象
self.cursor = self.conn.cursor()
# 创建表
sql_text = '''CREATE TABLE IF NOT EXISTS user
(Username TEXT,
Password TEXT
);'''
# 执行sql语句
self.cursor.execute(sql_text)
def register_button(self):
# 直接用登陆界面输入的注册 就不新建一个窗口了
username = self.lineEdit.text()
password = self.lineEdit_2.text()
data = [(username, password)]
self.cursor.executemany('INSERT INTO user VALUES (?,?)', data)
self.conn.commit()
QMessageBox.information(self, '通知', '注册成功')
def login_button(self):
if self.lineEdit_2.text() == "":
QMessageBox.warning(self, '警告', '密码为空,请重新输入!')
return None
username = self.lineEdit.text()
password = self.lineEdit_2.text()
# 查询用户表中是否存在匹配的用户名和密码
self.cursor.execute("SELECT * FROM user WHERE username = ? AND password = ?", (username, password))
user = self.cursor.fetchone()
if user: # 验证通过
Ui_Main = main_window() # 生成主窗口的实例
self.hide()
# 关闭游标
self.cursor.close()
# 关闭连接 打开主界面
self.conn.close()
Ui_Main.show()
else:
QMessageBox.warning(self, '警告', '用户名或密码错误,请重新输入!')
```
## 主界面
<img src="source\MainUI.jpg" alt="MainUI" style="zoom:67%;" />
![database](source\database.jpg)
```python
class main_window(QtWidgets.QMainWindow, Ui_MainWindow):
""" 主界面类
初始化数据库'database.db' 如果没有表database则创建 读取已有数据刷新表格
重要标志位:clickflag 功能:只有当人为编辑表格(双击为前提)才触发ChangeDatabase 通过代码修改的表格不执行该函数
Methods:
slot:(槽函数)
closeEvent:重写关闭窗口事件
handle_cell_clicked(row, column):表格点击事件 返回选中行列号 更新当前选中tablewidget行号和数据库的ROWID(当不存在删除条目情况时两者相差1)
openDialog:打开插入条目子窗口
ClearDatabase:清空数据库中内容(不包括表头)
DeleteDatabase:删除选中数据,并刷新ROWID为相对索引
SearchDatabase(value):两个按键同时连接,但传入不同参数,决定按姓名还是学号搜索,搜索结束后会在表中隐藏其他信息,当搜索框内无值时,搜索操作为refresh_table
ChangeDatabase(item):直接编辑表格内容,并同步更新数据库,更新标志位clickflag为0
flagset:双击触发事件,使能tablewidget编辑属性,设定clickflag为1
ExportPDF:导出数据库条目到PDF
AddDatabase(student_info):接收从子窗口返回的学生信息
refresh_table:根据数据库刷新表格内容
"""
def __init__(self):
super(main_window, self).__init__()
self.setupUi(self) # 创建窗体对象
# 初始化信号槽
self.pushButtonAdd.clicked.connect(self.openDialog) # 添加信息
self.pushButtonExit.clicked.connect(self.close)
self.pushButtonClear.clicked.connect(self.ClearDatabase)
self.pushButtondelete.clicked.connect(self.DeleteDatabase)
self.pushButtonSearchName.clicked.connect(lambda: self.SearchDatabase(1))
self.pushButtonSearchID.clicked.connect(lambda: self.SearchDatabase(2))
self.pushButton.clicked.connect(self.ExportPDF)
# 连接数据库
self.conn = sqlite3.connect('database.db')
self.conn.row_factory = sqlite3.Row # 设置返回结果为字典形式
# 创建一个游标对象
self.cursor = self.conn.cursor()
# 创建表
sql_text = '''CREATE TABLE IF NOT EXISTS database
(Name TEXT,
ID NUMBER,
Gender TEXT,
Grade NUMBER,
Phone NUMBER,
Major TEXT,
Address TEXT
);'''
# 执行sql语句
self.cursor.execute(sql_text)
# 刷新Table UI
self.refresh_table()
# 连接鼠标点击事件
self.clickflag = False
self.current_row = -1
self.current_row_sq = -1
self.tableWidget.cellClicked.connect(self.handle_cell_clicked)
self.tableWidget.itemChanged.connect(self.ChangeDatabase)
self.tableWidget.doubleClicked.connect(self.flagset)
def closeEvent(self, event: QtGui.QCloseEvent) -> None:
"""
重写QWidget类的closeEvent方法,在窗口被关闭的时候自动触发
"""
reply = QtWidgets.QMessageBox.question(self, '提示', "确认退出吗?",
QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No,
QtWidgets.QMessageBox.No)
if reply == QtWidgets.QMessageBox.Yes:
super().closeEvent(event) # 先添加父类的方法,以免导致覆盖父类方法(这是重点!!!)
# 关闭游标
self.cursor.close()
# 关闭连接
self.conn.close()
event.accept()
else:
event.ignore()
```
### 增加条目:
<u>*主子界面传参,类的继承*</u>
```mermaid
graph LR
click事件-->打开插入新数据的子界面:openDialog-->子界面确定按键click事件--StudentInfo-->将界面填入的信息添加进数据库中:AddDatabase
```
```python
self.pushButtonAdd.clicked.connect(self.openDialog) # 添加信息
```
```python
def openDialog(self):
insert_window = insert_dialog(self) # 使insert_dialog继承main_window类
insert_window.exec_()
```
```python
def AddDatabase(self, StudentInfo):
try:
data = [(StudentInfo.Name, int(StudentInfo.ID), StudentInfo.Gender, int(StudentInfo.Grade), int(StudentInfo.Phone), StudentInfo.Major, StudentInfo.Addr )]
self.cursor.executemany('INSERT INTO database VALUES (?,?,?,?,?,?,?)', data)
self.conn.commit()
self.refresh_table()
except:
QMessageBox.warning(self, '警告',
没有合适的资源?快使用搜索试试~ 我知道了~
基于python+pyqt5+sqlite3的学生通讯录管理系统+源代码+文档说明+pdf+数据库
共23个文件
jpg:9个
py:4个
ui:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 17 浏览量
2024-01-10
18:19:28
上传
评论 1
收藏 5.21MB ZIP 举报
温馨提示
实现基本功能 采用数据库管理用户名和密码 添加学生地址 手机号 性别等信息 管理信息包括增加 删除 修改 按不同信息查找 导出信息到PDF文件 采用PYQT框架,数据库链接前端TableWidget控件 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! <项目介绍> 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论
收起资源包目录
address-book-master.zip (23个子文件)
address-book-master
Login.ui 3KB
output.pdf 13KB
user.db 8KB
main.py 14KB
database.db 8KB
source
pdf.jpg 58KB
simhei.ttf 9.3MB
filesave.png 37KB
loginUI.jpg 9KB
InsertUI.jpg 21KB
SearchID.jpg 56KB
MainUI.jpg 87KB
database.jpg 51KB
warning.jpg 83KB
database_user.jpg 9KB
SearchName.jpg 55KB
Login.py 4KB
InsertInfo.ui 7KB
.gitignore 17B
ManageSys.py 10KB
README.md 16KB
InsertInfo.py 7KB
ManageSys.ui 10KB
共 23 条
- 1
资源评论
- 2401_887438332024-11-20资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
机智的程序员zero
- 粉丝: 2437
- 资源: 4847
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功