3实验步骤.docx

上传人:b****7 文档编号:11078043 上传时间:2023-02-24 格式:DOCX 页数:26 大小:261.94KB
下载 相关 举报
3实验步骤.docx_第1页
第1页 / 共26页
3实验步骤.docx_第2页
第2页 / 共26页
3实验步骤.docx_第3页
第3页 / 共26页
3实验步骤.docx_第4页
第4页 / 共26页
3实验步骤.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

3实验步骤.docx

《3实验步骤.docx》由会员分享,可在线阅读,更多相关《3实验步骤.docx(26页珍藏版)》请在冰豆网上搜索。

3实验步骤.docx

3实验步骤

实验三 使用EVC编程实现“文件系统管理”

1.实验目的:

1.熟悉WinCE中文件的基本操作;

2.熟悉在EVC4.0调试嵌入式应用程序的基本方法;

3.掌握控件(Combobox)的使用方法;

4.掌握EditBox(编辑框)、ComboBox(组合框)与成员变量的关联的方法;

5.掌握MFC类库中的CFile类的使用方法。

2.实验任务:

1.使用CFile类来实现对一个学生数据文件的操作

●移动学生记录

●添加一条学生信息

●编辑一条学生信息

●删除一条学生信息

3.实验步骤:

1.使用EVC向导(File->New)新建一个项目

在Projects选项卡选择“WCEPocketPC2003MFCAppWizard(exe)”项,在右侧的Projectname和Location输入栏中分别输入项目的名称和项目的存储路径,如图1所示,这里项目名称设为FileExam。

图1新建项目对话框

输入项目名和路径后,单击OK按钮,进入如图2所示的向导界面的第一步。

在该界面中的应用程序类型中选择Dialogbased(对话框类型),单击Next按钮,进入向导的第2步。

在该界面中输入应用程序的标题,我们直接按照默认操作完成向导即可。

图2向导界面1

2.设置工具栏如下图3所示

图3工具栏(用于设置工程名\SDK\编译类型\目标机器)

3.设计对话框样式。

首先在工作区(WorkSpace)点“ResourceView”标签,双击打开对话框窗体(IDD_FILEEXAM_DIALOG)。

如图4。

图4打开的对话框窗体

设计对话框窗体如图5所示。

可以通过右键单击控件,选择“Properties”

设置控件的“ID”属性和“Caption”属性。

对话框上的主要控件及其属性设置如表1。

图5文件综合操作示例界面

表1 文件综合操作示例界面的控件及其属性设置

控件ID

说明

IDC_EDTXSBH

EditBox(编辑框),用于显示和输入学生编号

IDC_EDTXSXM

EditBox(编辑框),用于显示和输入学生姓名

IDC_CMBXSXB

ComboBox(组合框),用于显示和设置学生性别。

设置Type属性为Dropdown,用户只可以进行选择,并将Data属性设置成”male|female”(先填入male,然后“ctrl+Enter”换行填入female)

IDC_EDTCSRQ

EditBox(编辑框),用于显示和输入出生日期

IDC_EDTBJMC

EditBox(编辑框),用于显示和输入班级名称

IDC_BTNFIRST

Button(按钮),标题Caption设为”First”,用于将记录指针移到首部

IDC_BTNPRIOR

Button(按钮),标题Caption设为”Prior”,用于将记录指针向前移动一个

IDC_BTNNEXT

Button(按钮),标题Caption设为”Next”,用于将记录指针向后移动一个

IDC_BTNLAST

Button(按钮),标题Caption设为”Last”,用于将记录指针移到尾部

IDC_BTNADD

Button(按钮),标题Caption设为”Add”,用于添加新记录

IDC_BTNEDIT

Button(按钮),标题Caption设为”Edit”,用于编辑旧记录

IDC_BTNCANCEL

Button(按钮),标题Caption设为”Cancel”,用于恢复所作的添加或修改

IDC_BTNSAVE

Button(按钮),标题Caption设为”Save”,用于保存所作的添加或修改

IDC_BTNDELETE

Button(按钮),标题Caption设为”Delete”,删除当前记录

4.为4个EditBox(编辑框)和一个ComboBox(组合框)关联成员变量。

在编辑框上点右键,选择“ClassWizard”,如图6。

图6“ClassWizard”

在打开的类向导编辑框,点击“MemberVariables”标签,为4个EditBox(编辑框)和一个ComboBox(组合框)关联成员变量,如图7所示。

关联方法:

双击控件的”ControlIDs”,打开对话框,按照下表2输入类型和成员变量名称。

表2关联列表

ID名称

类型

变量名

IDC_EDTXSBH

CString

m_xsbh

IDC_EDTXSXM

CString

m_xsxm

IDC_CMBXSXB

CString

m_xsxb

IDC_EDTCSRQ

CString

m_csrq

IDC_EDTBJMC

CString

m_bjmc

图7对应关联

5.定义学生基本信息结构。

在对话框头文件(FileExamDlg.h)中定义学生基本信息结构,定义的结构如下(此段代码添加到对话框类CFileExamDlg定义之前):

#pragmapack(push,1)

//定义学生基本信息结构

typedefstruct_CStudentData

{

TCHARxsbh[7];//学生编号

TCHARxsxm[21];//学生姓名

TCHARxb[10];//学生性别

TCHARcsrq[11];//出生日期

TCHARbjmc[21];//班级名称

}CStudentData;

#pragmapack(pop)

接着再定义一个全局常量来表示存储学生信息的文件名(此段代码添加到对话框类CFileExamDlg定义之前)。

constLPCTSTRSTUDENTFILEPATH=_T("\\MyDocuments\\student.dat");

6.定义私有变量。

定义一个列表以存储学生的基本信息,因此在对话框类中添加如下代码以定义私有变量(添加到类CFileExamDlg的定义文件FileExamDlg.h,注意:

放到类CFileExamDlg的里面)

private:

//定义存储学生数据表的队列

CListm_lstStudent;

//定义操作标识,0-代表添加;1-代表编辑

intm_operID;

//存储指针位置

intm_iCurPos;

7.添加头文件。

在对话框头文件(FileExamDlg.h)中加上#include这句代码,因为我们声明的列表变量用到了标准模板库。

(放在”#endif//_MSC_VER>=1000”之后)

8.定义私有方法。

为对话框类添加两个私有方法SetControlEnable和SetNavigatorButton,分别用于设置窗体上控件的有效性和指针移动按钮的有效性,他们的声明代码如下:

(添加到类CFileExamDlg的定义文件FileExamDlg.h,注意:

放到类CFileExamDlg的里面)

private:

//设置控件有效性

voidSetControlEnable(boolaValue);

//设置指针移动按钮的有效性

voidSetNavigatorButton(intaValue);

以上两个方法的实现代码如下:

(添加到FileExamDlg.cpp中)

/*

*函数介绍:

设置控件有效性

*入口参数:

aValue代表控件的有效性

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

SetControlEnable(boolaValue)

{

/*设置输入框的有效性*/

((CEdit*)GetDlgItem(IDC_EDTXSBH))->EnableWindow(aValue);

((CEdit*)GetDlgItem(IDC_EDTXSXM))->EnableWindow(aValue);

((CEdit*)GetDlgItem(IDC_CMBXSXB))->EnableWindow(aValue);

((CEdit*)GetDlgItem(IDC_EDTCSRQ))->EnableWindow(aValue);

((CEdit*)GetDlgItem(IDC_EDTBJMC))->EnableWindow(aValue);

/*设置指针移动按钮的有效性*/

((CButton*)GetDlgItem(IDC_BTNFIRST))->EnableWindow(!

aValue);

((CButton*)GetDlgItem(IDC_BTNPRIOR))->EnableWindow(!

aValue);

((CButton*)GetDlgItem(IDC_BTNNEXT))->EnableWindow(!

aValue);

((CButton*)GetDlgItem(IDC_BTNLAST))->EnableWindow(!

aValue);

/*设置操作按钮的有效性*/

((CButton*)GetDlgItem(IDC_BTNADD))->EnableWindow(!

aValue);

((CButton*)GetDlgItem(IDC_BTNEDIT))->EnableWindow(!

aValue);

((CButton*)GetDlgItem(IDC_BTNCANCEL))->EnableWindow(aValue);

((CButton*)GetDlgItem(IDC_BTNSAVE))->EnableWindow(aValue);

((CButton*)GetDlgItem(IDC_BTNDELETE))->EnableWindow(!

aValue);

}

/*

*函数介绍:

设置指针移动按钮的有效性

*入口参数:

aValue代表当前记录位置

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

SetNavigatorButton(intaValue)

{

//如果学生队列数据小于2

if(m_lstStudent.GetCount()<2)

{

((CButton*)GetDlgItem(IDC_BTNFIRST))->EnableWindow(FALSE);

((CButton*)GetDlgItem(IDC_BTNPRIOR))->EnableWindow(FALSE);

((CButton*)GetDlgItem(IDC_BTNNEXT))->EnableWindow(FALSE);

((CButton*)GetDlgItem(IDC_BTNLAST))->EnableWindow(FALSE);

return;

}

//指针移到首部

if(aValue==0)

{

((CButton*)GetDlgItem(IDC_BTNFIRST))->EnableWindow(FALSE);

((CButton*)GetDlgItem(IDC_BTNPRIOR))->EnableWindow(FALSE);

if(m_lstStudent.GetCount()>=2)

{

((CButton*)GetDlgItem(IDC_BTNNEXT))->EnableWindow(TRUE);

((CButton*)GetDlgItem(IDC_BTNLAST))->EnableWindow(TRUE);

}

}//如果指针移到末尾

elseif(aValue==m_lstStudent.GetCount()-1)

{

((CButton*)GetDlgItem(IDC_BTNNEXT))->EnableWindow(FALSE);

((CButton*)GetDlgItem(IDC_BTNLAST))->EnableWindow(FALSE);

if(m_lstStudent.GetCount()>=2)

{

((CButton*)GetDlgItem(IDC_BTNFIRST))->EnableWindow(TRUE);

((CButton*)GetDlgItem(IDC_BTNPRIOR))->EnableWindow(TRUE);

}

}

else

{

((CButton*)GetDlgItem(IDC_BTNFIRST))->EnableWindow(TRUE);

((CButton*)GetDlgItem(IDC_BTNPRIOR))->EnableWindow(TRUE);

((CButton*)GetDlgItem(IDC_BTNNEXT))->EnableWindow(TRUE);

((CButton*)GetDlgItem(IDC_BTNLAST))->EnableWindow(TRUE);

}

}

9.添加指针移动按钮的单击事件代码。

在对话框窗体上直接双击按钮,EVC便会自动创建它的单击方法声明。

其中”First”、”Prior”、”Next”、”Last”按钮的单击事件实现代码如下:

/*

*函数介绍:

将指针移到首部

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnfirst()

{

CStudentDatastudentData=m_lstStudent.GetHead();

m_iCurPos=0;

//更新显示

m_xsbh=studentData.xsbh;

m_xsxm=studentData.xsxm;

m_xsxb=studentData.xb;

m_csrq=studentData.csrq;

m_bjmc=studentData.bjmc;

UpdateData(false);

//设置指针移动按钮有效性

SetNavigatorButton(m_iCurPos);

}

/*

*函数介绍:

将指针移向前移动

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnprior()

{

m_iCurPos--;

POSITIONpos=m_lstStudent.FindIndex(m_iCurPos);

CStudentDatastudentData=m_lstStudent.GetAt(pos);

//更新显示

m_xsbh=studentData.xsbh;

m_xsxm=studentData.xsxm;

m_xsxb=studentData.xb;

m_csrq=studentData.csrq;

m_bjmc=studentData.bjmc;

UpdateData(false);

//设置指针移动按钮有效性

SetNavigatorButton(m_iCurPos);

}

/*

*函数介绍:

将指针向后移动

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnnext()

{

m_iCurPos++;

POSITIONpos=m_lstStudent.FindIndex(m_iCurPos);

CStudentDatastudentData=m_lstStudent.GetAt(pos);

//更新显示

m_xsbh=studentData.xsbh;

m_xsxm=studentData.xsxm;

m_xsxb=studentData.xb;

m_csrq=studentData.csrq;

m_bjmc=studentData.bjmc;

UpdateData(false);

//设置指针移动按钮有效性

SetNavigatorButton(m_iCurPos);

}

/*

*函数介绍:

将指针移到尾部

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnlast()

{

CStudentDatastudentData=m_lstStudent.GetTail();

m_iCurPos=m_lstStudent.GetCount()-1;

//更新显示

m_xsbh=studentData.xsbh;

m_xsxm=studentData.xsxm;

m_xsxb=studentData.xb;

m_csrq=studentData.csrq;

m_bjmc=studentData.bjmc;

UpdateData(false);

//设置指针移动按钮有效性

SetNavigatorButton(m_iCurPos);

}

10.添加“添加”、“编辑”、“恢复”、“保存”、“删除”按钮的单击事件代码。

在对话框窗体上直接双击按钮,EVC便会自动创建它的单击方法声明。

其中”Add”、”Edit”、”Cancel”、”Save”、”Delete”按钮的单击事件实现代码如下:

/*

*函数介绍:

添加新记录

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnadd()

{

m_operID=0;//表示添加操作

m_xsbh=_T("");

m_xsxm=_T("");

m_xsxb=_T("");

m_csrq=_T("");

m_bjmc=_T("");

UpdateData(FALSE);

SetControlEnable(TRUE);

}

/*

*函数介绍:

编辑旧记录

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnedit()

{

if(m_lstStudent.IsEmpty())

{

AfxMessageBox(_T("NorecordcanbeEdited!

"));

return;

}

m_operID=1;//表示编辑操作

SetControlEnable(TRUE);

}

/*

*函数介绍:

保存修改或添加

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtnsave()

{

CStudentDatastudentData;

CFilestuFile;

UpdateData(TRUE);

switch(m_operID)

{

case0:

/*添加操作*/

{

/*将添加的东西写入文件*/

ZeroMemory(&studentData,sizeof(studentData));

wcscpy(studentData.xsbh,m_xsbh);

wcscpy(studentData.xsxm,m_xsxm);

wcscpy(studentData.xb,m_xsxb);

wcscpy(studentData.csrq,m_csrq);

wcscpy(studentData.bjmc,m_bjmc);

stuFile.Open(STUDENTFILEPATH,CFile:

:

modeRead|CFile:

:

modeWrite);

stuFile.SeekToEnd();

stuFile.Write(&studentData,sizeof(studentData));

stuFile.Close();

//更新内存队列

m_lstStudent.AddTail(studentData);

SetControlEnable(FALSE);

//设置指针移动按钮有效性

m_iCurPos=m_lstStudent.GetCount()-1;

SetNavigatorButton(m_iCurPos);

break;

}

case1:

/*编辑操作*/

{

/*将添加的东西写入文件*/

ZeroMemory(&studentData,sizeof(studentData));

wcscpy(studentData.xsbh,m_xsbh);

wcscpy(studentData.xsxm,m_xsxm);

wcscpy(studentData.xb,m_xsxb);

wcscpy(studentData.csrq,m_csrq);

wcscpy(studentData.bjmc,m_bjmc);

stuFile.Open(STUDENTFILEPATH,CFile:

:

modeRead|CFile:

:

modeWrite);

stuFile.Seek(sizeof(studentData)*(m_iCurPos),CFile:

:

begin);

stuFile.Write(&studentData,sizeof(studentData));

stuFile.Close();

//更新内存队列

m_lstStudent.SetAt(m_lstStudent.FindIndex(m_iCurPos),studentData);

SetControlEnable(FALSE);

//设置指针移动按钮有效性

SetNavigatorButton(m_iCurPos);

break;

}

}

}

/*

*函数介绍:

取消修改或添加

*入口参数:

(无)

*出口参数:

(无)

*返回值:

(无)

*/

voidCFileExamDlg:

:

OnBtncancel()

{

POSITIONpos=m_lstStudent.FindIndex(m_iCurPos);

CStudentDatastudentData=m_lstStudent.GetAt(pos);

//更新显示

m_xsbh=studentData.xsbh;

m_xsxm=studentData.xsxm;

m_xsxb=studentData.xb;

m_csrq=studentData.csrq;

m_bjmc=studentData.bjmc;

UpdateData(false);

SetControlEnable(FALSE);

//设置指针移动按钮有效性

SetNavigatorButto

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1