搜档网
当前位置:搜档网 › VC++程序设计实验指导书

VC++程序设计实验指导书

VC++程序设计实验指导书
VC++程序设计实验指导书

《VC++程序设计》实验指导书

方江雄编写

核工程与地球物理学院

前言

VC程序设计时一门实践性很强的课程,因此学时过程中仅仅通过阅读教科书或听课时补可能完全掌握的,学习程序设计的作重要的环节就是多上机实践。

凡是学过程序设计的人,往往都有类似的感觉:教科书上的例题能看懂,上课时老师的例题能听懂,可到了自己编程时却又无从下手。而老师上课再三强调的问题,学生上机时还是照样会错误百出。同时,由于学生的实践经验有限,调试程序时找错、改错的过程非常艰难,有时甚至花几个小时都调不同一个程序,不但效率低下,而且容易失去学习的兴趣。

本实验指导书的目的就在于给学生的编程学习提供一些指导,帮助学生快速的完成程序的调试,使学生在实践的过程中少一些曲折,多一点成功的乐趣。

为了满足不同层次的学生的需要,每一部分的实验内容都按由易到难的顺序编排,前面的题目一般都有较详细的指导,后面的提高部分(或选作部分)一般指给出提示,供学习基础较好的学生使用,充分挖掘每个人的潜力。

为了提高实验课的效率,学生需要做到:

每次实验之前都要准备好实验内容,包括:明确实验步骤,编写出实验中要调试的程序,编写调时程序时需要的测试数据以及程序应有的运行结果。

实验过程中做好调试记录,包括主要实验步骤、关键代码、测试结果、出现的错误及其原因分析与解决措施。

实验结束后要整理实验内容,编写实验报告,回答实验内容中提出的思考题,并总结实验中用到的主要知识点。

本书中所有的程序都在Windows环境下的Visual C++6.0系统中调试通过。

目录

预习知识Visual C++开发环境的熟悉 (4)

实验一Windows GUI编程 (7)

实验二对话框应用程序设计 (9)

实验三基本控件应用(第一组) (12)

实验三基本控件应用(第二组) (14)

实验四组合控件应用(第一组) (16)

实验四组合控件应用(第二组) (19)

预习知识 Visual C++开发环境的熟悉

实验目的:

1) 熟悉VC++的集成开发平台的基本操作 2)了解常用的实用工具的使用 3)学会一些简单的程序调试手段

实验内容:

1)通过应用程序向导AppWizard ,建立一个MFC 单文档的应用程序,并以此为例熟悉VC++环境,并了解常用的实用工具的使用。

2) 计算10个数的平均值并在消息框中显示结果,以此为例学习对断点的设置和使用。

实验步骤:

1) 在集成开发平台,打开File 菜单,单击New 菜单项。

2) 在New 对话框中,选择Projects 标签,进行以下操作:项目类型选择MFC AppWizard

(exe );项目名称aa1(任意);设置项目保存位置;确定。选择应用程序的类型为“Single document ”完成即可。如图1-1所示,窗口界面包括标题栏、菜单栏、工具栏、项目

图1-1 Microsoft Visual C++6.0 开发环境

3)在项目工作区中,点击Caa1View前面的+号,双击下面的OnDraw()函数,就可以在右边的编辑区进行任务中要求的程序的编写了。

4)使用Build菜单下的Compile(Ctrl+F7)、Build(F7)、Rebuild All(Ctrl+F5)三个菜单项可进行编译程序。

5)可以在“sum=sum+num[i];”和“message.Format("%d",average);”语句处设置二个断点(光标移到该行,按下F9即可),接下来可以单步执行(F10)或快速运动到下一个断点位置(F5),程序在第二个断点处停下,如图1-2所示。

图1-2 程序在第二个断点暂停时的显示

6)程序运行结果显示,如图1-3所示。

图1-3 程序运行结果

参考代码:

//求均值

void CAa7View::OnDraw(CDC* pDC)

{

CAa7Doc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

// TODO: add draw code for native data here

int num[10];

int sum=0;

int average;

for(int i=0;i<=9;i++)

num[i]=2*(i+1);

for(i=0;i<10;i++)

sum=sum+num[i];

average=sum/10;

CString message;

message.Format("%d",average);//将int型数据转换为Cstring型MessageBox(message); //在对话框中显示结果

}

实验一Windows GUI编程

一、实验目的和要求

1、掌握 MFC AppWizard[exe]向导的使用、MFC 消息映射及消息处理。

2、本实验分两组进行,各组完成不同的实验。

二、实验内容

第一组:编写一个单文档应用程序。程序启动后在用户区显示一个方形,当用鼠标左键单击用户区后,该方形会变为圆形,如果再单击则又变回方形。

实验步骤:

设置一个开关变量m_bKey当其值为FALSE时,在OnDraw函数中使用函数Rectangle 绘制方形;而当值为TRUE时使用函数Ellipse绘制圆形。

再定义一个成员变量m_rectRec存储方形和圆形的尺寸。

程序代码如下:

//在视图类声明中定义成员变量

Private:

BOOL m_bKey;

CRect m_rectRec;

//在视图类的构造函数中对成员变量进行初始化

CRec_CrlView::CRec_CrlView():m_rectRec(100,100,400,400)

{

//TODO:add construction code here

m_bKey=FALSE;

}

//在视图类鼠标左键按下消息中添加如下代码

void CRec_CrlView::OnLButtonDown(UINT nFlags,CPoint point)

{

if(m_bKey)

m_bKey=FALSE;

else

m_bKey=TRUE;

InvalidateRect(m_rectRec);

CView::OnLButtonDown(nFlags,point);

}

//在视图类的OnDraw函数中添加如下代码

void CRec_CrlView::OnDraw(CDC*pDC)

{

CRec_CrlDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

if(m_bKey)

pDC->Ellipse(m_rectRec);

else

pDC->Rectangle(m_rectRec);

}

运行结果:

第二组:编写一个应用程序,该程序运行后在用户区绘制一个圆形,每单击鼠标左键一次,则圆的颜色会变化一次。

实验步骤:

(1)在视图类声明中定义三个数据成员以描述颜色。

int m_clr1,m_clr2,m_clr3;

(2)在视图类的鼠标按下消息响应函数中用下面代码改变颜色。

void CColorView::OnLButtonDown(UINT nFlags,CPoint point)

{

m_clr1-=10;

InvalidateRect(NULL);

CView:: OnLButtonDown(nFlags, point);

}

(3)在视图类的OnDraw函数中定义画刷和绘制圆形。

Void CColorView:: OnDraw(CDC*pDC)

{

int clr=RGB(m_clr1,m_clr2,m_clr3);

CBrush newBrush(clr);

CBrush *oldBrush=pDC->SelectObject(&newBrush);

pDC->Ellipse(20,20,220,220);

pDC->SelectObject(oldBrush);

}

运行结果:

运行结果分析:

点击鼠标,圆的颜色逐渐加深

实验二对话框应用程序设计

一、实验目的:

1、理解对话框的概念。

2、理解对话框应用程序的结构和对话框的数据交换机制。

3、学会创建简单的对话框应用程序。

二、实验内容:

程序的运行界面如图2-1:左边为编辑框,右边为按钮。左边的数据可以是任意输入的整数(默认值0),每单击一次“增1”按钮,编辑框中的数据就增1。

图2-1 运行界面

三、实验步骤:

1、打开VC++应用程序,进入集成开发环境。

2、新建对话框应用程序:File->New->Projects,选择“MFC AppEizard(ex)”选项,输入工

程明并选择路径后,单击“确定”。在弹出的对话框中选择“Dialog based”基本对话框选项,表示建立对话框应用程序。单击“Finished”完成。如图8-2:

图8-2 对话框的可视化程序设计界面

3、删除原有的“确定”“取消”按钮和中间的文本框:先选定、再按Delete键。

4、添加控件:参照教材中2.2节的控件添加方法,添加1个编辑框1个按钮。右击按钮控

件,选择“properties”,在Caption项中修改控件的名称为“增1”。

5、对话框界面设计完成,下面用ClassWizard向导为应用程序添加消息映射函数和变量以

及代码了。执行菜单命令View,选择ClassWizard….,单击选项卡Member Variables,可以为各个控件添加对应的变量了。如图8-3:

图8-3 类向导对话框

6、选择IDC_EDIT1,单击右边的Add Variables,为编辑框1添加变量,变量名为m_var1,

类型选择整型。如图8-4:

图8-4 添加变量界面

7、单击类向导对话框中的Message Map选项卡,选择IDC_BUTTON1、BN_CLICKED,单

击右边的Add Function,为按钮添加单击的消息映射函数OnButton1()。如图8-5:

图8-5 添加消息映射界面

8、选择成员函数OnButton1,单击右边的Edit Code 按钮,进入源文件编辑环境,为函数

OnButton1()添加代码:

void CDialog_1Dlg::OnButton1()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE);

m_var1++;

UpdateData(FALSE);

}

10、编译、连接、运行如下:左边的编辑框的初始值为0,每次单击按钮“增1”,右边的数据便增1。也可以任意输入一个整数,然后点击增1。

四、实验报告

1、结合实验题目,总结创建对话框应用程序的一般过程,写出测试结果。

2、分析对话框应用程序的结构,找出各个主要组成部分。

3、结合实验题目说明对话框的数据交换机制。

实验三基本控件应用(第一组)

一、实验目的:

1、掌握对话框应用程序的设计方法。

2、掌握文本框、按钮、编辑框控件的使用。

3、理解对话框应用程序的消息映射机制和数据交换机制。

二、实验内容:

1、设计一个对话框应用程序,用于输入学生的学号、姓名、三门课成绩。并当单击“输入”后数据才读入,单击“显示”按钮则显示已输入的内容。对话框界面如图1:

图1 程序运行结果

2、[选作]添加计算一个学生平均成绩的按钮,并将平均成绩显示在三门课的成绩之后。

三、实验步骤:

1、创建对话框应用程序。

2、对话框模板设计:添加5个静态文本框、6个编辑框、2个按钮控件。并逐个右击控件,

选择properties选项,修改控件的ID号和标题名称。如图9-2。

其中,编辑框的ID号分别为:IDC_NAME, IDC_STU_NO, IDC_EDIT1, IDC_EDIT2, IDC_EDIT3,IDC_DISP_LIST;按钮的ID号分别为:IDC_INPUT, IDC_DISP。

特别提示:编辑框IDC_DISP_LIST的属性选择Multiline, Horizontal scroll(即多行、水平滚动)。

图2 对话框界面设计

3、创建对话框类:添加成员变量。

执行菜单命令VIEW/ClassWizard….,进入类向导对话框。

首先添加数据成员:切换到Member Variables 页面,为每个编辑框添加对应的成员变量,方法同实验六。各个控件的数据成员列表如表1:

表1 添加变量列表

4、添加消息映射函数:切换到Class Wizard 的Message Maps页面,为按钮添加“单击”

的消息映射函数。

“输入”按钮的单击消息映射函数代码:

{ UpdateData(TRUE); }

“显示”按钮的单击函数:

OnDisp()

{ m_DataList.Format(“%s\t%s\t%d\t%d\t%d\n”, m_No, m_Name,

m_Score1,m_Score2, m_Score3);

UpdateData(FALSE);

}

5、编译、连接、运行。

四、思考题:

1、对话框应用程序是如何运行的?

2、控件与变量之间的数据是如何实现交换的?

五、实验报告

1、详细整例程序开发过程,以及测试结果。

2、总结静态文本控件、编辑框的使用方法和使用特点。

实验三基本控件应用(第二组)

一、实验目的:

1、熟练掌握对话框应用程序的设计方法。

2、掌握单选按钮、复选按钮控件的使用方法。

3、深入理解对话框应用程序的消息映射机制和数据交换机制。

二、实验内容:

1.在第一组实验基础上,增加性别和求平均两项,其中性别的输入采用单选按钮,是否计算平均成绩采用复选框。当选中该复选框时,计算平均成绩并显示。运行效果如图1。

图1 运行结果

2.设置单选按钮和复选按钮的初值:复选按钮未选中,单选按钮默认选中“男”。

3.添加一个分组框,将两个单选按钮放置在分组框内,分组框的标题为“性别”。

三、实验步骤:

1、在对话框模板中添加一个静态文本框(性别)、两个单选按钮(男、女)和一个复选按

钮(求平均成绩),并修改控件的属性。注意,一组单选按钮的第一个控件的group属性要选中。

其中,两个单选按钮的ID号分别为:IDC_MAN,IDC_WOMAN,复选框的ID号为:IDC_AVERAGE。

2、添加数据成员:进入类向导对话框,切换到Member Variables 页面,为控件添加对应的

数据成员,如表1:

表1 添加变量表

1,2,……)确定哪个被选中。

3、添加消息映射函数:切换到Message Maps页面,为复选框IDC_A VERAGE添加

BN_CLICKED消息处理函数,并添加如下代码:

{ UpdateData(TRUE);

double average;

if(m_Average) average=(m_Score1+m_Score2+m_Score3)/3;

Cstring steSex;

int n=GetCheckRadioButton(IDC_MAN,IDC_WOMAN);

if(n==IDC_MAN) strSex=”男”;

else strSex=’’女”;

m_DataList.Format(“%s\t%s\t%s\t%f\n”, m_No, m_Name, ,strSex, m_Average);

UpdateData(FALSE);

}

4、编译、连接、运行。

四、思考题:

1、当利用类向导为控件添加一个相应的变量时,向导在应用程序的哪几个地方、添加了哪些代码、作用分别是什么?以实验内容的某个变量为例说明。

2、当利用类向导为按钮添加消息映射和映射函数时,向导在应用程序的哪及各地方、添加了哪些代码?举例说明。

五、实验报告:

1、整理程序开发过程,以及测试结果。

2、总结单选按钮、复选框控件的使用方法和使用特点。

3、总结使用分组框使用多组单选按钮的方法。

实验四组合控件应用(第一组)

一、实验目的:

1、掌握列表框和组合框控件的使用方法。

2、区别列表框和组合框的不同特点。

二、实验内容:

1、列表框控件的使用:利用编辑框输入信息,点击“增加选项”可添加到列表框中;选中

列表框中的某一项信息,点击“删除选项”可以删除一项信息;双击某一选项,被选中的选项显示在编辑框中。如图1:

图1 程序运行结果

2、组合框控件的使用:利用组合框完成上题的编辑框和列表框的功能。当选择组合框中的

某一项后,若按“删除选项”则从组合框中删除该项;若在组合框的编辑框中输入某项后按“增加选项”,则将新输入的项加入组合框。

3、[附加功能]分别对列表框和组合框进行初始化,并查看运行结果。

三、实验步骤:

1、第1题实验步骤:

(1)创建对话框应用程序。方法同前。

(2)修改对话框标题:右击对话框设计视图中的空白处,打开对话框的属性(Properties)对话框,将标题(Caption)改为“列表框使用”。

(3)向对话框添加控件:

单击控件布局工具栏上的网格按钮(左下角),使对话框中显示出网格点,便于控件的对齐。

按照题目要求在对话框中添加一个编辑框、一个列表框、两个按钮控件。

修改按钮的标题,其他控件的属性取默认值。

(4)添加控件对应的成员变量:如表1。

表1 添加变量表

对话框中的初始化工作一般是在对话框的OnInitDialog()函数中完成的。列表框的初始化是通过AddString()函数项列表框中添加一些字符串完成的。

打开OnInitDialog()函数,找到后面的“//TODO:Add extra initialization here”,开始添加如下代码:

m_oListBox.AddString(“数据结构”);

m_oListBox.AddString(“操作系统”);

m_oListBox.AddString(“数据库原理”);

m_oListBox.AddString(“计算机组成原理”);

(6)添加消息映射函数:

A.添加选中列表框中选项的处理函数:打开MFC ClassWizard 对话框,选择Message Maps选项卡,在Object Ids列表框中选择ID_LIST1,在Messages列表框中选择DBLCLK,单击右边的按钮”Add Function…..”,使用默认的函数名OnDblclkList1即可。函数主要代码:m_oListBox.GetText(m_oListBox.GetCurSel(), m_strEditBox);

UpdateData(FALSE);

// GetCurSel()用于返回列表框当前选项的索引值。

// GetText()获取用户在列表框中选中的文本。

B.添加“增加选项”按钮的函数OnButton1():[方法同实验十]

UpdateData(TRUE); //读入编辑框中的信息

if(!m_strEditBox.IsEmpty())

{ m_oListBox.AddString(m_strEditBox); }

C.添加“删除选项”按钮的函数OnButton2():

m_oListBox.DeleteString(m_oListBox.GetCurSel());

(7)编译、连接、运行。

分析程序的运行过程。

2、第2题实验步骤及提示:

与第1题基本相同,不同的是:

(1)将上题的编辑框和列表框改为一个组合框。

(2)为组合框添加对应的成员变量m_comobox(control类的)、m_string(CString类的)。

(3)组合框的初始化与列表框相同。

(4)“增加选项”按钮的消息映射函数代码:

UpdateData();

m_combox.AddString(m_string);

m_string="";

UpdateData(FALSE);

(5)“删除选项”的函数代码:

void CComboBoxDlg::OnDel()

{ // TODO: Add your control notification handler code here

int no;

no=m_combox.GetCurSel();

m_combox.DeleteString(no);

}

(1)改变组合框的属性,实现不同风格的组合框。

(2)为了避免添加相同的列表项,修改程序:增加列表项之前,首先查询是否有相同的项,若没有则插入。

四、实验报告

1、整理详细的程序开发过程以及测试结果。

2、总结列表框、组合框的使用方法。

实验四组合控件应用(第二组)

?一、实验目的:

1、掌握列表控件的使用方法。

2、熟悉树型控件的使用方法。

?二、实验内容:

1、将输入的员工信息以报表的形式显示在列表控件中。运行效果如图1。在登记员工信息

栏中输入员工的各项信息,点击“添加”后,输入的信息被添加到上面的列表框中。

图1 运行效果

2、在,完成员工信息的“删除”操作:当选中列表框中的一条员工信息后,按“删除”按

钮,则删掉该条信息。同时,增加员工信息的其他项,比如性别、年龄等。

3、利用树型控件,遍历本地磁盘的所有目录。

?三、实验步骤:

1、创建对话框应用程序list_ctrl。

2

号和属性也取默认值。

3

4、在对话框的初始化函数中添加对列表的初始化代码:

BOOL CList_ctrlDlg::OnInitDialog()

{ ……

// TODO: Add extra initialization here

m_EmpList.SetTextColor(RGB(0,0,0)); //字符颜色

m_EmpList.SetBkColor(RGB(255,255,255));//背景色

m_EmpList.InsertColumn(0,"员工ID", LVCFMT_CENTER,70);

m_EmpList.InsertColumn(1,"姓名", LVCFMT_CENTER,80);

m_EmpList.InsertColumn(2,"电话", LVCFMT_CENTER,100);

……

}

5、利用向导添加“添加”按钮的消息映射函数:

void CList_ctrlDlg::OnAddemp()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE); //取得员工登记信息m_EmpList.InsertItem(0,m_EmpNo); //添加一行

m_EmpList.SetItemText(0,1,m_EmpName); //添加一个数据项m_EmpList.SetItemText(0,2,m_EmpTel);

}

6、编译、连接、运行。

实验报告

1、整理第1题和第3题的详细实现过程和测试结果。

2、总结列表控件和属性控件的使用方法。

相关主题