版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度倉儲物流租賃管理協(xié)議范本2篇
- 個(gè)人場地租賃合同(2024版)6篇
- 專線接入服務(wù)個(gè)性化協(xié)議范例2024版A版
- 2024用戶服務(wù)合同模板
- 二零二五年度特色火鍋店租賃合同范本3篇
- 2025年度柴油產(chǎn)品質(zhì)量保證合同模板4篇
- 2024年規(guī)范珠寶玉石市場買賣協(xié)議樣本版B版
- 2025年度智能公寓租賃管理服務(wù)合同標(biāo)準(zhǔn)2篇
- 2025年度餐飲娛樂場地租賃合同范本12篇
- 2025年茶葉深加工項(xiàng)目合作協(xié)議4篇
- 三年級數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)附答案
- GB/T 12723-2024單位產(chǎn)品能源消耗限額編制通則
- 2024年廣東省深圳市中考英語試題含解析
- GB/T 16288-2024塑料制品的標(biāo)志
- 麻風(fēng)病防治知識課件
- 建筑工程施工圖設(shè)計(jì)文件審查辦法
- 干部職級晉升積分制管理辦法
- 培訓(xùn)機(jī)構(gòu)應(yīng)急預(yù)案6篇
- 北師大版數(shù)學(xué)五年級上冊口算專項(xiàng)練習(xí)
- 應(yīng)急物資智能調(diào)配系統(tǒng)解決方案
- 2025年公務(wù)員考試時(shí)政專項(xiàng)測驗(yàn)100題及答案
評論
0/150
提交評論