《Visual C++ 6.0程序设计》课件第10章_第1页
《Visual C++ 6.0程序设计》课件第10章_第2页
《Visual C++ 6.0程序设计》课件第10章_第3页
《Visual C++ 6.0程序设计》课件第10章_第4页
《Visual C++ 6.0程序设计》课件第10章_第5页
已阅读5页,还剩191页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章综合应用题目:学生成绩信息管理系统应用程序的设计题目:学生成绩信息管理系统应用程序的设计

1.目的和要求

(1)掌握用VisualC++6.0开发环境开发软件的方法;

(2)熟悉获得帮助的方法;

(3)掌握SDI应用程序结构,熟悉MDI及基于对话框的应用程序的编程方法;

(4)掌握图标、菜单、工具栏、对话框等资源的编辑;

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

(6)熟悉文档视图结构;

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

(8)掌握用MFC编写ODBC数据库应用程序的方法和技巧。

2.操作界面

用户操作主界面如图10-1所示。图10-1用户操作主界面

3.要求实现的功能

(1)用户可以滚动浏览学生成绩信息,并管理数据库中的数据;

(2)用户可以增加学生成绩信息;

(3)用户可以删除学生成绩信息;

(4)用户可按学生学号或考试科目查询学生信息;

(5)用户可根据考试科目按分数由高到低进行排序显示;

(6)用户进行添加或删除学生成绩信息时需要进行用户信息登录认证,认证合格方可进行相关操作。用户添加或删除完学生成绩信息后,可进行登出操作,即禁止添加和删除信息,以防止学生成绩信息被无关人员恶意更改。用户按照考试科目查询学生信息后,还可以将该科目的学生成绩以直方图进行显示,以便能直观阅读学生各分数段的百分比分布。

4.程序的实现

根据要求实现的功能,可按以下几个步骤进行程序的设计:

(1)建立一个名为“studentmarks”的Access数据库;

(2)添加ODBC数据库源;

(3)建立一个带有ODBC数据库支持功能的单文档界面的工程文件;

(4)设计用户操作主界面;

(5)实现学生成绩信息浏览功能;

(6)实现用户登录认证和用户登出功能;

(7)实现学生成绩信息添加功能;

(8)实现学生成绩信息删除功能;

(9)实现学生成绩按学生学号和按考试科目查询功能;

(10)实现学生成绩按考试科目排序功能;

(11)实现按考试科目查询并显示学生成绩分布直方图功能。

5.程序设计步骤

1)建立一个名为“studentmarks”的Access数据库

下面首先建立一个名为“studentmarks”的Access数据库,用于存储学生信息,其操作步骤如下:

(1)运行“MicrosoftAccess”应用程序。

(2)选择“文件/新建”命令,打开“新建文件”任务窗格,单击超级链接,如图10-2所示。

(3)打开“文件新建数据库”对话框,在“保存位置”下拉列表框中选择数据库的保存路径“d:\lacyfiles\vc教程”;在“文件名”文本框中输入“studentmarks.mdb”为新建的数据库命名,单击按钮,如图10-3所示。

(4)返回“MicrosoftAccess”程序的操作界面,在出现的数据库设计工作区中,单击按钮,如图10-4所示。图10-2“新建文件”任务窗格图10-3“文件新建数据库”对话框图10-4数据库设计工作区

(5)打开“表1:表”窗口,如图10-5所示,在其中定义如表10-1所示的数据库表各字段名称及数据类型。图10-5定义数据库表

(6)单击按钮关闭对话框,打开“是否保存对表1的更改”提示框,单击按钮,如图10-6所示。

(7)打开“另存为”对话框,在“表名称”文本框中输入“studenttable”为表命名,单击按钮,如图10-7所示。

(8)返回数据库设计工作区,双击“studenttable”选项,打开“studenttable:表”数据库表,输入初始学生信息,如图10-8所示。这样就建立了一个名为“studentmarks”的Access数据库。图10-6“是否保存对表1的更改”提示框图10-7“另存为”对话框图10-8输入初始学生信息

2)添加ODBC数据库源

添加ODBC数据库源的操作步骤如下:

(1)单击任务栏的按钮,弹出开始菜单,选择“控制面板”命令,打开“控制面板”窗口,单击超级链接,打开“性能和维护”窗口,再打开“管理工具”窗口,单击其中的“数据源”图标,如图10-9所示。

(2)打开“ODBC数据源管理器”对话框,选择“用户DSN”选项卡,单击按钮,如图10-10所示。图10-9“管理工具”窗口图10-10“ODBC数据源管理器”窗口

(3)打开“创建新数据源”对话框,在“用户数据源”列表框中选择“MicrosoftAccessDrive(*.mdb)”选项,单击按钮,如图10-11所示。

(4)打开“ODBCMicrosoftAccess安装”对话框,在“数据源名”文本框中输入“studentmarks”,单击按钮,如图10-12所示。

(5)打开“选择数据库”对话框,在“驱动器”下拉列表框中选择创建的“studentmarks.mdb”数据库所在的驱动器,在“目录”列表框中选择数据库所在位置的路径,在“数据库名”列表框中出现“studentmarks.mdb”文件,选择该文件,然后单击按钮,如图10-13所示。回到“ODBCMicrosoft*Access安装”对话框,单击按钮。图10-11“创建新数据源”对话框图10-12“ODBCMicrosoftAccess安装”对话框

(6)返回“ODBC数据源管理器”对话框,在“用户DSN”选项卡的“用户数据源”列表框中可看到新增加的用户ODBC数据源“studentmarks”,单击按钮,如图10-14所示。这样就建立了一个名为“studentmarks”的用户ODBC数据源。图10-13“选择数据库”对话框图10-14“ODBC数据源管理器”对话框

3)建立一个带有ODBC数据库支持功能的单文档界面的工程文件

建立一个带有ODBC数据库支持功能的单文档界面的工程文件的操作步骤如下:

(1)打开VisualC++6.0,选择“文件/新建”命令,打开“新建”对话框。

(2)单击“工程”选项卡,在列表中选择“MFC能性AppWizard(exe)”选项,在“位置”文本框中输入该工程的路径,在“工程”文本框中输入工程名“chap10”,单击按钮,如图10-15所示。图10-15“新建”对话框

(3)打开“MFCAppWizard-Step1”对话框,选中

单选项,单击按钮,如图10-16所示。

(4)打开“MFCAppWizard-Step2of6”对话框,选中

单选项,单击按钮,如图10-17所示。

(5)打开“DatabaseOptions”对话框,在“Datasource”栏中选中单选项;在右侧的下拉列表框中选择“studentmarks”选项,单击按钮,如图10-18所示。图10-16“MFCAppWizard-Step1”对话框图10-17“MFCAppWizard-Step2of6”对话框图10-18“DatabaseOptions”对框

(6)打开“SelectDatabaseTables”对话框,选择“studenttable”选项,单击按钮,如图10-19所示。

(7)打开“MFCAppWizard-Step2of6”对话框,单击

按钮,如图10-20所示。打开“新建工程信息”对话框,单击按钮,这样就建立了一个ODBC支持的工程文件。

图10-19“SelectDatabaseTables”对话框图10-20“MFCAppWizard-Step2of6”对话框

4)设计用户操作主界面

现在已经生成了一个带有数据库支持功能的单文档界面的工程文件,并且系统自动生成一个名为“IDD_CHAP10_FORM”的对话框,它将自动显示。下面就利用该对话框作为用户操作主界面进行设计。

用户操作主界面中包含学生成绩信息浏览、学生成绩信息查询、学生成绩信息添加和按考试科目排序学生成绩4个交互功能部分,在进行界面设计时利用控件GroupBox(分组框)将对话框进行功能分区。

其操作步骤为:在VisualC++6.0主窗口中单击“ResourceView”选项卡,展开选项,双击选项。在右侧的对话框编辑区中利用分组框、编辑框、静态文本、组合框、按钮、列表框设计主界面,完成后的效果如图10-21所示。图10-21设计用户操作主界面其中各功能区所使用的控件说明如表10-2~表10-5所示。

5)实现学生成绩信息浏览功能

建立工程文件时,系统菜单中已经自动生成“记录”菜单,其中包含“第一个记录”、“前一个记录”、“下一个记录”、“最后一个记录”4个选项,其ID分别对应为“ID_RECORD_FIRST”、“ID_RECORD_PREV”、“ID_RECORD_NEXT”、“ID_RECORD_LAST”。

下面利用这4个选项完成对学生成绩信息的浏览功能,并将结果在主操作界面的“成绩浏览”功能区中显示出来。

(1)添加成员变量。信息浏览操作是通过选择“记录”菜单栏中的子菜单浏览“studentmarks”数据库表“studenttable”字段中的记录内容,并显示到编辑框中来实现的,需要用到对编辑框的操作,因此有必要为其添加成员变量。

其操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,单击“MessageVariables”选项卡;在“Classname”下拉列表框中选择“CChap10View”选项;在“ControlIDs”列表框中选择“IDC_SHOWMARK”选项,单击按钮,如图10-22所示。图10-22“MFCClassWizard”对话框③打开“AddMemberVariable”对话框,在“Membervariablename”下拉列表框中输入“m_showmark”,在“Variabletype”下拉列表框中选择“float”选项,单击按钮,如图10-23所示。

④返回“MFCClassWizard”对话框,可以看到在“ControlIDs”列表框中增加了“IDC_SHOWMARK”成员变量,类型为float,变量名为m_showmark,如图10-24所示。

⑤使用同样的方法为“ControlIDs”列表框中的选项添加如表10-6所示的成员变量。图10-23“AddMemberVariable”对话框图10-24添加“m_showmark”成员变量

(2)添加成员函数。操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,单击“MessageMaps”选项卡;在“Classname”下拉列表框中选择“CChap10View”选项;在“ObjectIDs”列表框中选择“ID_RECORD_FIRST”选项;在“Messages”下拉列表框中选择“COMMAND”选项,单击按钮,如图10-25所示。

③打开“AddMemberFunction”对话框,单击按钮,如图10-26所示。图10-25“MFCClassWizard”对话框图10-26“AddMemberFunction”对话框④返回“MFCClassWizard”对话框,可看到在“Memberfunctions”列表框中已增加了名为“OnRecordFirst”的成员函数,如图10-27所示。

⑤在“ObjectIDs”列表框中选择“ID_RECORD_LAST”选项;在“Messages”列表框中选择“COMMAND”选项,单击

按钮,打开“AddMemberFunction”对话框,单击

按钮,如图10-28所示。

⑥在“ObjectIDs”列表框中选择“ID_RECORD_NEXT”选项;在“Messages”列表框中选择“COMMAND”选项,单击

按钮,打开“AddMemberFunction”对话框,单击

按钮,如图10-29所示。图10-27添加“OnRecordFirst”成员函数图10-28“AddMemberFunction”对话框图10-29“AddMemberFunction”对话框⑦继续在“ObjectIDs”列表框中选择“ID_RECORD_PREV”选项;在“Messages”列表框中选择“COMMAND”选项,单击

按钮,打开“AddMemberFunction”对话框,单击

按钮,如图10-30所示。返回“MFCClassWizard”对话框中,单击按钮,完成成员函数的添加。图10-30“AddMemberFunction”对话框

(3)修改成员函数的函数体内容。操作步骤如下:

①单击项目工作区窗口中的“ClassView”选项卡并展开其选项,单击选项右边的图标展开其选项,双击选项,在右侧编辑区中,光标将出现在该函数体的起始位置,将其函数体修改为:

voidCChap10View::OnRecordFirst()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MoveFirst();//数据库表记录集指针移动到数据库起始位置

m_showsname=m_pSet->m_studentname;

//将数据库表中变量赋给对应的编辑框

m_showsnum=m_pSet->m_studentnum;

//将数据库表中变量赋给对应的编辑框

m_showsub=m_pSet->m_subject;

//将数据库表中变量赋给对应的编辑框

m_showmark=m_pSet->m_mark;

//将数据库表中变量赋给对应的编辑框

UpdateData(FALSE);

//将数据显示在编辑框中

}提示:m_pSet为系统自动生成的CRecordset派生类Chap10Set的对象指针,使用该指针可以对数据库表中的内容进行操作。其中m_pSet->m_studentname、m_pSet->m_studentnun、m_pSet->m_subject、m_pSet->m_mark分别对应“studentmarks”数据库表“studenttable”中的studentname、studentnum、subject、mark四个字段当前数据库表记录集指针位置的数据。

②在项目工作区窗口中双击选项,在右侧编辑窗口中将其函数体修改为:voidCChap10View::OnRecordLast()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MoveLast();//数据库表记录集指针移动到数据库起始位置

m_showsname=m_pSet->m_studentname;//将数据库表中变量赋给对应的编辑框

m_showsnum=m_pSet->m_studentnum;//将数据库表中变量赋给对应的编辑框

m_showsub=m_pSet->m_subject;//将数据库表中变量赋给对应的编辑框

m_showmark=m_pSet->m_mark;//将数据库表中变量赋给对应的编辑框

UpdateData(FALSE);//将数据显示在编辑框中

}③在项目工作区窗口中双击选项,在右侧编辑窗口中将其函数体修改为:

voidCChap10View::OnRecordNext()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MoveNext();//数据库表记录集指针当前位置向后移动一条记录

m_showsname=m_pSet->m_studentname;//将数据库表中变量赋给对应的编辑框

m_showsnum=m_pSet->m_studentnum;//将数据库表中变量赋给对应的编辑框

m_showsub=m_pSet->m_subject;//将数据库表中变量赋给对应的编辑框

m_showmark=m_pSet->m_mark;//将数据库表中变量赋给对应的编辑框

UpdateData(FALSE);//将数据显示在编辑框中

}④在项目工作区窗口中双击选项,在右侧编辑窗口中将其函数体修改为:

voidCChap10View::OnRecordPrev()

{

//TODO:Addyourcommandhandlercodehere

m_pSet->MovePrev();//数据库表记录集指针当前位置向前移动一条记录

m_showsname=m_pSet->m_studentname;//将数据库表中变量赋给对应的编辑框

m_showsnum=m_pSet->m_studentnum;//将数据库表中变量赋给对应的编辑框

m_showsub=m_pSet->m_subject;//将数据库表中变量赋给对应的编辑框

m_showmark=m_pSet->m_mark;//将数据库表中变量赋给对应的编辑框

UpdateData(FALSE);//将数据显示在编辑框中

}

(4)调试运行功能区。按“Ctrl+F5”键调试程序,程序正常运行,并弹出操作主界面。选择“记录/下一个记录”命令,“成绩浏览”功能区中即可出现记录结果,如图10-31所示。图10-31“成绩浏览”功能区运行结果

6)实现用户登录认证和用户登出功能

对数据库表数据进行添加或删除意味着改变数据库的内容,在进行添加或删除数据信息时应慎重,为了避免有人恶意添加或删除信息,因此,只有具有此操作权限的人才能进行操作,即在程序中,当用户需要进行添加或删除数据信息操作时,要进行一个用户登录认证,只有通过认证的用户才有权限进行数据库内容的修改。当用户完成删除或添加信息操作后,应进行用户的登出操作。回到普通权限后,只能浏览和查询数据信息,不能进行添加和删除操作,当用户再次修改数据库内容时,需要重新进行登录认证。

(1)设计“用户认证界面”对话框界面。新增“用户认证界面”对话框界面设计的操作步骤如下:

①单击项目工作区窗口中的“ResourceView”选项卡并展开其选项,用右键单击选项,在弹出的快捷菜单中选择“InsertDialog”命令,则在项中自动添加名为

的选项。

②双击选项,在右侧的对话框编辑区中,布置界面如图10-32所示。

在此处所使用的控件如表10-7所示。图10-32登录界面布置

(2)设计用户认证菜单栏。用户认证界面在选择菜单“用户登录”后才能显示,因此需对系统菜单栏进行设计,其操作步骤如下:

①单击项目工作区窗口中的“ResourceView”选项卡并展开其选项,双击并展开选项下的内容,双击选项。

②在右侧的编辑区中选择菜单项,按“Delete”键。

③在打开的对话框中单击按钮,如图10-33所示。图10-33删除菜单项后打开的对话框④在右侧的编辑区中,选择菜单项,按“Delete”键,在打开的提示对话框中单击按钮。

⑤在右侧的编辑区中单击空白虚框,打开“MenuItemProperties”对话框,在“标题”文本框中输入“用户认证(&L)”,如图10-34所示。

⑥在右侧的编辑区中选择命令下的空白虚框,打开“MenuItemProperties”对话框,在“ID”文本框中输入“ID_USERLOGIN”,在“标题”文本框中输入“用户登录(&I)”,如图10-35所示。图10-34输入标题图10-35输入标题和ID⑦在右侧的编辑区中选择命令下的空白虚框,打开“MenuItemProperties”对话框,在“ID”文本框中输入“ID_USERLOGOUT”,在“标题”文本框中输入“用户登出(&O)”,如图10-36所示。

图10-36“MenuItemProperties”对话框

(3)添加用户认证对话框Login类。操作步骤如下:

①选择“查看/建立类向导”命令,打开“MFCClassWizard”对话框,单击按钮,在弹出的选项中选择“New”选项。

②打开“AddingaClass”(添加类)对话框,选择其中

的单选框,单击按钮,弹出“NewClass”对话框,在“Name”文本框中输入“Login”,单击按钮,如图10-37所示。图10-37“NewClass”对话框

(4)添加相关成员变量。操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,单击“MemberVariables”选项卡;在“Classname”列表框中选择“Login”选项;在“ControlIDs”列表框中选择“IDC_PASSWORD”选项,单击按钮,如图10-38所示。

③打开“AddMemberVariable”对话框,在“Membervariablename”文本框中输入“m_password”,在“Variabletype”下拉列表框中选择“CString”选项,单击按钮,如图10-39所示。图10-38“MFCClassWizard”对话框图10-39“AddMemberVariable”对话框④返回“MFCClassWizard”对话框,可以看到在“ControlIDs”列表框中增加了名为“IDC_PASSWORD”的成员变量,其类型为“CString”,变量名为“m_password”,如图10-40所示。图10-40添加“m_password”成员变量

⑤在“ControlIDs”列表框中选择“IDC_USER”选项,单击

按钮,打开“AddMemberVariable”对话框,在“Membervariablename”文本框中输入“m_user”,单击按钮,即可增加一个类型为“CString”,变量名为“m_user”的成员变量,如图10-41所示。返回“MFCClassWizard”对话框,单击按钮。

⑥单击项目工作区窗口中的“ClassView”选项卡并展开其选项,用鼠标右键单击“Login”选项,在弹出的快捷菜单中选择“AddMemberVariable”命令。

⑦打开“AddMemberVariable”对话框,在“FunctionType”文本框中输入“BOOL”,在“FunctionDeclaration”文本框中输入“status”,在“Access”栏中选中单选项,单击按钮,如图10-42所示。图10-41“AddMemberVariable”对话框图10-42添加“Status”成员变量提示:用户认证成功与否直接与添加和删除操作有关,这两个操作的子程序都将在CChap10View中实现,因此有必要为用户认证后的状态添加一个标识,作为用户能进行添加和删除操作的条件。为此,增加了一个公有型BOOL变量status。

(5)添加相关成员函数。操作步骤如下:

①打开“MFCClassWizard”对话框,在“MessageMaps”选项卡中的“Classname”下拉列表框中选择“Login”选项;在“ObjectIDs”列表框中选择“IDOK”选项;在“Messages”列表框中选择“BN_CLICKED”选项,单击按钮,如图10-43所示。图10-43“MFCClassWizard”对话框②打开“AddMemberFunction”对话框,单击按钮,如图10-44所示。

③返回“MFCClassWizard”对话框,可以看到在“Memberfunctions”列表框中添加了名为“OnOK”的成员函数,如图10-45所示。

④在“Classname”下拉列表框中选择“Chap10View”选项;在“ObjectIDs”列表框中选择“ID_USERLOGIN”选项;在“Messages”列表框中选择“COMMAND”选项,单击按钮,打开“AddMemberFunction”对话框,单击按钮,如图10-46所示。图10-46添加“OnUserlogin”成员函数⑤继续在“ObjectIDs”列表框中选择“IDC_USERLOGOUT”选项;在“Messages”列表框中选择“COMMAND”选项,单击

按钮,在打开的“AddMemberFunction”对话框中,单击按钮,如图10-47所示。图10-47添加“OnUserlogout”成员函数(6)修改成员函数函数体内容。

①修改Login类“OnOk”函数体内容。

voidLogin::OnOK()

{

//TODO:Addextravalidationhere

UpdateData(TRUE);//将输入数据保存在编辑框变量中

if(m_user=="teacher"&&m_password=="teacher")//如果用户认证正确

{status=true;//公有变量status为真

MessageBox(“用户认证成功”);

m_user="";//清空用户名编辑框内容

m_password="";//清空密码编辑框内容

UpdateData(FALSE);//显示编辑框变量内容到编辑框

} Else//用户认证不正确

{status=false;//公有变量status为真

MessageBox("用户认证失败!要对数据库操作请重新认证!");//发送提示消息框

m_user="";//清空用户名编辑框内容

m_password="";//清空密码编辑框内容

UpdateData(FALSE);//显示编辑框变量内容到编辑框

}

CDialog::OnOK();

}②修改CChap10View类“OnUserlogin”函数体内容。

voidCChap10View::OnUserlogin()

{

//TODO:Addyourcommandhandlercodehere

login.DoModal();//显示用户认证对话框

}

③修改CChap10View类“OnUserlogout”函数体内容。

voidCChap10View::OnUserlogout()

{

//TODO:Addyourcommandhandlercodehere

login.status=0;//Login类公有型变量status赋值0

}

(7)调试运行功能区。操作步骤如下:

①按“Ctrl+F5”键执行程序,程序正常运行,并打开用户操作主界面。

②选择“用户认证/用户登录”命令,打开“用户认证界面”对话框,如图10-48所示。图10-48用户认证界面③在文本框中输入用户名和密码,单击按钮。如果用户名和密码正确,则打开认证成功提示框,如图10-49所示;如果用户名和密码有误,则打开认证失败提示框,如图10-50所示。

④选择“用户认证/用户登出”命令,即可进行登出操作。图10-49认证成功提示框图10-50认证失败提示框

7)实现学生成绩信息添加功能

实现学生成绩信息添加功能主要由以下4个阶段实现。

(1)添加相关成员变量。程序运行中,用户输入的学生成绩信息需要保存在数据库中,因此需要添加相应控件的成员变量。其操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,单击“MemberVariables”选项卡;在“Classname”下拉列表框中选择“CChap10View”选项;在“ControlIDs”列表框中选择“IDC_ADDMARK”选项,单击按钮,如图10-51所示。图10-51“MFCClassWizard”对话框③打开“AddMemberVariable”对话框,在“Membervariablename”下拉列表框中输入“m_addmark”,在“Variabletype”下拉列表框中选择“float”选项,单击按钮,如图10-52所示。

④返回“MFCClassWizard”对话框,可以看到在“ControlIDs”列表框中增加了“ContrlIds”为“IDC_ADDMARK”,类型为“float”,变量名为“m_addmark”的成员变量,如图10-53所示。

⑤使用同样的方法添加如表10-8所示的成员变量。图10-52“AddMemberVariable”对话框图10-53添加“m_addmark”成员变量

(2)添加相关成员函数。添加记录操作需要用一个用户自定义函数来实现,下面以添加一个“AddARecord”函数为例讲解其方法。

其操作步骤如下:

①单击项目工作区窗口中的“ClassView”选项卡并展开其选项,用鼠标右键单击项,在弹出的快捷菜单中选择“AddMemberFuntion”命令。

②打开“AddMemberFunction”对话框,在“FunctionType”文本框中输入“void”;在“FunctionDeclaration”文本框中输入“AddARecord(CStrings1,CStrings2,CStrings3,floatf1)”;在“Access”栏中选中单选项;单击按钮,如图10-54所示。图10-54“AddMemberFunction”对话框提示:AddARecord(CStrings1,CStrings2,CStrings3,floatf1)函数的四个形式参数s1,s2,s3,f1分别对应增加的记录的四个字段studentnum、studentname、subject、mark的具体数据。

③打开“MFCClassWizard”对话框,在“MessageMaps”选项卡下的“Classname”下拉列表框中选择“CChap10View”选项;在“ObjectIDs”列表框中选择“IDOK”选项;在“Messages”列表框中选择“BN_CLICKED”选项,单击按钮,打开“AddMemberFunction”对话框,单击按钮。

④回到“MFCClassWizard”对话框,在“Memberfunctions”列表框中已经增加了名为“OnButton7”的成员函数,如图10-55所示。图10-55添加“OnButton7”成员函数(3)修改函数的函数体内容。

①修改“AddARecord”函数体内容。

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

{

m_pSet->AddNew();//数据库记录集指针移动到一条新记录,增加一条数据库记录

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();//数据库记录集指针移动到最后一条记录

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

}②修改“OnButton7”函数体内容。

voidCChap10View::OnButton7()

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(login.status==1)//用户认证成功

{

UpdateData(TRUE);//将输入数据赋给编辑框变量

AddARecord(m_addsnum,m_addsname,m_addsub,m_addmark);

//调用AddARecord函数

m_addsnum=m_addsname=m_addsub="";//清空编辑框变量内容

m_addmark=0;//清空编辑框变量内容

UpdateData(FALSE);//将编辑框变量内容显示在编辑框中

}

else//用户认证失败

MessageBox("你没有权限进行删除记录,请进行用户认证!");//显示提示信息

}

(4)调试运行功能区。操作步骤如下:

①按“Ctrl+F5”键执行程序,程序正常运行,并打开用户操作主界面。在“增加学生信息”功能区编辑框中输入相应信息,单击按钮,系统将弹出提示对话框提示用户没有进行认证操作,如图10-56所示。

②选择“用户认证\用户登录”命令,在打开的“用户认证界面”对话框中进行用户认证,在用户名文本框中输入“teacher”文本,在“密码”文本框中输入“teacher”,单击按钮,系统将提示用户认证成功,此时再单击按钮即可添加记录。

提示:用户认证所填写的用户名和密码可在OnOK()函数体中修改。③选择“记录/最后一个记录”命令,在“成绩浏览”功能区即可显示增加的新记录,如图10-57所示。

提示:在AddARecord(CStrings1,CStrings2,CStrings3,floatf1)函数体中添加记录后,需注意不要忘记添加m_pSet->Requery();//重新排序。否则,添加的记录在浏览“最后一个记录”操作中将无法显示,只能在重新运行程序时才能显示。图10-56增加学生成绩信息操作图10-57浏览最后一个记录

8)实现学生成绩信息删除功能

对学生成绩信息的删除操作发生在进行学生成绩信息浏览中,单击按钮,对当前显示的记录即可进行删除。

(1)添加相关成员函数。操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,在“MessageMaps”选项卡下的“Classname”下拉列表框中选择“CChap10View”选项;在“ObjectIDs”列表框中选择“IDC_DELETERECORD”选项;在“Messages”列表框中选择“BN_CLICKED”选项,单击

按钮,打开“AddMemberFunction”对话框,单击

按钮。③回到“MFCClassWizard”对话框,可看到在“Memberfunctions”列表框中已经增加了名为“Ondeleterecord”的成员函数,如图10-58所示。图10-58添加“OnDelterecord”成员函数(2)修改函数的函数体内容。

修改“OnDelterecord”函数体内容。

voidCChap10View::OnDeleterecord()

{

//TODO:Addyourcontrolnotificationhandlercodehere

if(login.status==1)//用户认证成功

{

m_pSet->Delete();//删除当前指针位置记录

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

MessageBox("你已删除当前信息!");//显示提示信息

}

Else//用户认证失败

MessageBox("你没有权限进行删除记录,请进行用户认证!");//显示提示信息

}

(3)调试运行功能区。操作步骤如下:

①按“Ctrl+F5”键执行程序,程序正常运行,并打开用户操作主界面。

②在用户操作主界面中选择“用户认证/用户登录”命令,进行登录操作。

③登录成功后,选择“记录/最后一个记录”命令,单击

按钮即可删除当前记录并弹出提示对话,如图10-59所示。

④选择“记录/最后一个记录”命令,在“成绩浏览”功能区中浏览最后一个记录,如图10-60所示。图10-59删除一个记录的操作界面

图10-60浏览最后一个记录

9)实现学生成绩按学生学号和按考试科目查询功能

实现学生成绩按学生学号和按考试科目查询功能由以下4个阶段实现。

(1)添加相关成员变量。操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,单击“MemberVariables”选项卡,在“Classname”下拉列表框中选择“CChap10View”选项;在“ControlIDs”列表框中选择“IDC_SHOWRESULT”选项,单击按钮,如图10-61所示。图10-61“MFCClassWizard”对话框③打开“AddMemberVariable”对话框,在“Membervariablename”下拉列表框中输入“myshowlist”,在“Variable”下拉列表框中选择“CListBox”选项,单击按钮,如图10-62所示。

④返回“MFCClassWizard”对话框,可以看到增加了“ContrlIDs”列表框中增加了名为“IDC_SHOWRESULT”,类型为“control”,变量名为“myshowlist”的成员变量,如图10-63所示。图10-62“AddMemberVariable”对话框图10-63添加“myshowlist”成员变量⑤在“ControlIDs”列表框中选择“IDC_CHECKBYNUM”选项,单击按钮,打开“AddMemberVariable”对话框,在“Membervariablename”列表框中输入“m_checkbynum”,单击

按钮,增加一个类型为“CString”,变量名为“m_checkbynum”的成员变量,如图10-64所示。

⑥继续在“ControlIDs”列表框中选择“IDC_CHECKBYSUB”选项,单击按钮,打开“AddMemberVariable”对话框,在“Membervariablename”下拉列表框中输入“m_checkbysub”,单击按钮,增加一个类型为“CString”,变量名为“m_checkbysub”的成员变量,如图10-65所示。图10-64添加“m_checkbynum”成员变量图10-65添加“m_checkbysub”成员变量提示:由于要求按考试科目查询结果,然后对学生各分数段成绩分布进行统计并按百分比显示直方图,在按考试科目查询时考虑同时进行分数段人数的统计,为此在CChap10View类中增加几个变量。

⑦单击项目工作区窗口中的“ClassView”选项卡并展开其选项,用鼠标右键单击选项,在弹出的快捷菜单中选择“AddMemberVariable”命令,打开“AddMemberVariable”对话框,在“VariableType”文本框中输入“int”,在“VariableName”文本框中输入“less60”,在“Access”栏中选中

单选项,单击按钮,如图10-66所示。图10-66“AddMemberFunction”对话框⑧这样就添加了一个名为less60,数据类型为int的私有型成员变量。

⑨使用同样的方法,增加如表10-9所示的成员变量。提示:为了区分用户选择的是按学号查询还是按考试科目查询,所以增加一个成员变量choice,choice=1为按学生学号进行查询,choice=2为按考试科目进行查询。

(2)添加相关成员函数。操作步骤如下:

①打开“MFCClassWizard”对话框,在“MessageMaps”选项卡的“Classname”下拉列表框中选择“CChap10view”选项;在“ObjectIDs”列表框中选择“IDC_BUTTON1”选项;在“Messages”列表框中选择“BN_CLICKED”选项,单击按钮,如图10-67所示。图10-67“MFCClassWizard”对话框②打开“AddMemberFunction”对话框,单击按钮,如图10-68所示。

③返回“MFCClassWizard”对话框,可以看到在“Memberfunctions”列表框中已经增加了名为“OnButton1”的成员函数。

④在“ControlIDs”列表框中选择“IDC_BUTTON2”选项;在“Messages”列表框中选择“BN_CLICKED”选项;单击

按钮,打开“AddMemberFunction”对话框,单击按钮,如图10-69所示。图10-68添加“OnButton1”成员函数图10-69添加“OnButton2”成员变量提示:查询的操作用一个用户自定义函数Show来实现,在这个函数中完成对列表框的清空、按学号查询和按考试科目查询功能。

⑤单击项目工作区窗口中的“ClassView”选项卡并展开其选项,用鼠标右键单击选项,在弹出的快捷菜单中选择“AddMemberFunction”命令。

⑥打开“AddMemberFunction”对话框,在“FunctionType”文本框中输入“void”;在“FunctionDeclaration”文本框中输入“Show”;在“Access”栏中选中单选项;单击按钮,如图10-70所示。图10-70“AddMemberFunction”对话框提示:Show(CStrings)函数的形式参数对应查询条件的字段名称的具体数据。

(3)修改成员函数的函数体内容。

①在项目工作区窗口中双击选项,将其函数体修改为:

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”函数体内容。

voidCChap10View::Show(CStrings)

{

CStringstr="";//声明中间变量str

while(myshowlist.GetCount()>0)//如果myshowlist列表框中条目内容不为0

{

myshowlist.DeleteString(0);//清空列表框中的内容

}

m_pSet->MoveFirst();//记录集指针移动到第一个记录

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

{

switch(choice)//根据choice值进行选择

{ case1://按学生学号查询

{

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();//指针向后移动一个记录

UpdateData(FALSE);//显示数据

}

else//无符合条件记录

m_pSet->MoveNext();//指针向后移动一个记录

}

break; case2://按考试科目查询

{

if(m_pSet->m_subject==s)//找到符合条件记录

{

if(m_pSet->m_mark<60)//如果分数在60分以下

less60++;//变量加1

elseif(m_pSet->m_mark<70)//如果分数在60到70

between60to70++;//变量加1

elseif(m_pSet->m_mark<80)//如果分数在70到80

between70to80++;//变量加1

elseif(m_pSet->m_mark<90)//如果分数在80到90

between80to90++;//变量加1

else//如果分数在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();//指针向后移动一个记录

UpdateData(FALSE);//显示数据

}

Else//无符合条件记录

m_pSet->MoveNext();//指针向后移动一个记录

}

break;

}

}

}③修改“OnButton1”函数体内容。

voidCChap10View::OnButton1()

{

//TODO:Addyourcontrolnotificationhandlercodehere

choice=1;//单击Button1,按学生学号查询

UpdateData(TRUE);//将用户输入的信息传递给编辑变量

Show(m_checkbynum);//按指定的学生学号,调用Show函数进行查询

m_checkbysub="";//清空输入考试科目编辑框变量内容

UpdateData(FALSE);//将编辑框变量内容显示在编辑框中

}④修改“OnButton2”函数体内容。

voidCChap10View::OnButton2()

{

//TODO:Addyourcontrolnotificationhandlercodehere

choice=2;//单击Button2,按考试科目查询

UpdateData(TRUE);//将用户输入的信息传递给编辑变量

Show(m_checkbysub);//按指定的考试科目,调用Show函数进行查询

m_checkbynum="";//清空输入学生学号编辑框变量内容

UpdateData(FALSE);//将编辑框变量内容显示在编辑框中

}

(4)调试运行功能区。操作步骤如下:

①按“Ctrl+F5”键执行程序,程序正常运行。

②打开用户操作主界面,在信息查询功能区“按学号查询”文本框中输入“0002”,单击按钮,查询结果如图10-71所示。

③在信息查询功能区“按考试科目查询”下拉列表框中选择“数学”选项,单击按钮,查询结果如图10-72所示。图10-71按学生学号查询操作图10-72按考试科目查询操作

10)实现学生成绩按考试科目排序功能

学生成绩按考试科目排序功能由以下几个阶段实现。

(1)在CChap10Set的m_pSet指针中增加一个参数变量。操作步骤如下:

①单击项目工作区窗口中的“ClassView”选项卡并展开其选项,用鼠标右键单击选项,在弹出的快捷菜单中选择“AddMertualFuction”命令,打开“AddMertualFuction”对话框,设置一个名为“p”,数据类型为“Cstring”,Access为“Public”的变量。②修改函数体内容。

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;//参数为1

//}}AFX_FIELD_INIT

m_nDefaultType=dynaset;

}③修改函数体内容。

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);//增加参数项

RFX_Text(pFX,_T("P"),p);//参数项变量

//}}AFX_FIELD_MAP

}

(2)在“CChap10View”类中增加成员变量。操作步骤如下:

①选择“查看/建立类向导”命令。

②打开“MFCClassWizard”对话框,单击“MemberVariables”选项卡;在“Classname”下拉列表框中选择“CChap10View”选项;在“ControlIDs”列表框中选择“IDC_SHOWTOP”选项,单击按钮,打开“AddMemberVariable”对话框,在“Membervariablename”下拉列表框中输入“mytop”,在“Category”下拉列表框中选择“Control”选项,单击按钮,如图10-73所示。③在“ControlIDs”列表框中选择“IDC_TOP”选项,单击

按钮,打开“AddMemberVariable”对话框,在“Membervariablename”下拉列表框中输入“m_top”,在“Category”下拉列表框中选择“Value”选项,单击按钮,如图10-74所示。图10-73添加“mytop”成员变量图10-74添加“mytop”成员变量

(3)在“CChap10View”类中增加成员函数。操作步骤如下:

①单击项目工作区窗口中的“ClassView”选项卡并展开其选项,用鼠标右键单击选项,在弹出的快捷菜单中选择“AddMemberFunction”命令。

②打开“AddMemberFunction”对话框,在“FunctionType”文本框中输入“void”;在“FunctionDeclaration”文本框中输入“Top(CStrings)”;在“Access”栏中选中单选项;单击

按钮,如图10-75所示。图10-75“AddMemberFunction”对话框提示:Top(CStrings)中的形式参数s对应用户选择的考试科目。

③选择“查看/建立类向导”命令,打开“MFCClassWizard”对话框,单击“MessageMaps”选项卡;在“Classname”下拉列表框中选择“CChap10view”选项;在“ObjectIDs”列表框中选择“IDC_SHOWTOP”选项;在“Messages”列表框中选择“BN_CLICKED”选项,单击按钮,打开“AddMemberFunction”对话框,单击按钮,如图10-76所示。图10-76添加“OnShowtop”成员变量(4)修改成员函数函数体内容。

①修改Top函数函数体内容。

voidCChap10View::Top(CStrings)

{

CStringstr="";//定义中间变量

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

{

myshowtop.DeleteString(0);//清空列表框中的内容

}

m_pSet->m_strFilter="subject=?";//设置排序条件:字段=未知

m_pSet->p=s;//字段=用户选择的考试科目名称

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

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

m_pSet->MoveFirst();//将记录指针移动到第一个记录位置

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的内容添加到列表框中

m_pSet->MoveNext();//指针移动到下一条记录

}

}②修改OnShowtop函数的函数体内容。

voidCChap10View::OnShowtop()

{

//TODO:Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);//将用户的选择传递给组合框变量

Top(m_top);//以用户选择的考试科目为条件,调用Top函数

m_pSet->m_strFilter="";//取消查询条件

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

}

提示:

m_pSet->m_strFilter="";

//取消查询条件

m_pSet->Requery(); //重新排序这两行代码用于取消查询条件,将记录指针重新恢复到未排序的状态下。若不添加它们,则排序后进行浏览操作时指针只能在按条件排序后的记录中移动。

(5)调试运行功能区。操作步骤如下:

①按“Ctrl+F5”键执行程序,程序正常运行。

②打开用户操作主界面,在“按成绩排序”功能区“考试科目”下拉列表框中选择“英语”选项,单击按钮,排序结果如图10-77所示。图10-77按成绩排序信息

11)实现按考试科目查询并显示学生成绩分布直方图功能

实现按考试科目查询并显示学生成绩分布直方图功能由以下几个阶段实现。

(1)设计“学生成绩分布直方图”对话框界面。操作步骤如下:

①单击项目工作区窗口中的“ResourceView”选项卡并展开其选项,用鼠标右键单击选项,在弹出的快

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论