網站首頁 個人文檔 個人總結 工作總結 述職報告 心得體會 演講稿 講話致辭 實用文 教學資源 企業文化 公文 論文

編程實習心得

欄目: 實習報告 / 發佈於: / 人氣:1.51W

第一篇:編程實習心得

編程實習心得

來公司實習已一個多月了,在這段時間裏,我主要學習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雖然不能簡單地設置背景模式為透明,卻可以設置背景顏色為一給定的顏色,最後還是採用“先截取背景顏色,然後繪製文字,最後以原背景色設置為背景色”的方式解決。即:

kcolor( colorref ); //設置背景顏色

extcolor(colorref ); //設置字體顏色

text( … ); // 繪製文字

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月.

字數要求:一萬字

Tags:編程 實習