《《程序設(shè)計課程設(shè)計》》由會員分享,可在線閱讀,更多相關(guān)《《程序設(shè)計課程設(shè)計》(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、課程名稱:
課程設(shè)計題目:
姓 名:
系:
專 業(yè):
年 級:
學(xué) 號:
指導(dǎo)教師:
職 稱:
計算機(jī)系
計算機(jī)科學(xué)與技術(shù)
課程設(shè)計報告
程序設(shè)計課程設(shè)計
類似于“記事本”的文本編輯器
2011年 11月 7日
1設(shè)計目的 3
2設(shè)計題目及要求 3
3設(shè)計算法分析 3
3.1模塊調(diào)用層次圖 3
3. 2核心算法描述 6
3.3系統(tǒng)特點 6
4程序代碼 6
5調(diào)試情況 11
6結(jié)論 11
參考文獻(xiàn) 12
類似于“記事本”的文本編輯器
1. 設(shè)計目的
本課程設(shè)計的目的就是要通過一次集中的強(qiáng)化訓(xùn)練,使學(xué)生能及時鞏固己學(xué)的知識,補(bǔ) 充未學(xué)的但
2、又必要的內(nèi)容。進(jìn)行課程設(shè)計目的在于加深對程序設(shè)計基礎(chǔ)中基礎(chǔ)理論和基本知 識的理解,促進(jìn)理論與實踐的結(jié)合,進(jìn)一步提高程序設(shè)計的能力。具體目的如下:
1. 使學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念,程序設(shè)計思想和方法。
2. 培養(yǎng)學(xué)生綜合運用所學(xué)知識獨立完成課題的能力。
3. 培養(yǎng)學(xué)生勇于探索、嚴(yán)謹(jǐn)推理、實事求是、有錯必改,用實踐來檢驗理論,全方位 考慮問題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。
4. 提高學(xué)生對工作認(rèn)真負(fù)責(zé)、一絲不茍,對同學(xué)團(tuán)結(jié)友愛,協(xié)作攻關(guān)的基本素質(zhì)。
5. 培養(yǎng)學(xué)生從資料文獻(xiàn)、科學(xué)實驗中獲得知識的能力,提高學(xué)生從別人經(jīng)驗中找到解 決問題的新途徑的悟性,初步培養(yǎng)工程意識和
3、創(chuàng)新能力。
6. 對學(xué)生掌握知識的深度、運用理論去處理問題的能力、實驗?zāi)芰?、課程設(shè)計能力、 書面及「1頭表達(dá)能力進(jìn)行考核。
2. 設(shè)計題目及要求
[1] 類似于“記事本”的文本編輯器
設(shè)計一個文本編輯器,具有對文本等進(jìn)行讀寫等基本操作,類似于Wmdows中的 記事本。
[2] 要求
實現(xiàn)如下功能:
(1) 能夠?qū)崿F(xiàn)基本的文本文件讀取、保存、設(shè)置字體等功能。
(2) 具有菜單、工具欄和狀態(tài)欄。
(3) ★實現(xiàn)其它相關(guān)功能(如字體、剪貼板的操作,查找、打印預(yù)覽等功能)
(4) ★實現(xiàn)多文檔界面
3. 設(shè)計算法分析
3. 1模塊調(diào)用層次圖
[1]變量描述
定義形式/名
4、稱
含義/作用
結(jié)構(gòu)體
CHOOSECOLOR
CHOOSEFONT
一個是VC類庫給出 的設(shè)置顏色的結(jié)構(gòu) 體,另一個是VC類 庫給出的設(shè)置字體的 結(jié)構(gòu)體
全局變量
CNotepadApp tlieApp
用tlieApp這個全局變 量來獲取當(dāng)前應(yīng)用程 序?qū)嵗木浔?
liliistance
文件
頭文件:ChildFimh MauiFrm.h notepad.h notepadDoc.h notepadView.h resource.!! StdAfx.h
源文件:ChildFrm.cpp
MainFniLcpp notepad, cpp notepadD
5、oc.cpp notepadView.cpp StdAfx.cpp
定義了從 CMDICluldWnd 派 生的文檔框架窗口對 象 CTChildFrame 定義了從 CMDIFrameWnd 派
生的框架窗口對象
CMainFrame
定義了從 CDocument 派生的文檔對象 CTDoc
定義了從CView派 生的視圖對象 CTView
標(biāo)準(zhǔn)AFX頭文件
函數(shù)
void CNotepadView: :OnColor()
void CNotepadView: :OiiFontQ
用來改變字體顏色
用來改變字體大小和
格式
[2]系統(tǒng)模塊調(diào)用層次圖
基于而向?qū)?/p>
6、象的設(shè)計,沒有模塊調(diào)用層次圖。
程序的實現(xiàn)過程如卜:
設(shè)計窗11類
I
注冊窗11類
I
創(chuàng)建窗11
顯小窗I I
更新窗11
消息循環(huán)
窗11處理函數(shù)
首先由全局變量theApp,鏈接到VC類庫中的_tWuiMam()函數(shù),找到這個windows框架結(jié)
構(gòu)的入II函數(shù)后,再依次以上圖示意調(diào)用各個類,最后產(chǎn)生文本編輯器這個框架程序。
構(gòu)成應(yīng)用程序的對象之間的關(guān)系:
3. 2核心算法描述
主邊框窗I I對象
CMDIFrameWnd
工具條對象
CToorBar
文檔邊框窗II對象
CMDIChildFrame
視對象
CView
狀
7、態(tài)欄對象
CStatusB
3.3系統(tǒng)特點
[1] 特點:一個多文檔的界面的類似于“記事本”的文本編輯器。
該編輯器與記事本相比多了改變字體大小、顏色、自體類型的功能,還增加了 查找,替換,顯示圖片,顯示時間等功能。
[2] 分工:本程序的編寫完全由我個人完成,未和任何人分組。
4. 程序代碼
[1]程序代碼
void CNoteView::OnFont()
{
// TODO: Add youi conmiand handler code here
CFontDialog dig;
if(IDOK==dlg.DoModal())
memcpy(&lf,dlg.m_c
8、f.lpLogFont,sizeof(LOGFONT));
if(m_fbnt.m_hObject)
m_font.DeleteObject();
m_fbnt.CreateFontIiiduect(&lf);
Invalidate。;
Update Wiiidow();
}
}
void CT
9、;
dc.SelectObject(&this->m_font);
TEXTMETRIC tm;
dc.GetTextMetncs(&tm);
if(0x0d=nChar)
f
m_stiLme .Empty。;
nvptOrigm.y+^tm.tniHeight;
}
else if(0x08=nChai)
f
COLORREF ch=dc.SetTextColoi(dc.GetBkColorQ);
dc.TextOut(m_ptOrigm.xjik_ptOrigm.y,m_strLine);
m_stiLme=m_stiLiiie.Left(m_strLine.G
10、etLength()-1);
dc.SetTextColor(clr);
}
else
f
m_stiLme+=nChar;
}
C Size sz=dc. GetTextExtent(m_strLme);
CPoint pt;
pt.x=m_ptOrigin.x+sz.cx;
pt.y=m__ptOngin.y;
SetCaietPos(pt);
dc.TextOut(m_ptOiigm.X4ii_ptOrigm.y,m_stiLine);
CView:: OnChai (nChan iiRepCnt, iiFlags);
}
void C^oteView::O
11、nLButtoiiDown(UINT iiFlags, CPoint point)
{
// TODO: Add youi message handler code here and/or call default
SetCaietPos(point);
m_strLiiie .Empty ();
m_ptOrigiii=point;
C View:: OiiLButtoiiDown(iiFlags, point);
}
hit CNoteView::OnCreate(LPCREATESTRUCT IpCreateStiuct)
{
if (CView::OnCreate(
12、lpCreateStmct) == -1)
return -1;
// TODO: Add your specialized creation code here
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetncs(&tm);
CieateSolidCaret(tm.tniAveChaiWidtlv8jm.tniHeight);
ShowCaietQ;
return 0;
}〃用CView生成的記事本的編寫
void CNoteView::OnFont()
{
// TODO: Add youi conmiand ha
13、ndler code here
CHARFORMAT m_charFormat;
GetCharForniatSelection();
CFontDialog dlg(m_charfdrmat,CF_BOTH|CF_NOOEMFONTS);
if(dlg.DoModal0=IDOK)
dlg.GetChaiFormat(m_chai-format);
SetCharForniat(m_chaifdnnat);
}
}〃在CricKEditView類中用CfontDialog實現(xiàn)字體的變更
static UINT indicators[]=
{
ID_SEPARATOR,
14、// status line indicator
ID_INDICATOR_CLOCK//為狀態(tài)欄增加一個窗格
ID INDICATOR CAPS,
ID INDICATOR NUM.
ID_INDICATOR_SCRL,
};
void CMainFrame: :OnTuner(UINT iiIDEvent)
{
// TODO: Add your message handler code here and/or call default
CTime time;
tmie=CTmie:: GetCunentTime();// 獲得系統(tǒng)時間
CStrmg s=tiine.
15、Format(M%H: %M”);
m_wndStatusBai-.SetPaneText(m_wndStatusBar.ConmiandToIiidex(ED_INDICArOR_CLOC
K),s);〃更新時間窗格顯示的時間
CMDIFiameWnd:: OnTmiei (iiIDEvent);
}
void CMainFrame: :OnClose()
{
// TODO: Add your message handler code here and/or call default
CMDIFiameWnd ::OnClose();
}
mt CMaiiiFiame:
16、:OnCieate(LPCREATESTRUCT IpCreateStmct)
SetTiiner( 1,1000.NULL);
retuin 0;
}〃在 CMamFrame::OnCreate 中添加
[2]程序執(zhí)行結(jié)果
:我用上面的5?映實可以實現(xiàn)2)中的功能,但是上面
【,以及2)的作用怎么在上面的程序中體現(xiàn)出來的?
在MFC中建立基于對話框的程序,在上面加了rich edit和BUTTC 1
Notepal
字體
字體但):
字形也):
大?。⊿):
仿宋 _GB2312
云宋珀體書 彩仿琥楮隸 體文文文文文 黑華華華華華 %0000
粗體 粗斜體
常
17、規(guī)
確定
取消
效果
示例
刪除跋催)
下劃線(U)
顏色(£):
微軟中文羽
字符集(£):
CHINESE_GB2312
(3]結(jié)果的討論
結(jié)果不是很讓人滿意,因為始終不能實現(xiàn)根據(jù)用戶的選擇更改字體的愿望,不過能實現(xiàn)基本 的字的輸入、刪除、空格等操作。
5. 調(diào)試情況
在調(diào)試過程中出現(xiàn)的一些問題:
VC提供的類庫函數(shù)對大小寫的要求是十分嚴(yán)格的,所以很容易出現(xiàn)錯誤, 根據(jù)編譯時提供的錯誤信息進(jìn)行修正還是很有幫助的。
成員變量要定義在頭文件中,否則在程序還沒有生成的時候這個變量會在 程序還沒有生成之前就被析構(gòu)了,就不能得到我們預(yù)期的效果了。
18、
View類始終是覆蓋在框架類之上的,所以我們要捕獲鼠標(biāo)左鍵點擊的操 作時要在View中進(jìn)行,如果在框架類中進(jìn)行編程,就會造成不必要的麻煩, 添加編程的麻煩。
6. 結(jié)論
這個文本編輯器的代碼編寫還是相對較簡單的,用VC6.0的MFC開發(fā)工具,直接就可 以生成一個基于wmdows的框架類程序,不用編寫很煩雜的框架程序調(diào)用函數(shù),只需了解 MFC這個編程工具,學(xué)會查詢MSDN調(diào)用微軟提供的類庫及各種接II,就會使編寫這個記 事本程序簡單很多。但是第一次接觸MFC,并且MFC龐大的庫函數(shù)也并不不易理解,在編 程過程中也耗費了大量的時間,主要是去學(xué)習(xí)windows框架程序的內(nèi)部調(diào)用機(jī)制,以及VC
19、封裝的各種庫函數(shù)的點用方法。
我用的是C++這個高級程序語言開發(fā)工具,通過這次的課程設(shè)計,增加了對MFC編程 環(huán)境的認(rèn)識,也加深了對C++語言的認(rèn)識了解,基本能明白windows框架程序內(nèi)部生成的一 個過程以及其內(nèi)部調(diào)用的機(jī)制,一定程度上也深一步地認(rèn)意識到面向?qū)ο蟮乃枷搿?
參考文獻(xiàn)
1. 《C++實用教程》丁有和編著電子工業(yè)出版社2009年
2. 《C++語言程序設(shè)計(第3版)》鄭莉董淵張瑞豐編著清華大學(xué)出版社2009
年
3. 《數(shù)據(jù)結(jié)構(gòu)(C語言版)》嚴(yán)蔚敏吳偉民編著清華大學(xué)出版社2010年
4. 《軟件工程導(dǎo)論(第5版)》張海藩 編著清華大學(xué)出版社2011年
5. 《MFC深入淺出》李久進(jìn) 編著1999年