# 006.内测.情景之迷你财务记账
迷你版的财务记账,包括了余额,交易和明细三块。
能够满足基本的记账要求:对账,红订正,做报表。
@史荣久 / 2015-03-01 / CC-BY-SA-3.0
## 任务说明
用户1(U1),余额0元,用户1有三件物品出售。
物品1,10元;物品2,20元;物品3,30元;
用户2(U2),余额500元,想买用户1的物品。
余额表,可更新,只关心用户的余额情况。
交易表,只插入,只关心每笔交易的金额和流向。
明细表,只插入,只关心每笔交易的金额对物品分配。
在过去在纸质帐本上,用黑笔记账,称为黑数据。
订正时,用红笔划掉黑数据,填上新数据,称为红数据。
红订正,指上述过程,而此处指对一笔交易的完全取消。
即,插入和黑数据的'金额','记录ID'相反的数据。
## 数据关系
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。
## 问题来了
(1)写一个交易服务,支持以上情景。
(2)做一个报告(文字即可),显示2015年,
卖的最多的10件物品(含取消的)
退货最多的10件物品(交易取消的)
消费最多的10个用户(不含取消)
(3)用户1投诉:2015元旦,账户金额异常。
请问如何为其查账?
对于查账,本系统需要哪些改进。
----
题图:晋商票号账本。晋商票号,纵横明清500年的"华尔街",跨国的金融大鳄,创下诸多辉煌。
原文:
http://www.moilioncircle.com/actions/006.quiz.case-mini-accounting.html
分享到:
相关推荐
迷你下载者,通常被称为“Mini Downloader”,是一种小型软件,设计用于方便用户快速下载网络上的文件。这个压缩包文件“迷你下载者.rar”可能包含了该软件的安装程序和其他相关资源。从标签中可以看出,“迷你下载...
财务王迷你版是一款简单易用,专业稳定的财务记账软件,包括总账处理,财务报表,初始化,基础设置4大功能模块,具备记账、查账、结账、自动生成账簿报表,自动计提折旧,自动结转损益等多种功能,适合小微企业记账...
"华新财务迷你型财务软件"是一款专为中小型企业或公司设计的财务管理工具,它集成了基础的财务管理和会计操作,旨在简化企业的财务流程,提高工作效率。这款软件的核心功能包括流水记账和报表自动生成,这两大特性...
金蝶KIS迷你版是一款专为小型企业设计的财务管理软件,它提供了全面的财务管理和会计核算功能。本教程主要介绍了如何入门使用这款软件,包括软件的准备工作、基本操作、安装步骤、启动方法以及如何建立和使用账套。 ...
《测试之美-迷你版》是一本深入探讨软件测试领域的书籍,旨在揭示测试的艺术与科学,引领读者进入测试的美学世界。这本书可能包含了测试的基础概念、重要性、方法论以及最佳实践,帮助读者理解和掌握如何有效地进行...
风之讯企业财务管理财务王迷你版是一款专为中小企业设计的财务软件,旨在简化企业的财务管理工作,提高财务效率。这款软件集成了多种核心财务管理功能,包括总账处理、会计科目管理、核算项目、币别设置以及凭证录入...
迷你记账本,非常好看实用,利用VBA代码编写,含有查询,三级菜单等等
迷你CPU测温和测占用率工具是一款小巧而实用的软件,专为用户提供计算机中央处理器(CPU)的温度监控和性能占用情况的实时查看功能。这款工具因其极小的体积和便捷的操作,深受用户喜爱,尤其适合那些希望快速了解...
ASP迷你本地测试服务器是一款专为开发者设计的工具,主要用于在个人计算机上进行ASP(Active Server Pages)网站、网页模板和模块源码的测试与调试。ASP是微软开发的一种服务器端脚本环境,允许Web开发者创建动态...
金蝶KIS迷你版是一款专为小型企业设计的财务管理软件,它提供了全面的会计核算、报表分析等功能,帮助企业实现财务规范化管理。以下是对该软件基本操作手册中的关键知识点的详细说明: 一、新建账套 新建账套是使用...
这款迷你版工具能够提供准确的温度读数,帮助用户确保他们的电脑在安全范围内运行。一般来说,CPU的正常工作温度范围在30℃到80℃之间,但具体取决于不同型号的CPU。通过持续监测,用户可以及时发现异常情况,采取...
源代码-超级外链迷你版 1.0.zip 源代码-超级外链迷你版 1.0.zip 源代码-超级外链迷你版 1.0.zip 源代码-超级外链迷你版 1.0.zip 源代码-超级外链迷你版 1.0.zip 源代码-超级外链迷你版 1.0.zip 源代码-超级外链迷你...
【标题】"使用于静态页面测试的迷你服务器"所涉及的知识点主要集中在小型服务器软件的使用上,这种服务器软件设计轻巧,适用于快速部署和测试静态网页内容。静态页面指的是HTML、CSS和JavaScript等不涉及服务器端...
风之讯企业财务管理财务王迷你版软件 财务王迷你版软件是风之讯企业财务管理的一款财务管理软件,旨在帮助企业更好地管理财务活动,提高财务处理效率和准确性。本软件提供了详细的操作指引,以便用户快速掌握软件的...
迷你迅雷1.5.3.288是一款精简版的迅雷下载工具,它在保留了核心下载功能的同时,降低了对系统资源的占用,为用户提供了便捷、高效的文件下载体验。这款软件主要适用于那些对下载速度有较高要求,但又不希望下载工具...
【Huan】巴掌大的性能怪獸..._挾帶妖氣的迷你電腦_NUC_BOX_1165G7
迷你SFTP服务器是一款轻量级的SFTP(SSH文件传输协议)服务器软件,尤其适合在无需复杂配置的情况下快速建立本地SFTP服务。标题中的“mini-sftp-server.x64”表明这是一款专为64位操作系统设计的版本,提供便捷的...
金蝶KIS迷你版是一款专为中小企业设计的财务软件,提供了全面的财务管理功能,包括账套管理、初始化设置、初始数据录入等。本手册将详细阐述这些基本操作,以帮助用户快速掌握系统的使用。 一、新建账套 新建账套是...
实用记账本.很好用的日常记账软件.最新版本
迷你SQL2000是一款专为用户设计的轻量级、免安装的数据库管理系统,尤其适合于对系统资源要求较低且需要快速部署的环境。它继承了Microsoft SQL Server 2000的核心功能,但体积小巧,易于使用,是个人工作和小型项目...