题目2:图书进销存管理的设计与实现一:问题描述一个小型书店的图书进销存的主要业务主要包括图书进货、退货、统计、销售、查询等业务处理过程。二:需求分析①进货业务:根据某种书籍的库存量及销售情况确定进货数量,根据供应商报价选择供应商。输出一份进货单并自动修改库存量,把本次进货的信息添加到进货库中。②退货业务:顾客把已买的书籍退还给书店。输出一份退货单并自动修改库存量,把本次退货的信息添加到退货库中。③统计业务:根据销售情况输出统计的报表。一般内容为每月的销售总额、销售总量及排行榜等信息。④销售业务:输入顾客要买书籍的信息,自动显示此书的库存量,如果可以销售,打印销售单并修改库存,同时把此次销售的有关信息添加到日销售库中。⑤查询业务:允许用户设置条件进行进货、退货、统计、销售和库存书籍的信息查询。数据流图:系统功能模块:三:概念结构设计ER图:四:逻辑结构设计1:关系模式:顾客信息表:(顾客编号,姓名,电话)Customer_information(id,name,phone_number);图书信息表:(图书编号,图书名称,图书类别,出版社)Book_information:(id,Book_name,Book_Type,Press);供应商信息表:(供应商编号,公司名称,所在地,联系电话)Supplier_information:(id,company_name,company_location,company_phone)供应商供应信息表:(供应编号,供应商编号,书籍编号,供应价格)Supplier_supply:(id,supplie_id,Book_id,supply_prise)进货信息表:(供应编号,进货日期,进货数量)Incoming_information:(supply_id,supply_data,supply_number)库存表:(图书编号,库存量,订货临界值)Stock:(Book_id,stock_number,Critical_value)日销售库:(销售订单号,销售日期,图书编号,顾客编号,销售数量)Sale_information:(id,sale_data,book_id,customer_id,sale_number)退货信息表:(退货订单号,销售订单号,退货日期)Return_information:(id,sale_id,return_data)2:数据库信息:顾客信息表图书信息表供应商信息表供应商供应信息表外键约束:进货信息表外键约束:库存表外键约束:日销售库外键约束退货信息表外键约束:3:数据库创建代码创建数据库:CREATEDATABASEIFNOTEXISTS`book_management_system`USE`book_management_system`;创建顾客信息表CREATETABLEIFNOTEXISTS`customer_information`(`id`int(11)NOTNULL,`name`varchar(50)NOTNULL,`phone_number`varchar(50)NOTNULL,PRIMARYKEY(`id`))创建图书信息表CREATETABLEIFNOTEXISTS`book_information`(`id`int(11)NOTNULL,`Book_name`varchar(50)NOTNULL,`Book_Type`varchar(50)NOTNULL,`Press`int(11)NOTNULL,PRIMARYKEY(`id`))创建供应商信息表CREATETABLEIFNOTEXISTS`supplier_information`(`id`int(11)NOTNULL,`company_name`varchar(50)NOTNULL,`company_location`varchar(50)NOTNULL,`company_phone`varchar(50)NOTNULL,PRIMARYKEY(`id`))创建供应商供应信息表CREATETABLEIFNOTEXISTS`supplier_supply`(`id`int(11)NOTNULL,`supplie_id`int(11)NOTNULL,`Book_id`int(11)NOTNULL,`supply_prise`int(11)NOTNULL,PRIMARYKEY(`id`),KEY`supplierid`(`supplie_id`),KEY`supplierbookid`(`Book_id`),CONSTRAINT`supplierbookid`FOREIGNKEY(`Book_id`)REFERENCES`book_information`(`id`)ONDELETECASCADEONUPDATECASCADE,CONSTRAINT`supplierid`FOREIGNKEY(`supplie_id`)REFERENCES`supplier_information`(`id`)ONDELETECASCADEONUPDATECASCADE)创建进货信息表CREATETABLEIFNOTEXISTS`incoming_information`(`supply_id`int(11)NOTNULL,`supply_data`varchar(50)NOTNULL,`supply_number`int(11)NOTNULL,KEY`supply_data`(`supply_data`),KEY`incomming_supplyid`(`supply_id`),CONSTRAINT`incomming_supplyid`FOREIGNKEY(`supply_id`)REFERENCES`supplier_supply`(`id`)ONDELETECASCADEONUPDATECASCADE)创建库存表CREATETABLEIFNOTEXISTS`stock`(`Book_id`int(11)NOTNULL,`stock_number`int(11)NOTNULL,`Critical_value`int(11)NOTNULL,KEY`stock_book`(`Book_id`),CONSTRAINT`stock_book`FOREIGNKEY(`Book_id`)REFERENCES`book_information`(`id`)ONDELETECASCADEONUPDATECASCADE)创建日销售库CREATETABLEIFNOTEXISTS`sale_information`(`id`int(11)NOTNULL,`sale_data`varchar(50)NOTNULL,`book_id`int(11)NOTNULL,`customer_id`int(11)NOTNULL,`sale_number`int(11)NOTNULL,PRIMARYKEY(`id`),KEY`sale_book`(`book_id`),KEY`sale_custom`(`customer_id`),CONSTRAINT`sale_book`FOREIGNKEY(`book_id`)REFERENCES`book_information`(`id`)ONDELETECASCADEONUPDATECASCADE,CONSTRAINT`sale_custom`FOREIGNKEY(`customer_id`)REFERENCES`customer_information`(`id`)ONDELETECASCADEONUPDATECASCADE)创建退货信息表CREATETABLEIFNOTEXISTS`return_information`(`id`int(11)NOTNULL,`sale_id`int(11)NOTNULL,`return_data`varchar(50)NOTNULL,PRIMARYKEY(`id`),KEY`return_id`(`sale_id`),CONSTRAINT`return_id`FOREIGNKEY(`sale_id`)REFERENCES`sale_information`(`id`)ONDELETECASCADEONUPDATECASCADE)4:安全性控制创建销售员工账号:xiaoming权限:录入,查看顾客信息录入,查看日销售信息查看库存创建:CREATEUSER'xiaohong'@'localhost'IDENTIFIEDBY'123456';授权:GRANTSELECT,INSERTONCustomer_information,Book_information,Stock,Sale_information,Return_informationTO'xiaoming'@'%';采购员员工账号:xiaogao权限:查看仓库信息并可修改仓库临界值录入,查看供应商信息录入,查看供应商供应信息录入,查看图书信息创建:CREATEUSER'gaohongming'@'localhost'IDENTIFIEDBY'123456';授权:GRANTSELECT,INSERTONBook_information,Supplier_information,Supplier_supply,Incoming_information,StockTO'xiaogao'@'%';5功能实现(1)根据库存量进货创建触发器,在每次销售书籍后自动查找低于临界值的书并且找找出价格最低的供应商,生成采购报表CREATETRIGGERauto_incomming_bookafterupdateONStockFOREACHROWBEGINselectBook_name,supply_prise,company_name,company_location,company_phonefromsupplier_information,supplier_supply,book_informationwhereBook_idin(selectBook_idfromstockwherestock_numberCritical_value);END开启进货事务STARTTRANSACTION;Insertintoincoming_information(supply_id,supply_data,supply_number)values(#{supply_id},#{supply_id},#{supply_id})updatastocksetstock_number=stock_number+#{stock_number}COMMIT;(2)根据销售情况进货统计销售情况,并且修改销量前三种库存中的临界值创建统计视图,输出前三的销售量的信息和供应商信息CREATEVIEWThree_before_salesasselectBook_name,Book_Type,Presssupply_prise,company_name,company_location,company_phonefrombook_information,whereidin(selectbook_idfromsale_informationgroupbybook_idorderbysum(sale_number)desclimit3);开启进货事务STARTTRANSACTION;Insertintoincoming_information(supply_id,supply_data,supply_number)values(#{supply_id},#{supply_id},#{supply_id})updatastocksetstock_number=stock_number+#{stock_number}COMMIT;(3)销售书籍生开启事务先减少库存量,再录入销售表数据STARTTRANSACTION;updatestockset