王姝+圖書館管理系統(tǒng)(總結(jié)參考)_第1頁(yè)
王姝+圖書館管理系統(tǒng)(總結(jié)參考)_第2頁(yè)
王姝+圖書館管理系統(tǒng)(總結(jié)參考)_第3頁(yè)
王姝+圖書館管理系統(tǒng)(總結(jié)參考)_第4頁(yè)
王姝+圖書館管理系統(tǒng)(總結(jié)參考)_第5頁(yè)
已閱讀5頁(yè),還剩64頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、安徽大學(xué)程序設(shè)計(jì)課程設(shè)計(jì)總結(jié)報(bào)告題目: 圖書管理系統(tǒng) 組長(zhǎng)姓名:王姝 學(xué)號(hào): Z01114204 院 (系): 電氣工程及自動(dòng)化學(xué)院 班 級(jí): 自動(dòng)化2班 指導(dǎo)教師: 尋麗娜老師 目錄一、設(shè)計(jì)任務(wù)和目的311 設(shè)計(jì)計(jì)劃312 設(shè)計(jì)目的3二、設(shè)計(jì)概要3三、詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)33.1系統(tǒng)功能和結(jié)構(gòu)3 3.1.1圖書館管理系統(tǒng)功能描述3 3.1.2總體設(shè)計(jì)流程圖43.2 圖書管理系統(tǒng)詳細(xì)設(shè)計(jì)5 3.2.1 新建數(shù)據(jù)庫(kù)(SQL server)5 3.2.2創(chuàng)建數(shù)據(jù)源7 3.2.3 C+中MFC應(yīng)用程序編程8 3.2.4 詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)10四、設(shè)計(jì)心得 6141 個(gè)人總結(jié) 6142 課程設(shè)計(jì)總結(jié) 66五、參

2、考文獻(xiàn) 66一、設(shè)計(jì)任務(wù)和目的1.1設(shè)計(jì)計(jì)劃 一個(gè)簡(jiǎn)單的圖書管理系統(tǒng)包括圖書館內(nèi)書籍的信息、學(xué)校在校學(xué)生的信息以及學(xué)生的借閱信息。此系統(tǒng)功能分為面向?qū)W生和面向管理員兩部分,其中學(xué)生可以進(jìn)行借閱、續(xù)借、歸還和查詢書籍等操作,管理員可以完成書籍和學(xué)生的增加,刪除和修改以及對(duì)學(xué)生,借閱、續(xù)借、歸還的確認(rèn)。1.2設(shè)計(jì)目的圖書管理系統(tǒng)中涉及登陸,圖書管理,讀者管理,以及權(quán)限設(shè)置相關(guān)知識(shí),需要運(yùn)用的知識(shí)全面,可有效檢查出學(xué)習(xí)中的缺陷,同時(shí)在實(shí)踐中鞏固數(shù)據(jù)庫(kù)相關(guān)知識(shí)以及VC+編程設(shè)計(jì)。通過(guò)課程設(shè)計(jì),使學(xué)生提高理論聯(lián)系實(shí)際解決問(wèn)題的能力,也使學(xué)生對(duì)基于面向?qū)ο蟮睦碚撨M(jìn)行系統(tǒng)設(shè)計(jì)過(guò)程中的諸多具體問(wèn)題有感性的認(rèn)識(shí)

3、和深入的理解。二、設(shè)計(jì)概要圖書館管理系統(tǒng)創(chuàng)建基于MFC APPWizardexe,利用SQLSERVE2000和MFC ODBC進(jìn)行數(shù)據(jù)庫(kù)的連接,在可視化的界面上進(jìn)行用戶名、圖書及借書卡的查詢、添加、修改、刪除,對(duì)數(shù)據(jù)庫(kù)表內(nèi)的信息列表進(jìn)行操作。它是一個(gè)基于ACCESS數(shù)據(jù)庫(kù)的圖書管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),運(yùn)用Visual C+結(jié)合Microsoft Access 2000開發(fā)而得。 圖書館管理系統(tǒng)主要完成了用戶登錄功能、新建/刪除用戶功能、用戶管理功能,對(duì)數(shù)據(jù)庫(kù)內(nèi)圖書、借書卡和用戶信息進(jìn)行查詢、添加、刪除、修改功能。圖書館管理系統(tǒng)設(shè)計(jì)是有下列幾步完成的:首先對(duì)整體功能進(jìn)行分析,開始是用戶登錄,登陸

4、成功后顯示主界面,其分為圖書資料、讀者資料、借書管理、還書管理和退出五個(gè)菜單;第二步是對(duì)五個(gè)菜單繼續(xù)劃分成具體的類進(jìn)行實(shí)現(xiàn);第三步是根據(jù)課程設(shè)計(jì)的要求在數(shù)據(jù)庫(kù)內(nèi)的建立具體的表,并且進(jìn)行連接,及對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)內(nèi)容的操作,與此同時(shí)完成界面的退出操作;第四步是對(duì)圖書館管理系統(tǒng)進(jìn)行的全面優(yōu)化,修改不足。三、詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)3.1系統(tǒng)功能和結(jié)構(gòu)3.1.1圖書管理系統(tǒng)功能描述圖書館管理系統(tǒng)的功能為讀者提供借書、 還書和查詢所需圖書及圖書、讀者卡的管理等功能。圖書館管理系統(tǒng)的功能模塊有:(1)登錄界面 只有管理員才能使用全部功能,更好的保護(hù)圖書館內(nèi)的一些信息不被破壞。(2)讀者資料 能實(shí)現(xiàn)對(duì)讀者的顯示、讀者信

5、息增加、讀者查詢、讀者信息修改和讀者信息刪除功能。(3)圖書資料 能實(shí)現(xiàn)對(duì)圖書顯示、圖書信息增加、圖書查詢、圖書信息修改和圖書信息刪除功能。(4)借書管理 可與數(shù)據(jù)庫(kù)中的圖書信息表連接實(shí)現(xiàn)借書的功能。(5)還書管理 可與數(shù)據(jù)庫(kù)中的圖書信息表連接實(shí)現(xiàn)還書的功能(6)退出 退出程序,結(jié)束運(yùn)行。通過(guò)SQL server建立一個(gè)圖書館管理系統(tǒng)的數(shù)據(jù)庫(kù),在控制面板的管理工具上用手動(dòng)方式添加數(shù)據(jù)源進(jìn)行連接。而與數(shù)據(jù)表的連接采用記錄集的形式一一建立連接,可以進(jìn)行圖書資料和讀者資料的管理,圖書資料管理包括圖書信息增加、圖書查詢、圖書信息修改和圖書信息刪除四項(xiàng),讀者資料管理管理包括讀者信息增加、讀者查詢、讀者信

6、息修改和讀者信息刪除。用ODBC語(yǔ)言將數(shù)據(jù)庫(kù)與C+連接起來(lái),首先是登錄界面,只有管理員才可進(jìn)入。登陸成功后,管理員可在系統(tǒng)界面進(jìn)行讀者資料、圖書資料、借書管理、還書管理等功能,通過(guò)對(duì)話框的跳轉(zhuǎn)實(shí)現(xiàn)借書、還書、圖書新增、查詢等功能。在每個(gè)對(duì)話框都可實(shí)現(xiàn)新增、查詢、刪除、修改等功能順利的對(duì)圖書館進(jìn)行管理。 程序分為多個(gè)小模塊,通過(guò)調(diào)用實(shí)現(xiàn)各種功能,增強(qiáng)了程序的可建設(shè)性。 3.1.2總體設(shè)計(jì)流程圖程序開始登錄界面面還書管理借書管理讀者資料圖書資料 借書確定增修刪查讀者顯示系統(tǒng)界面面增修刪查圖書顯示程序結(jié)束 退出3.2 圖書管理系統(tǒng)詳細(xì)設(shè)計(jì)3.2.1 新建數(shù)據(jù)庫(kù)(SQL server)新建數(shù)據(jù)庫(kù)名為l

7、ibrary,然后在數(shù)據(jù)庫(kù)下建立五個(gè)表,分別為BOOK、BORROW、CLERK、HISTORY、READER。BOOK是存放圖書信息的,包括“書籍號(hào)碼”、“書籍名稱”、“書籍作者”、“書籍出版社”、“出版日期”及“可否借出”BORROW是存放借書信息的,包括“書籍號(hào)碼”、“借閱讀者證號(hào)”、“借閱日期”以及“借閱次序”CLERK是存放管理員信息的,包括“管理員名稱”、“登錄密碼”READER是存放讀者信息的包括“讀書證號(hào)”、“姓名”、“身份證號(hào)”,“最多可借書數(shù)目”和“能否借書”HISTORY是為了圖書借閱功能的可查可控,而制作的歷史記錄表便于記錄各種信息諸如何人何時(shí)借閱歸還何書,是否超期還書

8、等。然后設(shè)計(jì)各個(gè)表中的字段,并定義主鍵,然后輸入數(shù)據(jù)即可。在此處將把設(shè)計(jì)的各表詳細(xì)信息給出表 名字段名稱數(shù)據(jù)類型長(zhǎng) 度主 鍵READERREADER_ID文本8YesNAME文本8IDCARD文本18MAXNUM_CAN_BORROW數(shù)字FLAG_BORROW文本1BOOKBOOK_ID文本30YesBOOK_NAME文本50AUTHOR文本30PRESS文本50PRESS_DATE文本50FLAG_BORROW文本10BORROWID自動(dòng)編號(hào)YesREADER_ID文本30YesBOOK_ID文本30BORROW_DATE日期/時(shí)間B_CLERK_ID文本30HISTORYID自動(dòng)編號(hào)Yes

9、READER_ID文本30BOOK_ID文本30BORROW_DATE日期/時(shí)間RETURN_DATE日期/時(shí)間B_CLERK_ID文本30R_CLERK_ID文本30CLERKNAME文本8YesPASSWORD文本8 3.2.2創(chuàng)建數(shù)據(jù)源此次課程設(shè)計(jì)用ODBC語(yǔ)言將數(shù)據(jù)庫(kù)與C+連接,在連接之前應(yīng)創(chuàng)建數(shù)據(jù)源。在控制面板上打開管理工具,可以找到數(shù)據(jù)源(ODBC),添加數(shù)據(jù)源,可以創(chuàng)建不同類型的數(shù)據(jù)庫(kù),此次設(shè)計(jì)用到了SQL Server,便選擇其,打開SQL Server中的服務(wù)管理器可找到服務(wù)器的名稱,將默認(rèn)數(shù)據(jù)庫(kù)改為自己的數(shù)據(jù)庫(kù)。點(diǎn)下一步直至完成。這樣,數(shù)據(jù)源創(chuàng)建成功了。3.2.3 C+中M

10、FC應(yīng)用程序編程建立基本對(duì)話框并與數(shù)據(jù)庫(kù)連接其步驟如下所示雙擊新建的對(duì)話框或建立類向?qū)?,如下圖:點(diǎn)擊OK,則如下圖所示:在所示對(duì)話框中輸入Name,然后Base class中選擇CRecordset,點(diǎn)擊OK,出現(xiàn)下圖:既連接數(shù)據(jù)源,注意選擇記錄集類型為Dynaset。點(diǎn)擊OK,出現(xiàn)下圖:選擇要連接的數(shù)據(jù)庫(kù)表(此例選擇dbo.BOOK),點(diǎn)擊OK,就完成了與數(shù)據(jù)庫(kù)表的連接。其他對(duì)話框同此例。3.2.4詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)程序框架方面根據(jù)數(shù)據(jù)流程,首先要有登陸窗口登錄函數(shù)void CLoginDlg:OnConfirm() /登錄函數(shù) / TODO: Add your control notifica

11、tion handler code hereCClerkDataSet mrsDataSet; /*聲明記錄集*/CString mSqlStr;UpdateData(TRUE); /將相應(yīng)控件上的值反應(yīng)到變量上if (m_strName.IsEmpty() /*判斷用戶名信息是否為空*/AfxMessageBox("請(qǐng)正確輸入用戶名!");return;mSqlStr = "SELECT * FROM CLERK WHERE NAME='" /查詢數(shù)據(jù)庫(kù)中表CLERK中名字是輸入的mSqlStr = mSqlStr + m_strName; m

12、SqlStr = mSqlStr + "' AND PASSWORD='"mSqlStr = mSqlStr + m_strPassword;mSqlStr = mSqlStr + "'"if (!mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE, mSqlStr)AfxMessageBox("CLERK表打開失敗!");return;if (!mrsDataSet.IsEOF()/ Open all function for userCDialog:OnOK();elseAfxM

13、essageBox("登錄失敗,請(qǐng)重新輸入!");return;登錄進(jìn)入系統(tǒng)以后要進(jìn)入選擇界面,選擇需要的服務(wù)服務(wù)方面已細(xì)分為讀者信息管理,書籍信息管理,借書管理和還書管理4種/ ReaderDataSet.cpp : implementation file/#include "stdafx.h"#include "Library.h"#include "ReaderDataSet.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THI

14、S_FILE = _FILE_;#endif/ CReaderDataSetIMPLEMENT_DYNAMIC(CReaderDataSet, CRecordset)CReaderDataSet:CReaderDataSet(CDatabase* pdb): CRecordset(pdb)/AFX_FIELD_INIT(CReaderDataSet)m_READER_ID = _T("");m_NAME = _T("");m_IDCARD = _T("");m_MAXNUM_CAN_BORROW = 0;m_FLAG_BORROW =

15、 _T("");m_nFields = 5;/AFX_FIELD_INITm_nDefaultType = snapshot;CString CReaderDataSet:GetDefaultConnect()return _T("ODBC;DSN=Library");CString CReaderDataSet:GetDefaultSQL()return _T("READER");void CReaderDataSet:DoFieldExchange(CFieldExchange* pFX)/AFX_FIELD_MAP(CReade

16、rDataSet)pFX->SetFieldType(CFieldExchange:outputColumn);RFX_Text(pFX, _T("READER_ID"), m_READER_ID);RFX_Text(pFX, _T("NAME"), m_NAME);RFX_Text(pFX, _T("IDCARD"), m_IDCARD);RFX_Int(pFX, _T("MAXNUM_CAN_BORROW"), m_MAXNUM_CAN_BORROW);RFX_Text(pFX, _T("FLA

17、G_BORROW"), m_FLAG_BORROW);/AFX_FIELD_MAP/ CReaderDataSet diagnostics#ifdef _DEBUGvoid CReaderDataSet:AssertValid() constCRecordset:AssertValid();void CReaderDataSet:Dump(CDumpContext& dc) constCRecordset:Dump(dc);#endif /_DEBUG/ ReaderDlg.cpp : implementation file/#include "stdafx.h&q

18、uot;#include "Library.h"#include "ReaderDlg.h"#include "ReaderDataSet.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CReaderDlg dialogCReaderDlg:CReaderDlg(CWnd* pParent /*=NULL*/): CDialog(CReaderDlg:IDD, pParent)/AFX_DATA_IN

19、IT(CReaderDlg)m_strReaderIDQ = _T("");m_strReaderID = _T("");m_strReaderName = _T("");m_strReaderNameQ = _T("");m_strIDCard = _T("");/ NOTE: the ClassWizard will add member initialization here/AFX_DATA_INITvoid CReaderDlg:DoDataExchange(CDataExchange

20、* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CReaderDlg)DDX_Text(pDX, IDC_READERID_Q, m_strReaderIDQ);DDV_MaxChars(pDX, m_strReaderIDQ, 8);DDX_Text(pDX, IDC_READERID, m_strReaderID);DDV_MaxChars(pDX, m_strReaderID, 8);DDX_Text(pDX, IDC_READERNAME, m_strReaderName);DDV_MaxChars(pDX, m_strReaderNam

21、e, 8);DDX_Text(pDX, IDC_READERNAME_Q, m_strReaderNameQ);DDV_MaxChars(pDX, m_strReaderNameQ, 8);DDX_Text(pDX, IDC_IDCARD, m_strIDCard);DDV_MaxChars(pDX, m_strIDCard, 18);/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CReaderDlg, CDialog)/AFX_MSG_MAP(CReaderDlg)O

22、N_BN_CLICKED(IDC_EXIT, OnExit)ON_BN_CLICKED(IDC_FIRST, OnFirst)ON_BN_CLICKED(IDC_LAST, OnLast)ON_BN_CLICKED(IDC_NEW, OnNew)ON_BN_CLICKED(IDC_NEXT, OnNext)ON_BN_CLICKED(IDC_PRIOR, OnPrior)ON_BN_CLICKED(IDC_SAVE, OnSave)ON_BN_CLICKED(IDC_CANCEL_REC, OnCancelRec)ON_BN_CLICKED(IDC_DELETE, OnDelete)ON_BN

23、_CLICKED(IDC_EDIT, OnEdit)ON_BN_CLICKED(IDC_ENQUERY, OnEnquery)/ NOTE: the ClassWizard will add message map macros here/AFX_MSG_MAPEND_MESSAGE_MAP()/ CReaderDlg message handlersvoid CReaderDlg:OnExit() / TODO: Add your control notification handler code hereCDialog:OnOK();void CReaderDlg:OnFirst() /

24、TODO: Add your control notification handler code hereif(!m_rsDataSet.IsBOF()m_rsDataSet.MoveFirst();DisplayRecord();SetButtonState();void CReaderDlg:OnLast() / TODO: Add your control notification handler code hereif(!m_rsDataSet.IsEOF()m_rsDataSet.MoveLast();DisplayRecord();SetButtonState();void CRe

25、aderDlg:OnNew() / TODO: Add your control notification handler code herem_strReaderID = ""m_strReaderName = ""m_strIDCard = ""UpdateData(FALSE);m_bEdit = TRUE;m_bAdd = TRUE;SetButtonState();SetTextState();CWnd *pWnd;pWnd = GetDlgItem(IDC_READERID);pWnd->SetFocus();voi

26、d CReaderDlg:OnNext() / TODO: Add your control notification handler code hereif(!m_rsDataSet.IsEOF()m_rsDataSet.MoveNext();DisplayRecord();SetButtonState();void CReaderDlg:OnPrior() / TODO: Add your control notification handler code hereif(!m_rsDataSet.IsBOF()m_rsDataSet.MovePrev();DisplayRecord();S

27、etButtonState();void CReaderDlg:OnSave() / TODO: Add your control notification handler code hereUpdateData(TRUE);if (m_strIDCard.IsEmpty() | m_strReaderName.IsEmpty() | m_strReaderID.IsEmpty()AfxMessageBox("請(qǐng)輸入相應(yīng)數(shù)據(jù)!");return;if (m_bAdd)m_rsDataSet.AddNew();elsem_rsDataSet.Edit();m_rsDataSe

28、t.m_IDCARD = m_strIDCard;m_rsDataSet.m_NAME = m_strReaderName;m_rsDataSet.m_READER_ID = m_strReaderID;/m_rsDataSet.m_FLAG_BORROW = "Y"m_rsDataSet.Update();m_rsDataSet.Requery();m_bAdd = FALSE;m_bEdit = FALSE;DisplayRecord();SetButtonState();SetTextState();void CReaderDlg:OnCancelRec() / TO

29、DO: Add your control notification handler code herem_bAdd = FALSE;m_bEdit = FALSE;DisplayRecord();SetButtonState();SetTextState();void CReaderDlg:OnDelete() / TODO: Add your control notification handler code herem_rsDataSet.Delete();DisplayRecord();SetButtonState();void CReaderDlg:OnEdit() / TODO: A

30、dd your control notification handler code herem_bEdit = TRUE;SetButtonState();SetTextState();CWnd *pWnd;pWnd = GetDlgItem(IDC_READERNAME);pWnd->SetFocus();void CReaderDlg:OnEnquery() / TODO: Add your control notification handler code hereUpdateData(TRUE);if (m_strReaderIDQ.IsEmpty() && m_

31、strReaderNameQ.IsEmpty()m_rsDataSet.m_strFilter = ""m_rsDataSet.Requery();DisplayRecord();SetButtonState();return;BOOL mAll = FALSE;if (!m_strReaderIDQ.IsEmpty()m_rsDataSet.m_strFilter = "READER_ID='" + m_strReaderIDQ ;m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + "

32、;'"mAll = TRUE;if (!m_strReaderNameQ.IsEmpty()if (mAll)m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + " AND NAME='"m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + m_strReaderNameQ;m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + "'"elsem_rsDataSet.m_s

33、trFilter = "NAME='" + m_strReaderNameQ;m_rsDataSet.m_strFilter = m_rsDataSet.m_strFilter + "'"m_rsDataSet.Requery();DisplayRecord();SetButtonState();BOOL CReaderDlg:DisplayRecord()if (m_rsDataSet.IsEOF() && m_rsDataSet.IsBOF()m_strReaderID = ""m_strReade

34、rName = ""m_strIDCard = ""elseif (m_rsDataSet.IsBOF()m_rsDataSet.MoveNext();elseif (m_rsDataSet.IsEOF()m_rsDataSet.MovePrev();m_strReaderID = m_rsDataSet.m_READER_ID;m_strReaderName = m_rsDataSet.m_NAME;m_strIDCard = m_rsDataSet.m_IDCARD;UpdateData(FALSE);return TRUE;BOOL CReader

35、Dlg:SetButtonState()CWnd *pWnd;if(!m_rsDataSet.IsOpen()pWnd = GetDlgItem(IDC_FIRST);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_NEXT);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_LAST);pWnd->EnableWindow(FALSE);pWnd = GetDlgIt

36、em(IDC_NEW);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_EDIT);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_ENQUERY);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_DELETE);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_SAVE);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_CANC

37、EL_REC);pWnd->EnableWindow(FALSE);return TRUE;if (m_bEdit)pWnd = GetDlgItem(IDC_FIRST);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_NEXT);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_LAST);pWnd->EnableWindow(FALSE);pWnd = Ge

38、tDlgItem(IDC_NEW);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_EDIT);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_ENQUERY);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_DELETE);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_SAVE);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC

39、_CANCEL_REC);pWnd->EnableWindow(TRUE);return TRUE;if (m_rsDataSet.IsBOF()pWnd = GetDlgItem(IDC_FIRST);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_PRIOR);pWnd->EnableWindow(FALSE);elsepWnd = GetDlgItem(IDC_FIRST);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_PRIOR);pWnd->EnableWin

40、dow(TRUE);if (m_rsDataSet.IsEOF()pWnd = GetDlgItem(IDC_NEXT);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_LAST);pWnd->EnableWindow(FALSE);elsepWnd = GetDlgItem(IDC_NEXT);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_LAST);pWnd->EnableWindow(TRUE);if (m_rsDataSet.IsBOF() && m_

41、rsDataSet.IsEOF()pWnd = GetDlgItem(IDC_EDIT);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_DELETE);pWnd->EnableWindow(FALSE);elsepWnd = GetDlgItem(IDC_EDIT);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_DELETE);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_NEW);pWnd->EnableWindow(

42、TRUE);pWnd = GetDlgItem(IDC_ENQUERY);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_SAVE);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_CANCEL_REC);pWnd->EnableWindow(FALSE);return TRUE;BOOL CReaderDlg:OnInitDialog() CDialog:OnInitDialog();/ TODO: Add extra initialization herem_bAdd = FAL

43、SE;m_bEdit = FALSE;if (!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)AfxMessageBox("數(shù)據(jù)打開失??!");DisplayRecord();SetButtonState();SetTextState();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEBOOL CReaderDlg:SetTextState()CWnd *

44、pWnd;if (m_bEdit)pWnd = GetDlgItem(IDC_READERNAME);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_READERID);if (m_bAdd)pWnd->EnableWindow(TRUE);elsepWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_IDCARD);pWnd->EnableWindow(TRUE);elsepWnd = GetDlgItem(IDC_READERNAME);pWnd->EnableWindow

45、(FALSE);pWnd = GetDlgItem(IDC_READERID);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_IDCARD);pWnd->EnableWindow(FALSE);pWnd = GetDlgItem(IDC_READERNAME_Q);pWnd->EnableWindow(TRUE);pWnd = GetDlgItem(IDC_READERID_Q);pWnd->EnableWindow(TRUE);return TRUE;/ BookDataSet.cpp : implementation

46、 file/#include "stdafx.h"#include "Library.h"#include "BookDataSet.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CBookDataSetIMPLEMENT_DYNAMIC(CBookDataSet, CRecordset)/建立記錄集所需要的一個(gè)派生類CBookDataSet:CBookDataSet(CDatabase* pdb):

47、 CRecordset(pdb)/建立記錄集,pdb為一個(gè)對(duì)象指針,負(fù)責(zé)鏈接數(shù)據(jù)源/AFX_FIELD_INIT(CBookDataSet)m_BOOK_ID = _T(""); /書號(hào)m_BOOK_NAME = _T(""); /書名m_AUTHOR = _T(""); /作者m_PRESS = _T(""); /出版商 m_ PRESS_DATE = _T(""); /出版日期m_FLAG_BORROW = _T("");/借出標(biāo)志m_nFields = 6; /域數(shù)據(jù)成

48、員為6,指CRecorderView類視圖中的控件數(shù)目為6/AFX_FIELD_INITm_nDefaultType = snapshot;/默認(rèn)類型為快照,即該記錄集不反應(yīng)其他用戶對(duì)記錄集的改變,知道調(diào)用了CRecord:Requery重新查詢后,快照才會(huì)發(fā)生變化CString CBookDataSet:GetDefaultConnect()/return _T("ODBC;DSN=Library");/返回缺省的連接字符串,此處表示連接到一個(gè)ODBC數(shù)據(jù)源,數(shù)據(jù)源的名稱為L(zhǎng)ibraryCString CBookDataSet:GetDefaultSQL()return

49、_T("BOOK")/open函數(shù)會(huì)在必要時(shí)調(diào)用此函數(shù)返回缺省的SQL語(yǔ)句或表用來(lái)查詢數(shù)據(jù)源中的記錄,此處返回的是BOOKvoid CBookDataSet:DoFieldExchange(CFieldExchange* pFX)/記錄集與數(shù)據(jù)源之間的交換,該交換是雙向的/AFX_FIELD_MAP(CBookDataSet)pFX->SetFieldType(CFieldExchange:outputColumn);/表明以后的RFX函數(shù)用于參數(shù)替換RFX_Text(pFX, _T("BOOK_ID"), m_BOOK_ID);/交換書IDRFX

50、_Text(pFX, _T("BOOK_NAME"), m_BOOK_NAME);/交換書名RFX_Text(pFX, _T("AUTHOR"), m_AUTHOR);/交換作者名RFX_Text(pFX, _T("PRESS"), m_PRESS);/交換出版商數(shù)據(jù)RFX_Text(pFX, _T("PRESS_DATE"), m_PRESS_DATE);交換出版日期數(shù)據(jù)RFX_Text(pFX, _T("FLAG_BORROW"), m_FLAG_BORROW);/AFX_FIELD_MAP/ CBookDataSet diagnostics#ifdef _DEBUGvoid CBookDataSet:AssertValid() constCRecordset:AssertValid();/成員函數(shù)提供對(duì)對(duì)象內(nèi)部狀態(tài)的運(yùn)行時(shí)檢查,可以通過(guò)重寫使你的類更加安全可靠void CB

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論