oracle存储过程和触发器结合项目详细讲解

项目名:“学生公寓型床位出租管理系统”

业务逻辑:

情形1:床位出租,就是按床位出租而不是按一个房间来算的,一个房间有固定的床位,有4个6个8个不等的床位,一般这种床位房都是一月一交,也就可以算成30天就得交一次房租。当有租客来入住,我首先要查询有空床位的房间,有空床位就办理入住,就填入租客入住信息。另外租客入住进去后,这个房间的床位就要减少一个,所以需要建立两个表房间表(room)和租客信息表(customer),房间表里有房间号(roomid),房间总床位(sumnum),房间剩余床位(renum),所以房间表就是room(roomid char, sumnum int, renum int),另外有个问题就是比如房间号908有四个床位,现在都住满人了,在插入一个新租客我就不能让他插入,那该怎么控制呢?后面会讲到

情形2:那入住的时候,租客信息表里应有哪些内容呢?首先毋庸置疑,租客姓名(cname),租客所在房间号(roomid),入住时间(paydate)是必须存在的。仅仅这些行吗?显然这几个字段和room表里的字段仅仅只能完成选择房间,不能完成交费,到期提醒,到期欠交费相关逻辑。

情形3:那么现在就有这样一个问题摆在面前,比如一租客小强已经入住了,怎么记录他已入住的天数(daycounts),这里如果在java程序中可以用线程定义一个定时器,每一天已入住天数就要加1则daycounts=daycounts+1,在oracle中job中也可以实现定时器功能后面会讲到。

情形4:假如小强下个月房租15号到期,一般要在到期前3天提醒交房租,所以现在租客表里就需要一个到期提醒字段,也就是增加一个快到期天数(recounts)来记录,当recounts<=3就要提醒。现在新问题又出现了,快到期了租客就要交房租如果到期后租客没交房租,那应该怎么查出欠交房租的租客了?那么租客表里就要设立一个字段交费状态(paystate)来标明已交和欠交费的用户,如果paystate=0就表示欠交,如果paystate=1就表示已交费,那么在java程序中租客信息展示页面就有个“交费”按钮,一点击交费,paystate就设置为1了。

情形5:想想情形4中有没有问题?问题1:虽然在情形4中点交费只能交一个月的房租,因为情形1中已经说明一般是30天交一次房租,但假如情况特殊,有的租客一下子需要交两个月甚至三个月,那怎么控制。问题2:当小强交了房租后,我点击“交费”paystate=1,下一次他到期后还要交房租,因为现在paystate=1显示他已经交了就不用交了,房东肯定受不了。所以这里30天小强房租再次到期后还要将paystate变为0。问题三:假设小强房租是10月10号到期,因其它原因小强拖欠了一个月房租,一直到11月10号才交了上一个月拖欠的房租,但现在要交房租啊,总要记录,点击交费后,paystate=1显示小强已经交了房租,但实际还拖欠1个月房租,只把10月10号交了,11月10号还没交只是房东要哭了。这里paystate就不能是boolean类型的,paystate就只能为int类型代表月数,1就是交了1月,2就是交了2月,0就是没交,到期后paystate就要减1,比如小强一下交了3个月房租,到期后他没交房租,paystate-1=2,表示他还剩2个月房租,在情形3中天数每天都在自动加1,daycounts=daycounts+1,到期后天数就要归为0,到期的天数就是paystate*30,也就是到期天数=paystate*30时,同时paystate>0才能将daycounts更新为0。程序其实非常简单,主要是搞清业务逻辑。

综合上述两个表设计为:

表设计:

customer(cid() int, cname(姓名) char, roomid(房间号) ch

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值