基于MFC的一个简单应用系统的开发示例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验名称:
实验I:基于MFC的一个简单应用系统的开发示例
二、实验目的:
1、了解MFC软件开发的基本知识
2、掌握MFC中基本控件的使用方法
三、实验器材:
1、计算机
四、实验内容:
说明:
1)此实例适用于有一定C语言基础的对象;
2)所涉及到的系统分析、功能设置、数据结构、模块划分、算法设计等可参考实验H:小系统开发;
3)建议在开发过程中打开百度,不懂的知识点可随手查看。

开发一个基于对话框的“班级基本信息管理系统”,如下:
1.新建一项目文件,设置如下图:
2.单击“OK”,进入下一步:
选中“Dialog based”,然后按向导往下做,所有设置取默认值,直到完成为止。

完成后的界面如下:
3.右击对话框空白处,在菜单中选“Properties”,弹出如下界面:
设置其中的Caption为“班级基本信息管理”。

4.将对话框上原有的一个标签(静态文本框)和两个按钮都删除,使之为空白,以备我们
全部自行设置内容。

5.给此对话框添加四个标签(静态文本框),逐个右击,在菜单中选“Properties”,在出
6.给此对话框添加四个编辑框,逐个右击,在菜单中选“Properties”,在出现的对话框中
修改其属性如下表:
7.给此对话框添加十一个命令按钮,逐个右击,在菜单中选“Properties”,在出现的对话
8.选中其中的“学号、姓名、性别、年龄”四个编辑框,右击,将其“Disabled”属性选
中,如下所示:
9.同样,将“确定”和“取消”两按钮的Disabled属性也选中。

10.编译->连接->运行,效果如下:
11.运行可知,目前只是界面有了,但功能都没有实现,接下来完善功能。

12.双击“退出”按钮,如下图:
13.单击OK,进入代码编辑窗口后键入如下代码(加粗部分为用户键入内容,下同):void CClassManageDlg::OnButtonTc()
{
// TODO: Add your control notification handler code here
EndDialog(NULL);
}
14.在代码编辑窗口的前面添加如下代码(在前面找个适当位置添加即可,注意,不要放在
函数内部):
#define N 100 //最大人数
struct stu_info
{
char xh[15]; //学号
char xm[7]; //姓名
char xb[3]; //性别
int nl; //年龄
};
struct stu_info stu[N+1];//用于存放所有人相关信息,0号元素备用
int CurrentCount=0; //当前实际人数
int intWz=0; //用于指示当前位置(元素编号)
bool boolXgOrTj; //标记是修改还是添加,TRUE:修改FALSE:添加
15.双击“添加”,进入代码编辑窗口后在相应位置添加如下代码以对“添加”按钮进行响
应:
void CClassManageDlg::OnButtonTj()
{
// TODO: Add your control notification handler code here
CButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮
CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮
CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮
CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮
CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮
CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮
CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮
CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮
CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮
CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
cBtnSyg->EnableWindow(FALSE);
cBtnXyg->EnableWindow(FALSE);
cBtnDyg->EnableWindow(FALSE);
cBtnMyg->EnableWindow(FALSE);
cBtnTj->EnableWindow(FALSE);
cBtnXg->EnableWindow(FALSE);
cBtnQd->EnableWindow(TRUE);
cBtnQx->EnableWindow(TRUE);
cBtnSc->EnableWindow(FALSE);
cBtnCx->EnableWindow(FALSE);
cBtnTc->EnableWindow(FALSE);
cEdtXh->EnableWindow(TRUE);
cEdtXm->EnableWindow(TRUE);
cEdtXb->EnableWindow(TRUE);
cEdtNl->EnableWindow(TRUE);
cEdtXh->SetFocus();
boolXgOrTj=FALSE;
}
16.双击“修改”,进入代码编辑窗口后在相应位置添加如下代码以对“修改”按钮进行响
应:
void CClassManageDlg::OnButtonXg()
{
// TODO: Add your control notification handler code here
if(intWz<1 || intWz>CurrentCount)
MessageBox("当前不是有效数据,不能修改!!!","修改信息");
else
{
CButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮
CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮
CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮
CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮
CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮
CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮
CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮
CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮
CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮
CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮
CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
cBtnSyg->EnableWindow(FALSE);
cBtnXyg->EnableWindow(FALSE);
cBtnDyg->EnableWindow(FALSE);
cBtnMyg->EnableWindow(FALSE);
cBtnTj->EnableWindow(FALSE);
cBtnXg->EnableWindow(FALSE);
cBtnQd->EnableWindow(TRUE);
cBtnQx->EnableWindow(TRUE);
cBtnSc->EnableWindow(FALSE);
cBtnCx->EnableWindow(FALSE);
cBtnTc->EnableWindow(FALSE);
cEdtXh->EnableWindow(TRUE);
cEdtXm->EnableWindow(TRUE);
cEdtXb->EnableWindow(TRUE);
cEdtNl->EnableWindow(TRUE);
cEdtXh->SetFocus();
boolXgOrTj=TRUE;
}
}
17.双击“确定”,进入代码编辑窗口后在相应位置添加如下代码以对“确定”按钮进行响
应:
void CClassManageDlg::OnButtonQd()
{
// TODO: Add your control notification handler code here
CButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮
CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮
CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮
CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮
CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮
CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮
CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮
CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮
CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮
CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
cBtnSyg->EnableWindow(TRUE);
cBtnXyg->EnableWindow(TRUE);
cBtnDyg->EnableWindow(TRUE);
cBtnMyg->EnableWindow(TRUE);
cBtnTj->EnableWindow(TRUE);
cBtnXg->EnableWindow(TRUE);
cBtnQd->EnableWindow(FALSE);
cBtnQx->EnableWindow(FALSE);
cBtnSc->EnableWindow(TRUE);
cBtnCx->EnableWindow(TRUE);
cBtnTc->EnableWindow(TRUE);
cEdtXh->EnableWindow(FALSE);
cEdtXm->EnableWindow(FALSE);
cEdtXb->EnableWindow(FALSE);
cEdtNl->EnableWindow(FALSE);
if(boolXgOrTj==FALSE)//属于添加这种情况
{
if(CurrentCount==N)
MessageBox("人数已达上限,不能再添加!!!","添加信息");
else
{
CString strTemp;
CurrentCount++;
intWz=CurrentCount;
cEdtXh->GetWindowText(stu[CurrentCount].xh,14);
cEdtXm->GetWindowText(stu[CurrentCount].xm,8);
cEdtXb->GetWindowText(stu[CurrentCount].xb,4);
cEdtNl->GetWindowText(strTemp);
stu[CurrentCount].nl=atoi(strTemp);
}
cBtnTj->SetFocus();
}
else//属于修改这种情况
{
CString strTemp;
cEdtXh->GetWindowText(stu[intWz].xh,14);
cEdtXm->GetWindowText(stu[intWz].xm,8);
cEdtXb->GetWindowText(stu[intWz].xb,4);
cEdtNl->GetWindowText(strTemp);
stu[intWz].nl=atoi(strTemp);
cBtnXg->SetFocus();
}
}
18.双击“取消”,进入代码编辑窗口后在相应位置添加如下代码以对“取消”按钮进行响
应:
void CClassManageDlg::OnButtonQx()
{
// TODO: Add your control notification handler code here
CButton * cBtnSyg=(CButton *)GetDlgItem(IDC_BUTTON_SYG); //上一个按钮
CButton * cBtnXyg=(CButton *)GetDlgItem(IDC_BUTTON_XYG); //下一个按钮
CButton * cBtnDyg=(CButton *)GetDlgItem(IDC_BUTTON_DYG); //第一个按钮
CButton * cBtnMyg=(CButton *)GetDlgItem(IDC_BUTTON_MYG); //末一个按钮CButton * cBtnTj=(CButton *)GetDlgItem(IDC_BUTTON_TJ); //添加按钮
CButton * cBtnXg=(CButton *)GetDlgItem(IDC_BUTTON_XG); //修改按钮
CButton * cBtnQd=(CButton *)GetDlgItem(IDC_BUTTON_QD); //确定按钮
CButton * cBtnQx=(CButton *)GetDlgItem(IDC_BUTTON_QX); //取消按钮
CButton * cBtnSc=(CButton *)GetDlgItem(IDC_BUTTON_SC); //删除按钮
CButton * cBtnCx=(CButton *)GetDlgItem(IDC_BUTTON_CX); //查询按钮
CButton * cBtnTc=(CButton *)GetDlgItem(IDC_BUTTON_TC); //退出按钮
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
cBtnSyg->EnableWindow(TRUE);
cBtnXyg->EnableWindow(TRUE);
cBtnDyg->EnableWindow(TRUE);
cBtnMyg->EnableWindow(TRUE);
cBtnTj->EnableWindow(TRUE);
cBtnXg->EnableWindow(TRUE);
cBtnQd->EnableWindow(FALSE);
cBtnQx->EnableWindow(FALSE);
cBtnSc->EnableWindow(TRUE);
cBtnCx->EnableWindow(TRUE);
cBtnTc->EnableWindow(TRUE);
cEdtXh->EnableWindow(FALSE);
cEdtXm->EnableWindow(FALSE);
cEdtXb->EnableWindow(FALSE);
cEdtNl->EnableWindow(FALSE);
if(boolXgOrTj==FALSE)//属于添加这种情况
cBtnTj->SetFocus();
else//属于修改这种情况
cBtnXg->SetFocus();
}
19.双击“上一个”,进入代码编辑窗口后在相应位置添加如下代码以对“上一个”按钮进
行响应:
void CClassManageDlg::OnButtonSyg()
{
// TODO: Add your control notification handler code here
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount<1)
MessageBox("无信息可供查看!!!","查看信息");
else
{
if(intWz<=1)
intWz=CurrentCount;
else
intWz--;
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
}
20.双击“下一个”,进入代码编辑窗口后在相应位置添加如下代码以对“下一个”按钮进
行响应:
void CClassManageDlg::OnButtonXyg()
{
// TODO: Add your control notification handler code here
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount<1)
MessageBox("无信息可供查看!!!","查看信息");
else
{
if(intWz>=CurrentCount)
intWz=1;
else
intWz++;
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
21.双击“第一个”,进入代码编辑窗口后在相应位置添加如下代码以对“第一个”按钮进
行响应:
void CClassManageDlg::OnButtonDyg()
{
// TODO: Add your control notification handler code here
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount<1)
MessageBox("无信息可供查看!!!","查看信息");
else
{
intWz=1;
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
}
22.双击“末一个”,进入代码编辑窗口后在相应位置添加如下代码以对“末一个”按钮进
行响应:
void CClassManageDlg::OnButtonMyg()
{
// TODO: Add your control notification handler code here
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount<1)
MessageBox("无信息可供查看!!!","查看信息");
else
{
intWz=CurrentCount;
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
23.双击“删除”,进入代码编辑窗口后在相应位置添加如下代码以对“删除”按钮进行响
应:
void CClassManageDlg::OnButtonSc()
{
// TODO: Add your control notification handler code here
if(intWz<1 || intWz>CurrentCount)
MessageBox("当前不是有效数据,不能删除!!!","删除信息");
else
if(MessageBox("确定要删除吗?","删除信息",MB_ICONQUESTION|MB_YESNO)==IDYES)
{
//从数组中删除
for(int i=intWz+1;i<=CurrentCount;i++)
stu[i-1]=stu[i];
CurrentCount--;
MessageBox("已成功删除!","删除信息");
//显示后一条记录信息
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount>=1)//还有剩余信息可供操作
{
if(intWz>=CurrentCount+1)//当前是最后一个
intWz=1; //显示第一条信息
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
else
{
cEdtXh->SetWindowText("无人员信息");
cEdtXm->SetWindowText("");
cEdtXb->SetWindowText("");
CString strTemp;
strTemp.Format("%s","");
cEdtNl->SetWindowText(strTemp);
}
}
}
24.逐个选择主菜单中的如下菜单项:Insert->Resource,出现如下界面:
选中“Menu”后再单击“OK”按钮,则可增加一菜单IDR_MENU1,如下图:
25.右击IDR_MENU1,选Properties (属性),按下图进行设置:
26.双击IDR_MENU_MAIN,出现如下窗口:
在此窗口中对菜单进行编辑(右击选Properties (属性)可以进行编辑),如下: 主菜单:
两项,样式如下图:
属性如下:
击,选“Properties”,如下图:
28.单击Menu中右侧的下箭头,选中其中的IDR_MENU_MAIN,如下图:
29.重新编译运行,效果如下:
发现已经有了菜单,但菜单没作用,下面再逐步实现各菜单项功能。

30.从左侧ResourceView中双击打开菜单IDR_MENU_MAIN,再右击菜单中的“退出(X)”,
选中菜单中的“ClassWizard”,出现如下界面:
31.选中“Select an existing class”后单击“OK”按钮,如下:
32.按上图选择后单击“Select”,如下:
33.按上图选择后单击“Add Function”,如下图:
34.单击“OK”,如下图:
35.按上图选择后单击“Edit Code”,进入代码编辑窗口,在其中输入如下代码(加粗部分为
用户录入部分):
void CClassManageDlg::OnAppExit()
{
// TODO: Add your command handler code here
EndDialog(NULL);
}
36.按类似的步骤,给“保存(S)”添加如下代码:
void CClassManageDlg::OnFileSave()
{
// TODO: Add your command handler code here
FILE *fp;
fp=fopen("bjxx.txt","w");
if(fp==NULL)
MessageBox("文件建立不功能,无法保存信息!!!","信息保存",MB_OK);
else
{
fprintf(fp,"%d",CurrentCount);
for(int i=1;i<=CurrentCount;i++)
fprintf(fp,"\n%16s%8s%4s%4d",stu[i].xh,stu[i].xm,stu[i].xb,stu[i].nl);
fclose(fp);
MessageBox("信息已成功保存!!!","信息保存",MB_OK);
}
}
37.给“打开(O)”添加如下代码:
void CClassManageDlg::OnFileOpen()
{
// TODO: Add your command handler code here
FILE *fp;
fp=fopen("bjxx.txt","r");
if(fp==NULL)
MessageBox("文件打开不功能,无法读取信息!!!","信息读取",MB_OK);
else
{
fscanf(fp,"%d",&CurrentCount);
for(int i=1;i<=CurrentCount;i++)
fscanf(fp,"%s%s%s%d",stu[i].xh,stu[i].xm,stu[i].xb,&stu[i].nl);
fclose(fp);
MessageBox("信息已成功读取!!!","信息读取",MB_OK);
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount>=1)//还有剩余信息可供操作
{
intWz=1; //显示第一条信息
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
else
{
cEdtXh->SetWindowText("无人员信息");
cEdtXm->SetWindowText("");
cEdtXb->SetWindowText("");
CString strTemp;
strTemp.Format("%s","");
cEdtNl->SetWindowText(strTemp);
}
}
}
38.给“关于本系统(A)”添加如下代码:
void CClassManageDlg::OnAppAbout()
{
// TODO: Add your command handler code here
CAboutDlg cDlg;
cDlg.DoModal();
}
39.再次运行,分别选各菜单项,效果如下列图:
40.对“保存”及“打开”的进一步完善:
目前的“保存”及“打开”都是对指定位置的指定文件的操作(保存或打开),无法由用户选择。

下面我们通过使用文件操作对话框来实现对文件的灵活操作。

将与菜单项“打开(O)”及“保存(S)”相对应的代码在原来基础上分别改为如下所示(加粗部分为新增内容):
void CClassManageDlg::OnFileSave()
{
// TODO: Add your command handler code here
FILE *fp;
unsigned char fileFilter[]= "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog
dlgOpenFile(false,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)fileFilt er,NULL);
if(dlgOpenFile.DoModal()==IDOK)
{
CString fileName=dlgOpenFile.GetPathName();
fp=fopen(fileName,"w");
if(fp==NULL)
MessageBox("文件建立不功能,无法保存信息!!!","信息保存",MB_OK);
else
{
fprintf(fp,"%d",CurrentCount);
for(int i=1;i<=CurrentCount;i++)
fprintf(fp,"\n%16s%8s%4s%4d",stu[i].xh,stu[i].xm,stu[i].xb,stu[i].nl);
fclose(fp);
MessageBox("信息已成功保存!!!","信息保存",MB_OK);
}
}
}
void CClassManageDlg::OnFileOpen()
{
// TODO: Add your command handler code here
FILE *fp;
unsigned char fileFilter[]= "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog
dlgOpenFile(true,0,0,OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,(LPCTSTR)fileFilt er,NULL);
if(dlgOpenFile.DoModal()==IDOK)
{
CString fileName=dlgOpenFile.GetPathName();
fp=fopen("bjxx.txt","r");
if(fp==NULL)
MessageBox("文件打开不功能,无法读取信息!!!","信息读取",MB_OK);
else
{
fscanf(fp,"%d",&CurrentCount);
for(int i=1;i<=CurrentCount;i++)
fscanf(fp,"%s%s%s%d",stu[i].xh,stu[i].xm,stu[i].xb,&stu[i].nl);
fclose(fp);
MessageBox("信息已成功读取!!!","信息读取",MB_OK);
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
if(CurrentCount>=1)//还有剩余信息可供操作
{
intWz=1; //显示第一条信息
cEdtXh->SetWindowText(stu[intWz].xh);
cEdtXm->SetWindowText(stu[intWz].xm);
cEdtXb->SetWindowText(stu[intWz].xb);
CString strTemp;
strTemp.Format("%d",stu[intWz].nl);
cEdtNl->SetWindowText(strTemp);
}
else
{
cEdtXh->SetWindowText("无人员信息");
cEdtXm->SetWindowText("");
cEdtXb->SetWindowText("");
CString strTemp;
strTemp.Format("%s","");
cEdtNl->SetWindowText(strTemp);
}
}
}
}
再次运行,打开及保存的效果如下:
41.“查询”功能的实现:
1)选择菜单中的Insert->Resource->Dialog,单击“New”按钮,建立一个对话框用入
输入,如下:
2)在些对话框空白处右击,选Properties,在弹出的界面中按如下进行设置:
3)选择此设置对话框中的Styles页面,将其中的System menu取消选择,如下图:
4)添加一个编辑框,并调整原有的两个按钮,结果如下:
6)双击此新建对话框的空白处,出现如下界面:
7)按上图选择后单击“OK”,如下图:
8)在Name中输入CInputDlg后单击“OK”
9)双击“确定”按钮,进入代码编辑窗口后输入如下内容(加粗部分为用户录入):void CInputDlg::OnOK()
{
// TODO: Add extra validation here
CEdit * cEdtInput=(CEdit *)GetDlgItem(IDC_EDIT_INPUT);
cEdtInput->GetWindowText(strInput);
EndDialog(NULL);
}
10)双击“取消”按钮,进入代码编辑窗口后输入如下内容(加粗部分为用户录入):void CInputDlg::OnCancel()
{
// TODO: Add extra cleanup here
strInput.Format("");
EndDialog(NULL);
}
11)在当前代码编辑窗口的前面部分增加一行语句:extern CString strInput;
12)通过左侧ResourceView双击打开IDD_CLASSMANAGE_DIALOG,再双击其中的
“查询”按钮,进行代码编辑窗口后输入如下代码:
void CClassManageDlg::OnButtonCx()
{
// TODO: Add your control notification handler code here
CInputDlg cInputDlg;
cInputDlg.DoModal();
if(strInput.GetLength()>0)//有等查信息
{
int i=0;
CString strDcxx;
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
CEdit * cEdtXm=(CEdit *)GetDlgItem(IDC_EDIT_XM);//姓名编辑框
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
CEdit * cEdtNl=(CEdit *)GetDlgItem(IDC_EDIT_NL);//年龄编辑框
do
{
i++;
strDcxx.Format("%s",stu[i].xh);
}while((pare(strDcxx)!=0) && (i<=CurrentCount));
if(i<=CurrentCount)//找到了
{
cEdtXh->SetWindowText(stu[i].xh);
cEdtXm->SetWindowText(stu[i].xm);
cEdtXb->SetWindowText(stu[i].xb);
CString strTemp;
strTemp.Format("%d",stu[i].nl);
cEdtNl->SetWindowText(strTemp);
}
else//没找到
{
cEdtXh->SetWindowText("找不到");
cEdtXm->SetWindowText("");
cEdtXb->SetWindowText("");
CString strTemp;
strTemp.Format("%s","");
cEdtNl->SetWindowText(strTemp);
}
}
}
13)在当前代码编辑窗口的前面部分增加一行语句,其作用相当于定义一个全局变量:CString strInput; //存放待查信息
14)在当前代码编辑窗口的前面包含头文件部分增加一行语句,将相应头文件包含进
来:
#include "stdafx.h"
#include "ClassManage.h"
#include "ClassManageDlg.h"
#include "InputDlg.h"
15)再次运行,效果如下:
42.学号应该是14位,性别应该只能取“男”或“女”,为此,对本系统进一步完善:
1)打开IDD_CLASSMANAGE_DIALOG,右击与学号对应的编辑框,选
“ClassWizard”,如下图:
按上图选择后单击“Add Function”,再单击“Edit Code”,进入代码编辑窗口,输入如下代码:
void CClassManageDlg::OnKillfocusEditXh()
{
// TODO: Add your control notification handler code here
CString strInput;
CEdit * cEdtXh=(CEdit *)GetDlgItem(IDC_EDIT_XH);//学号编辑框
cEdtXh->GetWindowText(strInput);
if(strInput.GetLength()!=14)
MessageBox("学号位数不对,请重输!!!","信息输入",MB_OK);
}
2)右击与学号对应的编辑框,选“ClassWizard”,如下图:
按上图选择后单击“Add Function”,再单击“Edit Code”,进入代码编辑窗口,输入如下代码:
void CClassManageDlg::OnKillfocusEditXb()
{
// TODO: Add your control notification handler code here
CString strNan;
CString strNv;
CString strInput;
CEdit * cEdtXb=(CEdit *)GetDlgItem(IDC_EDIT_XB);//性别编辑框
cEdtXb->GetWindowText(strInput);
strNan.Format("男");
strNv.Format("女");
if((pare(strNan)!=0)&&(pare(strNv)!=0))
MessageBox("输入必须为男或女,请重输!!!","信息输入",MB_OK);
}
3)运行效果分别如下:
43.至此,基本功能全部完成。

44.。

相关文档
最新文档