基于VC++6.0的学生成绩输入操作对话框设计

         设计一个“学生成绩操作”对话框,当单击“添加”按钮时,弹出“学 生成绩输入”对话框,输入数据后,学号添加到组合框中,选择组合框中的学号后,学生数据在列表框中显示出来。

操作过程如下:

1.启动VC+6.0,创建一个基于MFC的单文档应用程序Ex_Ctrls

在单文档中添加对话框的方法为

点击菜单栏上的插入------资源----Dialog

 

2.添加并设计“学生成绩输入”对话框 添加一个新的对话框资源,将 ID 号改为 IDD_INPUT,标题为“学生成绩输入”,对话 框字体改为“宋体,9 号”。将OK 和 Cancel 按钮标题改为“确定”和“取消”

3.向对话框内添加组件,布局如下:

ID的修改如下所示:

4. 按 Ctrl+W 快捷键,打开 MFC Wizard 对话框,修改 ClnputDlg 代码以及添加成员变量,为按钮 IDOK 添加 BN_CLICKED 消息映 射,并添加下列学生姓名和学号的判断代码

添加成员变量:

添加消息映射:

void CinputDlg::OnOK() 
{
UpdateData( );

m_strName.TrimLeft( );
m_strNo.TrimLeft( );
if(m_strName.IsEmpty())
MessageBox("学生姓名不能为空!");
else
if(m_strNo.IsEmpty())
 MessageBox("学生学号不能为空!");
else

	CDialog::OnOK();
}

输入代码后,编译无误

5.

1)新添加对话框资源 ID_EX_CTRLS_DIALOG。

2)删除对话框中的默认静态文本控件和“取消”按钮,将对话框的标题改为“学生成 绩操作”,将“确定”按钮标题改为“退出”。

3)参照图 16 所示的控件布局,添加一个“添加”按钮,标识符为 IDC_STU_ADD. 4)添加一个列表框控件,保留默认的标识符 IDC_LIDTl,去掉 Sort 属性选项前面的选 中标记。

5)添加一个组合框控件,保留默认的标识符 IDC_COMBO1。

6)添加其他静态文本控件,调整对话框大小。

 6.按 Ctrl+W 快捷键,打开 MFC Wizard 对话框,为列表框件 IDC_LIST1 添加控件变量 m_List, 为型为 Clist Box。为组合框控件 IDC_COMBO1 添加控件变量 m_Combo,类型为 CcomboBox.(跟前面的步骤相似)

 用 MFC Wizard 为按钮 IDC_STU_ADD 添加 BN_CLICKED 消息映射,并添加下列代 码,调试无错误。

 

void CEx_CtrlsDlg::OnStuAdd() 
{
CinputDlg dlg;
if(IDOK==dlg.DoModal())
{
// 判断组合框中有无重复的学号存在
if(m_Combo.FindString(-1, dlg.m_strNo)<0)
{
int nIndex=m_Combo.AddString(dlg.m_strNo);
STUDATA data;
data.strName=dlg.m_strName;
data.strNo=dlg.m_strNo;
data.fScore1=dlg.m_fScore1;
data.fScore2=dlg.m_fScore2;

data.fScore3=dlg.m_fScore3;
m_Combo.SetItemDataPtr(nIndex, new STUDATA(data));
}
m_Combo.SetCurSel(0);
OnChangeCombo();
}

	
}

7.打开 Ex_CtrlsDlg.h 文件,在 class CE_CtrlsDlg 语句前面添加下列数据结构定义

Ex_CtrlsDlg.cpp 文件的前面添加 CinputDlg 的包含语句:

#include “Ex_Ctrls.h”

#include “Ex_CtrlsDlg.h”

#include “InputDlg.h” ,并编译并运行

 8.用 MFC Wizard 为组合框 IDC_COMBO1 添加 CBN_SELCHANGE 消息映射,将其映函数改为 OnChangeCombo,并添加下列代码:

 

HCURSOR CEx_CtrlsDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}

void CEx_CtrlsDlg::OnStuAdd() 
{
CinputDlg dlg;
if(IDOK==dlg.DoModal())
{
// 判断组合框中有无重复的学号存在
if(m_Combo.FindString(-1, dlg.m_strNo)<0)
{
int nIndex=m_Combo.AddString(dlg.m_strNo);
STUDATA data;
data.strName=dlg.m_strName;
data.strNo=dlg.m_strNo;
data.fScore1=dlg.m_fScore1;
data.fScore2=dlg.m_fScore2;

data.fScore3=dlg.m_fScore3;
m_Combo.SetItemDataPtr(nIndex, new STUDATA(data));
}
m_Combo.SetCurSel(0);
OnChangeCombo();
}

	
}

void CEx_CtrlsDlg::OnChangeCombo() 
{

int nIndex=m_Combo.GetCurSel();
if(nIndex!=CB_ERR )
{
m_List.ResetContent();
STUDATA*data;
data=(STUDATA*)m_Combo.GetItemDataPtr(nIndex);
CString str;
str="姓名:" +data->strName;
m_List.AddString(str);
str="学号:" +data->strNo;
m_List.AddString(str);
str.Format("成绩 1:%4.1f, 成绩 2:%4.1f, 成绩 3:%4.1f",data->fScore1 ,data->fScore2, data->fScore3);
m_List.AddString(str);
}

}

9.用MFC ClasWizard 为对话框 CEx_CtrlsDlg 添加 WM_DESTROY 的消息映射,并添加下列代码,用来删除所有与组合框中列表项目相关联的 STUDATA 结构数据,并释放内存

 

void CEx_CtrlsDlg::OnDestroy() 
{
for(int nIndex = m_Combo. GetCount( )-1; nIndex>=0; nIndex--)
delete(STUDATA *)m_Combo.GetItemDataPtr(nIndex);
CDialog::OnDestroy( );
	
}

最终的运行结果如下:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小奇兵1213号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值