首页 > 论文范文

编程实习心得

时间:2024-09-29 07:48:49
编程实习心得(全文共5202字)

第一篇:编程实习心得

编程实习心得

来公司实习已一个多月了,在这段时间里,我主要学习evc下的mfc编程,下面主要谈谈学习的经验以及心得体会

在编程过程中遇到了较多的问题,解决问题的过程是漫长而艰苦的,然而在问题得到解决的一刹那是很快乐的。在此举出数个例子与大家分享:

1. 音乐播放—>滚动条的绘制

在开始绘制滚动条的时候,为了简便以及缩短开发时间,我打算直接从vc默认的标准滚动条cscrollbar派生,然后对其进行所有者自绘(owrner draw),将图片贴上去,然而cscrollbar并不如cbutton般好绘制,在经过近一天的尝试后始终无果,很是烦躁,后来在听从陈曦老师的建议后,决定还是从cstatic派生自绘,然后再加上一些鼠标、键盘的相应消息响应处理函数以实现滚动条的功能。

在确定这一思路后,我便开始着手代码的实现:首先实现了一个图片绘制函数loadbitmaptoscroll(),用于将滚动条的滑块、上下箭头以及滚动条底色画到确定的区域。由于滑块的位置会不断的发生变化,因此将不能简单地将滚动条底色先画好,然后将滑块放到某一固定位置,因此我定义了一个类成员变量nthumbtop用于确定滑块顶部到滚动条顶部的距离并截取了一小块滚动条底色将其填充到滑块到两侧箭头的所有区域以实现滚动条的变化。然后捕获wm_paint消息调用loadbitmaptoscroll()使对窗口进行重绘时将滚动条显示出来。这样当创建一个滚动条对象的时候,便能够将其简单地显示出来了。

要响应用户的外部输入,则只需要捕获消息即可,比如wm_lbuttondown便可以判断是否有鼠标左键按下并可通过鼠标位置判断点击的是向上的箭头、向下的箭头还是滑块。另外由于滚动条是不独立存在的,它一般会与一个窗口做伴,比如列表以控制其显示内容或区域。因此,我在滚动条类中定义了一个plist指针变量指向滚动条要控制的窗口对象,在鼠标点击滚动条的上下箭头时,通过向plist指向的对象发送wm_vscroll消息以控制窗口区域的上翻或下翻。

如此,一个具有美观界面及基本功能的滚动条大体上已经实现了。整个滚动条的绘制耗费了将近两天时间,尽管时间较长,但还是受益匪浅,整个绘制过程让我明白了:“一切皆有可能”,没有什么是不能实现的,只要它在现实生活中存在,很多东西表面上看起来很复杂,就象这个自定义的滚动条,只要将其功能进行分解然后一步步实现便可以了。

2. 透明文字的实现

由于嵌入式系统的特殊性,evc并不具备vc的所有功能,透明文字的输出就是其中一例。vc下只要简单地通过setbkmode(transparent),然后在控件窗口区域内获取设备上下文dc,通过该dc调用drawtext()即可将想要显示的文字在给定位置显示,然而evc在cstatic、clistbox等一般控件下设置背景为透明色是不可行的,在纠缠了数个小时后,发现evc虽然不能简单地设置背景模式为透明,却可以设置背景颜色为一给定的颜色,最后还是采用“先截取背景颜色,然后绘制文字,最后以原背景色设置为背景色”的方式解决。即:

dc.setbkcolor( colorref ); //设置背景颜色

dc.settextcolor(colorref ); //设置字体颜色

dc.drawtext( … ); // 绘制文字

3. 模块功能的设计

在软件设计的过程中,我深刻地体会到:一个模块对扩展是开放的,对修改是关闭的。在刚开始编程的时候,只是简单地将一些应该实现的功能予以实现,以致于后来在得知ui有所变化时又得重新编写代码浪费了较多时间,因此在进行软件设计的时候必须考虑到软件需求是一直在变更的。同时应当优先使用聚合,而不是继承,否则就会出现类层次很深的问题,从而造成所谓的类爆炸。比如:在我进行各类自定义控件的设计过程中,将一些类剥离开来,在使用的时候直接定义各个类对象便可,从而避免了类层次过深的现象。

总而言之,来公司的这个月,是我最充实的一个月,在这里学会的不仅仅是evc的mfc编程技能,更重要的是我学会了如何学习,体会到了一个产品应有的严谨(界面美观、功能强大以及差错率较小等)以及产品开发过程中问题考虑的周到充分。

在这里我要感谢大家一个月对我无微不至的关怀与帮助!再次感谢!

第二篇:编程心得

由于大学的时候是网络方向的,没大接触编程,来到这个学校就开始自学c++,但是感觉不知道具体该做什么。听人说只学习c++的理论知识是不可能做出什么实际的东西的,而且vc和c++不是一回事,“vc只是一个开发环境,mfc才是它的精华”,我就是一只无头苍蝇,根本找不到学习编程的方向,因为导师没有项目,我不知道从何做起,同学告诉我从具体的小实例开始做,可以用mfc窗口界面编程。于是我就在图书馆借了本这方面的书(mfc windows应用程序设计)。这种c++的高级应用,mfc跟以前的控制台编程有比较大的差异,实现了部分可视化编程。对我来说真的很难很难,这本书上面好多小例子都是可以实现的,我就按照上面的代码进行模仿着写,实现之后感觉挺有成就感的,可是mfc的符号确实是很长很难记。但是我觉得如果按照大学里学习c语言这门初级语言的方法来学习的话是很可怕的,就像我们学了十几年的英语一样,单词背了几千个,会做题,会写作文,但是一碰到老外的时候,却像哑巴和聋子,说不出听不懂,我们最初学习c语言时就是搞懂每一个细节,在课本上纠错,记住语法规则却很少上机实践,不解决实际问题,等到真正编程的时候,就不知如何下手了。

我个人感觉在学习mfc时msdn帮助文档特别重要,那些难记住的类,方法都可以查看msdn library,很多代码可以直接复制粘贴。

我是看孙鑫老师的教程学习的,但是感觉这个教程好难懂,好多东西都是理论知识,对实践应用不是很大。

绘制窗口时会出现严重的刷屏问题,

问了解决这一问题,

通过改变背景位图来替代过多的部分的重绘达到更好效果。

一个满载的二维、三维数组都可以用一个足够长的一维数组来装下。 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工具,真正的与代码结合起来实现高效实用的编程效果. 最令我痛苦的是,学了一段时间回过头来看,感觉好像什么都没学到。

api函数是windows提供给应用程序的编程接口, 任何用户应用程序必须运行在api函数之上. 直接使用api编程是了解操作系统运行细节的最佳方式, 而且熟知api函数也是对程序开发者的一个最基本的要求. 这课程以api函数作为起点介绍windows编程, 使我撇开c++的特性专心熟悉win32编程思路和消息驱动机制.

虽然mfc仅仅是对api函数的简单封装, 由于我之前对c++语言的了解不够, 不清楚框架程序的工作机制, 即便是有经验的程序员在mfc复杂的结构面前也显得非常困惑. 他们会"用"mfc, 却不知道为什么这么"用", 在运行程序出错时这种现象带来的问题就很明显, 他们不会改.

其实,系统的学起来mfc还是比较清晰的,mfc工程程序肯定有两个类,一个是cwnd类,另一个就是应用程序类cwinapp类。也就是必须有应用程序类,和窗口类。

在编写mfc程序的过程中我也着实体验到了mfc编写程序的局限性。mfc虽然给开发者提供了一个现成的框架,着实便利的开发者的开发。但同样也造成了一个巨大的问题,开发者很难开发出具有个人特色的软件,想要重新改写程序整体的外观就比较困难,并且c++在编写程序时需要开发者自己定义变量的空间开辟和回收,这点上没有java开发时来的方便,尤其是c++当中的指针机制,一不注意还是很容易造成程序错误的。

虽然mfc中的方法比较难写,尤其是消息映射函数,庆幸的是好多都不需要自己去写,我们可以通过classwinzard类向导来指引我们进行选择,想添加什么消息映射只需鼠标操作即可。

通过mfc windows应用程序设计的学习,我掌握了一些知识: 应用程序类,框架窗口类,视图类,文档类构成了mfc应用程序框架,框架的功能是通过各类之间的协调工作实现的类。

mfc采用文档/试图结构来实现数据和数据表现的分离,文档试图的分离有利于数据和数据表现的单独改变。

mfc用类信息存储了动态创建类对象时所需要的消息。

经过这门课程的学习不但使我掌握了windows应用程序设计的基本方法,还可以使我进一步深刻,全面地理解面向对象程序设计的思想,从而把握程序设计方法的发展方向。

第三篇:编程心得

农业决策支持系统交流演示心得体会

通过学习vb和农业信息技术的有关知识,我们在老师的要求下编写了有关农业决策支持系统的程序。vb是一门计算机编程语言,知识含量较高。vb中有基本控件、对话框、图形、菜单、文件、程序设计综合应用等设计方法,多文档界面、工具栏、状态栏的程序设计方法,数据库、对象的链接和嵌入、多媒体控件以及常用的activex控件的应用。因为以前并没有接触vb这方面的知识,所以在整个操作过程中还是出现了不少的麻烦。有很多东西都需要翻阅书籍和询问在行的人来完成,很庆幸最后的结果在我自己看来还是比较满意的。

老师花了三四节的时间让我们一个个演示,每个人都有自己的特色。虽然有的人做的比较简单,但是大体框架还是挺不错的,窗体达到个数,决策系统也符合标准,用户界面也各有特色,既有可爱路线,又有深沉风格,逻辑性强。因为技术有限,所以大部分人的作品还是比较类似的。当然,也有技术含量比较高的作品,数据库链接,视频音乐,地图放大镜等等都包含其中。我心中的敬佩之情油然而生。我也深切感受到同学之间的差距,其中的少数几个作品一展示出来,下面就惊叹声四起,很多功能都是我们力所不能及,整个界面的繁杂性,条理性和层次性都需要很大的耐心。也存在一两个作品,即使在我面前展示出来,我的理解能力还是有所欠缺。而在设计的背后,可能有些人只花了一两天甚至还没有这么长时间就能做出比较有价值的高技术产品,而有些花了比别人多一倍甚至更长的时间都没有达到这样的效果,总结来说,砍柴需要磨刀工。当我还处于茫然阶段的时期,我就开始操作,没过多久我就止步不前。于是,我停下脚步,借阅了vb精彩编程百例。这对我编程的进一步扩展起到了比较重要的作用。于是,我的决策支持系统中也出现了播放器、打字效果、标题间隔出现等内容。可能我的设计离班级中比较牛的人来说还差一大截,但是对于我自己来讲已经是一个比较大的突破。做程序一定要规范。我做的时候就想如果别人看,能不能懂。看懂了就算成功的。所以好的编程习惯和约定一定要学好。

通过这次的学习操作,武装了我的脑袋,编程经验及技巧也掌握了一些。整个过程让我感觉到编程可不是一项轻松的活,尤其是一个人开发制作软件时,工作量就多了。没有一定的坐功、细心程度及耐性那是绝对做不到的。有时,把程序做完了需要调试运行,但是就是不能达到自己设计的效果和目的,也许因为一个程序,你就得花上个十几分钟或者几个小时。但是,越是这样越不要灰心,应该放松心态,一点一滴的去查找,往好的方面想十分锻炼我们的意志。相信以后回到社会这个大熔炉里后也会派上用场的,说不定还能作为我们的收入呢!

第四篇:编程心得

1. 对于液晶点阵,做任何图形的子函数,一定要注意,必须为整数,即像素必须为整数,

否则将出现错误,比如划三角形,必须让三角形的斜率为直线,不然不能得到预期的结果。

2. 对于变量的定义,如果在条件语句里面必须放在语句最前面,如果在整个函数的里面,

必须放在整个函数的最前面。

3. gdb来调试已经生成的可执行程序hello.命令如下:gdbhello ,参数-d指示源代码所

在的目录去搜寻。一旦出现gdb的命令提示符(gdb),就表明gdb已经准备好接收来自用户的各种调试命令了。如果想在调试环境下运行这个程序,可以使用gdb提供的“run”命令,而程序在正常运行时所需的各种参数可以作为“run”命令的参数传入,或者使用单独的“set args”命令进行设置。如果在执行“run”命令时没有给出任何参数,gdb将使用上一次“run”或“set args”命令指定的参数。如果想取消上次设置的参数,可以执行不带任何参数的“set args”命令。

gdb是一个源代码级的调试器,使用“list”命令可以查看当前调试对象的源代码。该命令的通用格式为“list [m,n]”,表示显示从m行开始到n行结束的代码段,而不带任何参数的“list”命令将显示最近10行源代码。

要根据行号设置断点,可以使用“ break linenum”命令。要根据函数名设置断点,则应该使用“break funcname”命令。

条件断点允许当一定条件满足时暂时停止程序的执行。它对于调试来讲非常有用。设置条件断点的正确语法如下:

break linenum if expr

break funcname if expr

使用“continue”命令继续执行程序,直到遇到下一个断点。如果在调试时设置了很多断点,可以随时使用“info breakpoints”命令来查看设置的断点。此外,开发人员还可以使用“delete”命令删除断点,或者使用“disable”命令来使设置的断点暂时无效。被设置为无效的断点在需要的时候可以用“enable”命令使其重新生效。

为了单步跟踪代码,可以使用单步跟踪命令“step”,它每次执行源代码中的一行。

4、程序调试过程中,如果出现segment,一般来说是指针没有赋值,找不到原型。比如线程里面如果要调用screen_mm,那么必须传递参数screen_mm,而且需要在线程里面定义参数。

5、如果线程里面用到串口的操作,则最好把串口初始化程序放到线程里面进行。也可以把初始化作成模块,这样不会影响串口的收发数据。如果将串口初始化放到主程序里面,则最后将初始化程序放在线程的属性定义和建立线程之前,否则其他地方可能导致串口收发数据产生问题。还有对于串口操作的定义最好放在所有变量定义的最前面。

6、对于段错误这种问题。可以分析以下原因:

(1):指针非法,比如使用没有初始化的指针(没有为此指针指向的对象分配空间),或着free掉之后再次使用。

(2):数组访问越界,访问的元素下标超过数组围长

(3):缓存溢出,对于这种while(1) {do}的程序,这个问题最容易发生,多此sprintf或着strcat有可能将某个

buff填满,溢出,所以每次使用前,最好memset一下,不过要是一开始就是段错误,而不是运行了一会儿出现的,(3)的可能性就比较小。

第五篇:编程实习说明书要求

内容要求:

1 问题描述

1.1 设计任务及要求

1.2 问题理解和分析:写需求分析

1.3 开发环境介绍

2 题目设计及实现

2.1 总体设计:模块划分,有功能模块图

2.2数据库设计:数据库的表结构,最好带e-r 图

2.3详细设计(每个模块的功能、界面和算法,不能只写代码) 3系统测试(自己系统的测试,写明测试用例和测试截图,不能都是测试的概念)

4设计总结(关于系统的总结 ,不能和任务书上的一样) 5参考文献(十本书)

排版要求:

一级题目:宋体小三加粗

二级题目:宋体四号加粗

三级题目:宋体小四加粗

正文:宋体小四

表名、表内容、图例和参考文献宋体五号字

全文行距固定值20磅,每一章另起一页

参考文献例子

[1] 刘彬彬,马文强.eclipse应用开发完全手册.北京:人民邮电出版社,2014年9月.

字数要求:一万字

《编程实习心得(全文共5202字).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式