《Visual C++ 6.0程序設(shè)計(jì)》課件第10章_第1頁
《Visual C++ 6.0程序設(shè)計(jì)》課件第10章_第2頁
《Visual C++ 6.0程序設(shè)計(jì)》課件第10章_第3頁
《Visual C++ 6.0程序設(shè)計(jì)》課件第10章_第4頁
《Visual C++ 6.0程序設(shè)計(jì)》課件第10章_第5頁
已閱讀5頁,還剩191頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第10章綜合應(yīng)用題目:學(xué)生成績信息管理系統(tǒng)應(yīng)用程序的設(shè)計(jì)題目:學(xué)生成績信息管理系統(tǒng)應(yīng)用程序的設(shè)計(jì)

1.目的和要求

(1)掌握用VisualC++6.0開發(fā)環(huán)境開發(fā)軟件的方法;

(2)熟悉獲得幫助的方法;

(3)掌握SDI應(yīng)用程序結(jié)構(gòu),熟悉MDI及基于對話框的應(yīng)用程序的編程方法;

(4)掌握圖標(biāo)、菜單、工具欄、對話框等資源的編輯;

(5)掌握對話框、常用控件的使用方法;

(6)熟悉文檔視圖結(jié)構(gòu);

(7)熟悉切分窗口和多視圖的控制方法;

(8)掌握用MFC編寫ODBC數(shù)據(jù)庫應(yīng)用程序的方法和技巧。

2.操作界面

用戶操作主界面如圖10-1所示。圖10-1用戶操作主界面

3.要求實(shí)現(xiàn)的功能

(1)用戶可以滾動瀏覽學(xué)生成績信息,并管理數(shù)據(jù)庫中的數(shù)據(jù);

(2)用戶可以增加學(xué)生成績信息;

(3)用戶可以刪除學(xué)生成績信息;

(4)用戶可按學(xué)生學(xué)號或考試科目查詢學(xué)生信息;

(5)用戶可根據(jù)考試科目按分?jǐn)?shù)由高到低進(jìn)行排序顯示;

(6)用戶進(jìn)行添加或刪除學(xué)生成績信息時(shí)需要進(jìn)行用戶信息登錄認(rèn)證,認(rèn)證合格方可進(jìn)行相關(guān)操作。用戶添加或刪除完學(xué)生成績信息后,可進(jìn)行登出操作,即禁止添加和刪除信息,以防止學(xué)生成績信息被無關(guān)人員惡意更改。用戶按照考試科目查詢學(xué)生信息后,還可以將該科目的學(xué)生成績以直方圖進(jìn)行顯示,以便能直觀閱讀學(xué)生各分?jǐn)?shù)段的百分比分布。

4.程序的實(shí)現(xiàn)

根據(jù)要求實(shí)現(xiàn)的功能,可按以下幾個(gè)步驟進(jìn)行程序的設(shè)計(jì):

(1)建立一個(gè)名為“studentmarks”的Access數(shù)據(jù)庫;

(2)添加ODBC數(shù)據(jù)庫源;

(3)建立一個(gè)帶有ODBC數(shù)據(jù)庫支持功能的單文檔界面的工程文件;

(4)設(shè)計(jì)用戶操作主界面;

(5)實(shí)現(xiàn)學(xué)生成績信息瀏覽功能;

(6)實(shí)現(xiàn)用戶登錄認(rèn)證和用戶登出功能;

(7)實(shí)現(xiàn)學(xué)生成績信息添加功能;

(8)實(shí)現(xiàn)學(xué)生成績信息刪除功能;

(9)實(shí)現(xiàn)學(xué)生成績按學(xué)生學(xué)號和按考試科目查詢功能;

(10)實(shí)現(xiàn)學(xué)生成績按考試科目排序功能;

(11)實(shí)現(xiàn)按考試科目查詢并顯示學(xué)生成績分布直方圖功能。

5.程序設(shè)計(jì)步驟

1)建立一個(gè)名為“studentmarks”的Access數(shù)據(jù)庫

下面首先建立一個(gè)名為“studentmarks”的Access數(shù)據(jù)庫,用于存儲學(xué)生信息,其操作步驟如下:

(1)運(yùn)行“MicrosoftAccess”應(yīng)用程序。

(2)選擇“文件/新建”命令,打開“新建文件”任務(wù)窗格,單擊超級鏈接,如圖10-2所示。

(3)打開“文件新建數(shù)據(jù)庫”對話框,在“保存位置”下拉列表框中選擇數(shù)據(jù)庫的保存路徑“d:\lacyfiles\vc教程”;在“文件名”文本框中輸入“studentmarks.mdb”為新建的數(shù)據(jù)庫命名,單擊按鈕,如圖10-3所示。

(4)返回“MicrosoftAccess”程序的操作界面,在出現(xiàn)的數(shù)據(jù)庫設(shè)計(jì)工作區(qū)中,單擊按鈕,如圖10-4所示。圖10-2“新建文件”任務(wù)窗格圖10-3“文件新建數(shù)據(jù)庫”對話框圖10-4數(shù)據(jù)庫設(shè)計(jì)工作區(qū)

(5)打開“表1:表”窗口,如圖10-5所示,在其中定義如表10-1所示的數(shù)據(jù)庫表各字段名稱及數(shù)據(jù)類型。圖10-5定義數(shù)據(jù)庫表

(6)單擊按鈕關(guān)閉對話框,打開“是否保存對表1的更改”提示框,單擊按鈕,如圖10-6所示。

(7)打開“另存為”對話框,在“表名稱”文本框中輸入“studenttable”為表命名,單擊按鈕,如圖10-7所示。

(8)返回?cái)?shù)據(jù)庫設(shè)計(jì)工作區(qū),雙擊“studenttable”選項(xiàng),打開“studenttable:表”數(shù)據(jù)庫表,輸入初始學(xué)生信息,如圖10-8所示。這樣就建立了一個(gè)名為“studentmarks”的Access數(shù)據(jù)庫。圖10-6“是否保存對表1的更改”提示框圖10-7“另存為”對話框圖10-8輸入初始學(xué)生信息

2)添加ODBC數(shù)據(jù)庫源

添加ODBC數(shù)據(jù)庫源的操作步驟如下:

(1)單擊任務(wù)欄的按鈕,彈出開始菜單,選擇“控制面板”命令,打開“控制面板”窗口,單擊超級鏈接,打開“性能和維護(hù)”窗口,再打開“管理工具”窗口,單擊其中的“數(shù)據(jù)源”圖標(biāo),如圖10-9所示。

(2)打開“ODBC數(shù)據(jù)源管理器”對話框,選擇“用戶DSN”選項(xiàng)卡,單擊按鈕,如圖10-10所示。圖10-9“管理工具”窗口圖10-10“ODBC數(shù)據(jù)源管理器”窗口

(3)打開“創(chuàng)建新數(shù)據(jù)源”對話框,在“用戶數(shù)據(jù)源”列表框中選擇“MicrosoftAccessDrive(*.mdb)”選項(xiàng),單擊按鈕,如圖10-11所示。

(4)打開“ODBCMicrosoftAccess安裝”對話框,在“數(shù)據(jù)源名”文本框中輸入“studentmarks”,單擊按鈕,如圖10-12所示。

(5)打開“選擇數(shù)據(jù)庫”對話框,在“驅(qū)動器”下拉列表框中選擇創(chuàng)建的“studentmarks.mdb”數(shù)據(jù)庫所在的驅(qū)動器,在“目錄”列表框中選擇數(shù)據(jù)庫所在位置的路徑,在“數(shù)據(jù)庫名”列表框中出現(xiàn)“studentmarks.mdb”文件,選擇該文件,然后單擊按鈕,如圖10-13所示。回到“ODBCMicrosoft*Access安裝”對話框,單擊按鈕。圖10-11“創(chuàng)建新數(shù)據(jù)源”對話框圖10-12“ODBCMicrosoftAccess安裝”對話框

(6)返回“ODBC數(shù)據(jù)源管理器”對話框,在“用戶DSN”選項(xiàng)卡的“用戶數(shù)據(jù)源”列表框中可看到新增加的用戶ODBC數(shù)據(jù)源“studentmarks”,單擊按鈕,如圖10-14所示。這樣就建立了一個(gè)名為“studentmarks”的用戶ODBC數(shù)據(jù)源。圖10-13“選擇數(shù)據(jù)庫”對話框圖10-14“ODBC數(shù)據(jù)源管理器”對話框

3)建立一個(gè)帶有ODBC數(shù)據(jù)庫支持功能的單文檔界面的工程文件

建立一個(gè)帶有ODBC數(shù)據(jù)庫支持功能的單文檔界面的工程文件的操作步驟如下:

(1)打開VisualC++6.0,選擇“文件/新建”命令,打開“新建”對話框。

(2)單擊“工程”選項(xiàng)卡,在列表中選擇“MFC能性AppWizard(exe)”選項(xiàng),在“位置”文本框中輸入該工程的路徑,在“工程”文本框中輸入工程名“chap10”,單擊按鈕,如圖10-15所示。圖10-15“新建”對話框

(3)打開“MFCAppWizard-Step1”對話框,選中

單選項(xiàng),單擊按鈕,如圖10-16所示。

(4)打開“MFCAppWizard-Step2of6”對話框,選中

單選項(xiàng),單擊按鈕,如圖10-17所示。

(5)打開“DatabaseOptions”對話框,在“Datasource”欄中選中單選項(xiàng);在右側(cè)的下拉列表框中選擇“studentmarks”選項(xiàng),單擊按鈕,如圖10-18所示。圖10-16“MFCAppWizard-Step1”對話框圖10-17“MFCAppWizard-Step2of6”對話框圖10-18“DatabaseOptions”對框

(6)打開“SelectDatabaseTables”對話框,選擇“studenttable”選項(xiàng),單擊按鈕,如圖10-19所示。

(7)打開“MFCAppWizard-Step2of6”對話框,單擊

按鈕,如圖10-20所示。打開“新建工程信息”對話框,單擊按鈕,這樣就建立了一個(gè)ODBC支持的工程文件。

圖10-19“SelectDatabaseTables”對話框圖10-20“MFCAppWizard-Step2of6”對話框

4)設(shè)計(jì)用戶操作主界面

現(xiàn)在已經(jīng)生成了一個(gè)帶有數(shù)據(jù)庫支持功能的單文檔界面的工程文件,并且系統(tǒng)自動生成一個(gè)名為“IDD_CHAP10_FORM”的對話框,它將自動顯示。下面就利用該對話框作為用戶操作主界面進(jìn)行設(shè)計(jì)。

用戶操作主界面中包含學(xué)生成績信息瀏覽、學(xué)生成績信息查詢、學(xué)生成績信息添加和按考試科目排序?qū)W生成績4個(gè)交互功能部分,在進(jìn)行界面設(shè)計(jì)時(shí)利用控件GroupBox(分組框)將對話框進(jìn)行功能分區(qū)。

其操作步驟為:在VisualC++6.0主窗口中單擊“ResourceView”選項(xiàng)卡,展開選項(xiàng),雙擊選項(xiàng)。在右側(cè)的對話框編輯區(qū)中利用分組框、編輯框、靜態(tài)文本、組合框、按鈕、列表框設(shè)計(jì)主界面,完成后的效果如圖10-21所示。圖10-21設(shè)計(jì)用戶操作主界面其中各功能區(qū)所使用的控件說明如表10-2~表10-5所示。

5)實(shí)現(xiàn)學(xué)生成績信息瀏覽功能

建立工程文件時(shí),系統(tǒng)菜單中已經(jīng)自動生成“記錄”菜單,其中包含“第一個(gè)記錄”、“前一個(gè)記錄”、“下一個(gè)記錄”、“最后一個(gè)記錄”4個(gè)選項(xiàng),其ID分別對應(yīng)為“ID_RECORD_FIRST”、“ID_RECORD_PREV”、“ID_RECORD_NEXT”、“ID_RECORD_LAST”。

下面利用這4個(gè)選項(xiàng)完成對學(xué)生成績信息的瀏覽功能,并將結(jié)果在主操作界面的“成績?yōu)g覽”功能區(qū)中顯示出來。

(1)添加成員變量。信息瀏覽操作是通過選擇“記錄”菜單欄中的子菜單瀏覽“studentmarks”數(shù)據(jù)庫表“studenttable”字段中的記錄內(nèi)容,并顯示到編輯框中來實(shí)現(xiàn)的,需要用到對編輯框的操作,因此有必要為其添加成員變量。

其操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,單擊“MessageVariables”選項(xiàng)卡;在“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ControlIDs”列表框中選擇“IDC_SHOWMARK”選項(xiàng),單擊按鈕,如圖10-22所示。圖10-22“MFCClassWizard”對話框③打開“AddMemberVariable”對話框,在“Membervariablename”下拉列表框中輸入“m_showmark”,在“Variabletype”下拉列表框中選擇“float”選項(xiàng),單擊按鈕,如圖10-23所示。

④返回“MFCClassWizard”對話框,可以看到在“ControlIDs”列表框中增加了“IDC_SHOWMARK”成員變量,類型為float,變量名為m_showmark,如圖10-24所示。

⑤使用同樣的方法為“ControlIDs”列表框中的選項(xiàng)添加如表10-6所示的成員變量。圖10-23“AddMemberVariable”對話框圖10-24添加“m_showmark”成員變量

(2)添加成員函數(shù)。操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,單擊“MessageMaps”選項(xiàng)卡;在“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ObjectIDs”列表框中選擇“ID_RECORD_FIRST”選項(xiàng);在“Messages”下拉列表框中選擇“COMMAND”選項(xiàng),單擊按鈕,如圖10-25所示。

③打開“AddMemberFunction”對話框,單擊按鈕,如圖10-26所示。圖10-25“MFCClassWizard”對話框圖10-26“AddMemberFunction”對話框④返回“MFCClassWizard”對話框,可看到在“Memberfunctions”列表框中已增加了名為“OnRecordFirst”的成員函數(shù),如圖10-27所示。

⑤在“ObjectIDs”列表框中選擇“ID_RECORD_LAST”選項(xiàng);在“Messages”列表框中選擇“COMMAND”選項(xiàng),單擊

按鈕,打開“AddMemberFunction”對話框,單擊

按鈕,如圖10-28所示。

⑥在“ObjectIDs”列表框中選擇“ID_RECORD_NEXT”選項(xiàng);在“Messages”列表框中選擇“COMMAND”選項(xiàng),單擊

按鈕,打開“AddMemberFunction”對話框,單擊

按鈕,如圖10-29所示。圖10-27添加“OnRecordFirst”成員函數(shù)圖10-28“AddMemberFunction”對話框圖10-29“AddMemberFunction”對話框⑦繼續(xù)在“ObjectIDs”列表框中選擇“ID_RECORD_PREV”選項(xiàng);在“Messages”列表框中選擇“COMMAND”選項(xiàng),單擊

按鈕,打開“AddMemberFunction”對話框,單擊

按鈕,如圖10-30所示。返回“MFCClassWizard”對話框中,單擊按鈕,完成成員函數(shù)的添加。圖10-30“AddMemberFunction”對話框

(3)修改成員函數(shù)的函數(shù)體內(nèi)容。操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),單擊選項(xiàng)右邊的圖標(biāo)展開其選項(xiàng),雙擊選項(xiàng),在右側(cè)編輯區(qū)中,光標(biāo)將出現(xiàn)在該函數(shù)體的起始位置,將其函數(shù)體修改為:

voidCChap10View::OnRecordFirst()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MoveFirst();//數(shù)據(jù)庫表記錄集指針移動到數(shù)據(jù)庫起始位置

m_showsname=m_pSet->m_studentname;

//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsnum=m_pSet->m_studentnum;

//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsub=m_pSet->m_subject;

//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showmark=m_pSet->m_mark;

//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

UpdateData(FALSE);

//將數(shù)據(jù)顯示在編輯框中

}提示:m_pSet為系統(tǒng)自動生成的CRecordset派生類Chap10Set的對象指針,使用該指針可以對數(shù)據(jù)庫表中的內(nèi)容進(jìn)行操作。其中m_pSet->m_studentname、m_pSet->m_studentnun、m_pSet->m_subject、m_pSet->m_mark分別對應(yīng)“studentmarks”數(shù)據(jù)庫表“studenttable”中的studentname、studentnum、subject、mark四個(gè)字段當(dāng)前數(shù)據(jù)庫表記錄集指針位置的數(shù)據(jù)。

②在項(xiàng)目工作區(qū)窗口中雙擊選項(xiàng),在右側(cè)編輯窗口中將其函數(shù)體修改為:voidCChap10View::OnRecordLast()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MoveLast();//數(shù)據(jù)庫表記錄集指針移動到數(shù)據(jù)庫起始位置

m_showsname=m_pSet->m_studentname;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsnum=m_pSet->m_studentnum;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsub=m_pSet->m_subject;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showmark=m_pSet->m_mark;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

UpdateData(FALSE);//將數(shù)據(jù)顯示在編輯框中

}③在項(xiàng)目工作區(qū)窗口中雙擊選項(xiàng),在右側(cè)編輯窗口中將其函數(shù)體修改為:

voidCChap10View::OnRecordNext()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MoveNext();//數(shù)據(jù)庫表記錄集指針當(dāng)前位置向后移動一條記錄

m_showsname=m_pSet->m_studentname;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsnum=m_pSet->m_studentnum;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsub=m_pSet->m_subject;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showmark=m_pSet->m_mark;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

UpdateData(FALSE);//將數(shù)據(jù)顯示在編輯框中

}④在項(xiàng)目工作區(qū)窗口中雙擊選項(xiàng),在右側(cè)編輯窗口中將其函數(shù)體修改為:

voidCChap10View::OnRecordPrev()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MovePrev();//數(shù)據(jù)庫表記錄集指針當(dāng)前位置向前移動一條記錄

m_showsname=m_pSet->m_studentname;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsnum=m_pSet->m_studentnum;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showsub=m_pSet->m_subject;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

m_showmark=m_pSet->m_mark;//將數(shù)據(jù)庫表中變量賦給對應(yīng)的編輯框

UpdateData(FALSE);//將數(shù)據(jù)顯示在編輯框中

}

(4)調(diào)試運(yùn)行功能區(qū)。按“Ctrl+F5”鍵調(diào)試程序,程序正常運(yùn)行,并彈出操作主界面。選擇“記錄/下一個(gè)記錄”命令,“成績?yōu)g覽”功能區(qū)中即可出現(xiàn)記錄結(jié)果,如圖10-31所示。圖10-31“成績?yōu)g覽”功能區(qū)運(yùn)行結(jié)果

6)實(shí)現(xiàn)用戶登錄認(rèn)證和用戶登出功能

對數(shù)據(jù)庫表數(shù)據(jù)進(jìn)行添加或刪除意味著改變數(shù)據(jù)庫的內(nèi)容,在進(jìn)行添加或刪除數(shù)據(jù)信息時(shí)應(yīng)慎重,為了避免有人惡意添加或刪除信息,因此,只有具有此操作權(quán)限的人才能進(jìn)行操作,即在程序中,當(dāng)用戶需要進(jìn)行添加或刪除數(shù)據(jù)信息操作時(shí),要進(jìn)行一個(gè)用戶登錄認(rèn)證,只有通過認(rèn)證的用戶才有權(quán)限進(jìn)行數(shù)據(jù)庫內(nèi)容的修改。當(dāng)用戶完成刪除或添加信息操作后,應(yīng)進(jìn)行用戶的登出操作?;氐狡胀?quán)限后,只能瀏覽和查詢數(shù)據(jù)信息,不能進(jìn)行添加和刪除操作,當(dāng)用戶再次修改數(shù)據(jù)庫內(nèi)容時(shí),需要重新進(jìn)行登錄認(rèn)證。

(1)設(shè)計(jì)“用戶認(rèn)證界面”對話框界面。新增“用戶認(rèn)證界面”對話框界面設(shè)計(jì)的操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ResourceView”選項(xiàng)卡并展開其選項(xiàng),用右鍵單擊選項(xiàng),在彈出的快捷菜單中選擇“InsertDialog”命令,則在項(xiàng)中自動添加名為

的選項(xiàng)。

②雙擊選項(xiàng),在右側(cè)的對話框編輯區(qū)中,布置界面如圖10-32所示。

在此處所使用的控件如表10-7所示。圖10-32登錄界面布置

(2)設(shè)計(jì)用戶認(rèn)證菜單欄。用戶認(rèn)證界面在選擇菜單“用戶登錄”后才能顯示,因此需對系統(tǒng)菜單欄進(jìn)行設(shè)計(jì),其操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ResourceView”選項(xiàng)卡并展開其選項(xiàng),雙擊并展開選項(xiàng)下的內(nèi)容,雙擊選項(xiàng)。

②在右側(cè)的編輯區(qū)中選擇菜單項(xiàng),按“Delete”鍵。

③在打開的對話框中單擊按鈕,如圖10-33所示。圖10-33刪除菜單項(xiàng)后打開的對話框④在右側(cè)的編輯區(qū)中,選擇菜單項(xiàng),按“Delete”鍵,在打開的提示對話框中單擊按鈕。

⑤在右側(cè)的編輯區(qū)中單擊空白虛框,打開“MenuItemProperties”對話框,在“標(biāo)題”文本框中輸入“用戶認(rèn)證(&L)”,如圖10-34所示。

⑥在右側(cè)的編輯區(qū)中選擇命令下的空白虛框,打開“MenuItemProperties”對話框,在“ID”文本框中輸入“ID_USERLOGIN”,在“標(biāo)題”文本框中輸入“用戶登錄(&I)”,如圖10-35所示。圖10-34輸入標(biāo)題圖10-35輸入標(biāo)題和ID⑦在右側(cè)的編輯區(qū)中選擇命令下的空白虛框,打開“MenuItemProperties”對話框,在“ID”文本框中輸入“ID_USERLOGOUT”,在“標(biāo)題”文本框中輸入“用戶登出(&O)”,如圖10-36所示。

圖10-36“MenuItemProperties”對話框

(3)添加用戶認(rèn)證對話框Login類。操作步驟如下:

①選擇“查看/建立類向?qū)А泵睿蜷_“MFCClassWizard”對話框,單擊按鈕,在彈出的選項(xiàng)中選擇“New”選項(xiàng)。

②打開“AddingaClass”(添加類)對話框,選擇其中

的單選框,單擊按鈕,彈出“NewClass”對話框,在“Name”文本框中輸入“Login”,單擊按鈕,如圖10-37所示。圖10-37“NewClass”對話框

(4)添加相關(guān)成員變量。操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,單擊“MemberVariables”選項(xiàng)卡;在“Classname”列表框中選擇“Login”選項(xiàng);在“ControlIDs”列表框中選擇“IDC_PASSWORD”選項(xiàng),單擊按鈕,如圖10-38所示。

③打開“AddMemberVariable”對話框,在“Membervariablename”文本框中輸入“m_password”,在“Variabletype”下拉列表框中選擇“CString”選項(xiàng),單擊按鈕,如圖10-39所示。圖10-38“MFCClassWizard”對話框圖10-39“AddMemberVariable”對話框④返回“MFCClassWizard”對話框,可以看到在“ControlIDs”列表框中增加了名為“IDC_PASSWORD”的成員變量,其類型為“CString”,變量名為“m_password”,如圖10-40所示。圖10-40添加“m_password”成員變量

⑤在“ControlIDs”列表框中選擇“IDC_USER”選項(xiàng),單擊

按鈕,打開“AddMemberVariable”對話框,在“Membervariablename”文本框中輸入“m_user”,單擊按鈕,即可增加一個(gè)類型為“CString”,變量名為“m_user”的成員變量,如圖10-41所示。返回“MFCClassWizard”對話框,單擊按鈕。

⑥單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊“Login”選項(xiàng),在彈出的快捷菜單中選擇“AddMemberVariable”命令。

⑦打開“AddMemberVariable”對話框,在“FunctionType”文本框中輸入“BOOL”,在“FunctionDeclaration”文本框中輸入“status”,在“Access”欄中選中單選項(xiàng),單擊按鈕,如圖10-42所示。圖10-41“AddMemberVariable”對話框圖10-42添加“Status”成員變量提示:用戶認(rèn)證成功與否直接與添加和刪除操作有關(guān),這兩個(gè)操作的子程序都將在CChap10View中實(shí)現(xiàn),因此有必要為用戶認(rèn)證后的狀態(tài)添加一個(gè)標(biāo)識,作為用戶能進(jìn)行添加和刪除操作的條件。為此,增加了一個(gè)公有型BOOL變量status。

(5)添加相關(guān)成員函數(shù)。操作步驟如下:

①打開“MFCClassWizard”對話框,在“MessageMaps”選項(xiàng)卡中的“Classname”下拉列表框中選擇“Login”選項(xiàng);在“ObjectIDs”列表框中選擇“IDOK”選項(xiàng);在“Messages”列表框中選擇“BN_CLICKED”選項(xiàng),單擊按鈕,如圖10-43所示。圖10-43“MFCClassWizard”對話框②打開“AddMemberFunction”對話框,單擊按鈕,如圖10-44所示。

③返回“MFCClassWizard”對話框,可以看到在“Memberfunctions”列表框中添加了名為“OnOK”的成員函數(shù),如圖10-45所示。

④在“Classname”下拉列表框中選擇“Chap10View”選項(xiàng);在“ObjectIDs”列表框中選擇“ID_USERLOGIN”選項(xiàng);在“Messages”列表框中選擇“COMMAND”選項(xiàng),單擊按鈕,打開“AddMemberFunction”對話框,單擊按鈕,如圖10-46所示。圖10-46添加“OnUserlogin”成員函數(shù)⑤繼續(xù)在“ObjectIDs”列表框中選擇“IDC_USERLOGOUT”選項(xiàng);在“Messages”列表框中選擇“COMMAND”選項(xiàng),單擊

按鈕,在打開的“AddMemberFunction”對話框中,單擊按鈕,如圖10-47所示。圖10-47添加“OnUserlogout”成員函數(shù)(6)修改成員函數(shù)函數(shù)體內(nèi)容。

①修改Login類“OnOk”函數(shù)體內(nèi)容。

voidLogin::OnOK()

{

//TODO:Addextravalidationhere

UpdateData(TRUE);//將輸入數(shù)據(jù)保存在編輯框變量中

if(m_user=="teacher"&&m_password=="teacher")//如果用戶認(rèn)證正確

{status=true;//公有變量status為真

MessageBox(“用戶認(rèn)證成功”);

m_user="";//清空用戶名編輯框內(nèi)容

m_password="";//清空密碼編輯框內(nèi)容

UpdateData(FALSE);//顯示編輯框變量內(nèi)容到編輯框

} Else//用戶認(rèn)證不正確

{status=false;//公有變量status為真

MessageBox("用戶認(rèn)證失敗!要對數(shù)據(jù)庫操作請重新認(rèn)證!");//發(fā)送提示消息框

m_user="";//清空用戶名編輯框內(nèi)容

m_password="";//清空密碼編輯框內(nèi)容

UpdateData(FALSE);//顯示編輯框變量內(nèi)容到編輯框

}

CDialog::OnOK();

}②修改CChap10View類“OnUserlogin”函數(shù)體內(nèi)容。

voidCChap10View::OnUserlogin()

{

//TODO:Addyourcommandhandlercodehere

login.DoModal();//顯示用戶認(rèn)證對話框

}

③修改CChap10View類“OnUserlogout”函數(shù)體內(nèi)容。

voidCChap10View::OnUserlogout()

{

//TODO:Addyourcommandhandlercodehere

login.status=0;//Login類公有型變量status賦值0

}

(7)調(diào)試運(yùn)行功能區(qū)。操作步驟如下:

①按“Ctrl+F5”鍵執(zhí)行程序,程序正常運(yùn)行,并打開用戶操作主界面。

②選擇“用戶認(rèn)證/用戶登錄”命令,打開“用戶認(rèn)證界面”對話框,如圖10-48所示。圖10-48用戶認(rèn)證界面③在文本框中輸入用戶名和密碼,單擊按鈕。如果用戶名和密碼正確,則打開認(rèn)證成功提示框,如圖10-49所示;如果用戶名和密碼有誤,則打開認(rèn)證失敗提示框,如圖10-50所示。

④選擇“用戶認(rèn)證/用戶登出”命令,即可進(jìn)行登出操作。圖10-49認(rèn)證成功提示框圖10-50認(rèn)證失敗提示框

7)實(shí)現(xiàn)學(xué)生成績信息添加功能

實(shí)現(xiàn)學(xué)生成績信息添加功能主要由以下4個(gè)階段實(shí)現(xiàn)。

(1)添加相關(guān)成員變量。程序運(yùn)行中,用戶輸入的學(xué)生成績信息需要保存在數(shù)據(jù)庫中,因此需要添加相應(yīng)控件的成員變量。其操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,單擊“MemberVariables”選項(xiàng)卡;在“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ControlIDs”列表框中選擇“IDC_ADDMARK”選項(xiàng),單擊按鈕,如圖10-51所示。圖10-51“MFCClassWizard”對話框③打開“AddMemberVariable”對話框,在“Membervariablename”下拉列表框中輸入“m_addmark”,在“Variabletype”下拉列表框中選擇“float”選項(xiàng),單擊按鈕,如圖10-52所示。

④返回“MFCClassWizard”對話框,可以看到在“ControlIDs”列表框中增加了“ContrlIds”為“IDC_ADDMARK”,類型為“float”,變量名為“m_addmark”的成員變量,如圖10-53所示。

⑤使用同樣的方法添加如表10-8所示的成員變量。圖10-52“AddMemberVariable”對話框圖10-53添加“m_addmark”成員變量

(2)添加相關(guān)成員函數(shù)。添加記錄操作需要用一個(gè)用戶自定義函數(shù)來實(shí)現(xiàn),下面以添加一個(gè)“AddARecord”函數(shù)為例講解其方法。

其操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊項(xiàng),在彈出的快捷菜單中選擇“AddMemberFuntion”命令。

②打開“AddMemberFunction”對話框,在“FunctionType”文本框中輸入“void”;在“FunctionDeclaration”文本框中輸入“AddARecord(CStrings1,CStrings2,CStrings3,floatf1)”;在“Access”欄中選中單選項(xiàng);單擊按鈕,如圖10-54所示。圖10-54“AddMemberFunction”對話框提示:AddARecord(CStrings1,CStrings2,CStrings3,floatf1)函數(shù)的四個(gè)形式參數(shù)s1,s2,s3,f1分別對應(yīng)增加的記錄的四個(gè)字段studentnum、studentname、subject、mark的具體數(shù)據(jù)。

③打開“MFCClassWizard”對話框,在“MessageMaps”選項(xiàng)卡下的“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ObjectIDs”列表框中選擇“IDOK”選項(xiàng);在“Messages”列表框中選擇“BN_CLICKED”選項(xiàng),單擊按鈕,打開“AddMemberFunction”對話框,單擊按鈕。

④回到“MFCClassWizard”對話框,在“Memberfunctions”列表框中已經(jīng)增加了名為“OnButton7”的成員函數(shù),如圖10-55所示。圖10-55添加“OnButton7”成員函數(shù)(3)修改函數(shù)的函數(shù)體內(nèi)容。

①修改“AddARecord”函數(shù)體內(nèi)容。

voidCChap10View::AddARecord(CStrings1,CStrings2,CStrings3,floatf1)

{

m_pSet->AddNew();//數(shù)據(jù)庫記錄集指針移動到一條新記錄,增加一條數(shù)據(jù)庫記錄

m_pSet->m_mark=f1;//新記錄字段mark賦值f1

m_pSet->m_studentname=s2;//新記錄字段studentname賦值s2

m_pSet->m_studentnum=s1;//新記錄字段studentnum賦值s1

m_pSet->m_subject=s3;//新記錄字段subject賦值s3

m_pSet->Update();//更新記錄

m_pSet->MoveLast();//數(shù)據(jù)庫記錄集指針移動到最后一條記錄

m_pSet->Requery();//重新排序

}②修改“OnButton7”函數(shù)體內(nèi)容。

voidCChap10View::OnButton7()

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(login.status==1)//用戶認(rèn)證成功

{

UpdateData(TRUE);//將輸入數(shù)據(jù)賦給編輯框變量

AddARecord(m_addsnum,m_addsname,m_addsub,m_addmark);

//調(diào)用AddARecord函數(shù)

m_addsnum=m_addsname=m_addsub="";//清空編輯框變量內(nèi)容

m_addmark=0;//清空編輯框變量內(nèi)容

UpdateData(FALSE);//將編輯框變量內(nèi)容顯示在編輯框中

}

else//用戶認(rèn)證失敗

MessageBox("你沒有權(quán)限進(jìn)行刪除記錄,請進(jìn)行用戶認(rèn)證!");//顯示提示信息

}

(4)調(diào)試運(yùn)行功能區(qū)。操作步驟如下:

①按“Ctrl+F5”鍵執(zhí)行程序,程序正常運(yùn)行,并打開用戶操作主界面。在“增加學(xué)生信息”功能區(qū)編輯框中輸入相應(yīng)信息,單擊按鈕,系統(tǒng)將彈出提示對話框提示用戶沒有進(jìn)行認(rèn)證操作,如圖10-56所示。

②選擇“用戶認(rèn)證\用戶登錄”命令,在打開的“用戶認(rèn)證界面”對話框中進(jìn)行用戶認(rèn)證,在用戶名文本框中輸入“teacher”文本,在“密碼”文本框中輸入“teacher”,單擊按鈕,系統(tǒng)將提示用戶認(rèn)證成功,此時(shí)再單擊按鈕即可添加記錄。

提示:用戶認(rèn)證所填寫的用戶名和密碼可在OnOK()函數(shù)體中修改。③選擇“記錄/最后一個(gè)記錄”命令,在“成績?yōu)g覽”功能區(qū)即可顯示增加的新記錄,如圖10-57所示。

提示:在AddARecord(CStrings1,CStrings2,CStrings3,floatf1)函數(shù)體中添加記錄后,需注意不要忘記添加m_pSet->Requery();//重新排序。否則,添加的記錄在瀏覽“最后一個(gè)記錄”操作中將無法顯示,只能在重新運(yùn)行程序時(shí)才能顯示。圖10-56增加學(xué)生成績信息操作圖10-57瀏覽最后一個(gè)記錄

8)實(shí)現(xiàn)學(xué)生成績信息刪除功能

對學(xué)生成績信息的刪除操作發(fā)生在進(jìn)行學(xué)生成績信息瀏覽中,單擊按鈕,對當(dāng)前顯示的記錄即可進(jìn)行刪除。

(1)添加相關(guān)成員函數(shù)。操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,在“MessageMaps”選項(xiàng)卡下的“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ObjectIDs”列表框中選擇“IDC_DELETERECORD”選項(xiàng);在“Messages”列表框中選擇“BN_CLICKED”選項(xiàng),單擊

按鈕,打開“AddMemberFunction”對話框,單擊

按鈕。③回到“MFCClassWizard”對話框,可看到在“Memberfunctions”列表框中已經(jīng)增加了名為“Ondeleterecord”的成員函數(shù),如圖10-58所示。圖10-58添加“OnDelterecord”成員函數(shù)(2)修改函數(shù)的函數(shù)體內(nèi)容。

修改“OnDelterecord”函數(shù)體內(nèi)容。

voidCChap10View::OnDeleterecord()

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(login.status==1)//用戶認(rèn)證成功

{

m_pSet->Delete();//刪除當(dāng)前指針位置記錄

m_pSet->Requery();//重新排序

MessageBox("你已刪除當(dāng)前信息!");//顯示提示信息

}

Else//用戶認(rèn)證失敗

MessageBox("你沒有權(quán)限進(jìn)行刪除記錄,請進(jìn)行用戶認(rèn)證!");//顯示提示信息

}

(3)調(diào)試運(yùn)行功能區(qū)。操作步驟如下:

①按“Ctrl+F5”鍵執(zhí)行程序,程序正常運(yùn)行,并打開用戶操作主界面。

②在用戶操作主界面中選擇“用戶認(rèn)證/用戶登錄”命令,進(jìn)行登錄操作。

③登錄成功后,選擇“記錄/最后一個(gè)記錄”命令,單擊

按鈕即可刪除當(dāng)前記錄并彈出提示對話,如圖10-59所示。

④選擇“記錄/最后一個(gè)記錄”命令,在“成績?yōu)g覽”功能區(qū)中瀏覽最后一個(gè)記錄,如圖10-60所示。圖10-59刪除一個(gè)記錄的操作界面

圖10-60瀏覽最后一個(gè)記錄

9)實(shí)現(xiàn)學(xué)生成績按學(xué)生學(xué)號和按考試科目查詢功能

實(shí)現(xiàn)學(xué)生成績按學(xué)生學(xué)號和按考試科目查詢功能由以下4個(gè)階段實(shí)現(xiàn)。

(1)添加相關(guān)成員變量。操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,單擊“MemberVariables”選項(xiàng)卡,在“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ControlIDs”列表框中選擇“IDC_SHOWRESULT”選項(xiàng),單擊按鈕,如圖10-61所示。圖10-61“MFCClassWizard”對話框③打開“AddMemberVariable”對話框,在“Membervariablename”下拉列表框中輸入“myshowlist”,在“Variable”下拉列表框中選擇“CListBox”選項(xiàng),單擊按鈕,如圖10-62所示。

④返回“MFCClassWizard”對話框,可以看到增加了“ContrlIDs”列表框中增加了名為“IDC_SHOWRESULT”,類型為“control”,變量名為“myshowlist”的成員變量,如圖10-63所示。圖10-62“AddMemberVariable”對話框圖10-63添加“myshowlist”成員變量⑤在“ControlIDs”列表框中選擇“IDC_CHECKBYNUM”選項(xiàng),單擊按鈕,打開“AddMemberVariable”對話框,在“Membervariablename”列表框中輸入“m_checkbynum”,單擊

按鈕,增加一個(gè)類型為“CString”,變量名為“m_checkbynum”的成員變量,如圖10-64所示。

⑥繼續(xù)在“ControlIDs”列表框中選擇“IDC_CHECKBYSUB”選項(xiàng),單擊按鈕,打開“AddMemberVariable”對話框,在“Membervariablename”下拉列表框中輸入“m_checkbysub”,單擊按鈕,增加一個(gè)類型為“CString”,變量名為“m_checkbysub”的成員變量,如圖10-65所示。圖10-64添加“m_checkbynum”成員變量圖10-65添加“m_checkbysub”成員變量提示:由于要求按考試科目查詢結(jié)果,然后對學(xué)生各分?jǐn)?shù)段成績分布進(jìn)行統(tǒng)計(jì)并按百分比顯示直方圖,在按考試科目查詢時(shí)考慮同時(shí)進(jìn)行分?jǐn)?shù)段人數(shù)的統(tǒng)計(jì),為此在CChap10View類中增加幾個(gè)變量。

⑦單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊選項(xiàng),在彈出的快捷菜單中選擇“AddMemberVariable”命令,打開“AddMemberVariable”對話框,在“VariableType”文本框中輸入“int”,在“VariableName”文本框中輸入“l(fā)ess60”,在“Access”欄中選中

單選項(xiàng),單擊按鈕,如圖10-66所示。圖10-66“AddMemberFunction”對話框⑧這樣就添加了一個(gè)名為less60,數(shù)據(jù)類型為int的私有型成員變量。

⑨使用同樣的方法,增加如表10-9所示的成員變量。提示:為了區(qū)分用戶選擇的是按學(xué)號查詢還是按考試科目查詢,所以增加一個(gè)成員變量choice,choice=1為按學(xué)生學(xué)號進(jìn)行查詢,choice=2為按考試科目進(jìn)行查詢。

(2)添加相關(guān)成員函數(shù)。操作步驟如下:

①打開“MFCClassWizard”對話框,在“MessageMaps”選項(xiàng)卡的“Classname”下拉列表框中選擇“CChap10view”選項(xiàng);在“ObjectIDs”列表框中選擇“IDC_BUTTON1”選項(xiàng);在“Messages”列表框中選擇“BN_CLICKED”選項(xiàng),單擊按鈕,如圖10-67所示。圖10-67“MFCClassWizard”對話框②打開“AddMemberFunction”對話框,單擊按鈕,如圖10-68所示。

③返回“MFCClassWizard”對話框,可以看到在“Memberfunctions”列表框中已經(jīng)增加了名為“OnButton1”的成員函數(shù)。

④在“ControlIDs”列表框中選擇“IDC_BUTTON2”選項(xiàng);在“Messages”列表框中選擇“BN_CLICKED”選項(xiàng);單擊

按鈕,打開“AddMemberFunction”對話框,單擊按鈕,如圖10-69所示。圖10-68添加“OnButton1”成員函數(shù)圖10-69添加“OnButton2”成員變量提示:查詢的操作用一個(gè)用戶自定義函數(shù)Show來實(shí)現(xiàn),在這個(gè)函數(shù)中完成對列表框的清空、按學(xué)號查詢和按考試科目查詢功能。

⑤單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊選項(xiàng),在彈出的快捷菜單中選擇“AddMemberFunction”命令。

⑥打開“AddMemberFunction”對話框,在“FunctionType”文本框中輸入“void”;在“FunctionDeclaration”文本框中輸入“Show”;在“Access”欄中選中單選項(xiàng);單擊按鈕,如圖10-70所示。圖10-70“AddMemberFunction”對話框提示:Show(CStrings)函數(shù)的形式參數(shù)對應(yīng)查詢條件的字段名稱的具體數(shù)據(jù)。

(3)修改成員函數(shù)的函數(shù)體內(nèi)容。

①在項(xiàng)目工作區(qū)窗口中雙擊選項(xiàng),將其函數(shù)體修改為:

CChap10View::CChap10View()

:CRecordView(CChap10View::IDD)

{

//{{AFX_DATA_INIT(CChap10View)

m_pSet=NULL;

m_showsname=_T("");

m_showsnum=_T("");

m_showsub=_T("");

m_showmark=0.0f;

m_addmark=0.0f;

m_addsname=_T("");

m_addsnum=_T("");

m_addsub=_T("");

m_checkbynum=_T("");

m_checkbysub=_T("");

m_top=_T("");

//}}AFX_DATA_INIT

//TODO:addconstructioncodehere

choice=0;

less60=0;

between60to70=0;

between70to80=0;

between80to90=0;

than90=0;

}②修改“Show”函數(shù)體內(nèi)容。

voidCChap10View::Show(CStrings)

{

CStringstr="";//聲明中間變量str

while(myshowlist.GetCount()>0)//如果myshowlist列表框中條目內(nèi)容不為0

{

myshowlist.DeleteString(0);//清空列表框中的內(nèi)容

}

m_pSet->MoveFirst();//記錄集指針移動到第一個(gè)記錄

while(m_pSet->IsEOF()!=1) //如果不是文件尾

{

switch(choice)//根據(jù)choice值進(jìn)行選擇

{ case1://按學(xué)生學(xué)號查詢

{

if(m_pSet->m_studentnum==s)//找到符合條件記錄

{

str.Format("%8s%8s%6s%6f",m_pSet->m_studentnum,m_pSet->m_studentname,m_pSet->m_subject,m_pSet->m_mark);//輸出一條記錄到str中

myshowlist.AddString(str);//列表框中增加一行顯示

m_pSet->MoveNext();//指針向后移動一個(gè)記錄

UpdateData(FALSE);//顯示數(shù)據(jù)

}

else//無符合條件記錄

m_pSet->MoveNext();//指針向后移動一個(gè)記錄

}

break; case2://按考試科目查詢

{

if(m_pSet->m_subject==s)//找到符合條件記錄

{

if(m_pSet->m_mark<60)//如果分?jǐn)?shù)在60分以下

less60++;//變量加1

elseif(m_pSet->m_mark<70)//如果分?jǐn)?shù)在60到70

between60to70++;//變量加1

elseif(m_pSet->m_mark<80)//如果分?jǐn)?shù)在70到80

between70to80++;//變量加1

elseif(m_pSet->m_mark<90)//如果分?jǐn)?shù)在80到90

between80to90++;//變量加1

else//如果分?jǐn)?shù)在90分以上 than90++;//變量加1

str.Format("%8s%8s%6s%6f",m_pSet->m_studentnum,m_pSet->m_studentname,

m_pSet->m_subject,m_pSet->m_mark);//輸出一條記錄到str中

myshowlist.AddString(str);//列表框中增加一行顯示

m_pSet->MoveNext();//指針向后移動一個(gè)記錄

UpdateData(FALSE);//顯示數(shù)據(jù)

}

Else//無符合條件記錄

m_pSet->MoveNext();//指針向后移動一個(gè)記錄

}

break;

}

}

}③修改“OnButton1”函數(shù)體內(nèi)容。

voidCChap10View::OnButton1()

{

//TODO:Addyourcontrolnotificationhandlercodehere

choice=1;//單擊Button1,按學(xué)生學(xué)號查詢

UpdateData(TRUE);//將用戶輸入的信息傳遞給編輯變量

Show(m_checkbynum);//按指定的學(xué)生學(xué)號,調(diào)用Show函數(shù)進(jìn)行查詢

m_checkbysub="";//清空輸入考試科目編輯框變量內(nèi)容

UpdateData(FALSE);//將編輯框變量內(nèi)容顯示在編輯框中

}④修改“OnButton2”函數(shù)體內(nèi)容。

voidCChap10View::OnButton2()

{

//TODO:Addyourcontrolnotificationhandlercodehere

choice=2;//單擊Button2,按考試科目查詢

UpdateData(TRUE);//將用戶輸入的信息傳遞給編輯變量

Show(m_checkbysub);//按指定的考試科目,調(diào)用Show函數(shù)進(jìn)行查詢

m_checkbynum="";//清空輸入學(xué)生學(xué)號編輯框變量內(nèi)容

UpdateData(FALSE);//將編輯框變量內(nèi)容顯示在編輯框中

}

(4)調(diào)試運(yùn)行功能區(qū)。操作步驟如下:

①按“Ctrl+F5”鍵執(zhí)行程序,程序正常運(yùn)行。

②打開用戶操作主界面,在信息查詢功能區(qū)“按學(xué)號查詢”文本框中輸入“0002”,單擊按鈕,查詢結(jié)果如圖10-71所示。

③在信息查詢功能區(qū)“按考試科目查詢”下拉列表框中選擇“數(shù)學(xué)”選項(xiàng),單擊按鈕,查詢結(jié)果如圖10-72所示。圖10-71按學(xué)生學(xué)號查詢操作圖10-72按考試科目查詢操作

10)實(shí)現(xiàn)學(xué)生成績按考試科目排序功能

學(xué)生成績按考試科目排序功能由以下幾個(gè)階段實(shí)現(xiàn)。

(1)在CChap10Set的m_pSet指針中增加一個(gè)參數(shù)變量。操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊選項(xiàng),在彈出的快捷菜單中選擇“AddMertualFuction”命令,打開“AddMertualFuction”對話框,設(shè)置一個(gè)名為“p”,數(shù)據(jù)類型為“Cstring”,Access為“Public”的變量。②修改函數(shù)體內(nèi)容。

CChap10Set::CChap10Set(CDatabase*pdb)

:CRecordset(pdb)

{

//{{AFX_FIELD_INIT(CChap10Set)

m_column1=0;

m_studentnum=_T("");

m_studentname=_T("");

m_subject=_T("");

m_mark=0.0f;

m_nFields=5;

m_nParams=1;//參數(shù)為1

//}}AFX_FIELD_INIT

m_nDefaultType=dynaset;

}③修改函數(shù)體內(nèi)容。

voidCChap10Set::DoFieldExchange(CFieldExchange*pFX)

{

//{{AFX_FIELD_MAP(CChap10Set)

pFX->SetFieldType(CFieldExchange::outputColumn);

RFX_Long(pFX,_T("[編號]"),m_column1);

RFX_Text(pFX,_T("[studentnum]"),m_studentnum);

RFX_Text(pFX,_T("[studentname]"),m_studentname);

RFX_Text(pFX,_T("[subject]"),m_subject);

RFX_Single(pFX,_T("[mark]"),m_mark);

pFX->SetFieldType(CFieldExchange::param);//增加參數(shù)項(xiàng)

RFX_Text(pFX,_T("P"),p);//參數(shù)項(xiàng)變量

//}}AFX_FIELD_MAP

}

(2)在“CChap10View”類中增加成員變量。操作步驟如下:

①選擇“查看/建立類向?qū)А泵睢?/p>

②打開“MFCClassWizard”對話框,單擊“MemberVariables”選項(xiàng)卡;在“Classname”下拉列表框中選擇“CChap10View”選項(xiàng);在“ControlIDs”列表框中選擇“IDC_SHOWTOP”選項(xiàng),單擊按鈕,打開“AddMemberVariable”對話框,在“Membervariablename”下拉列表框中輸入“mytop”,在“Category”下拉列表框中選擇“Control”選項(xiàng),單擊按鈕,如圖10-73所示。③在“ControlIDs”列表框中選擇“IDC_TOP”選項(xiàng),單擊

按鈕,打開“AddMemberVariable”對話框,在“Membervariablename”下拉列表框中輸入“m_top”,在“Category”下拉列表框中選擇“Value”選項(xiàng),單擊按鈕,如圖10-74所示。圖10-73添加“mytop”成員變量圖10-74添加“mytop”成員變量

(3)在“CChap10View”類中增加成員函數(shù)。操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ClassView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊選項(xiàng),在彈出的快捷菜單中選擇“AddMemberFunction”命令。

②打開“AddMemberFunction”對話框,在“FunctionType”文本框中輸入“void”;在“FunctionDeclaration”文本框中輸入“Top(CStrings)”;在“Access”欄中選中單選項(xiàng);單擊

按鈕,如圖10-75所示。圖10-75“AddMemberFunction”對話框提示:Top(CStrings)中的形式參數(shù)s對應(yīng)用戶選擇的考試科目。

③選擇“查看/建立類向?qū)А泵睿蜷_“MFCClassWizard”對話框,單擊“MessageMaps”選項(xiàng)卡;在“Classname”下拉列表框中選擇“CChap10view”選項(xiàng);在“ObjectIDs”列表框中選擇“IDC_SHOWTOP”選項(xiàng);在“Messages”列表框中選擇“BN_CLICKED”選項(xiàng),單擊按鈕,打開“AddMemberFunction”對話框,單擊按鈕,如圖10-76所示。圖10-76添加“OnShowtop”成員變量(4)修改成員函數(shù)函數(shù)體內(nèi)容。

①修改Top函數(shù)函數(shù)體內(nèi)容。

voidCChap10View::Top(CStrings)

{

CStringstr="";//定義中間變量

while(myshowtop.GetCount()>0)//如果列表框中有記錄

{

myshowtop.DeleteString(0);//清空列表框中的內(nèi)容

}

m_pSet->m_strFilter="subject=?";//設(shè)置排序條件:字段=未知

m_pSet->p=s;//字段=用戶選擇的考試科目名稱

m_pSet->m_strSort="markDESC";//以字段mark按降序排列

m_pSet->Requery();//重新排列

m_pSet->MoveFirst();//將記錄指針移動到第一個(gè)記錄位置

while(m_pSet->IsEOF()!=1)//如果不是文件尾

{

str.Format("%8s%8s%6s

%6f",m_pSet->m_studentnum,m_pSet->m_studentname,m_pSet->m_subject,m_pSet->m_mark);//將指針位置的記錄添加到str中

myshowtop.AddString(str);//str的內(nèi)容添加到列表框中

m_pSet->MoveNext();//指針移動到下一條記錄

}

}②修改OnShowtop函數(shù)的函數(shù)體內(nèi)容。

voidCChap10View::OnShowtop()

{

//TODO:Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);//將用戶的選擇傳遞給組合框變量

Top(m_top);//以用戶選擇的考試科目為條件,調(diào)用Top函數(shù)

m_pSet->m_strFilter="";//取消查詢條件

m_pSet->Requery();//重新排序

}

提示:

m_pSet->m_strFilter="";

//取消查詢條件

m_pSet->Requery(); //重新排序這兩行代碼用于取消查詢條件,將記錄指針重新恢復(fù)到未排序的狀態(tài)下。若不添加它們,則排序后進(jìn)行瀏覽操作時(shí)指針只能在按條件排序后的記錄中移動。

(5)調(diào)試運(yùn)行功能區(qū)。操作步驟如下:

①按“Ctrl+F5”鍵執(zhí)行程序,程序正常運(yùn)行。

②打開用戶操作主界面,在“按成績排序”功能區(qū)“考試科目”下拉列表框中選擇“英語”選項(xiàng),單擊按鈕,排序結(jié)果如圖10-77所示。圖10-77按成績排序信息

11)實(shí)現(xiàn)按考試科目查詢并顯示學(xué)生成績分布直方圖功能

實(shí)現(xiàn)按考試科目查詢并顯示學(xué)生成績分布直方圖功能由以下幾個(gè)階段實(shí)現(xiàn)。

(1)設(shè)計(jì)“學(xué)生成績分布直方圖”對話框界面。操作步驟如下:

①單擊項(xiàng)目工作區(qū)窗口中的“ResourceView”選項(xiàng)卡并展開其選項(xiàng),用鼠標(biāo)右鍵單擊選項(xiàng),在彈出的快

溫馨提示

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

評論

0/150

提交評論