商品出入库更新库存问题(C#与SQL SERVER)

我这是毕业设计的,界面和数据库都设计好了,各个功能也能实现,现在卡在数据库里,数据库真的不懂,感觉要触发器实现。希望有大佬有空帮下忙,请给出详细代码。 留下你的WX,太多Q给不了,可以请你吃个外卖,喝杯奶茶。心好累了QAQ。

如图:

 

 

功能是:

入库表

1.添加物品信息时,更新库存,例如:

        编号   名称    数量    价格     日期                        编号  名称   数量

入库:1      可乐     10         4     2021.1.1            库存:1     可乐    10  (20)(当可乐再次入库时,就要加上之前的)

           2      雪碧     10         4     2021.1.1                       2     雪碧    10

           3      可乐     10         4     2021.1.2

2.修改物品信息时,更新库存:

入库:1      可乐     10          4     2021.1.1            库存:1     可乐    20(15)

           2      雪碧     10         4     2021.1.1                        2     雪碧    10

           3      可乐     10(5)4     2021.1.2

当把可乐的数量由10改到5时,库存就要相应减少5,由20改为15

3.删除物品信息时,更新库存:

入库:1      可乐     10          4     2021.1.1                       库存:1     可乐    15(剩余10)

           2      雪碧     10         4     2021.1.1(删除)                    2     雪碧    10(已删除)

           3      可乐      5          4     2021.1.2(删除)

当删除雪碧时,同时删除库存数,库存就没有雪碧了

当删除第三行可乐时,数量减少5,库存里的可乐就剩10

 

销售表:

1.添加出售物品,减少库存:

销售: 1     可乐     5      4      2021.1.5                库存:1     可乐     10(5)

库存原本有10支可乐,销售5,库存剩余5   

2.修改出售物品:

销售: 1     可乐     5(3)      4      2021.1.5                库存:1     可乐     5(7)

原本出售5支,现在出售3支, 库存就剩余7支

3.删除出售物品:

销售: 1     可乐     3      4      2021.1.5 (删除)               库存:1     可乐     7(10)

删除销售的可乐,库存数+3,又7变为10。

 

下面是:入库表:

销售表:

库存表:

三张表都设置ID为主键,其他什么也没有设置,主要不懂。

还有一个损坏表,原理应该和销售表一样,就不列出了。

以上就是本次难题了,恳求各位大佬帮帮忙,(留下不学无术的泪水QAQ)

如果设计思路有问题,请给小弟提点意见。(准备面试实习,我在学习Unity,和数据结构,数据库不会用到,时间紧迫,就不想花时间重新学数据库了,以后工作用到,再回来重学,先度过眼前难关,谢谢大家)

 

能不用触发器就不用,实在影响性能,如果是项目的话架构一般会让你在业务规则层实现,目的是好维护好移植,考虑你是毕设建议你采用存储过程实现,至于如何编写存储过程,在CSDN上找吧关于库存的存储过程一大把,改改就行了。你要学的知识点 1:基于你系统使用的orm如何调用存储过程,2如何编写存储过程实现你上述业务-csdn有例程的。

哈哈哈,终于弄懂了,现在完成了入库表的触发器增,修

增:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER dbo.T_INSERT
   ON  dbo.TB_Import
   AFTER INSERT
AS
BEGIN
    SET NOCOUNT ON;

    IF((SELECT Count(*) FROM TB_Inventory WHERE Name_In = (SELECT Name_Im FROM inserted))= 0)

    INSERT INTO TB_Inventory(ID_In,Name_In,Number_In) SELECT ID_Im,Name_Im,Number_Im FROM inserted
    
    ELSE
    UPDATE TB_Inventory SET Number_In = Number_In +(SELECT Number_Im FROM inserted) 
    WHERE Name_In = (SELECT Name_Im FROM inserted )

END
GO

改:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER dbo.T_UPDATE
   ON  dbo.TB_Import
   AFTER UPDATE
AS 

BEGIN
    SET NOCOUNT ON;

       IF((SELECT Count(*) FROM TB_Inventory WHERE Name_In = (SELECT Name_Im FROM inserted))= 0)

    INSERT INTO TB_Inventory(ID_In,Name_In,Number_In) SELECT ID_Im,Name_Im,Number_Im FROM inserted
    
    ELSE
    UPDATE TB_Inventory SET Number_In = Number_In  - (SELECT Number_Im FROM deleted) + (SELECT Number_Im FROM inserted)
    WHERE Name_In = (SELECT Name_Im FROM inserted )

END
GO

入库表,全部功能实现,出库表,就相反差不多。好了,问题解决了。感谢大家留言,。努力学习!!!!

应该自己实现,独立完成后找工作不成问题,没独立完成的话我看悬。而且毕业设计花钱买代码应该不能毕业。

如果不行,大家推荐一些网站或连接,找到实习后,我自己去学习

删除:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER TRIGGER dbo.T_DELETE
   ON  dbo.TB_Import
   AFTER DELETE
AS 
BEGIN
    SET NOCOUNT ON;

    IF EXISTS(SELECT * FROM TB_Inventory WHERE Name_In = (SELECT Name_Im FROM deleted))

    UPDATE TB_Inventory SET Number_In = Number_In - (SELECT Number_Im FROM deleted)    
    WHERE Name_In = (SELECT Name_Im FROM deleted )

END
GO