006.内测.情景之迷你财务记账

[img]http://www.moilioncircle.com/images/post/actions/006/006.jpg[/img]

[b]# 006.内测.情景之迷你财务记账[/b]

迷你版的财务记账,包括了余额,交易和明细三块。
能够满足基本的记账要求:对账,红订正,做报表。

@史荣久 / 2015-03-01 / CC-BY-SA-3.0

[b]## 任务说明[/b]

用户1(U1),余额0元,用户1有三件物品出售。
物品1,10元;物品2,20元;物品3,30元;
用户2(U2),余额500元,想买用户1的物品。

余额表,可更新,只关心用户的余额情况。
交易表,只插入,只关心每笔交易的金额和流向。
明细表,只插入,只关心每笔交易的金额对物品分配。

在过去在纸质帐本上,用黑笔记账,称为黑数据。
订正时,用红笔划掉黑数据,填上新数据,称为红数据。
红订正,指上述过程,而此处指对一笔交易的完全取消。
即,插入和黑数据的'金额','记录ID'相反的数据。

[b]## 数据关系[/b]

[img]http://www.moilioncircle.com/images/post/actions/006/erd.png[/img]


CREATE TABLE IF NOT EXISTS `CASH_ACCOUNT` (
`UID` INT NOT NULL COMMENT '用户ID',
PRIMARY KEY (`UID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `ITEM` (
`IID` INT NOT NULL COMMENT '物品ID',
`PRICE` DECIMAL(10,2) NOT NULL COMMENT '价格',
PRIMARY KEY (`IID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `CASH_BALANCE` (
`UID` INT NOT NULL COMMENT '用户ID',
`BALANCE` DECIMAL(10,2) NOT NULL COMMENT '余额',
`CREATE_ON` MEDIUMTEXT NOT NULL COMMENT '创建事件',
`UPDATE_ON` MEDIUMTEXT NOT NULL COMMENT '更新事件',
PRIMARY KEY (`UID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `CASH_TRANSACTION` (
`TID` BIGINT NOT NULL COMMENT '交易ID',
`RECORD_ID` INT NOT NULL COMMENT '记录ID',
`AMOUNT` DECIMAL(10,2) NOT NULL COMMENT '交易金额',
`BUYER_ID` INT NOT NULL COMMENT '买家UID',
`SELLER_ID` INT NOT NULL COMMENT '卖家UID',
`CREATE_ON` MEDIUMTEXT NOT NULL COMMENT '创建事件',
`CREATE_AT` DATETIME NOT NULL COMMENT '插入时间',
`EXTRA_INFO` VARCHAR(255) NULL COMMENT '附加信息',
PRIMARY KEY (`TID`, `RECORD_ID`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_bin;

CREATE TABLE IF NOT EXISTS `CASH_TXDETAIL` (
`TID` BIGINT NOT NULL COMMENT '交易ID',
`RECORD_ID` INT NOT NULL COMMENT '记录ID',
`DETAIL_ID` INT NOT NULL COMMENT '明细ID',
`AMOUNT` DECIMAL(10,2) NOT NULL COMMENT '金额',
`ITEM_ID` INT NOT NULL COMMENT '物品ID',
PRIMARY KEY (`TID`, `RECORD_ID`, `DETAIL_ID`))
ENGINE = InnoDB;

-- 初始数据
INSERT INTO `ITEM`(`IID`,`PRICE`) VALUES
(1,10),(2,20),(3,30);

INSERT INTO `CASH_ACCOUNT`(`UID`) VALUES
(1),(2);

INSERT INTO `CASH_BALANCE`
(`UID`,`BALANCE`,`CREATE_ON`,`UPDATE_ON`)
VALUES
(1,0,1,'2015-01-01 0:0:0'),
(2,500,1,'2015-01-01 0:0:0');


## 情景举例

【情景一】用户2买了用户1的物品各一件。数据变化如下:
假设购买事件ID为2,当前时间为'2015-01-10 09:21:45'


-- 余额变化
UPDATE `CASH_BALANCE` SET
`BALANCE` = `BALANCE` + 60, `UPDATE_ON` = 2
WHERE `UID` = 1;

UPDATE `CASH_BALANCE` SET
`BALANCE` = `BALANCE` - 60, `UPDATE_ON` = 2
WHERE `UID` = 2;

-- 交易记录
INSERT INTO `CASH_TRANSACTION` (`TID`,
`RECORD_ID`,`AMOUNT`,`BUYER_ID`,`SELLER_ID`,
`CREATE_ON`,`CREATE_AT`,`EXTRA_INFO`)
VALUES (1,1,60,2,1,2,
'2015-01-10 09:21:45','样本数据');

-- 明细记录
INSERT INTO `CASH_TXDETAIL` (`TID`,
`RECORD_ID`,`DETAIL_ID`,`AMOUNT`,`ITEM_ID`)
VALUES
(1,1,1,10,1),(1,1,2,20,2),(1,1,3,30,3);


【情景二】红订正,取消情景一的交易。数据变化如下:
假设订正事件ID为3,当前时间为'2015-01-10 10:21:45'


-- 余额变化
UPDATE `CASH_BALANCE` SET
`BALANCE` = `BALANCE` - 60, `UPDATE_ON` = 3
WHERE `UID` = 1;

UPDATE `CASH_BALANCE` SET
`BALANCE` = `BALANCE` + 60, `UPDATE_ON` = 3
WHERE `UID` = 2;

-- 交易记录
INSERT INTO `CASH_TRANSACTION` (`TID`,
`RECORD_ID`,`AMOUNT`,`BUYER_ID`,`SELLER_ID`,
`CREATE_ON`,`CREATE_AT`,`EXTRA_INFO`)
SELECT `TID`,
-`RECORD_ID`,-`AMOUNT`,`BUYER_ID`,`SELLER_ID`,
3,'2015-01-10 10:21:45',`EXTRA_INFO`
FROM `CASH_TRANSACTION` WHERE `TID` = 1


存在红订正的交易,SUM(AMOUNT)=0。

[b]## 问题来了[/b]

(1)写一个交易服务,支持以上情景。

(2)做一个报告(文字即可),显示2015年,
卖的最多的10件物品(含取消的)
退货最多的10件物品(交易取消的)
消费最多的10个用户(不含取消)

(3)用户1投诉:2015元旦,账户金额异常。
请问如何为其查账?
对于查账,本系统需要哪些改进。

----
题图:晋商票号账本。晋商票号,纵横明清500年的"华尔街",跨国的金融大鳄,创下诸多辉煌。
原文:[url]http://www.moilioncircle.com/actions/006.quiz.case-mini-accounting.html[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值