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

深藏阁楼爱情的钟 2022-03-16 05:10 318阅读 0赞

初始化数据库

环境

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

数据库操作

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

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

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

  1. class DbManager(object):
  2. def __init__(self, *args):
  3. self.db = sqlite3.connect(*args)
  4. self.cursor = self.db.cursor()
  5. def __enter__(self):
  6. return self.cursor
  7. def __exit__(self, types, value, traceback):
  8. self.db.commit()
  9. return False
  10. def __del__(self):
  11. self.db.commit()
  12. self.db.close()
  13. def switchDb(self, *args):
  14. self.db.close()
  15. self.db = sqlite3.connect(*args)
  16. self.cursor = self.db.cursor()
  17. def createTable(self, tableString):
  18. self.cursor.execute(tableString)
  19. self.db.commit()
  20. def commitAndClose(self):
  21. self.db.commit()
  22. self.db.close()

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

  1. class UserDbManager(DbManager):
  2. def __init__(self, database=dbpath, *args):
  3. super().__init__(database, *args)
  4. self.initDb()
  5. def initDb(self):
  6. self.createTable(createUserTableString)
  7. def initDatabase(self):
  8. password='admin123'
  9. hl = hashlib.md5() #将密码进行md5加密
  10. hl.update(password.encode(encoding='utf-8'))
  11. md5password = hl.hexdigest()
  12. self.addAdminUser('admin','Fengqi',md5password) #添加管理员账号
  13. password='user123'
  14. hl = hashlib.md5() #将密码进行md5加密
  15. hl.update(password.encode(encoding='utf-8'))
  16. md5password = hl.hexdigest()
  17. self.addUser('user000000','user000000',md5password) #添加普通用户
  18. def addUser(self,userid, Name, Password,IsAdmin=0):
  19. ''' 添加普通用户 '''
  20. insertData = self.cursor.execute("""INSERT INTO user
  21. (userid, Name, Password,IsAdmin,TimesBorrowed,NumBorrowed) VALUES
  22. ('{0}', '{1}', '{2}','{3}','{4}','{5}')
  23. """.format(userid, Name, Password,IsAdmin,0,0))
  24. self.db.commit()
  25. def addAdminUser(self,userid, Name, Password):
  26. ''' 添加管理员用户'''
  27. self.addUser(userid, Name, Password,IsAdmin=1)
  28. def querybyUserid(self,userid):
  29. fetchedData = self.cursor.execute("SELECT * FROM user WHERE userid='%s'" % (userid) )
  30. #a=fetchedData.fetchall()#通过fetchall接受全部数据,是一个list,list的每个元素是tuple类型数据
  31. return fetchedData.fetchall()
  32. def getAdmineUserinfo(self):
  33. '''获取管理员用户 '''
  34. fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=1")
  35. return fetchedData
  36. def getUserinfo(self):
  37. '''获取一般用户'''
  38. fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=0")
  39. return fetchedData
  40. def updatePassword(self,password,userid):
  41. fetchedData = self.cursor.execute("UPDATE User SET Password='%s' WHERE userid=%s" % (password,userid))
  42. self.db.commit()
  43. def borrowOrReturnBook(self,userid,borrow=1):
  44. if borrow == 1 :
  45. fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed+1,NumBorrowed=NumBorrowed+1 WHERE userid='%s'" % userid)
  46. else:
  47. fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed-1,NumBorrowed=NumBorrowed-1 WHERE userid='%s'" % userid)
  48. self.db.commit()

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

  1. class BookDbManager(DbManager):
  2. def __init__(self, database=dbpath, *args):
  3. super().__init__(database, *args)
  4. self.initDb()
  5. def initDb(self):
  6. self.createTable(createBookTableString)
  7. def initDatabase(self):
  8. self.addBOOK('力学', 'IS1000', '刘斌', '教育', '中国科学技术大学 ', '1999-01-01', 100, 100, 0)
  9. self.addBOOK('微积分', 'IS1001', '牛顿莱布尼兹', '教育', '中国科学技术大学', '1998-01-01', 14, 14, 0)
  10. self.addBOOK('电磁场论', 'IS1002', '叶邦角', '教育', '中国科学技术大学', '1997-01-01', 24, 24, 0)
  11. self.addBOOK('热学', 'IS1003', '张鹏飞', '教育', '中国科学技术大学', '2002-01-01', 45, 45, 0)
  12. self.addBOOK('电动力学', 'IS1004', '叶邦角', '教育', '中国科学技术大学', '2003-01-01', 100, 100, 0)
  13. self.addBOOK('数据库', 'IS1006', '袁平波', '教育', '中国科学技术大学', '2010-01-01', 10, 10, 0)
  14. self.addBOOK ('电磁学', 'IS1005', '叶邦角', '教育', '中国科学技术大学 ', '2012-01-01', 43, 43, 0)
  15. self.addBOOK ('数学分析', 'IS1007', '陈卿', '教育', '中国科学技术大学', '2013-01-01', 23, 23, 0)
  16. self.addBOOK('吉米多维奇题解1', 'IS1008', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  17. self.addBOOK('吉米多维奇题解2', 'IS1009', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  18. self.addBOOK('吉米多维奇题解3', 'IS1010', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  19. self.addBOOK('吉米多维奇题解4', 'IS1011', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  20. self.addBOOK('吉米多维奇题解5', 'IS1012', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  21. self.addBOOK('吉米多维奇题解6', 'IS1013', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  22. self.addBOOK('朗道力学', 'IS1014', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  23. self.addBOOK('朗道电动力学', 'IS1015', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  24. self.addBOOK('朗道量子力学', 'IS1016', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  25. self.addBOOK('朗道量子电动力学', 'IS1017', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  26. self.addBOOK('朗道统计物理学', 'IS1018', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  27. self.addBOOK('朗道流体力学', 'IS1019', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  28. self.addBOOK('朗道弹性理论力学', 'IS1020', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  29. self.addBOOK('朗道物理动力学', 'IS1021', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  30. self.addBOOK('植物学', 'IS1022', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  31. self.addBOOK('动物学', 'IS1023', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  32. self.addBOOK('细胞生物学', 'IS1024', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  33. self.addBOOK('动物生理学', 'IS1025', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  34. self.addBOOK('古生物学', 'IS1026', '佚名', '生物学', '高等教育出版社', '2011-05-01', 100, 100, 0)
  35. self.addBOOK('高等数学', 'IS1027', '佚名', '教育', '高等教育出版社', '2011-05-01', 50, 50, 0)
  36. self.addBOOK('线性代数', 'IS1029', '佚名', '教育', '高等教育出版社', '2011-05-01', 50, 50, 0)
  37. self.addBOOK('C++程序设计', 'IS1030', '孙广中', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  38. self.addBOOK('C程序设计', 'IS1031', '郑重', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  39. self.addBOOK('数据结构', 'IS1032', '顾为兵', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  40. self.addBOOK('信号与系统', 'IS1033', '李卫平', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  41. self.addBOOK('线性电子线路', 'IS1034', '陆伟', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  42. def addBOOK(self,BookName,BookID, Auth, Category,Publisher,PublishTime,NumStorage,NumCanBorrow,NumBorrowed):
  43. ''' 添加书籍 '''
  44. insertData = self.cursor.execute("""INSERT INTO Book
  45. (BookName,BookID, Auth, Category,Publisher,PublishTime,NumStorage,NumCanBorrow,NumBorrowed) VALUES
  46. ('{0}', '{1}', '{2}','{3}','{4}','{5}','{6}','{7}','{8}')
  47. """.format(BookName,BookID, Auth, Category,Publisher,PublishTime,NumStorage,NumCanBorrow,NumBorrowed))
  48. self.db.commit()
  49. def dropBook(self,bookId):
  50. insertData = self.cursor.execute("DELETE FROM Book WHERE BookID='%s'" % (bookId))
  51. self.db.commit()
  52. def updateBookinfo(self,addBookNum,bookId,addFlag=1):
  53. if addFlag == 1:
  54. self.cursor.execute("UPDATE Book SET NumStorage=NumStorage+%d,NumCanBorrow=NumCanBorrow+%d WHERE BookID='%s'" % (
  55. addBookNum, addBookNum, bookId))
  56. else:
  57. self.cursor.execute("UPDATE Book SET NumStorage=NumStorage-%d,NumCanBorrow=NumCanBorrow-%d WHERE BookID='%s'" % (
  58. addBookNum, addBookNum, bookId))
  59. self.db.commit()
  60. def getBookinfo(self):
  61. '''获得所有书籍'''
  62. fetchedData = self.cursor.execute("SELECT * from Book ")
  63. return fetchedData.fetchall()
  64. def querybyBookID(self,BookID):
  65. fetchedData = self.cursor.execute("SELECT * FROM Book WHERE BookID='%s'" % (BookID) )
  66. return fetchedData.fetchall()
  67. #return self.queryBookByKeywords(userid)
  68. def queryBookByKeywords(self,keywords):
  69. fetchedData = self.cursor.execute("SELECT * from Book ORDER BY %s limit %s,%s" % (keywords,0,5))
  70. return fetchedData.fetchall()
  71. def borrowOrReturnBook(self,BookID,borrowflag=1):
  72. if borrowflag == 1 :
  73. fetchedData = self.cursor.execute( "UPDATE Book SET NumCanBorrow=NumCanBorrow-1,NumBorrowed=NumBorrowed+1 WHERE BookID='%s'" % BookID)
  74. else:
  75. fetchedData = self.cursor.execute( "UPDATE Book SET NumCanBorrow=NumCanBorrow+1,NumBorrowed=NumBorrowed-1 WHERE BookID='%s'" % BookID)
  76. self.db.commit()

最后是添加删除类

  1. class AddOrDropManager(DbManager):
  2. def __init__(self, database=dbpath, *args):
  3. super().__init__(database, *args)
  4. self.initDb()
  5. def initDb(self):
  6. self.createTable(createAddOrDropBookTableString)
  7. def initDatabase(self):
  8. self.insertValue('IS1000', '2018-04-22', 1, 100)
  9. self.insertValue('IS1001', '2018-04-22', 1, 14)
  10. self.insertValue('IS1002', '2018-04-22', 1, 24)
  11. self.insertValue('IS1003', '2018-04-22', 1, 45)
  12. self.insertValue('IS1004', '2018-04-22', 1, 100)
  13. self.insertValue('IS1004', '2018-04-27', 1, 45)
  14. self.insertValue('IS1005', '2018-04-27', 1, 45)
  15. self.insertValue('IS1006', '2018-04-28', 1, 10)
  16. self.insertValue('IS1007', '2018-04-28', 1, 23)
  17. self.insertValue('IS1008', '2018-04-28', 1, 50)
  18. self.insertValue('IS1009', '2018-04-28', 1, 50)
  19. self.insertValue('IS1010', '2018-04-28', 1, 50)
  20. self.insertValue('IS1011', '2018-04-28', 1, 50)
  21. self.insertValue('IS1012', '2018-04-28', 1, 50)
  22. self.insertValue('IS1013', '2018-04-28', 1, 50)
  23. self.insertValue('IS1014', '2018-04-28', 1, 50)
  24. self.insertValue('IS1015', '2018-04-28', 1, 50)
  25. self.insertValue('IS1016', '2018-04-28', 1, 50)
  26. self.insertValue('IS1017', '2018-04-28', 1, 50)
  27. self.insertValue('IS1018', '2018-04-28', 1, 50)
  28. self.insertValue('IS1019', '2018-04-28', 1, 50)
  29. self.insertValue('IS1020', '2018-04-28', 1, 50)
  30. self.insertValue('IS1021', '2018-04-28', 1, 50)
  31. self.insertValue('IS1022', '2018-04-28', 1, 50)
  32. self.insertValue('IS1023', '2018-04-28', 1, 50)
  33. self.insertValue('IS1024', '2018-04-28', 1, 50)
  34. self.insertValue('IS1025', '2018-04-28', 1, 50)
  35. self.insertValue('IS1026', '2018-04-28', 1, 100)
  36. self.insertValue('IS1027', '2018-04-28', 1, 50)
  37. self.insertValue('IS1029', '2018-04-28', 1, 50)
  38. self.insertValue('IS1030', '2018-04-28', 1, 50)
  39. self.insertValue('IS1031', '2018-04-28', 1, 50)
  40. self.insertValue('IS1032', '2018-04-28', 1, 50)
  41. self.insertValue('IS1033', '2018-04-28', 1, 50)
  42. self.insertValue('IS1034', '2018-04-28', 1, 50)
  43. def insertValue(self,BookID,time,AddorDrop,addBookNum):
  44. insertData = self.cursor.execute("INSERT INTO AddOrDrop VALUES ('%s','%s',%d,%d)" % (BookID, time, AddorDrop,addBookNum))
  45. self.db.commit()
  46. def addinfo(self,BookID,time,addBookNum):
  47. self.insertValue(BookID,time,1,addBookNum)
  48. def dropinfo(self,BookID,time,addBookNum):
  49. self.insertValue(BookID,time,0,addBookNum)
  50. def getAllinfo(self):
  51. '''获得所有书籍'''
  52. fetchedData = self.cursor.execute("SELECT * from AddOrDrop ")
  53. return fetchedData.fetchall()

有了数据库,后面的就简单了,整体代码如下:

  1. # -*- coding: utf-8 -*-
  2. # @Date : 2018-12-12 15:31:22
  3. # @Author : Jimy_Fengqi (jmps515@163.com)
  4. # @Link : https://blog.csdn.net/qiqiyingse
  5. # @Version : V1.0
  6. # @pyVersion: 3.6
  7. import os
  8. import os.path
  9. import sqlite3
  10. import hashlib
  11. home = os.path.expanduser('~')
  12. if '.BookManagerSystem' not in os.listdir(home):
  13. os.mkdir(os.path.join(home, '.BookManagerSystem'))
  14. dbpath = os.path.join(home, '.BookManagerSystem', 'LibraryManagement.db')
  15. createUserTableString = """
  16. CREATE TABLE IF NOT EXISTS user(
  17. userid CHAR(10) PRIMARY KEY ,
  18. Name VARCHAR(20),
  19. Password CHAR(32),
  20. IsAdmin BIT,
  21. TimesBorrowed INT,
  22. NumBorrowed INT
  23. )"""
  24. createUser_BookTableString = """
  25. CREATE TABLE IF NOT EXISTS User_Book(
  26. userid CHAR(10),
  27. BookID CHAR(6) PRIMARY KEY,
  28. BorrowTime DATE,
  29. ReturnTime DATE,
  30. BorrowState BIT
  31. )"""
  32. createBookTableString = """
  33. CREATE TABLE IF NOT EXISTS Book(
  34. BookName VARCHAR(30),
  35. BookID CHAR(6),
  36. Auth VARCHAR(20),
  37. Category VARCHAR(10),
  38. Publisher VARCHAR(20),
  39. PublishTime DATE,
  40. NumStorage INT,
  41. NumCanBorrow INT,
  42. NumBorrowed INT
  43. )"""
  44. createAddOrDropBookTableString = """
  45. CREATE TABLE IF NOT EXISTS AddOrDrop(
  46. BookID CHAR(6),
  47. ModifyTime DATE,
  48. AddOrDrop INT,
  49. Numbers INT
  50. )"""
  51. class DbManager(object):
  52. def __init__(self, *args):
  53. self.db = sqlite3.connect(*args)
  54. self.cursor = self.db.cursor()
  55. def __enter__(self):
  56. return self.cursor
  57. def __exit__(self, types, value, traceback):
  58. self.db.commit()
  59. return False
  60. def __del__(self):
  61. self.db.commit()
  62. self.db.close()
  63. def switchDb(self, *args):
  64. self.db.close()
  65. self.db = sqlite3.connect(*args)
  66. self.cursor = self.db.cursor()
  67. def createTable(self, tableString):
  68. self.cursor.execute(tableString)
  69. self.db.commit()
  70. def commitAndClose(self):
  71. self.db.commit()
  72. self.db.close()
  73. class UserBookManager(DbManager):
  74. def __init__(self, database=dbpath, *args):
  75. super().__init__(database, *args)
  76. self.initDb()
  77. def initDb(self):
  78. self.createTable(createUser_BookTableString)
  79. def queryBorrowBook(self,userid,BookID):
  80. result=self.cursor.execute( "SELECT * FROM User_Book WHERE userid='%s' AND BookID='%s' AND BorrowState=1" %(userid,BookID))
  81. return result.fetchall()
  82. def countBorrowNum(self,userid):
  83. result=self.cursor.execute(" SELECT COUNT(userid) FROM User_Book WHERE userid='%s' AND BorrowState=1" % (userid))
  84. return result.fetchall()
  85. def borrowStatus(self,userid,BookID):
  86. result=self.cursor.execute( "SELECT COUNT(userid) FROM User_Book WHERE userid='%s' AND BookID='%s' AND BorrowState=1" % (
  87. userid,BookID))
  88. return result.fetchall()
  89. def borrowOrReturnBook(self,userid, BookID, timenow,borrowflag=1):
  90. if borrowflag == 1:
  91. result=self.cursor.execute( "INSERT INTO User_Book VALUES ('%s','%s','%s',NULL,1)" % (userid, BookID, timenow))
  92. else:
  93. result=self.cursor.execute("UPDATE User_Book SET ReturnTime='%s',BorrowState=0 WHERE userID='%s' AND BookID='%s' AND BorrowState=1" % (timenow,userid,BookID))
  94. self.db.commit()
  95. class AddOrDropManager(DbManager):
  96. def __init__(self, database=dbpath, *args):
  97. super().__init__(database, *args)
  98. self.initDb()
  99. def initDb(self):
  100. self.createTable(createAddOrDropBookTableString)
  101. def initDatabase(self):
  102. self.insertValue('IS1000', '2018-04-22', 1, 100)
  103. self.insertValue('IS1001', '2018-04-22', 1, 14)
  104. self.insertValue('IS1002', '2018-04-22', 1, 24)
  105. self.insertValue('IS1003', '2018-04-22', 1, 45)
  106. self.insertValue('IS1004', '2018-04-22', 1, 100)
  107. self.insertValue('IS1004', '2018-04-27', 1, 45)
  108. self.insertValue('IS1005', '2018-04-27', 1, 45)
  109. self.insertValue('IS1006', '2018-04-28', 1, 10)
  110. self.insertValue('IS1007', '2018-04-28', 1, 23)
  111. self.insertValue('IS1008', '2018-04-28', 1, 50)
  112. self.insertValue('IS1009', '2018-04-28', 1, 50)
  113. self.insertValue('IS1010', '2018-04-28', 1, 50)
  114. self.insertValue('IS1011', '2018-04-28', 1, 50)
  115. self.insertValue('IS1012', '2018-04-28', 1, 50)
  116. self.insertValue('IS1013', '2018-04-28', 1, 50)
  117. self.insertValue('IS1014', '2018-04-28', 1, 50)
  118. self.insertValue('IS1015', '2018-04-28', 1, 50)
  119. self.insertValue('IS1016', '2018-04-28', 1, 50)
  120. self.insertValue('IS1017', '2018-04-28', 1, 50)
  121. self.insertValue('IS1018', '2018-04-28', 1, 50)
  122. self.insertValue('IS1019', '2018-04-28', 1, 50)
  123. self.insertValue('IS1020', '2018-04-28', 1, 50)
  124. self.insertValue('IS1021', '2018-04-28', 1, 50)
  125. self.insertValue('IS1022', '2018-04-28', 1, 50)
  126. self.insertValue('IS1023', '2018-04-28', 1, 50)
  127. self.insertValue('IS1024', '2018-04-28', 1, 50)
  128. self.insertValue('IS1025', '2018-04-28', 1, 50)
  129. self.insertValue('IS1026', '2018-04-28', 1, 100)
  130. self.insertValue('IS1027', '2018-04-28', 1, 50)
  131. self.insertValue('IS1029', '2018-04-28', 1, 50)
  132. self.insertValue('IS1030', '2018-04-28', 1, 50)
  133. self.insertValue('IS1031', '2018-04-28', 1, 50)
  134. self.insertValue('IS1032', '2018-04-28', 1, 50)
  135. self.insertValue('IS1033', '2018-04-28', 1, 50)
  136. self.insertValue('IS1034', '2018-04-28', 1, 50)
  137. def insertValue(self,BookID,time,AddorDrop,addBookNum):
  138. insertData = self.cursor.execute("INSERT INTO AddOrDrop VALUES ('%s','%s',%d,%d)" % (BookID, time, AddorDrop,addBookNum))
  139. self.db.commit()
  140. def addinfo(self,BookID,time,addBookNum):
  141. self.insertValue(BookID,time,1,addBookNum)
  142. def dropinfo(self,BookID,time,addBookNum):
  143. self.insertValue(BookID,time,0,addBookNum)
  144. def getAllinfo(self):
  145. '''获得所有书籍'''
  146. fetchedData = self.cursor.execute("SELECT * from AddOrDrop ")
  147. return fetchedData.fetchall()
  148. class BookDbManager(DbManager):
  149. def __init__(self, database=dbpath, *args):
  150. super().__init__(database, *args)
  151. self.initDb()
  152. def initDb(self):
  153. self.createTable(createBookTableString)
  154. def initDatabase(self):
  155. self.addBOOK('力学', 'IS1000', '刘斌', '教育', '中国科学技术大学 ', '1999-01-01', 100, 100, 0)
  156. self.addBOOK('微积分', 'IS1001', '牛顿莱布尼兹', '教育', '中国科学技术大学', '1998-01-01', 14, 14, 0)
  157. self.addBOOK('电磁场论', 'IS1002', '叶邦角', '教育', '中国科学技术大学', '1997-01-01', 24, 24, 0)
  158. self.addBOOK('热学', 'IS1003', '张鹏飞', '教育', '中国科学技术大学', '2002-01-01', 45, 45, 0)
  159. self.addBOOK('电动力学', 'IS1004', '叶邦角', '教育', '中国科学技术大学', '2003-01-01', 100, 100, 0)
  160. self.addBOOK('数据库', 'IS1006', '袁平波', '教育', '中国科学技术大学', '2010-01-01', 10, 10, 0)
  161. self.addBOOK ('电磁学', 'IS1005', '叶邦角', '教育', '中国科学技术大学 ', '2012-01-01', 43, 43, 0)
  162. self.addBOOK ('数学分析', 'IS1007', '陈卿', '教育', '中国科学技术大学', '2013-01-01', 23, 23, 0)
  163. self.addBOOK('吉米多维奇题解1', 'IS1008', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  164. self.addBOOK('吉米多维奇题解2', 'IS1009', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  165. self.addBOOK('吉米多维奇题解3', 'IS1010', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  166. self.addBOOK('吉米多维奇题解4', 'IS1011', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  167. self.addBOOK('吉米多维奇题解5', 'IS1012', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  168. self.addBOOK('吉米多维奇题解6', 'IS1013', '吉米多维奇', '教育', '俄罗斯出版社', '2010-01-01', 50, 50, 0)
  169. self.addBOOK('朗道力学', 'IS1014', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  170. self.addBOOK('朗道电动力学', 'IS1015', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  171. self.addBOOK('朗道量子力学', 'IS1016', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  172. self.addBOOK('朗道量子电动力学', 'IS1017', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  173. self.addBOOK('朗道统计物理学', 'IS1018', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  174. self.addBOOK('朗道流体力学', 'IS1019', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  175. self.addBOOK('朗道弹性理论力学', 'IS1020', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  176. self.addBOOK('朗道物理动力学', 'IS1021', '朗道', '教育', '高等教育出版社', '2012-01-01', 50, 50, 0)
  177. self.addBOOK('植物学', 'IS1022', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  178. self.addBOOK('动物学', 'IS1023', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  179. self.addBOOK('细胞生物学', 'IS1024', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  180. self.addBOOK('动物生理学', 'IS1025', '佚名', '生物学', '高等教育出版社', '2011-05-01', 50, 50, 0)
  181. self.addBOOK('古生物学', 'IS1026', '佚名', '生物学', '高等教育出版社', '2011-05-01', 100, 100, 0)
  182. self.addBOOK('高等数学', 'IS1027', '佚名', '教育', '高等教育出版社', '2011-05-01', 50, 50, 0)
  183. self.addBOOK('线性代数', 'IS1029', '佚名', '教育', '高等教育出版社', '2011-05-01', 50, 50, 0)
  184. self.addBOOK('C++程序设计', 'IS1030', '孙广中', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  185. self.addBOOK('C程序设计', 'IS1031', '郑重', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  186. self.addBOOK('数据结构', 'IS1032', '顾为兵', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  187. self.addBOOK('信号与系统', 'IS1033', '李卫平', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  188. self.addBOOK('线性电子线路', 'IS1034', '陆伟', '教育', '中国科学技术大学', '2011-05-01', 50, 50, 0)
  189. def addBOOK(self,BookName,BookID, Auth, Category,Publisher,PublishTime,NumStorage,NumCanBorrow,NumBorrowed):
  190. ''' 添加书籍 '''
  191. insertData = self.cursor.execute("""INSERT INTO Book
  192. (BookName,BookID, Auth, Category,Publisher,PublishTime,NumStorage,NumCanBorrow,NumBorrowed) VALUES
  193. ('{0}', '{1}', '{2}','{3}','{4}','{5}','{6}','{7}','{8}')
  194. """.format(BookName,BookID, Auth, Category,Publisher,PublishTime,NumStorage,NumCanBorrow,NumBorrowed))
  195. self.db.commit()
  196. def dropBook(self,bookId):
  197. insertData = self.cursor.execute("DELETE FROM Book WHERE BookID='%s'" % (bookId))
  198. self.db.commit()
  199. def updateBookinfo(self,addBookNum,bookId,addFlag=1):
  200. if addFlag == 1:
  201. self.cursor.execute("UPDATE Book SET NumStorage=NumStorage+%d,NumCanBorrow=NumCanBorrow+%d WHERE BookID='%s'" % (
  202. addBookNum, addBookNum, bookId))
  203. else:
  204. self.cursor.execute("UPDATE Book SET NumStorage=NumStorage-%d,NumCanBorrow=NumCanBorrow-%d WHERE BookID='%s'" % (
  205. addBookNum, addBookNum, bookId))
  206. self.db.commit()
  207. def getBookinfo(self):
  208. '''获得所有书籍'''
  209. fetchedData = self.cursor.execute("SELECT * from Book ")
  210. return fetchedData.fetchall()
  211. def querybyBookID(self,BookID):
  212. fetchedData = self.cursor.execute("SELECT * FROM Book WHERE BookID='%s'" % (BookID) )
  213. return fetchedData.fetchall()
  214. #return self.queryBookByKeywords(userid)
  215. def queryBookByKeywords(self,keywords):
  216. fetchedData = self.cursor.execute("SELECT * from Book ORDER BY %s limit %s,%s" % (keywords,0,5))
  217. return fetchedData.fetchall()
  218. def borrowOrReturnBook(self,BookID,borrowflag=1):
  219. if borrowflag == 1 :
  220. fetchedData = self.cursor.execute( "UPDATE Book SET NumCanBorrow=NumCanBorrow-1,NumBorrowed=NumBorrowed+1 WHERE BookID='%s'" % BookID)
  221. else:
  222. fetchedData = self.cursor.execute( "UPDATE Book SET NumCanBorrow=NumCanBorrow+1,NumBorrowed=NumBorrowed-1 WHERE BookID='%s'" % BookID)
  223. self.db.commit()
  224. class UserDbManager(DbManager):
  225. def __init__(self, database=dbpath, *args):
  226. super().__init__(database, *args)
  227. self.initDb()
  228. def initDb(self):
  229. self.createTable(createUserTableString)
  230. def initDatabase(self):
  231. password='admin123'
  232. hl = hashlib.md5() #将密码进行md5加密
  233. hl.update(password.encode(encoding='utf-8'))
  234. md5password = hl.hexdigest()
  235. self.addAdminUser('admin','Fengqi',md5password) #添加管理员账号
  236. password='user123'
  237. hl = hashlib.md5() #将密码进行md5加密
  238. hl.update(password.encode(encoding='utf-8'))
  239. md5password = hl.hexdigest()
  240. self.addUser('user000000','user000000',md5password) #添加普通用户
  241. def addUser(self,userid, Name, Password,IsAdmin=0):
  242. ''' 添加普通用户 '''
  243. insertData = self.cursor.execute("""INSERT INTO user
  244. (userid, Name, Password,IsAdmin,TimesBorrowed,NumBorrowed) VALUES
  245. ('{0}', '{1}', '{2}','{3}','{4}','{5}')
  246. """.format(userid, Name, Password,IsAdmin,0,0))
  247. self.db.commit()
  248. def addAdminUser(self,userid, Name, Password):
  249. ''' 添加管理员用户'''
  250. self.addUser(userid, Name, Password,IsAdmin=1)
  251. def querybyUserid(self,userid):
  252. fetchedData = self.cursor.execute("SELECT * FROM user WHERE userid='%s'" % (userid) )
  253. #a=fetchedData.fetchall()#通过fetchall接受全部数据,是一个list,list的每个元素是tuple类型数据
  254. return fetchedData.fetchall()
  255. def getAdmineUserinfo(self):
  256. '''获取管理员用户 '''
  257. fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=1")
  258. return fetchedData
  259. def getUserinfo(self):
  260. '''获取一般用户'''
  261. fetchedData = self.cursor.execute("SELECT userid,Name FROM user WHERE IsAdmin=0")
  262. return fetchedData
  263. def updatePassword(self,password,userid):
  264. fetchedData = self.cursor.execute("UPDATE User SET Password='%s' WHERE userid=%s" % (password,userid))
  265. self.db.commit()
  266. def borrowOrReturnBook(self,userid,borrow=1):
  267. if borrow == 1 :
  268. fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed+1,NumBorrowed=NumBorrowed+1 WHERE userid='%s'" % userid)
  269. else:
  270. fetchedData = self.cursor.execute("UPDATE User SET TimesBorrowed=TimesBorrowed-1,NumBorrowed=NumBorrowed-1 WHERE userid='%s'" % userid)
  271. self.db.commit()
  272. def testuserdb():
  273. userDb = UserDbManager()
  274. userDb.addAdminUser('admin', 'admin', '123456')
  275. userDb.addAdminUser('administrator', 'admin1', '123456')
  276. userDb.addUser('Test', 'AAA', '123456')
  277. userDb.addUser('Test1', 'BBB', '123456')
  278. userDb.addUser('Test2', 'CCC', '123456')
  279. userDb.getAdmineUser()
  280. userDb.getUser()
  281. userDb.queryUser('admins')
  282. userDb.queryUser('admin')
  283. def testAddDropBookData():
  284. userDb = AddOrDropManager()
  285. allbook=userDb.getAllinfo()
  286. for book in allbook:
  287. print(book)
  288. #print(" ".join('%s' %ids for ids in a))
  289. #a=list(book)
  290. #print(a)
  291. def testBookDB():
  292. userDb = BookDbManager()
  293. if len(userDb.querybyBookID('IS1006')):
  294. print('书籍已经存在,更新数量')
  295. userDb.updateBookinfo(10,'IS1005')
  296. else:
  297. print('书籍不存在,直接插入')
  298. userDb.addBOOK('力学3', 'IS1006' ,'刘斌3', '教育', '中国科学技术大学', '1999-01-01', '34' , '34' , '1')
  299. allbook=userDb.getBookinfo()
  300. print('all book length =%d' % len(allbook))
  301. for book in allbook:
  302. print(book)
  303. print('按照bookid查询')
  304. bookid=userDb.querybyBookID('IS1006')
  305. if len(bookid):
  306. print(bookid)
  307. print('按照auth排序查询前几页')
  308. keybook=userDb.queryBookByKeywords('Auth')
  309. print(keybook)
  310. if __name__ == '__main__':
  311. testuserdb()
  312. testAddDropBookData()
  313. testBookDB()

发表评论

表情:
评论列表 (有 0 条评论,318人围观)

还没有评论,来说两句吧...

相关阅读