第一篇:MFC个人心得
MFC个人心得
在四周时间里完成一个MFC的一个项目,个人觉得还是比较宽裕的,我们在第一周确立了项目的软件功能和名称,我们借鉴手机上RSS软件的广泛应用,想要通过MFC编写一个PC端的RSS应用,用户可以通过我们的软件获取到各大网站的新闻,科技精选,人文精选等等,总之,就是可以通过我们的软件得到每天想要获得资讯消息。
之后我们确定了各小组成员在整个团队中的分工。想要完成这样一个RSS软件的开发,思路还是比较明确的,首先要通过后台获取到各大资讯网站的网页源代码,再从这些源代码中间解析出有用的信息,之后将这些信息传递给前台,前台通过一个友好的界面将信息有条有序的展现给用户。我的主要工作就是开发后台,通过解析HTML代码获取各类资讯。由于先前我在Java平台下对于HTML解析的开发有一定的经验,所以我着手开始编写程序是的第一件事就是搜索看是否有已经写好的解析HTML的C++类库,经过我两天的搜索,我发现在C++环境下并没有比较完好的HTML解析类库,于是我暂时放弃了寻找现成的HTML解析类库,通过MFC中的CSting类中的函数操作来自己编写HTML解析类库。我采用DOM型的方式解析HTML,通过两天时间的编写基本实现了HTML的解析功能并且获取了大量网站的有用信息。由
于要求写在参与MFC项目的心得体会,我就贴上具体的C++代码了。在编写程序的过程中,我还是觉得一个优秀的程序员在于提升代码的重用性与可维护性,在理解别人代码的基础上使用网上现有代码是一个比较好的习惯,这样既能够了解其他人在编写程序时的思路理解,开拓自己的编程理念,同时也大量节省了时间,时间的优秀使用在编写程序的过程中是极其重要的。
另外,在编写MFC程序的过程中我也着实体验到了MFC编写程序的局限性。MFC虽然给开发者提供了一个现成的框架,着实便利的开发者的开发。但同样也造成了一个巨大的问题,开发者很难开发出具有个人特色的软件,想要重新改写程序整体的外观就比较困难,并且C++在编写程序时需要开发者自己定义变量的空间开辟和回收,这点上没有JAVA开发时来的方便,尤其是C++当中的指针机制,一不注意还是很容易造成程序错误的。
最后一点就是一个团队在一个项目中的重要意义。如果这样一个软件完全由我一个人进行开发,可能需要耗费大量时间,但是如果合理地分配给各个组员进行完成,便能取得事半功倍的效果,亦能听取各方面的意见,是的程序更加的完善。
第二篇:Mfc个人心得体会
Mfc个人心得体会
06a13526
余思远
时间过得很快,历时一个月的短学期即将结束,我们小组的mfc课题也基本完成。虽然只有短短的一个月,但却带给我很多。在小组成员的共同努力下,基本解决了计划中的一个个问题,要实现一个功能并不算复杂的计算器,也没有想象中那么简单。
Mfc涉及的概念很多,语法也与以前有些许不同,在c++基础上新增的内容也有许多。从开始编辑一个简单的界面,通过这段时间的学习,终于感到掌握了些许了,但想更加熟练的使用,也必须付出更多的时间吧。我发现在编程过程中,并不能只想着眼前所负责的这一块,许多对许多综合多方面进行考虑,需要与自己队友进行配合,作出合理的计划和安排。
实践是检验真理的唯一标准,这次mfc的实践活动,让我学习到了很多知识,弥补了很多漏洞。这个看似简单对我们来说却付出了很多时间和精力的程序,让我体会到了mfc相比与单纯的c++的优越性。程序编译过程中的有些困难虽然我们的能力范围内也无法解决,但是在网上资料的参考,读懂他人资料、相关程序的基础上,我们也完成了这个程序。相信这个经历能对以后的编程有很大的帮助。我也从此次课程设计中体会到了团队合作的乐趣和力量。在一个团队中扬长避短,发挥自己应有的作用,能让我们更加容易地去克服一个又一个难关。
第三篇:MFC编程实验个人总结报告
MFC编程实验总结报告
知识总结+个人心得
2011年暑期MFC编程实验报告
/ 6
MFC编程实验个人总结报告
一、MFC类、函数等知识小结:
1、SetTimer(1, m_intLevel, NULL);在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了于是SetTimer函数的原型变为:
UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))
当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字。nElapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,也就是使用系统默认的回调函数,系统默认认的是onTime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。
例:
SetTimer(1,1000,NULL);
1:计时器的名称;
1000:时间间隔,单位是毫秒;
NULL:使用onTime函数。
当不需要计时器的时候调用KillTimer(nIDEvent);
例如:KillTimer(1);
KillTimer(1);
2、typedef struct{};(1)struct{ int x;int y;}test1;好,定义了 结构 test1,test1.x 和 test1.y 可以在语句里用了。
(2)struct test {int x;int y;}test1;定义了结构 test1,test1.x 和 test1.y 可以在语句里用了。与(1)比,省写 了 test
(3)typedef struct test
/ 6
{int x;int y;}text1,text2;
此处时说了这种结构体(类型)别名 叫 text1 或叫 text2,而不是定义了结构体变量.真正在语句里用,还要写: text1 test1;//定义结构体变量 然后好用 test1.x test1.y 或写 text2 test1;//定义结构体变量 然后好用 test1.x test1.y
3、Invalidate();//让客户区无效,即时重新绘制客户区
void Invalidate(BOOL bErase = TRUE);
该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。
4、CDC::Rectangle(左上x,左上y,右下x,右下y);使用该函数画一个矩形,可以用当前的画笔画矩形轮廓,用当前画刷进行填充。
函数原型:BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
hdc:设备环境句柄。
nLeftRect:指定矩形左上角的逻辑X坐标。
nTopRect:指定矩形左上角的逻辑Y坐标。
nRightRect:指定矩形右下角的逻辑X坐标。
nBottomRect:指定矩形右下角的逻辑Y坐标。
5、CBrush:: CBrush//画刷类
eg:CBrush brushStick(RGB(127, 127, 127));四种构造函数: CBrush();
CBrush(COLORREF crColor);
CBrush(int nIndex, COLORREF crColor);
CBrush(CBitmap* pBitmap);
/ 6
参数说明: crColor指定画刷的前景色(RGB方式)。如果画刷是阴影线型的,则指定阴影线的颜色。
nIndex指定画刷阴影线采用的风格,取值如下:
HS_BDIAGONAL45度的向下影线(从左到右)
HS_CROSS水平和垂直方向以网格线作出阴影
HS_DIAGCROSS 45度的网格线阴影
HS_FDIAGONAL 45度的向上阴影线(从左到右)
HS_HORIZONTAL 水平的阴影线
HS_VERTICAL 垂直的阴影线
pBitmap指向CBitmap对象的指针,该对象指定了画刷要绘制的位图。
构造函数说明: 类CBrush一共有四个覆盖的构造函数。不带参数的那个构造函数构造一个未初始化的CBrush对象,在使用该对象之前需要另外初始化。如果使用了不带参数的那个构造函数,则必须用CreateSolidBrush、CreateHatchBrush、CreateBrushIndirect、CreatePatternBrush或CreateDIBPatternBrush来初始化返回的CBrush对象。如果使用了带参数的构造函数,则不再需要初始化CBrush对象。带参数的构造函数在出错时会产生一个异常,而不带参数的构造函数总是成功返回。只带有一个参数COLORREF的构造函数用指定的颜色构造一个实线型的画刷。颜色是一个RGB值,可以用WINDOWS.H中的宏RGB构造出来。带两个参数的构造函数构造一个阴影线型的画刷,参数nIndex指定了阴影线模式的指数(index)。参数crColor指定了画刷的颜色。带有一个CBitmap型参数的构造函数构造一个模式化的画刷。参数指定一个位图。该位图应该是已经用CBitmap::CreateBitmap、CBitmap::CreateBitmapIndirect、CBitmap::LoadBitmap或CBitmap::CreateCompatiableBitmap建立或加载的位图。填充模式下的位图的最小尺寸为8像素×8像素。
6、MessageBox(“Game Over!”);MessageBox(NULL,“text”,“title”,BUTTON);参数title:string类型,指定消息对话框的标题。text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值。icon:Icon枚举类型,可选项,指定要在该对话框左侧显示的图标。button:Button枚举类型,可选项,指定显示在该对话框底部的按钮。default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么MessageBox()函数将使用缺省值返回值Integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为NULL,4 / 6
MessageBox()函数返回NULL。
函数原型:MessageBox.Show(Text,Title,MessageBoxButtons,MessageBoxIcon ,MessageBoxDefaultButtons)
参数说明:
(1)Text:必选项,消息框的正文。(2)Title:可选项,消息框的标题。
(3)MessageBoxButtons:可选项,消息框的按钮设置,默认只显示【确定】按钮。
OK――确定 OKCancel――确定和取消 AbortRetryIgnore――终止、重试和忽略
YesNoCancel――是、否和取消 YesNo――是和否 RetryCancel――重试和取消
(4)MessageBoxIcon:对话框中显示的图标样式,默认不显示任何图标。
Question――问号 Information、Asterisk――i号 Error、Stop、Hand――错误号
Warning、Exclamation――!号 None――不显示任何图标
(5)MessageBoxDefaultButtons:可选项,对话框中默认选中的按钮设置。
DefaultButton1――第1个button是默认按钮
DefaultButton2――第2个button是默认按钮
DefaultButton3――第3个button是默认按钮
7、Memcpy(拷贝目的地,拷贝对象,拷贝长度);包含在头文件#include
函数原型:
extern void *memcpy(void *destin, void *source, unsigned n);功能:
由source指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。eg: int a=5,b=9;memcpy(a,b,sizeof(a));//将b按位拷给a;说明:
1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。
2.与strcpy相比,memcpy并不是遇到' '就结束,而是一定会拷贝完n个字节。
/ 6
3.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
//注意,source和destin都不一定是数组,任意的可读写的空间均可。
二、MFC个人学习心得:
1、问题的解决:: 绘制窗口时会出现严重的刷屏问题,问了解决这一问题,通过改变背景位图来替代过多的部分的重绘达到更好效果。
一个满载的二维、三维数组都可以用一个足够长的一维数组来装下。
2、MFC基础细节学习:
学习了位图的使用,CBrush类,CDC类,CDialog类的基本使用,对于菜单的设置初步了解了。
3、mfc编程的初步理解:
通过自学了解到mfc编程的实现是通过建立消息映射表来实现各个函数的调用。(1)通过DECLARE_MESSAGE_MAP声明消息映射;(2)通过BEGIN_MESSAGE_MAP和宏END_MESSAGE_MAP来包含消息映射宏,创建消息映射列表;(3)为消息处理函数添加代码,实现需要的响应。通过以上三大步实现消息映射。
每种对话框的操作要通过先建立相应的CDialog类来具体进行。
MFC编程只是一种工具,而编程的核心还是代码的实现。我们在使用MFC编程时要想学得更好就要不断练习,更具体的了解其中的各种类、函数,各种工具,MFC是一个巨大的工具箱,但是如果不知道工具箱里面的工具怎么用,那在好的工具也无用武之地。所以,我认为此次编程小实习主要是让我初步接触了MFC如何实现可视化编程。未来要想真正掌握MFC编程还要不断的深入了解各种MFC工具,真正的与代码结合起来实现高效实用的编程效果。
4、这次编程实习过程中,另一点感受最深的就是团队合作,一支团队要想有好的工作效率和质量就必须有足够的队伍成员间的默契。如果仅仅靠个别人去完成,其实是很不科学的,不仅费时而且可能会白白做很多无用功,因此,在以后的小组中一定要加强团队合作意识。另一点就是一个队伍的成员可以不是特别出色,但是队伍的领导者一定要负责,领导者可以不是特别杰出的技术骨干人员,但必须懂得怎样协调、安排工作,这也是实现高效团队的关键因素。
通过这次暑期编程实验,不仅充实了暑期生活,也让我学到了一些新的知识,让我更加深刻的理解了团队合作的重要性。在以后的学习生活要积极参加类似的活动,加强知识学习,能力提高,为未来的职业生涯逐渐打下一个坚实的基础。谢谢!
/ 6
第四篇:mfc文件操作个人总结
MFC文件操作
一,打开文件对话框
CString szFilters=_T(“txt Files(*.txt)”);
CFileDialog fileDlg(TRUE, _T(“txt”), _T(“*.txt”), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilters, NULL);
if(fileDlg.DoModal()== IDOK){
CString filestr;
};filestr = fileDlg.GetPathName();//得到打开的文件的全路径+后缀
二,打开文件
CFile::CFile(LPCTSTR lpszFileName, UINT nOpenFlags);//CFile构造
lpszFileName文件名
nOpenFlags打开方式,有:
CFile::modeCreate:以新建方式打开,如果文件不存在,新建;如果文件已存在,把该文件长度置零,即清除文件原有内容。
CFile::modeRead:只读。
CFile::modeWrite:只写。
CFile::modeReadWrite:以读写方式打开文件。
CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常。一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件;存在就进行追加操作(其追加是从起始位置进行覆盖式追加的,所以要与定位配合操作)。
例:1,利用CFile的构造函数打开文件
filestr = _T(“C:UserszktwDesktopnew.txt”);//或用一中获得的路径
CFile RWFile(filestr,CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);例2:利用CFile的成员函数
CFilemyfile;
Myfile.open(_T(“路径”), CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);
三,文件读写操作
读操作
CFile::Read(void* lpBuf, UINT nCount);从lpBuf指向的地址开始读取nCount 个字节,指针也自动下移nCount
写操作
CFile::Write(const void* lpBuf, UINT nCount);向lpBuf指向的内存地址写入nCount 个字节,指针也自动下移nCount
四,定位
CFile::Seek(LONG lOff, UINT nFrom);从指定位nFrom置偏移lOff字节.nFrom有三种方式,如:
CFile::begin从文件开始移动
CFile::current从当前位置移动
CFile::end从文件末位移动,此时lOff为负值.例: CFile::Seek(0, CFile::end);//定位文件尾
五,关闭打开的文件
CFile::Close();//关闭文件,删除对象,再次对文件读写时必须重新定义对象
六,查找文件是否存在(CFileFind的成员函数)
CStringstrFileTitle;
CFileFindfinder;
BOOLbWorking = finder.FindFile(_T(“C:UserszktwDesktopnew.txt”));
if(bWorking)
{
AfxMessageBox(_T(“文件已存在”);
}
else
AfxMessageBox(_T(“文件不存在”));
finder.close();//结束查找请求释放资源,但是再次发出查找请求时不需要重新定义//CFileFind对象如下:
bWorking = finder.FindFile(_T(“C:UserszktwDesktopnew1.txt”));
。。
finder.close();
CFileFind封装了许多非常有用的成员函数 可以百度一下。
七,创建文件夹
CreateDirectory(_T“路径”,NULL);第一个参数值为文件夹名称,第二个参数值为安全属性,一般设置为NULL即可。如果正确创建,返回值为1,如果没有正常创建文件夹,则返回0。
特别的:该函数每次调用时都只能创建一级文件夹,即文件夹中不能再包含子文件夹。当希望创建含有子文件夹的文件夹时,可以先使用该函数创建一级文件夹,然后再使用该函数在一级文件夹下创建子文件夹。
八,删除文件
DeleteFile(_T(“路径”));
九,删除文件夹
RemoveDirectory(_T(“路径”));//文件夹内没有文件时才会删除成功,可以无限查找”.”带.//文件然后都删除掉,再删除文件夹
十,复制文件
CopyFile(_T(路径),_T(路径),true);//true:目标不能已存在。False:目标可以已存在 例:CopyFile(_T(“C:UserszktwDesktopnew.txt”), _T(“d:newnew.txt”), TRUE);
十一,移动文件或文件夹
MoveFile(_T(路径),_T(路径));//同一目录下即是重命名,移动的时候也可以重命名//移动文件夹时只能在同一盘操作
例:MoveFile(_T(“C:UserszktwDesktopnew.txt”), _T(“d:newnew.txt”));//移动文件 MoveFile(_T(“d:abc”), _T(“d:newabc”));//文件夹移动
注:加粗的文件或文件夹不能已存在十二,复制一个文件夹下所有的文件到另一个目录
CFileFind finder;
CString straddr;
CString strname;
BOOL bfind;
bfind = finder.FindFile(_T(“C:UserszktwDesktopabc*.*”));
while(bfind)
{
bfind = finder.FindNextFile();
straddr.Format(_T(“%s”), finder.GetFilePath());
strname.Format(_T(“d:new%s”), finder.GetFileName());
//MoveFile(straddr, strname);//移动
CopyFile(straddr, strname, TRUE);//复制
}
finder.Close();
第五篇:MFC实践总结
mfc编程实验总结报告 知识总结+个人心得 2011年暑期mfc编程实验报告 mfc编程实验个人总结报告
一、mfc类、函数等知识小结:
1、settimer(1, m_intlevel, null);在mfc程序中settimer被封装在cwnd类中,调用就不用指定窗口句柄了于是settimer函数的原型变为: uint settimer(uint nidevent,uint nelapse,void(callback export *lpfntimer)(hwnd,uint ,yint ,dword))当使用settimer函数的时候,就会生成一个计时器。函数中nidevent指的是计时器的标识,也就是名字。nelapse指的是时间间隔,也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为null,也就是使用系统默认的回调函数,系统默认认的是ontime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成ontime函数:在classwizard里,选择需要计时器的类,添加wm_time消息映射,就自动生成ontime函数了。然后在函数里添加代码,让代码实现功能。每隔一段时间就会自动执行一次。例: settimer(1,1000,null);1:计时器的名称;
1000:时间间隔,单位是毫秒; null:使用ontime函数。
当不需要计时器的时候调用killtimer(nidevent);例如:killtimer(1);killtimer(1);
2、typedef struct{};(1)struct{ int x;int y;}test1;好,定义了 结构 test1,test1.x 和 test1.y 可以在语句里用了。(2)struct test {int x;int y;}test1;定义了结构 test1,test1.x 和 test1.y 可以在语句里用了。
与(1)比,省写 了 test(3)typedef struct test {int x;int y;}text1,text2;此处时说了这种结构体(类型)别名 叫 text1 或叫 text2,而不是定义了结构体变量.真正在语句里用,还要写: text1 test1;//定义结构体变量
然后好用 test1.x test1.y 或写 text2 test1;//定义结构体变量
然后好用 test1.x test1.y
3、invalidate();//让客户区无效,即时重新绘制客户区 void invalidate(bool berase = true);该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时windows会在应用程序的消息队列中放置wm_paint消息。mfc为窗口类提供了wm_paint的消息处理函数onpaint,onpaint负责重绘窗口。视图类有一些例外,在视图类的onpaint函数中调用了ondraw函数,实际的重绘工作由ondraw来完成。参数berase为true时,重绘区域内的背景将被擦除,否则,背景将保持不变。
4、cdc::rectangle(左上x,左上y,右下x,右下y);使用该函数画一个矩形,可以用当前的画笔画矩形轮廓,用当前画刷进行填充。
函数原型:bool rectangle(hdc hdc, int nleftrect, int ntoprect, int nrightrect, int nbottomrect);
hdc:设备环境句柄。
nleftrect:指定矩形左上角的逻辑x坐标。ntoprect:指定矩形左上角的逻辑y坐标。nrightrect:指定矩形右下角的逻辑x坐标。nbottomrect:指定矩形右下角的逻辑y坐标。
5、cbrush:: cbrush//画刷类 eg:cbrush brushstick(rgb(127, 127, 127));四种构造函数: cbrush();cbrush(colorref crcolor);cbrush(int nindex, colorref crcolor);cbrush(cbitmap* pbitmap);参数说明: crcolor指定画刷的前景色(rgb方式)。如果画刷是阴影线型的,则指定阴影线的颜色。nindex指定画刷阴影线采用的风格,取值如下: hs_bdiagonal45度的向下影线(从左到右)hs_cross水平和垂直方向以网格线作出阴影 hs_diagcross 45度的网格线阴影 hs_fdiagonal 45度的向上阴影线(从左到右)
hs_horizontal 水平的阴影线 hs_vertical 垂直的阴影线 pbitmap指向cbitmap对象的指针,该对象指定了画刷要绘制的位
图。
构造函数说明:
6、messagebox(game over!);messagebox(null,text,title,button);参数title:string类型,指定消息对话框的标题。text:指定消息对话框中显示的消息,该参数可以是数值数据类型、字符串或boolean值。icon:icon枚举类型,可选项,指定要在该对话框左侧显示的图标。button:button枚举类型,可选项,指定显示在该对话框底部的按钮。default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,那么messagebox()函数将使用缺省值返回值integer。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为null,messagebox()函数返回null。
函数原型:
messagebox.show(text,title,messageboxbuttons,messageboxicon ,messageboxdefaultbuttons)参数说明:
(1)text:必选项,消息框的正文。
(2)title:可选项,消息框的标题。(3)messageboxbuttons:可选项,消息框的按钮设置,默认只显示【确定】按钮。ok――确定 okcancel――确定和取消 abortretryignore――终止、重试和忽略 yesnocancel――是、否和取消 yesno――是和否 retrycancel――重试和取消
(4)messageboxicon:对话框中显示的图标样式,默认不显示任何图标。
question――问号 information、asterisk――i号 error、stop、hand――错误号 warning、exclamation――!号 none――不显示任何图标
(5)messageboxdefaultbuttons:可选项,对话框中默认选中的按钮设置。
defaultbutton1――第1个button是默认按钮 defaultbutton2――第2个button是默认按钮 defaultbutton3――第3个button是默认按钮
7、memcpy(拷贝目的地,拷贝对象,拷贝长度);包含在头文件#include
函数原型:
extern void *memcpy(void *destin, void *source, unsigned n);功能:
由source指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。eg: int a=5,b=9;memcpy(a,b,sizeof(a));//将b按位拷给a;说明:
1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。2.与strcpy相比,memcpy并不是遇到 就结束,而是一定会拷贝完n个字节。篇三:mfc个人心得体会 mfc个人心得体会 06a13526 余思远
时间过得很快,历时一个月的短学期即将结束,我们小组的mfc课题也基本完成。虽然只有短短的一个月,但却带给我很多。在小组成员的共同努力下,基本解决了计划中的一个个问题,要实现一个功能并不算复杂的计算器,也没有想象中那么简单。mfc涉及的概念很多,语法也与以前有些许不同,在c++基础上新增的内容也有许多。从开始编辑一个简单的界面,通过这段时间的学习,终于感到掌握了些许了,但想更加熟练的使用,也必须付出更多的时间吧。我发现在编程过程中,并不能只想着眼前所负责的这一块,许多对许多综合多方面进行考虑,需要与自己队友进行配合,作出合理的计划和安排。
实践是检验真理的唯一标准,这次mfc的实践活动,让我学习到了很多知识,弥补了很多漏洞。这个看似简单对我们来说却付出了很多时间和精力的程序,让我体会到了mfc相比与单纯的c++的优越性。程序编译过程中的有些困难虽然我们的能力范围内也无法解决,但是在网上资料的参考,读懂他人资料、相关程序的基础上,我们也完成了这个程序。相信这个经历能对以后的编程有很大的帮助。我也从此次课程设计中体会到了团队合作的乐趣和力量。在一个团队中扬长避短,发挥自己应有的作用,能让我们更加容易地去克服一个又一个难关。篇四:c++(mfc)程序设计实践报告
中南大学
本科生课程设计(实践)任务书、设计报告
(c++语言程序设计)题 目 学生姓名 指导教师 学 院 专业班级 学生学号
计算机基础教学实验中心
年 月 日
目 录
设计任务书?3 课程实践报告4
一、实践内容??4
二、实践成果??4
三、程序功能??4
四、设计思路??5
五、源程序???7
六、运行情况??13
七、实践心得??16
八、实践收获与不足???18 c++语言程序设计任务书
指导老师:李力
课程编号:
一、学时与学分
学时:40 学分:2
二、实践目的计算机实践是本科计算机基础教学的一个重要环节。它对于巩固学生的计算机基础知识,增强学生的计算机应用水平,改善学生的知识结构,具有重要意义。
三、实践任务与要求
用c++语言编程。编程题目如下:
(一)统计一个班(最多有35人)的学生成绩,要求能实现如下功能:(1)输入每个学生的学号和6门课程的成绩。(2)计算每个学生的平均分和总分。(3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括学号、各科成绩、平均分和总分。(4)根据用户要求输出某门课程(从键盘输入课程号)成绩在90分以上(含90分)且总分在前5名的学生情况,包括学号、各科成绩、平均分和总分。(5)根据统计,绘制总成绩五分制百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类来实现,学生学号和成绩采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。
(二)统计商品销售数据,要求能用菜单实现如下功能:(1)输入每件商品的名称,编号,入库日期,标价,成本。(2)输入每件商品的售价,出售日期。(3)按总销售量从高到低排出每种商品的名称,售出件数,销售额。(4)根据用户要求输出某商品某月(从键盘输入商品名称和月份)的平均售价、售出件数、总利润。(5)根据统计,绘制商品销售利润百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。
(三)统计足球比赛数据,要求能用菜单实现如下功能:(1)输入每场比赛的主队名称,客队名称,比赛日期,主队得分,客队得分。(2)按总得分从高到低排出每个队的名称,总得分,胜,和,负的次数。(3)根据用户要求输出某队某月(从键盘输入队名和月份)的所有比赛数据。(4)根据用户要求输出某队主场总得分,客场总得分(5)根据用户输入,绘制某队成绩历史趋势图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采
用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。
(四)统计稿件管理数据,要求能用菜单实现如下功能:(1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。(2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。(4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。(5)根据用户输入,绘制稿件按省份的百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织可采用对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。
(五)统计用电管理数据,要求能用菜单实现如下功能:(1)输入每个电表的用户名,楼栋号,抄表日期,电表读数。(3)按作者的用电量,从高到低排出每个用户的总用电量。(3)根据用户要求输出某用户某月(从键盘输入用户名和月份)的总用电量。(4)统计某楼栋从某月到某月(从键盘输入)的总用电量(5)绘制按的楼栋的用电百分比饼图。(自学利用c++提供的库函数绘制曲线图)。要求:利用类实现,数据采用文件输入,排序。数据的组织对象数组。查阅相关资料并写出系统设计说明书。写出实践报告。
以上五题任选一题。
四、实践纪律
学生除了要遵守实践期间学院的基本规定外,还要求做到: 1.必须在规定的时间、地点,独立完成以上任务; 2.不得迟到、早退。尤其不得擅自缺席。
五、设计报告要求
1. 任务书必须作为报告第一页 2. 报告不得少于3000字:主要总结实践心得、实践成果、程序功能、设计思路(程序流程图)、源程序(加上必要的注释)、运行情况、课程设计的收获与不足等
六、时间安排
两周时间
七、成绩评定规则
成绩分为优、良、中、及格、不及格五等。
优:程序功能完备,报告有深度, 遵守实践纪律。
良:程序功能满足要求,报告有内容, 遵守实践纪律。
中:程序和报告基本满足要求, 遵守实践纪律。
及格:程序有错误但大体能运行,有报告书,基本遵守实践纪律。
不及格:程序完全错误或严重违反实践纪律。c++语言程序设计报告
一、实践内容
统计稿件管理数据,要求能用菜单实现如下功能:(1)输入每件稿件的第一作者名字,稿件名称,投稿日期,作者的省份。(2)输入每件稿件的发表日期,审稿意见。(3)按作者的省份,从高到低排出每个省的总发表篇数。(4)根据用户要求输出某作者某月(从键盘输入作者名和月份)的所有稿件数据。(5)根据用户输入,绘制稿件按省份的百分比饼图。(自学利用c++提供的库函数绘制曲线图)。
二、实践成果
灵活运用《c++程序设计》课程所学的基础知识,独立设计大型程序的能力;该程序必须用户界面友好、操作简洁方便,大大提高工作效率。
此程序先由用户输入数据,并存储。再作各种功能处理。整个程序基本可以实现稿件管理数据系统的统计。
三、程序功能 a)录入功能:可以写入关于稿件的基本信息,并进行以下几项功能。b)排序功能:用户可按作者的省份,将每个省的总发表篇数进行排序,并
输出。
c)查询功能:用户可根据作者与月份查出某作者某月的稿件数据,没找到的给予提示。d)绘制饼状图功能:系统根据输入的数据绘制高价男生份的百分比饼图。e)各项退出功能:在每个环节里都设有退出功能。
四、设计思路
统计稿件管理数据系统程序框图篇五:mfc心得 mfc学习心得
时光如梭,不知不觉短学期已经结束一个月左右了。对于mfc,这种c++的高级应用,从陌生到熟悉,从茫然到大致了解,从不屑一顾到很感兴趣,在编写飞行棋这个游戏的过程中感触良多,也收获了许多。mfc跟以前的控制台编程有比较大的差异,实现了部分可视化编程。对于其中复杂的类和函数,刚开始的时候感到相当的恐慌。虽然在暑假的时候有看过一些书,但到真正做起来却仍然觉得很吃力。第一次上mfc的课,老师一下子讲了很多东西,主要是控件,对于如此繁复的知识感觉一片茫然。整个理论课上了四节,虽然老师也讲了一些东西,但是对于我们要做的系统却是远远不够的。所以,很多东西都需要我们自学,到图书馆借书,到网上查找资料,问同学,问老师……我们使用各种方法获取知识。
必须学会自学,这是短学期的编程课带给我的一大感触。虽然我们需要做的只是一个小型的游戏,但对于初次接触窗口编程的我们难度依然是非常大了。但是,我们克服了,通过我们的团结协作。
要学会团结协作是我另一大感触。小组中各个组员的通力合作是编程工作能够顺利进行的一大关键,我们进行了明确的分工,却又能互相合作,互相参考,互相帮助。只有这样,才会有最后的飞行棋游戏新鲜出炉。
在编程过程中,我主要负责的部分是图形设计和界面美化部分。这部分的特点是:既与大一所学的控制台编程紧密联系,又必须要和现在所学的窗口程序编程相衔接。代码基本上靠逐行输入,考验的是自己的逻辑思维能力和严谨态度。其实,这部分的代码并不是特别多,所以编写代码的工作也并不是很难的。最磨练人的耐性的是将写好的代码进行调试。由于程序长度相对于原来的编程根本不属于同一个数量级,所以调试理所当然地变得痛苦起来。并且,这些代码基本上在编译时都能够一次通过,但在实际运行时却老是出错,检查算法和语法又不得要领。这个时候,就不得不耐着性子,用调试工具逐行调试了。学会了一些调试技巧,这不得不说是编程过程中我的一大收获。很久以前,我认为程序就是在头脑中思考一下就立即ok,而且程序先写出来再说, 然后再改就是,人的认识总是慢慢前进的!经过了短学期的编码和试验,彻底打破了以前的一些思维,其实程序只是人的思维的体现而已,因而重要的是思想,所以在构架整体框架的时候,先写一些程序验证是很必要的,而在程序开发的过程中,其如果对工程不是很了解的阶段,也只能算是在为整体框架做必要的验证,所以一般的工程的周期长于我们想象的那样!尽管mfc这门课程已经结束了,但是我还会继续学习下去,希望自己将来能够对编程有更加深入的了解。