首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

學生加分系統積分上限判斷:前端三級預判斷 + 後端二次校驗

     編輯:程式設計綜合問答

需求:每個加分項有累計上限,申請時預判斷是否超限並提示。雙端校驗策略:

前端即時反饋(用戶體驗)

const MAX = 100, PER_TIME = 3;
let current = getCurrentScore(); // 從頁面數據或 AJAX 獲取

if (current >= MAX) {
    showToast('已達上限 100 分,無法申請');
    disableApplyBtn();
} else if (current > MAX - PER_TIME) {
    showConfirm(`本次僅能加 ${MAX - current} 分(將達上限),確定申請?`);
} else {
    enableApplyBtn(); // 正常可加 3 分
}

後端權威校驗(數據安全)

@Transactional
public Result applyBonus(Long studentId, Long itemId) {
    BonusItem item = itemRepo.findById(itemId);
    int current = scoreRepo.sumByStudentAndItem(studentId, itemId);
    
    if (current >= item.getMaxScore()) 
        return Result.fail("已達上限");
    if (current + item.getPerScore() > item.getMaxScore())
        return Result.fail("超出上限,可加 " + (item.getMaxScore() - current) + " 分");
    
    scoreRepo.save(new ScoreRecord(studentId, itemId, item.getPerScore()));
    return Result.ok();
}

關鍵點

  • 前端攔截僅為體驗,**後端必須二次校驗**防繞過
  • 使用數據庫唯一索引/約束防止併發超賣
  • 記錄審批日誌:申請人、審批人、前後分值、時間
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved