高級語言程序設計C-課程答辯課件_第1頁
高級語言程序設計C-課程答辯課件_第2頁
高級語言程序設計C-課程答辯課件_第3頁
高級語言程序設計C-課程答辯課件_第4頁
高級語言程序設計C-課程答辯課件_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

《高級語言程序設計(C++)》課程答辯題

目:圖書館管理系統(tǒng)院

系:班

級:學

號:姓

名:《高級語言程序設計(C++)》課程答辯題目:圖書館管系統(tǒng)開發(fā)背景

某民辦高校在創(chuàng)辦初期,辦學規(guī)模比較小。學校的圖書數(shù)量,以及借閱人數(shù)都比較少,所以,一直以來對圖書管理的主要方式是基于文本、表格等紙介質(zhì)的手工處理,對于圖書借閱情況的統(tǒng)計和審核等往往采用對借書卡的人工檢查進行,對借閱者的借閱權限、以及借閱天數(shù)等用人工計算、手抄進行。近年來由于國家對民辦教育的大力扶持,該民辦高校的辦學規(guī)模迅速擴大,學校的硬件設施以及在校學生和職工數(shù)都在成倍增長,給學校的圖書館管理也帶來了巨大的壓力,早期的手工圖書管理方式已經(jīng)不能滿足日益增長的圖書借閱需求。

使用計算機對圖書信息進行管理,具有手工管理所無法比擬的特點。例如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。為了適應學校迅速發(fā)展的趨勢,解決日益尖銳的圖書館管理矛盾,該校提出了采用計算機管理圖書信息的需求。本系統(tǒng)就是基于這個需求進行開發(fā)的。高級語言程序設計C--課程答辯課件

系統(tǒng)需求在圖書管理信息系統(tǒng)開發(fā)時應該滿足以下具體的系統(tǒng)需求:1)滿足圖書借閱管理的基本需求2)滿足圖書書庫管理的基本需求3)滿足圖書借閱人管理的基本需求4)對操作人員的技能要求比較低,操作方便。5)能夠?qū)崿F(xiàn)方便的擴展,滿足圖書館發(fā)展的需要。6)能夠保障圖書館管理數(shù)據(jù)的安全、準確。高級語言程序設計C--課程答辯課件

系統(tǒng)層次模塊圖某學校圖書管理信息系統(tǒng)可以分為5個子模塊:系統(tǒng)登錄、圖書信息管理、讀者信息管理、借書服務管理、還書服務管理,如圖所示。系統(tǒng)層次模塊圖

數(shù)據(jù)庫設計

根據(jù)系統(tǒng)功能設計的要求以及功能模塊的劃分,對于本系統(tǒng)的數(shù)據(jù)庫,可以列出以下數(shù)據(jù)項和數(shù)據(jù)結(jié)構:(1)名稱:登錄信息表表名標識符:CLERK高級語言程序設計C--課程答辯課件(2)名稱:書籍信息表表名標識符:BOOK(3)名稱:讀者信息表表名標識符:READER(3)名稱:讀者信息表(4)名稱:借書信息表表名標識符:BORROW(5)名稱:借還書歷史表表名標識符:HISTORY(5)名稱:借還書歷史表

創(chuàng)建項目

創(chuàng)建一個基于對話框的MFCAppWizard(exe)項目,項目名為Library。為了能在對話框中用ODBC編寫數(shù)據(jù)庫,需在stdafx.h中手動添加支持:#include<afxdb.h>高級語言程序設計C--課程答辯課件

登錄模塊(1)模塊的功能書籍市圖書館最寶貴的財產(chǎn),它的借進借出都應該保證安全。每個管理員用自己的用戶名和密碼登陸,來使用圖書館管理系統(tǒng)。通過某管理員借進和借出的書都有他的標記。這樣就保證了書籍的安全。(2)界面設計設計界面如圖所示。高級語言程序設計C--課程答辯課件對話框?qū)傩栽O置為:IDD_DIALOG_LOGIN。為IDD_DIALOG_LOGIN添加CLoginDlg類其中主要控件的屬性、功能及成員變量如圖所示。對話框?qū)傩栽O置為:IDD_DIALOG_LOGIN。(3)添加CClerkDataSet類與登錄信息表連接(3)添加CClerkDataSet類與登錄信息表連接高級語言程序設計C--課程答辯課件高級語言程序設計C--課程答辯課件(4)代碼編寫①“取消”按鈕——取消輸入,并關閉登錄對話框:②“登錄”按鈕——當管理員填完用戶名和密碼后,單擊“登錄”按鈕,先檢查用戶名和密碼是否合法。然后查找數(shù)據(jù)庫中是否有該管理員的信息,若有則登陸成功。具體代碼如下:voidCLoginDlg::OnConfirm(){ //TODO:Addyourcontrolnotificationhandlercodehere CClerkDataSetmrsDataSet;/*聲明記錄集*/ CStringmSqlStr;

UpdateData(TRUE);

if(m_strName.IsEmpty())/*判斷用戶名信息是否為空*/ { AfxMessageBox("請輸入用戶名!"); return; }

mSqlStr="SELECT*FROMCLERKWHERENAME='";

mSqlStr=mSqlStr+m_strName; mSqlStr=mSqlStr+"'ANDPASSWORD='"; mSqlStr=mSqlStr+m_strPassword; mSqlStr=mSqlStr+"'";if(!mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)) { AfxMessageBox("CLERK表打開失?。?); return; } if(!mrsDataSet.IsEOF()) { //Openallfunctionforuser CDialog::OnOK(); CLibraryDlgdlg; dlg.DoModal(); } else { AfxMessageBox("登錄失??!"); return; }

}(4)代碼編寫voidCLoginDlg::OnConfi主界面模塊(1)模塊的功能通過主界面可以進入每個模塊,是各個模塊切換和聯(lián)系的橋梁。主界面力求簡單,對每個按鈕的功能給予適當簡介。從主界面中可以退出系統(tǒng)。(2)界面設計設計界面如圖所示高級語言程序設計C--課程答辯課件其中主要控件的屬性、功能及成員變量如圖所示。其中主要控件的屬性、功能及成員變量如圖所示。圖書信息模塊(1)模塊的功能圖書信息模塊主要完成圖書信息管理功能,包括瀏覽、查找、添加、刪除和修改。管理員可以根據(jù)使用的需要,依次單擊對應按鈕,來實現(xiàn)這些功能?!g覽功能:管理員可以查看全部圖書信息?!げ檎夜δ埽阂驗闀畻l碼和書籍是一一對應的關系,所以通過書籍條碼可以查找到任意一本書的信息并顯示出來?!ぬ砑庸δ埽嚎梢韵驎碇刑砑有碌臅畔?,系統(tǒng)會自動檢測新的書籍信息中書籍條碼是否在書籍表中存在,確保每本書具有唯一的書籍條碼。·刪除功能:刪除界面上當前現(xiàn)實的書籍信息,系統(tǒng)會彈出確認對話框,提示是否確認刪除,得到確認后,便會刪除該書信息。·修改功能:實現(xiàn)對當前信息的修改,為安全起見,系統(tǒng)默認書籍條目不能修改。圖書信息模塊(2)界面設計設計的界面如圖所示:(2)界面設計對話框?qū)傩栽O置:IDD_DIALOG_BOOK為IDD_DIALOG_BOOK添加CBookDlg類其中主要控件的屬性、功能及成員變量如圖所示。(3)添加CCBookDataSet類與書籍信息表連接對話框?qū)傩栽O置:IDD_DIALOG_BOOK(3)添加CCBookDataSet類與書籍信息表連接(4)代碼編寫①功能函數(shù):把一些常用的功能封裝為成員函數(shù)?!isplayRecord——對話框各控件顯示當先記錄:BOOLCBookDlg::DisplayRecord(){ if(m_rsDataSet.IsEOF()&&m_rsDataSet.IsBOF()) { m_strBookID=""; m_strBookName=""; m_strPress=""; m_strAuthor=""; m_strFlag=""; m_strPressDate=""; } else { if(m_rsDataSet.IsBOF()) { m_rsDataSet.MoveNext(); }

else { if(m_rsDataSet.IsEOF()) { m_rsDataSet.MovePrev(); } } m_strBookID=m_rsDataSet.m_BOOK_ID; m_strBookName=m_rsDataSet.m_BOOK_NAME; m_strPress=m_rsDataSet.m_PRESS; m_strAuthor=m_rsDataSet.m_AUTHOR; m_strFlag=m_rsDataSet.m_FLAG_BORROW; m_strPressDate=m_rsDataSet.m_PRESS_DATE; } UpdateData(FALSE); returnTRUE;

}(3)添加CCBookDataSet類與書籍信息表連接·Di

·SetButtonState——根據(jù)不同的情況,調(diào)整按鈕的狀態(tài)。

如:當?shù)绞子涗浀臅r候,“上一條”按鈕無效。BOOLCBookDlg::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=GetDlgItem(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_CANCEL_REC); pWnd->EnableWindow(FALSE); returnTRUE; }

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=GetDlgItem(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_CANCEL_REC); pWnd->EnableWindow(TRUE);

returnTRUE;

}

·SetButtonStaif(m_rsDataSet.IsBOF()) { pWnd=GetDlgItem(IDC_FIRST); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_PRIOR); pWnd->EnableWindow(FALSE); } else { pWnd=GetDlgItem(IDC_FIRST); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_PRIOR); pWnd->EnableWindow(TRUE); }

if(m_rsDataSet.IsEOF()) { pWnd=GetDlgItem(IDC_NEXT); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_LAST); pWnd->EnableWindow(FALSE); } else { pWnd=GetDlgItem(IDC_NEXT); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_LAST); pWnd->EnableWindow(TRUE);

}

if(m_rsDataSet.IsBOF()&&m_rsDataSet.IsEOF()) { pWnd=GetDlgItem(IDC_EDIT); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_DELETE); pWnd->EnableWindow(FALSE);

} else { pWnd=GetDlgItem(IDC_EDIT); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_DELETE); pWnd->EnableWindow(TRUE);

}

pWnd=GetDlgItem(IDC_NEW); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_ENQUERY); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_SAVE); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_CANCEL_REC); pWnd->EnableWindow(FALSE);

returnTRUE;

}if(m_rsDataSet·SetButtonState——根據(jù)不同的情況,調(diào)整按鈕的狀態(tài)。如:當?shù)绞子涗浀臅r候,“上一條”按鈕無效。②初始化——顯示記錄,設置按鈕、編輯框狀態(tài)。BOOLCBookDlg::OnInitDialog(){ CDialog::OnInitDialog();

//TODO:Addextrainitializationhere m_bAdd=FALSE; m_bEdit=FALSE;

if(!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)) AfxMessageBox("數(shù)據(jù)打開失敗!");

DisplayRecord(); SetButtonState(); SetTextState();

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}·SetButtonState——根據(jù)不同的情況,調(diào)整按鈕的·查詢——不同條件下進行查詢,顯示查詢記錄,設置按鈕狀態(tài)。voidCBookDlg::OnEnquery(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); if(m_strBookIDQ.IsEmpty()&&m_strBookNameQ.IsEmpty()) { m_rsDataSet.m_strFilter=""; m_rsDataSet.Requery(); DisplayRecord(); SetButtonState(); return; } BOOLmAll=FALSE; if(!m_strBookIDQ.IsEmpty()) { m_rsDataSet.m_strFilter="BOOK_ID='"+m_strBookIDQ; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'"; mAll=TRUE; }·查詢——不同條件下進行查詢,顯示查詢記錄,設置按鈕狀態(tài)。vif(!m_strBookNameQ.IsEmpty()) { if(mAll) { m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"ANDBOOK_NAME='"; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+m_strBookNameQ; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'"; } else { m_rsDataSet.m_strFilter="BOOK_NAME='"+m_strBookNameQ; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'"; }

} m_rsDataSet.Requery(); DisplayRecord(); SetButtonState();

}if(!m_strBookNameQ.IsEmpty())·保存——適用于增加和修改狀態(tài),判斷信息的合理性,并進行增加和修改操作。voidCBookDlg::OnSave(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); if(m_strBookID.IsEmpty()||m_strBookName.IsEmpty()) { AfxMessageBox("請輸入相應數(shù)據(jù)!"); return; } if(m_bAdd) { m_rsDataSet.AddNew();

} else { m_rsDataSet.Edit(); }

m_rsDataSet.m_AUTHOR=m_strAuthor; m_rsDataSet.m_BOOK_NAME=m_strBookName; m_rsDataSet.m_BOOK_ID=m_strBookID; m_rsDataSet.m_PRESS=m_strPress; m_rsDataSet.m_FLAG_BORROW=m_strFlag; m_rsDataSet.m_PRESS_DATE=m_strPressDate;

m_rsDataSet.Update(); m_rsDataSet.Requery(); m_bAdd=FALSE; m_bEdit=FALSE; DisplayRecord(); SetButtonState(); SetTextState();

}·保存——適用于增加和修改狀態(tài),判斷信息的合理性,并進行增加全部圖書資料全部圖書資料高級語言程序設計C--課程答辯課件高級語言程序設計C--課程答辯課件借書服務模塊(1)模塊的功能借書模塊主要完成借書操作。首先檢查讀者是否有權借書,超期還書的讀者需與管理員協(xié)商后方可獲得權限再次借書,接著檢查需要借的書籍是否可借,館內(nèi)保留的書籍不可借,一切正常后,登記借書時間、借書管理員ID完成借書。(2)界面設計設計界面如圖所示高級語言程序設計C--課程答辯課件對話框?qū)傩栽O置為:IDD_DIALOG_BORROW。為IDD_DIALOG_BORROW添加CBorrowDlg類其中主要控件的屬性、功能及成員變量如圖所示。對話框?qū)傩栽O置為:IDD_DIALOG_BORROW。(3)添加CBorrowDataSet類與登錄信息表連接(4)代碼編寫①“確定”按鈕——檢查讀者和書籍是否合理,若任意一項不合理,則給出警告信息,若合理,添加成功。voidCBorrowDlg::OnConfirm(){ //TODO:Addyourcontrolnotificationhandlercodehere //TODO:Addyourcontrolnotificationhandlercodehere BOOLm_bCanBorrow; BOOLm_bCanLendOut; m_bCanBorrow=FALSE; m_bCanLendOut=FALSE; CStringmSqlStr;

UpdateData(TRUE);

if(!m_rsReaderDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)) { AfxMessageBox("數(shù)據(jù)表打開錯誤!"); return; }

m_rsReaderDataSet.m_strFilter="READER_ID='"+m_strReaderID; m_rsReaderDataSet.m_strFilter=m_rsReaderDataSet.m_strFilter+"'"; m_rsReaderDataSet.Requery();

(3)添加CBorrowDataSet類與登錄信息表連接voif(!m_rsReaderDataSet.IsEOF()) { if(m_rsReaderDataSet.m_FLAG_BORROW=="Y") { mSqlStr="SELECT*FROMBORROWWHEREREADER_ID='"+m_strReaderID; mSqlStr=mSqlStr+"'";

if(!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)) { m_rsReaderDataSet.Close(); AfxMessageBox("數(shù)據(jù)表打開錯誤!"); return;

}

//Addsomecodetodeterminethenumofbookwhichthisreaderborrowed. m_bCanBorrow=TRUE; m_rsDataSet.Close(); } } m_rsReaderDataSet.Close();

if(!m_bCanBorrow) { AfxMessageBox("讀者不能借書!"); return; }if(!m_rsReaderDataSet.IsEOF()mSqlStr="SELECT*FROMBOOKWHEREBOOK_ID='"+m_strBookID; mSqlStr=mSqlStr+"'";

if(!m_rsBookDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)) { AfxMessageBox("數(shù)據(jù)表打開錯誤!"); return; } if(!m_rsBookDataSet.IsEOF()) { if(m_rsBookDataSet.m_FLAG_BORROW=="Y") { m_bCanLendOut=TRUE; } else { AfxMessageBox("此書不外借!"); m_rsBookDataSet.Close(); return; } } else { AfxMessageBox("無此書!"); m_rsBookDataSet.Close(); return; }

m_rsBookDataSet.Close();

mSqlStr="SELECT*FROMBOOKCStringm_strUserID; m_strUserID=theApp.m_strUserName;

COleDateTimem_CurrentTime=COleDateTime::GetCurrentTime(); CStringstrTime; inty=m_CurrentTime.GetYear(); intm=m_CurrentTime.GetMonth(); intd=m_CurrentTime.GetDay(); strTime.Format("%d-%d-%d",y,m,d); mSqlStr="INSERTINTOBORROW(READER_ID,BOOK_ID,BORROW_DATE,B_CLERK_ID)VALUES('"; mSqlStr=mSqlStr+m_strReaderID; mSqlStr=mSqlStr+"','"; mSqlStr=mSqlStr+m_strBookID; mSqlStr=mSqlStr+"','"; mSqlStr=mSqlStr+strTime; mSqlStr=mSqlStr+"','"; mSqlStr=mSqlStr+m_strUserID; mSqlStr=mSqlStr+"')";

CDatabasemDB; if(!mDB.Open(_T("Library"))) { AfxMessageBox("無法打開數(shù)據(jù)庫!"); return; }

CStringm_strUserID;try { mDB.ExecuteSQL(mSqlStr); }

catch(CDBExceptione) { AfxMessageBox("執(zhí)行錯!"); return; }

mDB.Close(); AfxMessageBox("操作成功!");}try還書服務模塊(1)模塊的功能還書模塊主要完成還書工作,首先檢查此次行為是否超期還書,若是,則鎖定讀者然后辦理還書業(yè)務。被鎖定的讀者需與管理員協(xié)商后,方可解鎖繼續(xù)借書。(2)界面設計設計的界面如圖所示:還書服務模塊對話框?qū)傩栽O置:IDD_DIALOG_RETURN為IDD_DIALOG_RETURN添加CReturnDlg類其中主要控件的屬性、功能及成員變量如圖所示。對話框?qū)傩栽O置:IDD_DIALOG_RETURN(3)添加CBorrowSet類與書籍信息表連接(4)代碼編寫:①功能函數(shù):把一些常用的功能封裝為成員函數(shù)?!ryBorrow——根據(jù)輸入的書籍條目,自動查詢借此書的借閱信息,計算是否超期等?!nsert_History——書的借還還應做記錄,以備以后查用·SetTxtNull——清空編輯框。·setTxtDisable——使編輯框處于只讀狀態(tài)·Delete_Borrow——當還書成功時,應該從借書信息表中刪除該信息②回車事件——管理員輸入書籍條目后,按下Enter鍵,開始分析此書的借閱情況。③按鍵功能還書——分析書籍借閱信息,根據(jù)返回結(jié)果進行相應處理。(3)添加CBorrowSet類與書籍信息表連接《高級語言程序設計(C++)》課程答辯題

目:圖書館管理系統(tǒng)院

系:班

級:學

號:姓

名:《高級語言程序設計(C++)》課程答辯題目:圖書館管系統(tǒng)開發(fā)背景

某民辦高校在創(chuàng)辦初期,辦學規(guī)模比較小。學校的圖書數(shù)量,以及借閱人數(shù)都比較少,所以,一直以來對圖書管理的主要方式是基于文本、表格等紙介質(zhì)的手工處理,對于圖書借閱情況的統(tǒng)計和審核等往往采用對借書卡的人工檢查進行,對借閱者的借閱權限、以及借閱天數(shù)等用人工計算、手抄進行。近年來由于國家對民辦教育的大力扶持,該民辦高校的辦學規(guī)模迅速擴大,學校的硬件設施以及在校學生和職工數(shù)都在成倍增長,給學校的圖書館管理也帶來了巨大的壓力,早期的手工圖書管理方式已經(jīng)不能滿足日益增長的圖書借閱需求。

使用計算機對圖書信息進行管理,具有手工管理所無法比擬的特點。例如:檢索迅速、查找方便、可靠性高、存儲量大、保密性好、壽命長、成本低等。為了適應學校迅速發(fā)展的趨勢,解決日益尖銳的圖書館管理矛盾,該校提出了采用計算機管理圖書信息的需求。本系統(tǒng)就是基于這個需求進行開發(fā)的。高級語言程序設計C--課程答辯課件

系統(tǒng)需求在圖書管理信息系統(tǒng)開發(fā)時應該滿足以下具體的系統(tǒng)需求:1)滿足圖書借閱管理的基本需求2)滿足圖書書庫管理的基本需求3)滿足圖書借閱人管理的基本需求4)對操作人員的技能要求比較低,操作方便。5)能夠?qū)崿F(xiàn)方便的擴展,滿足圖書館發(fā)展的需要。6)能夠保障圖書館管理數(shù)據(jù)的安全、準確。高級語言程序設計C--課程答辯課件

系統(tǒng)層次模塊圖某學校圖書管理信息系統(tǒng)可以分為5個子模塊:系統(tǒng)登錄、圖書信息管理、讀者信息管理、借書服務管理、還書服務管理,如圖所示。系統(tǒng)層次模塊圖

數(shù)據(jù)庫設計

根據(jù)系統(tǒng)功能設計的要求以及功能模塊的劃分,對于本系統(tǒng)的數(shù)據(jù)庫,可以列出以下數(shù)據(jù)項和數(shù)據(jù)結(jié)構:(1)名稱:登錄信息表表名標識符:CLERK高級語言程序設計C--課程答辯課件(2)名稱:書籍信息表表名標識符:BOOK(3)名稱:讀者信息表表名標識符:READER(3)名稱:讀者信息表(4)名稱:借書信息表表名標識符:BORROW(5)名稱:借還書歷史表表名標識符:HISTORY(5)名稱:借還書歷史表

創(chuàng)建項目

創(chuàng)建一個基于對話框的MFCAppWizard(exe)項目,項目名為Library。為了能在對話框中用ODBC編寫數(shù)據(jù)庫,需在stdafx.h中手動添加支持:#include<afxdb.h>高級語言程序設計C--課程答辯課件

登錄模塊(1)模塊的功能書籍市圖書館最寶貴的財產(chǎn),它的借進借出都應該保證安全。每個管理員用自己的用戶名和密碼登陸,來使用圖書館管理系統(tǒng)。通過某管理員借進和借出的書都有他的標記。這樣就保證了書籍的安全。(2)界面設計設計界面如圖所示。高級語言程序設計C--課程答辯課件對話框?qū)傩栽O置為:IDD_DIALOG_LOGIN。為IDD_DIALOG_LOGIN添加CLoginDlg類其中主要控件的屬性、功能及成員變量如圖所示。對話框?qū)傩栽O置為:IDD_DIALOG_LOGIN。(3)添加CClerkDataSet類與登錄信息表連接(3)添加CClerkDataSet類與登錄信息表連接高級語言程序設計C--課程答辯課件高級語言程序設計C--課程答辯課件(4)代碼編寫①“取消”按鈕——取消輸入,并關閉登錄對話框:②“登錄”按鈕——當管理員填完用戶名和密碼后,單擊“登錄”按鈕,先檢查用戶名和密碼是否合法。然后查找數(shù)據(jù)庫中是否有該管理員的信息,若有則登陸成功。具體代碼如下:voidCLoginDlg::OnConfirm(){ //TODO:Addyourcontrolnotificationhandlercodehere CClerkDataSetmrsDataSet;/*聲明記錄集*/ CStringmSqlStr;

UpdateData(TRUE);

if(m_strName.IsEmpty())/*判斷用戶名信息是否為空*/ { AfxMessageBox("請輸入用戶名!"); return; }

mSqlStr="SELECT*FROMCLERKWHERENAME='";

mSqlStr=mSqlStr+m_strName; mSqlStr=mSqlStr+"'ANDPASSWORD='"; mSqlStr=mSqlStr+m_strPassword; mSqlStr=mSqlStr+"'";if(!mrsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE,mSqlStr)) { AfxMessageBox("CLERK表打開失?。?); return; } if(!mrsDataSet.IsEOF()) { //Openallfunctionforuser CDialog::OnOK(); CLibraryDlgdlg; dlg.DoModal(); } else { AfxMessageBox("登錄失?。?); return; }

}(4)代碼編寫voidCLoginDlg::OnConfi主界面模塊(1)模塊的功能通過主界面可以進入每個模塊,是各個模塊切換和聯(lián)系的橋梁。主界面力求簡單,對每個按鈕的功能給予適當簡介。從主界面中可以退出系統(tǒng)。(2)界面設計設計界面如圖所示高級語言程序設計C--課程答辯課件其中主要控件的屬性、功能及成員變量如圖所示。其中主要控件的屬性、功能及成員變量如圖所示。圖書信息模塊(1)模塊的功能圖書信息模塊主要完成圖書信息管理功能,包括瀏覽、查找、添加、刪除和修改。管理員可以根據(jù)使用的需要,依次單擊對應按鈕,來實現(xiàn)這些功能?!g覽功能:管理員可以查看全部圖書信息。·查找功能:因為書籍條碼和書籍是一一對應的關系,所以通過書籍條碼可以查找到任意一本書的信息并顯示出來?!ぬ砑庸δ埽嚎梢韵驎碇刑砑有碌臅畔?,系統(tǒng)會自動檢測新的書籍信息中書籍條碼是否在書籍表中存在,確保每本書具有唯一的書籍條碼?!h除功能:刪除界面上當前現(xiàn)實的書籍信息,系統(tǒng)會彈出確認對話框,提示是否確認刪除,得到確認后,便會刪除該書信息?!ば薷墓δ埽簩崿F(xiàn)對當前信息的修改,為安全起見,系統(tǒng)默認書籍條目不能修改。圖書信息模塊(2)界面設計設計的界面如圖所示:(2)界面設計對話框?qū)傩栽O置:IDD_DIALOG_BOOK為IDD_DIALOG_BOOK添加CBookDlg類其中主要控件的屬性、功能及成員變量如圖所示。(3)添加CCBookDataSet類與書籍信息表連接對話框?qū)傩栽O置:IDD_DIALOG_BOOK(3)添加CCBookDataSet類與書籍信息表連接(4)代碼編寫①功能函數(shù):把一些常用的功能封裝為成員函數(shù)?!isplayRecord——對話框各控件顯示當先記錄:BOOLCBookDlg::DisplayRecord(){ if(m_rsDataSet.IsEOF()&&m_rsDataSet.IsBOF()) { m_strBookID=""; m_strBookName=""; m_strPress=""; m_strAuthor=""; m_strFlag=""; m_strPressDate=""; } else { if(m_rsDataSet.IsBOF()) { m_rsDataSet.MoveNext(); }

else { if(m_rsDataSet.IsEOF()) { m_rsDataSet.MovePrev(); } } m_strBookID=m_rsDataSet.m_BOOK_ID; m_strBookName=m_rsDataSet.m_BOOK_NAME; m_strPress=m_rsDataSet.m_PRESS; m_strAuthor=m_rsDataSet.m_AUTHOR; m_strFlag=m_rsDataSet.m_FLAG_BORROW; m_strPressDate=m_rsDataSet.m_PRESS_DATE; } UpdateData(FALSE); returnTRUE;

}(3)添加CCBookDataSet類與書籍信息表連接·Di

·SetButtonState——根據(jù)不同的情況,調(diào)整按鈕的狀態(tài)。

如:當?shù)绞子涗浀臅r候,“上一條”按鈕無效。BOOLCBookDlg::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=GetDlgItem(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_CANCEL_REC); pWnd->EnableWindow(FALSE); returnTRUE; }

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=GetDlgItem(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_CANCEL_REC); pWnd->EnableWindow(TRUE);

returnTRUE;

}

·SetButtonStaif(m_rsDataSet.IsBOF()) { pWnd=GetDlgItem(IDC_FIRST); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_PRIOR); pWnd->EnableWindow(FALSE); } else { pWnd=GetDlgItem(IDC_FIRST); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_PRIOR); pWnd->EnableWindow(TRUE); }

if(m_rsDataSet.IsEOF()) { pWnd=GetDlgItem(IDC_NEXT); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_LAST); pWnd->EnableWindow(FALSE); } else { pWnd=GetDlgItem(IDC_NEXT); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_LAST); pWnd->EnableWindow(TRUE);

}

if(m_rsDataSet.IsBOF()&&m_rsDataSet.IsEOF()) { pWnd=GetDlgItem(IDC_EDIT); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_DELETE); pWnd->EnableWindow(FALSE);

} else { pWnd=GetDlgItem(IDC_EDIT); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_DELETE); pWnd->EnableWindow(TRUE);

}

pWnd=GetDlgItem(IDC_NEW); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_ENQUERY); pWnd->EnableWindow(TRUE); pWnd=GetDlgItem(IDC_SAVE); pWnd->EnableWindow(FALSE); pWnd=GetDlgItem(IDC_CANCEL_REC); pWnd->EnableWindow(FALSE);

returnTRUE;

}if(m_rsDataSet·SetButtonState——根據(jù)不同的情況,調(diào)整按鈕的狀態(tài)。如:當?shù)绞子涗浀臅r候,“上一條”按鈕無效。②初始化——顯示記錄,設置按鈕、編輯框狀態(tài)。BOOLCBookDlg::OnInitDialog(){ CDialog::OnInitDialog();

//TODO:Addextrainitializationhere m_bAdd=FALSE; m_bEdit=FALSE;

if(!m_rsDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)) AfxMessageBox("數(shù)據(jù)打開失?。?);

DisplayRecord(); SetButtonState(); SetTextState();

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}·SetButtonState——根據(jù)不同的情況,調(diào)整按鈕的·查詢——不同條件下進行查詢,顯示查詢記錄,設置按鈕狀態(tài)。voidCBookDlg::OnEnquery(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); if(m_strBookIDQ.IsEmpty()&&m_strBookNameQ.IsEmpty()) { m_rsDataSet.m_strFilter=""; m_rsDataSet.Requery(); DisplayRecord(); SetButtonState(); return; } BOOLmAll=FALSE; if(!m_strBookIDQ.IsEmpty()) { m_rsDataSet.m_strFilter="BOOK_ID='"+m_strBookIDQ; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'"; mAll=TRUE; }·查詢——不同條件下進行查詢,顯示查詢記錄,設置按鈕狀態(tài)。vif(!m_strBookNameQ.IsEmpty()) { if(mAll) { m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"ANDBOOK_NAME='"; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+m_strBookNameQ; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'"; } else { m_rsDataSet.m_strFilter="BOOK_NAME='"+m_strBookNameQ; m_rsDataSet.m_strFilter=m_rsDataSet.m_strFilter+"'"; }

} m_rsDataSet.Requery(); DisplayRecord(); SetButtonState();

}if(!m_strBookNameQ.IsEmpty())·保存——適用于增加和修改狀態(tài),判斷信息的合理性,并進行增加和修改操作。voidCBookDlg::OnSave(){ //TODO:Addyourcontrolnotificationhandlercodehere UpdateData(TRUE); if(m_strBookID.IsEmpty()||m_strBookName.IsEmpty()) { AfxMessageBox("請輸入相應數(shù)據(jù)!"); return; } if(m_bAdd) { m_rsDataSet.AddNew();

} else { m_rsDataSet.Edit(); }

m_rsDataSet.m_AUTHOR=m_strAuthor; m_rsDataSet.m_BOOK_NAME=m_strBookName; m_rsDataSet.m_BOOK_ID=m_strBookID; m_rsDataSet.m_PRESS=m_strPress; m_rsDataSet.m_FLAG_BORROW=m_strFlag; m_rsDataSet.m_PRESS_DATE=m_strPressDate;

m_rsDataSet.Update(); m_rsDataSet.Requery(); m_bAdd=FALSE; m_bEdit=FALSE; DisplayRecord(); SetButtonState(); SetTextState();

}·保存——適用于增加和修改狀態(tài),判斷信息的合理性,并進行增加全部圖書資料全部圖書資料高級語言程序設計C--課程答辯課件高級語言程序設計C--課程答辯課件借書服務模塊(1)模塊的功能借書模塊主要完成借書操作。首先檢查讀者是否有權借書,超期還書的讀者需與管理員協(xié)商后方可獲得權限再次借書,接著檢查需要借的書籍是否可借,館內(nèi)保留的書籍不可借,一切正常后,登記借書時間、借書管理員ID完成借書。(2)界面設計設計界面如圖所示高級語言程序設計C--課程答辯課件對話框?qū)傩栽O置為:IDD_DIALOG_BORROW。為IDD_DIALOG_BORROW添加CBorrowDlg類其中主要控件的屬性、功能及成員變量如圖所示。對話框?qū)傩栽O置為:IDD_DIALOG_BORROW。(3)添加CBorrowDataSet類與登錄信息表連接(4)代碼編寫①“確定”按鈕——檢查讀者和書籍是否合理,若任意一項不合理,則給出警告信息,若合理,添加成功。voidCBorrowDlg::OnConfirm(){ //TODO:Addyourcontrolnotificationhandlercodehere //TODO:Addyourcontrolnotificationhandlercodehere BOOLm_bCanBorrow; BOOLm_bCanLendOut; m_bCanBorrow=FALSE; m_bCanLendOut=FALSE; CStringmSqlStr;

UpdateData(TRUE);

if(!m_rsReaderDataSet.Open(AFX_DB_USE_DEFAULT_TYPE)) { AfxMessageBox("數(shù)據(jù)表打開錯誤!"); return; }

m_rsReaderDataSet.m_strFilter="READER_ID='"+m_strReaderID; m_rsReaderDataSet.m_strFilter=m_rsReaderDataSet.m_strFilter+"'"; m_rsReaderDataSet.Requery();

(3)添加CBorrowDataSet類與登錄信息表連接voif(!m_rsReaderDataSet.IsEOF()) { if(m_rsReaderDataSet.m_FLAG_BORROW=="Y") { mSqlStr

溫馨提示

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

最新文檔

評論

0/150

提交評論