MFC图书管理系统:基于Access数据库的功能完善书籍管理,实现增删改查、统计分析与Exce...

发布时间:2026/5/20 14:46:57

MFC图书管理系统:基于Access数据库的功能完善书籍管理,实现增删改查、统计分析与Exce... MFC图书管理系统带报告使用Access数据库完成了书籍数据的增删改查、统计、导出Excel等操作以及用户的借书、还书等功能有用户的注册、修改密码界面手把手拆解MFC图书管理系统实战MFC图书管理系统带报告使用Access数据库完成了书籍数据的增删改查、统计、导出Excel等操作以及用户的借书、还书等功能有用户的注册、修改密码界面最近用MFC搓了个图书管理系统核心功能基本都跑通了。今天就来聊聊实现过程中几个有意思的技术点直接上干货。数据库连接黑科技系统用Access做数据库这里有个小坑MFC自带的ODBC太笨重。改用ADO直连反而更香_ConnectionPtr m_pConnection; m_pConnection.CreateInstance(__uuidof(Connection)); m_pConnection-Open(ProviderMicrosoft.Jet.OLEDB.4.0;Data Sourcebook.mdb, , , adConnectUnspecified);这段代码用到了COM组件记得在stdafx.h里加#import C:\\Program Files\\Common Files\\System\\ado\\msado15.dll rename_namespace(ADOCG)。ADO比ODBC快的地方在于可以直接操作记录集比如批量更新时用Recordset-UpdateBatch(adAffectAll)直接刷到数据库。书籍管理骚操作增删改查看着简单但批量删除时有个坑列表控件选中的项索引会动态变化。这里用了个逆向遍历的骚操作for(int i m_list.GetItemCount()-1; i 0 ; i--) { if(m_list.GetItemState(i, LVIS_SELECTED)) { CString id m_list.GetItemText(i, 0); // 执行SQL删除 m_list.DeleteItem(i); } }导出Excel时用到了自动化对象注意释放资源别忘CApplication excel; if(!excel.CreateDispatch(Excel.Application)) return; excel.SetVisible(TRUE); CWorkbooks books excel.GetWorkbooks(); CWorkbook book books.Add(); CWorksheets sheets book.GetWorksheets(); CWorksheet sheet sheets.GetItem(COleVariant((short)1)); // 填充数据循环... book.SaveAs(COleVariant(strPath));借书还书暗战借阅功能最怕数据不同步。这里用事务处理保平安try { m_pConnection-BeginTrans(); // 扣减库存 ExecuteSQL(UPDATE books SET stockstock-1 WHERE id1001); // 生成借阅记录 ExecuteSQL(INSERT INTO borrow(user_id,book_id) VALUES(888,1001)); m_pConnection-CommitTrans(); } catch(...) { m_pConnection-RollbackTrans(); AfxMessageBox(操作原子性保障); }注意Access的事务支持需要数据库设置为独占模式打开否则会报诡异的3027错误。用户密码那些事修改密码界面看似简单但两个细节要注意旧密码校验要区分大小写新密码两次输入用CEdit的GetPasswordChar()做掩码存储密码千万别裸奔虽然项目里用了简单的SHA1CString EncryptPwd(LPCTSTR str) { CSHA1 sha; sha.Update((BYTE*)str, _tcslen(str)*2); // Unicode转字节 sha.Final(); TCHAR szHash[41] {0}; sha.ReportHash(szHash); return szHash; }更安全的做法是加盐不过课程设计嘛...你懂的。踩坑总结列表控件刷新用SetRedraw(FALSE)防闪烁日期选择用CDateTimeCtrl的GetTime()转COleDateTime统计功能善用SQL的GROUP BY比在代码里循环高效得多最后说个血泪教训Access并发访问超过5个连接就崩正式项目还是上SQL Server靠谱。源码里那些魔改的控件样式就不展开了有兴趣的可以私聊要GitHub地址当然报告模板也打包好了。整个项目跑下来MFC虽然老但做桌面应用依然能打。下期可能会撸个Qt版对比看看溜了溜了~

相关新闻