这几天一直在考虑机房收费系统学生下机操作。学生下机,一则须要加入学生下机记录信息;还须要计算学生在整

个上机过程中所花费的金额,而且更新学生剩余金额。那么如何做在性能上或者扩展上更好一些呢?

操作

1.加入学生下机信息

2.计算学生上机时间

3.依据上机时间来计算学生所花费的金额

4.更新学生的剩余金额

设计模式

在通过学生上机时间来计算学生所花费的金额这步操作上,须要进行一些条件分支语句的推断。由于上机时间被分为

了三部分:准备时间、至少上机时间、上机时间。所以在步骤3中有大量的条件分支语句,从某种程度上看,这是一

种不好的现象。

为了解决问题,能够增加设计模式来解除大量的条件分支语句的推断。

策略模式

http://blog.csdn.net/luckyzhoustar/article/details/27661807

策略模式的使用,封装了不同类型用户之间计算消费金额的算法,对于以后的扩展极其有利。比方说假设以后,学生

能够採取一小时一积分的形式,来兑换一些礼品或者一些其它的增值服务的话,那么策略模式就特别的easy扩展,仅仅

须要添加一个策略就能够了。可是也有一些问题,假设全部同一时候强制下机的话,人数过多的话,须要不断的计算消费

金额和更新后台数据库,easy导致系统崩溃的状态。

状态模式

http://blog.csdn.net/luckyzhoustar/article/details/27679497

状态模式的应用,仅仅只是简单的接触了if……else分支推断的操作,对于系统以后假设在时间上有所扩展的话,比較有

优势,比方说学生连续上机超过4小时的话,能够免费添加一小时上网时间,这时候仅仅要简单的添加一个状态就可以,

也是比較easy扩展的。

职责链模式

http://blog.csdn.net/luckyzhoustar/article/details/27689679

职责链模式的应用跟状态模式同样也是解除了If……else分支推断的操作,没有太大实质性的意义。

小结

关于以上三种模式对于学生下机计算消费金额的操作中,后两种模式可能加起来有些牵强,仅仅是单纯的为了解除

if……else分支推断的耦合操作,没有太大实质性的意义。而策略模式才是王道,才真真正正的符合这个场景。由于策

略模式从本身上来说,就是定义算法家族,分别封装起来,让它们之间能够互相替换。

可是我们从三种模式中发现,假设一旦强制全部人下机的话,而且在上机人数过多的情况下,前台须要不断地与后

台server打交道,可能会出现崩溃的状况,为了解决问题,小编又有了新的想法。

建议:对于设计模式,在这个阶段能够大胆的尝试创新,这也是对自己前段时间学习的一种磨练,不管用的好与坏这都无所谓。仅仅有你不断的利用,你才会掌握设计模式的真谛。

触发器

是SQL server 提供给程序猿和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的运行不是由程序调用,也不是手工启动,而是由事件来触发。

因此我们能够通过触发器的操作,在后台数据库中自己主动的实现更新学生下机金额的计算。我们把算法所有封装到触发器中,全然的解除前段与数据库的联系,当前段更新学生下机记录的时候,直接触发触发器,自己主动的完毕学生剩余金额的更新操作。这样在某种程度上就降低了当众多人强制下机的时候,系统出现崩溃的状况。

代码

<span style="font-size:18px;"><span style="font-size:24px;">--假设这个存储过程存在的话,就删除
if(OBJECT_ID('tgr_UpdateOffline','tr') is not null)
drop trigger tgr_UpdateOffline
go
create trigger tgr_UpdateOffline
on onlineInfo
for insert--插入触发
as
--定义变量
declare @regulareUser float,@instantUser float,
@atleastTime float,@prepareTime float,@stuid char(11),
@consumeTime float,@money float,@atleastMoney float
select @regulareUser =RegularUser,@instantUser =instantUser,@atleastTime=atleastTime,@prepareTime =preparetime,@atleastMoney=AtLeastMoney
from BasicData
--计算出学生上机消费时间
select @stuid=stuid,@consumeTime= datediff(minute,convert(time(0),offTime),convert(time(0),onlineTime)) from inserted --開始推断学生上机花费的时间
--begin...and操作封装计算学生剩余金额操作
begin
if @consumeTime -@prepareTime <0
set @money=0
else
if @consumeTime -@prepareTime -@atleastTime <0
set @money=@atleastMoney
else
set @money=@instantUser/60 * @consumeTime
end--最后更新学生剩余金额操作
update StudentInfo set money =money-@money where stuid=@stuid </span></span>

当然了为了能够优化触发器,在更新学生剩余金额表上能够建立有关于学生卡号的索引,能够提高执行速度。

以上就是小编对于学生下机计算金额操作的小结,假设各位有更好的建议,能够多多交流。

机房收费系统学生下机结账小结相关推荐

  1. 机房收费系统——上下机

    自学生管理系统以后,进入了机房收费系统,开始自己真的很抵触这个东西,因为没有源码,只能靠自己了.对代码没有亲和力的我,只能硬着头皮硬闯.下面看看就讲讲我的上下机的辛酸路吧! [分析] 界面:很简单,只 ...

  2. 【机房收费系统】之结账

       机房收费系统中遇到的第二个难题就是结账的部分了.还是那句话,首先最重要的一点就是要有思路.不知道结账是谁结,不知道给谁结,那肯定也就无从谈起结账.下面是我对机房结账的一点理解.         ...

  3. 机房收费系统之日结账,周结账--逻辑篇(日账单的各项金额代表什么?如何计算?)

    日结账表和周结账表可谓是三大难题的最后一关了,既然是难题那就要好好的思考一番后再动手了,以下是我的日结账.周结账程序思路及代码集. 一.问题集 我们在做日结账单,周结账单之前需要考虑几个问题: 1.我 ...

  4. 机房收费系统-动态计费与强制下机

    前言:之前以为自己机房收费系统马上就要收官了,结果最近自己发现还少点功能:那就是动态计费功能与强制下机功能.本次博客分为两个模块:第一模块为主界面的动态计费及强制下机,第二模块为学生上机状态查询的选中 ...

  5. 机房收费系统———报表

    这篇文章主要介绍一下机房收费系统中,报表的使用和制作. 提到报表,相信对于我们这些程序菜鸟来说,挺陌生的.原来基本上没有接触过,对它的了解和认识还停留在一个非常肤浅的阶段.甚至,脑子里根本就没有关于它 ...

  6. 机房收费系统【VB版】——选择下机

    前言: 今天实现机房收费系统--一般用户--学生上机状态查看--选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统--上机状态查询之下机 过程: 要显示的表格式写查询,就会出来 ...

  7. 机房收费系统中——存储过程中加入事务,实现学生注册

    需求介绍: 现在正在开发的机房收费系统,总得来说,是对学生上机进行收费管理(没有要在学校开网吧的意思啊!为了学习面开发的)大体的功能是这样的:学生上机,然后刷卡,下机的时候,再刷卡,然后通过对学生的上 ...

  8. 机房收费系统的退卡和结账

    在做机房收费系统的时候为了保证核心功能的实现,我将计费时间调成了秒.这样就可以迅速,快捷地看到了收费的结果. 在这种环境下,我的机房收费系统不负众望,终于一次又一次将金额搞错,经过n次实验,将测试的结 ...

  9. 【机房收费系统】——上机下机

    前言   上下级是机房收费系统最基本的操作,没有上下机,以后的操作都是根据上下机操作的以及为上下级服务的,所以我们需要在弄机房的时候,首先要对这个操作思路整理清楚! 上机   上机就是你去网吧去了,在 ...

最新文章

  1. Py之Beautiful Soup 4.2.0:Beautiful Soup 4.2.0的简介、安装、使用方法详细攻略
  2. HTTP 错误 500.21 - Internal Server Error(转)
  3. Python文件的多种读写方式及游标
  4. java商城_商城系统常见开发语言及特点分享
  5. 求android 中串口的发送接收数据代码
  6. react如何卸载组件_reactjs – 如何删除/卸载嵌套的反应组件
  7. Springboot@PathVariable注解使用--请求路径占位符
  8. 什么是哲学为基础的设计模式?
  9. 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(3)
  10. android 蓝牙连接obd,Android蓝牙连接汽车OBD设备
  11. linux基本操作命令的使用
  12. struts2之自定义拦截器及拦截器生命周期分析
  13. win10QQ语音无法使用麦克风
  14. AspNetPager组件
  15. “天使药丸”阿司匹林的前世今生
  16. windows搭建wordpress方法-windows搭建wordpress教程
  17. 【Practical】线性空间
  18. H3C室外无线AP(WA4320X)胖瘦切换设置方法
  19. deepin 服务器_深度官方并没有提供Deepin服务器版下载,也没有开发计划
  20. 1-系统C盘迁移到新买的固态硬盘SSD中有影响但不主要,但有必要将系统盘C盘迁移到新安装的 固态硬盘SSD中吗?

热门文章

  1. java中的23种设计模式_Java开发中的23种设计模式详解
  2. Aptana:JavaScript开发利器
  3. 与用户登录shell相关的文件/etc/profile,~/bashrc等浅析
  4. spring3依赖包下载
  5. eclipse如何部署到tomcat上的
  6. spring 控制hibernate的session何时关闭.
  7. Index of open source
  8. python作业6月14日
  9. javascript立体学习指南
  10. 找新朋友(欧拉函数)