《面向对象程序设计实训实验指导》1.docx
- 文档编号:26020807
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:49
- 大小:446.12KB
《面向对象程序设计实训实验指导》1.docx
《《面向对象程序设计实训实验指导》1.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计实训实验指导》1.docx(49页珍藏版)》请在冰豆网上搜索。
《面向对象程序设计实训实验指导》1
面向对象程序设计实训
实验指导书
上机班级:
12级信息,数学与应数
课程类别:
专业选修课
课程总时数:
48学时
上机时数:
48学时
上机人数:
92人
实验环境MicrosoftVisualC++6.0
实验报告的书写要求
1)明确实验的目的及要求;
2)记录实验的输入数据和输出结果;
3)说明实验中出现的问题和解决过程;
4)写出实验的体会和实验过程中没能解决的问题;
第一部分文档应用
实验一文本和图形
文本图形显示和特色绘制
1.实验目的
(1)熟悉CDC使用
(2)掌握GDI特色绘制
2实验基本要求
(1)熟悉基本显示:
文字,图形和填充
(2)掌握字体,画笔和画刷使用
3实验例题
例1当前设备环境
建立一个设备环境对象或指针。
CDC*pCDC=GetDC();
…
ReleaseDC(pCDC);
例2输出文本和图形
利用一个CDC指针,可在屏幕上显示文字
CDC*pCDC=GetDC();
pCDC->TextOut(20,20,"文本图形显示");
利用一个CDC指针,可在屏幕上绘直线:
pCDC->MoveTo(1,2);
pCDC->LineTo(100,200);
ReleaseDC(pCDC);
例3字体和背景颜色
CClientDCdc(this);
charstr1[]="ThisisVC++";
dc.TextOut(0,80,str1);
dc.SetTextColor(RGB(200,10,0));
dc.TextOut(0,120,str1);
例4颜色对话框使用
CClientDCdc(this);
charstr1[]="ThisisVC++";
dc.TextOut(0,80,str1);
CColorDialogdlg;
if(IDOK==dlg.DoModal())
{
dc.SetBkColor(dlg.m_cc.rgbResult);
}
dc.TextOut(0,120,str1);
例5定义和创建画笔
定义一个画笔对象,创建画笔
CPenpenBlack;
penBlack.CreatePen(PS_SOLID,2,RGB(0,0,0));
定义一个画刷变量,创建画刷对象
CBrushblkBrush;
blkBrush.CreateSolidBrush(RGB(100,0,0));
或
CBrushnewbrush(RGB(0,0,255));
例6定义和创建字体
定义一个字体变量,创建字体对象
CFontnewfont;
newfont.CreateFont(40,0,1,0,800,0,0,0,ANSI_CHARSET,3,3,3,2,"aa");
使用GDI对象步骤
在选择GDI对象进行绘图时,往往遵循着下列的步骤:
(1)定义和创建一个GDI对象;
(2)将构造的GDI对象选入当前设备环境中,但不要忘记将原来的GDI对象保存起来。
(3)绘图结束后,恢复当前设备环境中原来的GDI对象。
例7GDI对象使用
画笔用法:
CPenpenBlack;
penBlack.CreatePen(PS_SOLID,2,RGB(0,0,0));
CDC*pDC=GetDC();
CPen*pOldPen=pDC->SelectObject(&penBlack);
pDC->MoveTo(1,1);
pDC->LineTo(100,100);
pDC->SelectObject(pOldPen);
例8画笔CPen和CBrush对象使用
画笔CPen使用
CPenpenBlack;
penBlack.CreatePen(PS_SOLID,2,RGB(0,0,0));
CPen*pOldPen=pDC->SelectObject(&penBlack);
pDC->MoveTo(1,1);
pDC->LineTo(100,100);
pDC->SelectObject(pOldPen);
画刷CBrush使用
CClientDCdc(this);
CBrushnewbrush(RGB(0,0,255));
CBrush*oldbrush=dc.SelectObject(&newbrush);
dc.Ellipse(180,60,300,200);
dc.SelectObject(oldbrush);
例9设置字体
voidCP1View:
:
OnTextTest()
{
CClientDCdc(this);
charstr1[]="ThisisVC++";
dc.SetTextColor(RGB(200,10,0));
dc.TextOut(0,80,str1);
CFontnewfont;
newfont.CreateFont(40,0,1,0,800,0,0,0,ANSI_CHARSET,3,3,3,2,"aa");
CFont*oldfont=dc.SelectObject(&newfont);
dc.TextOut(0,120,str1);
dc.SelectObject(oldfont);
inty=200;
dc.TextOut(0,y,"helloworld!
");
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
y+=tm.tmHeight+tm.tmExternalLeading;
dc.TextOut(0,y,"AAAA");
y+=tm.tmHeight+tm.tmExternalLeading;
dc.TextOut(0,y,str1);
}
例10体的选择和定位
(1)用MFCAppWizard创建一个单文档应用程序Ex_Text
(2)为CEx_TextView类添加:
CString类型的成员变量m_strLine,用来将读取一行内容;
int类型的成员变量m_nLine,用来纪录输入字符的行数;
LOGFONT类型的成员变量m_lf用来保存所使用的逻辑字体;
COLORREF类型的成员变量colorrrefRGB用来保存所使用的字体颜色;
(3)为CEx_Text1View类构造函数中,初始化。
m_strLine.Empty();
m_nLine=0;
memset(&m_lf,0,sizeof(LOGFONT));
m_lf.lfHeight=30;
m_lf.lfCharSet=GB2312_CHARSET;
strcpy(m_lf.lfFaceName,"宋体");
colorrrefRGB=RGB(120,0,210);
(4)添加一个工具栏按钮项或菜单项,在其COMMAND消息响应函数中,加入代码:
CFontcf;
CFontDialogdlg(&m_lf);
if(dlg.DoModal()==IDOK)
{
dlg.GetCurrentFont(&m_lf);
colorrrefRGB=dlg.GetColor();
}
(5)利用类向导,在视类添加WM_CHAR消息响应函数OnChar,在其内加入代码:
if(nChar==VK_RETURN)//如果按回车键
{
m_strLine.Empty();
m_nLine++;
}
elseif(m_strLine.GetLength()<64)
m_strLine+=nChar;
//显示m_strLine
CClientDCdc(this);
//创建GDI工具字体类
CFontcf;
cf.CreateFontIndirect(&m_lf);
CFont*oldFont=dc.SelectObject(&cf);
dc.SetTextColor(colorrrefRGB);
//计算每行高度
TEXTMETRICtm;
dc.GetTextMetrics(&tm);
intlineHeight=tm.tmHeight+tm.tmExternalLeading;
dc.TextOut(0,m_nLine*lineHeight,m_strLine);
dc.SelectObject(oldFont);
CView:
:
OnChar(nChar,nRepCnt,nFlags);
(6)编译运行并测试
4实验内容
编写一个程序,它能进行文本和图形显示和特色绘制
实验二文件读写
文本文件和二进制文件读写
1.实验目的
(1)熟悉文本文件读写
(2)熟悉一般二进制文件读写
2.实验基本要求
(1)熟悉CFile使用
(2)掌握CStdioFile使用
3.实验例题
例1二进制文件读写
CFile类对文件进行写操作
doubledData;
dData=1024.5;
CFilemFile(_T("user.dat"),CFile:
:
modeWrite|CFile:
:
modeCreate);
mFile.Write(&dData,sizeof(dData));
mFile.Close();
例2二进制文件读写
对文件进行读操作
doubledData;
CFilemFile(_T("user.dat"),CFile:
:
modeRead);
mFile.Read(&dData,sizeof(double));
mFile.Close();
CClientDCdc(this);
CStringstr;
str.Format("%f",dData);
dc.TextOut(0,0,str);
例3文本文件读写
对文件进行写操作
CStdioFilemFile;
mFile.Open("test1.txt",CFile:
:
modeWrite|CFile:
:
modeCreate);
CStringstr="ThisisVisualC++.";
mFile.WriteString(str);
mFile.Close();
例4文本文件读写
读并显示一个文本文件内容:
CClientDCdc(this);
CStringstr;
CStdioFilefile;
file.Open("test1.txt",CFile:
:
modeRead);
intnCount,nLine=0;
nCount=file.ReadString(str);
while(nCount){
dc.TextOut(0,nLine*20,str);
nLine++;
nCount=file.ReadString(str);
}
file.Close();
例5CFileDialog使用
用户选择文件对话框
CStringstrFilename;
CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"TextFiles(*.txt)|*.txt|AllFiles(*.*)|*.*",NULL);
if(dlg.DoModal()==IDOK)
strFilename=dlg.GetFileName();
4.实验内容
(1)编写程序,它创建一个文件,写入当前时间信息。
(2)创建一个点名程序。
实验三文件操作和信息
文件操作和信息查询程序
1.实验目的
(1)熟悉文件复制删除重命名函数
(2)掌握信息查询获取函数
2.实验基本要求
(1)熟悉CFile操作和信息获取函数使用
(2)掌握文件状态结构体使用
3.实验例题
例1CFile函数使用
CFile类删除函数操作
voidCP2Dlg:
:
OnButtonDelete()
{
UpdateData(true);
CFile:
:
Remove(m_strSFilename);
MessageBox("Removeisdone.");
}
CFile类重命名函数使用
voidCP2Dlg:
:
OnButtonRename()
{
UpdateData(true);
CFile:
:
Rename(m_strSFilename,m_strTFilename);
MessageBox("Renameisdone.");
}
例2文件拷贝
拷贝函数
BOOLCopy(CStringstrSource,CStringstrTarget)
{
CFilefSource,fTarget;
charc[4096];//定义4k字节的缓冲区
intnCount;
//打开文件
if(!
fSource.Open(strSource,CFile:
:
modeRead))
{
AfxMessageBox("OpenSourceFileFail!
");
returnfalse;
}
if(!
fTarget.Open(strTarget,CFile:
:
modeCreate|CFile:
:
modeWrite))
{
AfxMessageBox("CreateTargetFileFail!
");
fSource.Close();
returnfalse;
}
//读文件到缓冲区c
nCount=fSource.Read(c,4096);
while(nCount)
{
fTarget.Write(c,nCount);
nCount=fSource.Read(c,4096);
}
fSource.Close();
fTarget.Close();
}
例3文件相关信息
文件信息获取相关函数
文件名称GetFileName()
文件标签GetFileTitle()
文件路径GetFilePath()
文件长度GetLength()
文件状态GetStatus
例4文件状态及其获取方法
文件状态获取方法GetStatus(fs);
CFilef;
f.Open(strSFilename,CFile:
:
modeRead);
CFileStatusfs;
f.GetStatus(fs);
4.实验任务
创建一个文件操作和信息获取应用程序。
实验四文件查找
字符搜索和文件查找
1.实验目的
(1)熟悉文件查找
(2)掌握字符查询
2.实验基本要求
(3)熟悉CString类操作
(4)熟悉CFileFind类
(5)掌握FindFile和FindNextFile使用
3.实验例题
例1.FindFile和FindNextFile函数的使用
//参数为空
CStringstr;
CStdioFilemFile;
mFile.Open("D:
\\temp\\test1.txt",CFile:
:
modeWrite|CFile:
:
modeCreate);
CFileFindff;//定义一个CFileFind对象
if(!
ff.FindFile())//以当前目录的文件查询,并检查调用是否成功
return;
while(ff.FindNextFile())//查找下个文件
{
str=ff.GetFilePath();
str=str+"\n";
mFile.WriteString(str);
}
ff.Close();
mFile.Close();
例2参数为指定路径
//参数为指定路径
CStringstr;
CStdioFilemFile;
mFile.Open("D:
\\temp\\test1.txt",CFile:
:
modeWrite|CFile:
:
modeCreate);
CStringpath;
path="D:
\\temp\\*";
CFileFindff;//定义一个CFileFind对象
if(!
ff.FindFile(path))//以当前目录的文件查询,并检查调用是否成功
return;
while(ff.FindNextFile())//查找下个文件
{
str=ff.GetFilePath();
str=str+"\n";
mFile.WriteString(str);
}
ff.Close();
mFile.Close();
例3一个都不能少
//列出指定路径中的所有文件夹,检查文件夹个数
CStringstr;
CStdioFilemFile;
mFile.Open("D:
\\temp\\test2.txt",CFile:
:
modeWrite|CFile:
:
modeCreate);
CStringpath;
path="D:
\\temp\\*";
CFileFindff;//定义一个CFileFind对象
if(!
ff.FindFile(path))//以当前目录的文件查询,并检查调用是否成功
return;
while(ff.FindNextFile())//查找下个文件
{
if(ff.IsDots())
continue;
if(ff.IsDirectory())//子目录..
{
str=ff.GetFilePath();
str=str+"\n";
mFile.WriteString(str);
}
};
ff.Close();
mFile.Close();
例4列出指定路径中的所有子目录
//列出指定路径中的所有文件夹
CStringstr;
CStdioFilemFile;
mFile.Open("D:
\\temp\\test2.txt",CFile:
:
modeWrite|CFile:
:
modeCreate);
CStringpath;
path="D:
\\temp\\*";
CFileFindff;//定义一个CFileFind对象
if(!
ff.FindFile(path))//以当前目录的文件查询,并检查调用是否成功
return;
while(ff.FindNextFile())//查找下个文件
{
if(ff.IsDots())
continue;
if(ff.IsDirectory())//子目录..
{
str=ff.GetFilePath();
str=str+"\n";
mFile.WriteString(str);
}
};
if(!
ff.IsDots())
{
if(ff.IsDirectory())//子目录..
{
str=ff.GetFilePath();
str=str+"\n";
mFile.WriteString(str);
}
}
ff.Close();
mFile.Close();
例5查找字符串
CStringm_str1="abcdef";
CStringm_str2="deq";
intindex=m_str1.Find(m_str2);
if(index>=0)
{
CStrings;
s.Format("匹配字符的下标为%d",index);
MessageBox(s);
}
else
MessageBox("没有匹配字符");
5.实验任务
1.编写一个查找一个指定路径中的所有文件名并保存为一个列表文件的应用程序。
2.思考题上面文件夹中,存储的是所有同学学号命名的照片文件,如03120110*.jpg。
1)程序如何过滤出该路径中所有照片(.jpg)文件
2)程序如何过滤出所有二班学生学号的照片文件******2**.jpg
3)程序指定路径改为用户指定路径
实验五程序个性化
1.实验目的
(1)熟悉程序基本结构
(2)掌握程序个性化
2.实验基本要求
(1)熟悉图标标题设置
(2)熟悉菜单的创建和使用
(3)掌握工具栏设置
3.实验例题
例1.修改应用程序图标
//基于对话框应用程序
1)添加图标IDC_ICON1
2)在对话框构造函数中,将
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
替换为
m_hIcon=AfxGetApp()->LoadIcon(IDC_ICON1);
//单文档应用程序:
1.利用资源工具,新建一个自己的图标IDI_ICON1
2.在APP类InitInstance(),添加代码:
HICONhIcon=LoadIcon(IDI_ICON1);
m_pMainWnd->SetIcon(hIcon,false);
或
在CMainFrm的OnCreate函数中,加入
SetIcon(AfxGetApp()->LoadIcon(IDI_ICON1),0);
例2应用修改标题
//单文档应用修改标题方法
在APP类InitInstance()函数中,添加:
m_pMainWnd->SetWindowText("XX");
//基于对话框应用程序方法
在对话框的OnInitDialog()函数中,加入:
SetWindowText("MyApp");
例3创建自己的菜单
//创建自己的菜单
在基于单文档应用中的方法
1.在资源编辑器中,创建一个自己的菜单,其ID设为IDR_MENU1;
2.在应用程序类的InitInstance()函数中的CSingleDocTemplate参数IDR_MAINFRAME,
修改为:
IDR_MENU1
例5创建自己的工具栏
//创建自己
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象程序设计实训实验指导 面向 对象 程序设计 实验 指导