数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统

书店管理系统

    • 1.项目简述
      • 1.1项目来源
      • 1.2 相关工具
    • 2.需求分析
      • 2.1 需求信息
      • 2.2 数据需求
      • 2.3系统流程设计
    • 3.模型设计
      • 3.1 employee表
      • 3.2 book表
      • 3.3 reader表
      • 3.4 collectionofbook表
      • 3.5 borrow表
      • 3.6 return表
      • 3.7 sell表
      • 3.8 全局ER图
    • 4.规范性检查
    • 5.系统实现
      • 5.1 系统实现环境和技术
    • 6.UI 界面
    • 7.GitHub地址
    • 8. 更新

1.项目简述

1.1项目来源

基于MySQL+python+pyqt5设计和实现的书店管理系统
这个项目原本是这学期数据库课程设计,经过老师提醒准备在暑假时间进行完善和修改,待新学期申请一项软件著作权(这个很水的),也算是更进一步的磨练自己。暑期完成了以下内容:
①完成整个UI界面的实现(也是最主要的部分)
②对数据库相关表的定义进行完善和修改
③对相关异常进行了处理

1.2 相关工具

python3.8、MySQL8.0、pycharm2020.1、datagrip2020.1、pymysql、pyqt5。

2.需求分析

2.1 需求信息

书店管理系统需要满足以下需求:
对于一般店员来说:
①书店店员通过系统管理书籍的购入和卖出,以及查看书籍的存货量
②店员可以通过该系统对需要借书和还书的人员进行借书还书操作
③新增和删除新的借阅人员信息。
对于店长(也就是管理员),除了以上的三种需求之外,还有
①增加和删除雇员,
②增加和删除系统操作人员账号,
③修改雇员的信息。

2.2 数据需求

根据2.1中的需求信息,我们可以设计出以下的基本功能:
1.借阅人员信息的输入、查询,包括借阅证ID、姓名、年龄、性别、手机号
2.书籍信息的输入和删除包括ISBN、书籍名称、作者、定价
3.馆藏书籍信息包括ISBN、收藏量
4.书籍的卖出和购入包括书籍的ISBN、卖出量、购入量
5.雇员信息的增删查改,包括雇员姓名、性别、年龄、工资

2.3系统流程设计

根据上述的描述我们可以容易设计出系统流程图,流程图如下
数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第1张图片

图2.3 系统流程图

3.模型设计

3.1 employee表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第2张图片

3.2 book表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第3张图片

3.3 reader表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第4张图片

3.4 collectionofbook表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第5张图片

3.5 borrow表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第6张图片

3.6 return表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第7张图片

3.7 sell表

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第8张图片

3.8 全局ER图

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第9张图片
一个读者可以借到多本书,同一本书也可以被多人借去。Book表是指所有已经发行的书籍,而collectionofbook代表书店里面有的书籍,两者1:1关系。同一本书可以被买入或者卖出多本,两者是1:N的关系。

4.规范性检查

1)对于book表 属性有(ISBN, BookName, Author, Price),其中ISBN为主键,无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

(2)对于employee表,属性有(employeeid, employname, employsex, employage, employtel, salary),其中employeeid为主键,无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

(3)对于reader表,属性有(readerid, readername, sex, age, tel) 其中readerid为主键,无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

(4)对于collection表,属性有(isbn, totalnum),其中ISBN不仅为主键也为外键,参考book表中的ISBN。无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

(5)对于borrow表,属性有(borrowID,date,ISBN,readerID),borrowid为主键,决定了哪个人借了那本书,ISBN和readerid参考了collectionofbook中的isbn以及reader中的readerid,无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

(6)对于return表,属性有(returnID,ISBN,readerID,date),returnid为主键,决定了哪个人借了那本书,ISBN和readerid参考了collectionofbook中的isbn,以及reader中的readerid,无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

(7)对于sell表和purchase表,属性有(sellid,ISBN,alreadysold,price)和(purchaseid,ISBN,num,price),无非主属性对候选键的传递依赖且候选键只有一个,符合BCNF

5.系统实现

5.1 系统实现环境和技术

pycharm,DataGrip,MySQL。利用Python第三方库MySQLlite来实现对MySQL数据库的操作。先在datagrip中创建好数据库和表以及触发器,再在Pycharm中编写相关系统程序。
5.2系统界面与关键代码
以下是关键几个表的创建

create table Reader(
    ReaderID int,
    ReaderName varchar(10) default '张三',
    Sex varchar(1),
    Age int default 18,
    TEL varchar(12) default NULL,
    primary key (ReaderID),
    unique (ReaderID),
    CHECK ( Sex='男' or Sex='女')
);

create table Book(
  ISBN varchar(20),
  BookName varchar(20) not null ,
  Author varchar(20) default ' ',
  Price int ,
    primary key (ISBN),
    unique (ISBN),
    check ( Price>0 )
);

create table CollectionOfBook(
    ISBN varchar(20),
    TotalNum int default 0,
    foreign key (ISBN)
        references Book(ISBN)
);
alter table collectionofbook add constraint check(TotalNum>=0);

CREATE table Employee(
    EmployeeID int primary key ,
    EmployName varchar(20),
    EmploySex varchar(1),
    EmployAge int,
    EmployTEL varchar(20),
    Salary int,
    check ( EmploySex ='男' or EmploySex = '女')
);
//创建触发器
create trigger increaseNumberOfBooks after insert on purchasebook
    for each row
    begin
        if not exists(select 1 from collectionofbook where NEW.ISBN in(select ISBN from collectionofbook)) then
            begin
       insert into CollectionOfBook(ISBN, TotalNum) VALUE (NEW.ISBN,NEW.PurchaseNum);
            end;
        else
            begin
                update CollectionOfBook set TotalNum = TotalNum+NEW.PurchaseNum
        where CollectionOfBook.ISBN = NEW.ISBN;
                end;
        end if;
    end;

create trigger decreaseNumberOfBooks after insert on sell
    for each row
    begin
        update CollectionOfBook set TotalNum = TotalNum-NEW.AlreadySold
        where  CollectionOfBook.ISBN = NEW.ISBN;
    end;

create  trigger borrowBook before insert on borrow
    for each row
    begin
        if (select TotalNum from collectionofbook where CollectionOfBook.ISBN
            = NEW.ISBN
            ) -1 >=0 then
        update collectionofbook set TotalNum = TotalNum-1 where CollectionOfBook.ISBN
        = NEW.ISBN;
        end if;
    end;

create  trigger ReturnBook before insert on returnofbook
    for each row
    begin
        update collectionofbook set TotalNum = TotalNum+1 where CollectionOfBook.ISBN
        = NEW.ISBN;
    end;
python创建类来封装操作
class BasicSqlOperation(object):
    def __init__(self):
        # 打开数据库连接
        self.db = connect(host='localhost', port=3306, charset='utf8', database='MySQL', password='zyh20000205',
                          user='root')
        # 创建游标对象
        self.cursor = self.db.cursor()
        sql = "use bookshopmanagement"
        self.cursor.execute(sql)

6.UI 界面

数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第10张图片
在登录界面可以选择登录级别
数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第11张图片
管理员登录
数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第12张图片
一般操作用户登录
数据库课程设计:利用python+MySQL+pyqt5设计一个带UI界面的书店管理系统_第13张图片
操作窗口

7.GitHub地址

https://github.com/zyhsna/Database_courseDesign

8. 更新

更新于2020/12/14,修改了一些bug,对程序运行可能出现的一些错误进行了说明和修改,具体内容可见GitHub上readme

你可能感兴趣的:(小项目,python,mysql,数据库,ui)