void CLibraryDlg::OnReturnBook() {
// 1. 取得選中借閱記錄 ID
long borrowId = GetSelectedBorrowId();
if (borrowId <= 0) return;
// 2. 計算罰金
CTime borrowDate = GetBorrowDate(borrowId);
CTime returnDate = CTime::GetCurrentTime();
int overdueDays = max(0, (returnDate - borrowDate).GetDays() - MAX_BORROW_DAYS);
double fine = overdueDays * DAILY_FINE;
// 3. 事務更新
CDatabase db; db.OpenEx(dsn);
db.BeginTrans();
try {
db.ExecuteSQL(_T("UPDATE BORROW SET RETURN_DATE = GETDATE(), FINE = ") + fine + _T(" WHERE ID = ") + borrowId);
db.ExecuteSQL(_T("UPDATE BOOK SET STATUS = '可借' WHERE BOOK_ID = (SELECT BOOK_ID FROM BORROW WHERE ID = ") + borrowId + _T(")"));
db.CommitTrans();
AfxMessageBox(_T("歸還成功,罰金: ") + fine);
} catch (CDBException* e) {
db.RollbackTrans();
e->ReportError(); e->Delete();
}
db.Close();
}
歸還功能缺失 = 代碼未寫;日期/罰金錯 = 邏輯/事務/欄位處理不當。補全 `OnReturnBook`、統一日期型別、加事務、驗證罰金公式,系統即可閉環。