pos系统开发步骤3-销售业务的实现

销售业务设计过程

1️⃣与销售业务有关的表?

tb_syjlb(收银记录表)

tb_symxb(收银明细表)

tb_kcxxb(库存信息表)

tb_hyxxb(会员信息表)

2️⃣与这些表的关系?

tb_syjlb(收银记录表) insert

tb_symxb(收银明细表) insert

tb_kcxxb(库存信息表) update

tb_hyxxb(会员信息表) update

3️⃣分别需要对哪些列赋值或更新哪些列的值?

tb_syjlb(收银记录表) insert syyid(收银员id) gkid(顾客id) ysje(应收金额) ssje(实收金额) zffs(支付方式)

tb_symxb(收银明细表) insert syid(收银id) hpid(货品id) xssl(销售数量) dj(单价) lsj(零售价)

tb_kcxxb(库存信息表) update 依据hpid xssl(销售数量)更新kcsl(库存数量)

tb_hyxxb(会员信息表) update 依据hyid(会员id) ssje(销售金额)更新knye(卡内余额) kyjf(可用积分)

4️⃣这些值从何而来?

tb_syjlb(收银记录表)insert syyid gkid ysje ssje zffs 需要从用户界面传过来 syyid gkid ysje ssje zffs

tb_syjlmxb(收银记录明细表)insert syid hpid xssl dj lsj 需要从用户界面传过来 hpid xssl

tb_hpkcb (货品库存表) update 依据hpid xssl 更新 kcsl 需要从用户界面传过来hpid xssl

tb_hyxxb(会员信息表) update 依据hyid ssje 更新knye kyjf 需要从用户界面传过来 hpid ssje

5️⃣表格数据向数据库传递的方法——数据转换的方法(没有表参数,就是没办法直接把表从界面传给数据库)转换方法?

把表格中的数据连接成字符串,传到数据库中后再把字符串还原为表格

例如:把销售明细中的hpid,xssl连接为以逗号分隔的字符串

DELIMITER $$

CREATE
    PROCEDURE `possystem`.`xsjlcp`(xsmx VARCHAR(1000))
    BEGIN
	DROP TABLE IF EXISTS lsb;
		CREATE TEMPORARY TABLE lsb(hpid INT,xssl NUMERIC(18,3));
	WHILE (xsmx>'') DO
		SET @k=POSITION(',' IN xsmx);
		SET @hpid=LEFT(xsmx,@k-1);
		SET xsmx=SUBSTR(xsmx,@k+1);
		SET @k=POSITION(',' IN xsmx);
		SET @xssl=LEFT(xsmx,@k-1);
		INSERT INTO lsb VALUES(@hpid,@xssl);
		SET xsmx=SUBSTR(xsmx,@k+1);
	END WHILE;
	SELECT * FROM lsb;
	SELECT hptm,hpmc,jldw,dj,cxj,xssl*cxj AS 金额 FROM tb_hpxxb,lsb WHERE tb_hpxxb.hpid=lsb.hpid;
    END$$

DELIMITER ;

为什么在mysql中执行存储过程不出结果?

6️⃣销售业务实现?

DELIMITER $$

CREATE
    PROCEDURE `possystem`.`xsjlcp_new`(syyid INT,hyid INT,ysje DECIMAL(18,2),ssje DECIMAL(18,2),zffs TINYINT,xsmx VARCHAR(1000))

    BEGIN
	/*1. tb_syjlb(收银记录表) insert syyid(收银员id) gkid(顾客id)
	 ysje(应收金额) ssje(实收金额) zffs(支付方式)*/
	 INSERT INTO tb_syjlb(syyid,gkid,ysje,ssje,zffs) VALUES(syyid,hyid,ysje,ssje,zffs);
	 SET @syid=@@identity;
	 
	 DROP TABLE IF EXISTS lsb;
		CREATE TEMPORARY TABLE lsb(hpid INT,xssl NUMERIC(18,3));
	 WHILE (xsmx>'') DO
		SET @k=POSITION(',' IN xsmx);
		SET @hpid=LEFT(xsmx,@k-1);
		SET xsmx=SUBSTR(xsmx,@k+1);
		SET @k=POSITION(',' IN xsmx);
		SET @xssl=LEFT(xsmx,@k-1);
		INSERT INTO lsb VALUES(@hpid,@xssl);
		SET xsmx=SUBSTR(xsmx,@k+1);
	 END WHILE;
	 /*2. tb_syjlmxb(收银记录明细表)insert syid hpid xssl dj lsj 
	 需要从用户界面传过来 hpid xssl*/
	  INSERT INTO tb_symxb(syid,hpid,xssl,dj,lsj) SELECT @syid,lsb.hpid,xssl,dj,cxj FROM lsb,tb_hpxxb WHERE lsb.hpid=tb_hpxxb.`hpid`;
	  /*3. tb_hpkcb (货品库存表) update 依据hpid xssl 更新 kcsl 
	  需要从用户界面传过来hpid xssl*/
	  DROP TABLE IF EXISTS lsb1;
	  CREATE TEMPORARY TABLE lsb1(hpid INT,xssl NUMERIC(18,3));
	  INSERT INTO lsb1 SELECT hpid,SUM(xssl) FROM lsb GROUP BY hpid;
	  UPDATE tb_hpkcb b1,lsb1 b2 SET b1.kcsl=b1.kcsl-b2.xssl WHERE b1.hpid=b2.hpid;
	  /*4. tb_hyxxb(会员信息表) update 依据hyid ssje 更新knye kyjf 
	  需要从用户界面传过来 hpid ssje */
	  IF hyid>10000 THEN
		UPDATE tb_hyxxb SET knye=knye-ssje,kyjf=kyjf+FLOOR(ssje) WHERE tb_hyxxb.`hyid`=hyid;
	  END IF;
    END$$

DELIMITER ;

一、事务的概念

在销售存储过程中增加事务控制

start transaction;

COMMIT; 或者

ROLLBACK;

二、作业与思考题:

1、在上面的练习中用到了哪些内置函数?

MySQL POSITION() 函数

实例

在字符串“begtut.com”中搜索“u”,并返回位置:

SELECT POSITION("u" IN "begtut.com") AS MatchPosition; 

运行实例»


定义和用法

POSITION()函数返回字符串中第一次出现的子字符串的位置。

如果在原始字符串中找不到子字符串,则此函数返回0。

此函数执行不区分大小写的搜索。

注:LOCATE()函数等于position()函数。

语法

POSITION(substring IN string)

参数值
参数描述
substring必须项。要在字符串中搜索的子字符串
string必须项。要搜索的原始字符串
MySQL LEFT() 函数

实例

从字符串中提取3个字符(从左侧开始):

SELECT LEFT("SQL Tutorial", 3) AS ExtractString; 

运行实例»


定义和用法

LEFT()函数从字符串中提取多个字符(从左开始)。

**提示:**另请查看RIGHT()函数。

语法

LEFT(string, number_of_chars)

参数值
参数描述
string必须项。要从中提取的字符串
number_of_chars必须项。要提取的字符数。如果此参数大于字符串中的字符数,则此函数将返回字符串
MySQL SUBSTR() 函数

实例

从字符串中提取子字符串(从位置5开始,提取3个字符):

SELECT SUBSTR("SQL Tutorial", 5, 3) AS ExtractString; 

运行实例»


定义和用法

SUBSTR()函数从字符串中提取子字符串(从任何位置开始)。

注意: SUBSTR()和MID()函数等于SUBSTRING()函数。

语法

SUBSTR(string, start, length)

要么:

SUBSTR(string FROM start FOR length)

参数值
参数描述
string必须项。要从中提取的字符串
start必须项。起始位置。可以是正数或负数。如果是正数,则此函数从字符串的开头提取。如果是负数,则此函数从字符串的末尾提取
length可选项。要提取的字符数。如果省略,将返回整个字符串(从起始位置)

2、临时表如何创建?

先把临时表转化成字符串,再把字符串转换成表格,添加到创建的表中

3、如何实现带子查询的插入操作?

insert into *** select *** from tb where ***;

4、@@identity里面存储的是什么数据?

@@identity得到上一次插入记录时自动产生的ID

5、设计存储过程的基本步骤是什么?

创建存储过程—>写所需要的参数—>根据功能编写sql语句—>测试存储过程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值