机房收费系统学生下机结账小结
来源:互联网 发布:基站定位数据库 编辑:程序博客网 时间:2024/05/02 00:48
这几天一直在考虑机房收费系统学生下机操作。学生下机,一则需要添加学生下机记录信息;还需要计算学生在整
个上机过程中所花费的金额,并且更新学生余额。那么如何做在性能上或者扩展上更好一些呢?
操作
1.添加学生下机信息
2.计算学生上机时间
3.根据上机时间来计算学生所花费的金额
4.更新学生的余额
设计模式
在通过学生上机时间来计算学生所花费的金额这步操作上,需要进行一些条件分支语句的判断。因为上机时间被分为
了三部分:准备时间、至少上机时间、上机时间。所以在步骤3中有大量的条件分支语句,从某种程度上看,这是一
种不好的现象。
为了解决这个问题,可以加入设计模式来解除大量的条件分支语句的判断。
策略模式
http://blog.csdn.net/luckyzhoustar/article/details/27661807
策略模式的使用,封装了不同类型用户之间计算消费金额的算法,对于以后的扩展极其有利。比如说如果以后,学生
可以采取一小时一积分的形式,来兑换一些礼品或者一些其他的增值服务的话,那么策略模式就特别的容易扩展,只
需要增加一个策略就可以了。但是也有一些问题,如果所有同时强制下机的话,人数过多的话,需要不断的计算消费
金额和更新后台数据库,容易导致系统崩溃的状态。
状态模式
http://blog.csdn.net/luckyzhoustar/article/details/27679497
状态模式的应用,只不过简单的接触了if……else分支判断的操作,对于系统以后如果在时间上有所扩展的话,比较有
优势,比如说学生连续上机超过4小时的话,可以免费增加一小时上网时间,这时候只要简单的增加一个状态即可,
也是比较容易扩展的。
职责链模式
http://blog.csdn.net/luckyzhoustar/article/details/27689679
职责链模式的应用跟状态模式相同也是解除了If……else分支判断的操作,没有太大实质性的意义。
小结
关于以上三种模式对于学生下机计算消费金额的操作中,后两种模式可能加起来有些牵强,只是单纯的为了解除
if……else分支判断的耦合操作,没有太大实质性的意义。而策略模式才是王道,才真真正正的符合这个场景。因为策
略模式从本身上来说,就是定义算法家族,分别封装起来,让它们之间可以互相替换。
但是我们从三种模式中发现,如果一旦强制所有人下机的话,并且在上机人数过多的情况下,前台需要不断地与后
台服务器打交道,可能会出现崩溃的状况,为了解决这个问题,小编又有了新的想法。
建议:对于设计模式,在这个阶段可以大胆的尝试创新,这也是对自己前段时间学习的一种磨练,无论用的好与坏这都无所谓。只有你不断的利用,你才会掌握设计模式的真谛。
触发器
是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。
因此我们可以通过触发器的操作,在后台数据库中自动的实现更新学生下机金额的计算。我们把算法全部封装到触发器中,完全的解除前段与数据库的联系,当前段更新学生下机记录的时候,直接触发触发器,自动的完成学生余额的更新操作。这样在某种程度上就减少了当众多人强制下机的时候,系统出现崩溃的状况。
代码
<span style="font-size:18px;"><span style="font-size:24px;">--如果这个存储过程存在的话,就删除if(OBJECT_ID('tgr_UpdateOffline','tr') is not null)drop trigger tgr_UpdateOfflinegocreate trigger tgr_UpdateOfflineon onlineInfofor insert--插入触发as--定义变量declare @regulareUser float,@instantUser float,@atleastTime float,@prepareTime float,@stuid char(11),@consumeTime float,@money float,@atleastMoney floatselect @regulareUser =RegularUser,@instantUser =instantUser,@atleastTime=atleastTime,@prepareTime =preparetime,@atleastMoney=AtLeastMoneyfrom BasicData --计算出学生上机消费时间select @stuid=stuid,@consumeTime= datediff(minute,convert(time(0),offTime),convert(time(0),onlineTime)) from inserted --开始判断学生上机花费的时间--begin...and操作封装计算学生余额操作beginif @consumeTime -@prepareTime <0 set @money=0elseif @consumeTime -@prepareTime -@atleastTime <0set @money=@atleastMoney elseset @money=@instantUser/60 * @consumeTime end--最后更新学生余额操作update StudentInfo set money =money-@money where stuid=@stuid </span></span>
当然了为了能够优化触发器,在更新学生余额表上可以建立有关于学生卡号的索引,可以提高运行速度。
以上就是小编对于学生下机计算金额操作的小结,如果各位有更好的建议,可以多多交流。
- 机房收费系统学生下机结账小结
- 机房收费系统之上下机及结账
- 职责链模式——机房收费系统下机结账
- 机房收费系统上下机小结
- 机房收费系统-结账
- 结账--机房收费系统
- 【机房收费系统】结账
- 机房收费系统(三)选中学生强制下机
- 有关机房收费系统学生下机的思考
- 【数据库学习】机房收费系统(一)学生上下机
- 机房收费系统小结之--实现上下机人数同步
- 机房收费系统之上下机
- 机房收费系统之上下机
- 机房收费系统之上下机
- 机房收费系统之上下机
- 机房收费系统之上下机
- 【机房收费系统】上下机
- 机房收费系统之上下机
- x86下的C函数调用惯例
- NYOJ95众数问题
- javax.servlet.jsp.JspException cannot be resolved to a type
- JDBC中prepareStatement 和Statement 的区别
- Android 添加library的时候出错添加不上
- 机房收费系统学生下机结账小结
- Chromium OS——下载源码1之检验ubunt系统
- VoCore:软硬结合一路走来
- ASP.NET、.NET和C#的关系是怎样的?
- ubuntu wifi 设备未托管 网络设备不兼容 网络慢
- 【几何】-POJ-3805-Separate Points
- 记录使用软件过程中发现的用户体验缺陷
- Sicily oj 1822. Fight Club(区间dp)
- [Codeforces] Round #249 (Div. 2)解题报告(ABC)