兑换学时,优先从快过期的进行处理
| 过期时间 | 学时数 | 已用学时 | 是否过期 |
|---|---|---|---|
| 2018-11-28 | 30 | 10 | 否 |
| 2018-11-30 | 30 | 0 | 否 |
| 2018-11-30 | 30 | 0 | 否 |
可用学时: 30+30+30=90
剩余学时: 30-10+30-0+30-0=80
假设今天第一个过期了
| 过期时间 | 学时数 | 已用学时 | 是否过期 |
|---|---|---|---|
| 2018-11-28 | 30 | 10 | 是 |
| 2018-11-30 | 30 | 0 | 否 |
| 2018-11-30 | 30 | 0 | 否 |
可用学时: 30+30=60
剩余学时: 30-0+30-0=60
使用学时(伪代码)
if 前台判断总学时是否够用{
后台先根据时间排序查出可兑换学时的 List 计算出总学时
if 总学时>使用学时{
for(list){
if 学时-已用-使用>0 {
执行修改操作 update-->已用
break; //如果够减 直接结束循环
}else{
使用-=(学时-已用)
已用=学时
update-->已用,有效设置为无效(因为已用完 下次计算不在查出)
}
}
}
}
部分逻辑代码实现
--代码实现
int get;//获得的学时
int used;//已使用的学时
for (Object obj : list) {
if(obj instanceof ConvertCourseHours){
cch = (ConvertCourseHours) obj;
get = cch.getRuleScore();
used = cch.getUsedScore();
//学时-已用-使用>0
if(get-used-convertScore>0){
//执行修改操作 update-->已用
//已用加上使用的值
cch.setUsedScore(used+convertScore);
//更新
convertCourseHoursDao.updateConvertCourseHours(cch);
return "success"; //如果够减 直接结束循环 返回成功
}else if(get-used-convertScore==0){
cch.setUsedScore(get);//使用完 已用=总共获得的学时
cch.setAvailability(0);//使用完设置为失效
convertCourseHoursDao.updateConvertCourseHours(cch);
return "success";//刚好使用完 返回成功
}else{
convertScore-=(get-used);//把快过期的先用完,在进行下一轮循环
cch.setUsedScore(get);//使用完 已用=总共获得的学时
cch.setAvailability(0);//使用完设置为失效
convertCourseHoursDao.updateConvertCourseHours(cch);
}
}
}
本文详细解析了一个学时管理系统的逻辑处理流程,包括如何优先处理快过期的学时、如何计算剩余学时以及如何通过伪代码和部分逻辑代码实现学时的使用和更新。系统通过判断学时的有效性和使用情况,确保资源的有效利用。
594

被折叠的 条评论
为什么被折叠?



