机房收费系统的逻辑性很强。师傅也说了,第一次做机房,首要的是理清思路,明白它的逻辑。
做到结账这里,跟大家分享一下我对结账的一点理解:
钱分三个状态:用户的钱,柜台的钱(账面),老板的钱(实际)
用户充值,退卡,钱在用户自己和柜台之间流动;用户实际消费之后,用户充值后存在柜台的钱中消费的部分实际上就划归为老板所属了。
操作员结账:
售卡不收钱,充值收钱,退卡退钱。
充值的钱-退卡退的钱=应收的钱
要注意:用户注册卡的时候包含了一次充值过程,需要把这次充值过程在充值记录里体现出来。
老板查账:
上期充值卡余额+本期充值金额-本期消费金额-本期退款金额=本期充值卡余额
对应到数据库里记录的操作就是:
用户每次下机计算一下本次消费了多少钱,用账户里的钱减去消费的钱,得到的结果写入账户,更新账户余额。
操作员结账:
1)按操作员检索充值记录里未结账的记录,统计对应记录的充值金额,求和就是自上次结账之后的总的充值金额。把检索出来的未结账记录的状态改为结账。
2)按操作员检索退卡记录里未结账的记录,统计对应记录的退卡金额,求和就是自上次结账之后的总的退卡金额。把检索出来的未结账记录的状态改为结账。
3)用求得的总的充值金额-总的退卡金额=应收金额
(算得的应收金额在实际上就是为了核对实际柜台上收的钱数对不对。)
4)临时收费金额是临时用户消费的金额。在学生上机记录里查询上次结账之后的临时用户的记录,把它们的消费金额求和即得。
临时用户与固定用户的区别:收钱单价不一样。
老板查账:
1)按日期检索学生上机记录里对应的记录,对检索出的记录中的消费金额求和,得到本期消费金额。
2)检索学生卡记录里所有的记录,对所有记录中的余额求和,得到本期充值卡余额。
3)我认为日结账单就是按照日期来结账,如果一天当中中午结了一次帐有了当日的结账记录,当天晚上又结一次帐,则应该更新中午的那次结账记录,而不是重新再建一条记录。如果某一天没有结账,第二天结账,则应该按照日期记录把第一天的结了,同时产生一条记录,再进行第二天的结账。而不是什么时候进行结账操作,就把之前的未结账记录全部结账而不分日期。
4)日结账单是简单地全部地显示结账记录。周结账单是对日结账单的按日期查询。
本人对于算钱不太懂,难免有考虑的不合理的地方,还请批评指正。