PyQT5一起学做图书管理系统(2)初始化数据库

本文介绍如何在PyQT5环境下初始化SQLite3数据库,用于一个图书管理系统。内容包括环境配置,数据库操作类的设计,如用户类、图书类和添加删除类的功能实现,涉及用户信息管理、图书管理和借阅操作。
摘要由CSDN通过智能技术生成

初始化数据库

环境

系统:windows10系统
编辑器:Sublime3
编程语言:python3+pyqt5
 

数据库操作

本来数据库这一块是用到再说的,但是整个项目做完之后,发现先把这一块给弄好后,后续的就好办了
感觉这个数据库就是后端、后台的内容,而界面设计就是前端的东西。

数据库的初始化完全就是sqlite3的内容,主要思路就是,检测本地有没有这个数据库,没有的话直接初始化数据

首先是构造一个数据库类,为后面真正使用的3个类做准备,这个类有一些基本功能,创建,删除,切换库

class DbManager(object):
    def __init__(self, *args):
        self.db = sqlite3.connect(*args)
        self.cursor = self.db.cursor()

    def __enter__(self):
        return self.cursor

    def __exit__(self, types, value, traceback):
        self.db.commit()
        return False

    def __del__(self):
        self.db.commit()
        self.db.close()

    def switchDb(self, *args):
        self.db.close()
        self.db = sqlite3.connect(*args)
        self.cursor = self.db.cursor()

    def createTable(self, tableString):
        self.cursor.execute(tableString)
        self.db.commit()

    def commitAndClose(self):
        self.db.commit()
        self.db.close()

接下来是用户类
用户类中,实现这么几个函数:初始化数据,添加普通用户,添加管理员,查询用户信息,查询管理员,更新密码,借书还书。

class UserDbManager(DbManager):
    def __init__(self, database=dbpath, *args):
        super().__init__(database, *args)
        self.initDb()

    def initDb(self):
        self.createTable(createUserTableString)

    def initDatabase(self):
        password='admin123'
        hl = hashlib.md5()                                             #将密码进行md5加密
        hl.update(password.encode(encoding='utf-8'))
        md5password = hl.hexdigest()
        self.addAdminUser('admin','Fengqi',md5password)                #添加管理员账号

        password='user123'
        hl = hashlib.md5()                                             #将密码进行md5加密
        hl.update(password.encode(encoding='utf-8'))
        md5password = hl.hexdigest()
        self.addUser('user000000','user000000',md5password)            #添加普通用户
        

    def addUser(self,userid, Name, Password,IsAdmin=0):
        '''  添加普通用户    '''
        insertData = self.cursor.execute("""INSERT INTO user 
                (userid, Name, Password,IsAdmin,TimesBorrowed,NumBorrowed) VALUES 
                ('{0}', '{1}', '{2}','{3}','{4}','{5}')
                """.format(userid, Name, Password,IsAdmin,0,0))
        self.db.commit()

    def addAdminUser(self,userid, Name, Password):
        ''' 添加管理员用户'''
        self.addUser(userid, Name, Password,IsAdmin=1)
    def querybyUserid(self,userid):
        fetchedData = self.cursor.execute("SELECT * FROM user WHERE userid='%s'" % (userid) )
        #a=fetchedData.fetchall()#通过fetchall接受全部数据,是一个list,list的每个元素是tuple类型数据

        return fetchedData.fetchall()

    def getAdmineUserinfo(self):
        '''获取管理员用户 '''
        fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=1")
        return fetchedData
        

    def getUserinfo(self):
        '''获取一般用户'''
        fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=0")
        return fetchedData

    def updatePassword(self,password,userid):
        fetchedData = self.cursor.execute("UPDATE User SET Password='%s' WHERE userid=%s" % (password,userid))
        self.db.commit()

    def borrowOrReturnBook(self,userid,borrow=1):
        if borrow == 1 :
            fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed+1,NumBorrowed=NumBorrowed+1 WHERE userid='%s'" % userid)
        else:
            fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed-1,NumBorrowed=NumBorrowed-1 WHERE userid='%s'" % userid)
        self.db.commit()

接下来是图书类,有书库初始化,添加删除图书,借书还书,书籍查询等功能

class BookDbManager(DbManager):
    def __init__(self, database=dbpath, *args):
        super().__init__(database, *args)
        self.initDb()

    def initDb(self):
        self.createTable(createBookTableString)

    def initDatabase(self):
        self.addBOOK('力学', 'IS1000', '刘斌', '教育', '中国科学技术大学 ', '1999-01-01', 100, 100, 0)
        self.addBOOK('微积分', 'IS1001', '牛顿莱布尼兹', '教育', '中国科学技术大学', '1998-01-01', 14, 14, 0)
        self.addBOOK('电磁场论', 'IS1002', '叶邦角', '教育', '中国科学技术大学', '1997-01-01', 24, 24, 0)
        self.addBOOK('热学', 'IS1003', '张鹏飞', '教育', '中国科学技术大学', '2002-01-01', 45, 45, 0)
        self.addBOOK('电动力学', 'IS1004', '叶邦角', '教育', '中国科学技术大学', '2003-01-01', 100, 100, 0)
        self.addBOOK('数据库', 'IS1006', '袁平波', '教育', '中国科学技术大学', '2010-01-01', 10, 10, 0)
        self.addBOOK ('电磁学', 'IS1005', '叶邦角', '教育', '中国科学技术大学 ', '2012-01-01', 43, 43, 0)
        self.addBOOK ('数学分析', 'IS1007', '陈卿', '教育', '中国科学技术大学', '2013-01-01', 23, 23, 0)
        self.addBOOK('吉米多维奇题解1', 'IS1008', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
        self.addBOOK('吉米多维奇题解2', 'IS1009', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
        self.addBOOK('吉米多维奇题解3', 'IS1010', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
        self.addBOOK('吉米多维奇题解4', 'IS1011', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
        self.addBOOK('吉米多维奇题解5', 'IS1012', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
        self.addBOOK('吉米多维奇题解6', 'IS1013', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
        self.addBOOK('朗道力学', 'IS1014', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
        self.addBOOK('朗道电动力学', 'IS1015', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值