面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)報(bào)告

上傳人:z**** 文檔編號(hào):59829665 上傳時(shí)間:2022-03-05 格式:DOC 頁(yè)數(shù):36 大小:324.50KB
收藏 版權(quán)申訴 舉報(bào) 下載
面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)報(bào)告_第1頁(yè)
第1頁(yè) / 共36頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)報(bào)告_第2頁(yè)
第2頁(yè) / 共36頁(yè)
面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)報(bào)告_第3頁(yè)
第3頁(yè) / 共36頁(yè)

本資源只提供3頁(yè)預(yù)覽,全部文檔請(qǐng)下載后查看!喜歡就下載吧,查找使用更方便

40 積分

下載資源

資源描述:

《面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)報(bào)告》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《面向?qū)ο蟪绦蛟O(shè)計(jì)C++實(shí)驗(yàn)報(bào)告(36頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、電子科技大學(xué)信息與軟件工程學(xué)院 標(biāo)準(zhǔn)實(shí)驗(yàn)報(bào)告 (實(shí)驗(yàn))課程名稱(chēng):面向?qū)ο蟪绦蛟O(shè)計(jì) C++ 電子科技大學(xué)教務(wù)處制表 學(xué)生姓名:趙天豪 學(xué) 號(hào): 指導(dǎo)教師:李巧勤 實(shí)驗(yàn)地點(diǎn):信軟學(xué)院實(shí)驗(yàn)室 實(shí)驗(yàn)時(shí)間:15/12/21 一、實(shí)驗(yàn)室名稱(chēng):信軟學(xué)院軟件實(shí)驗(yàn)室 二、實(shí)驗(yàn)項(xiàng)目名稱(chēng): 基于 MFC 的 C++ 桌面應(yīng)用開(kāi)發(fā) 三、實(shí)驗(yàn)學(xué)時(shí): 16 學(xué)時(shí) 四、實(shí)驗(yàn)原理: 本次實(shí)驗(yàn)基于MFC開(kāi)發(fā)C++桌面應(yīng)用程序,實(shí)現(xiàn)可視化操作。 五、 實(shí)驗(yàn)?zāi)康模? 充分運(yùn)用所學(xué)的C++的數(shù)據(jù)封裝、繼承與派生、多態(tài)等全部核心內(nèi)容,補(bǔ)充 完整一個(gè)基于 MFC 的應(yīng)用,使學(xué)生能夠基本掌握 OOA、OOD 方法;

2、熟練掌握 OOP方法;初步了解基于 Windows平臺(tái)的桌面圖形化應(yīng)用的開(kāi)發(fā)過(guò)程,掌握編 程工具的使用;初步掌握建模工具的使用;基本掌握閱讀、調(diào)試程序的能力。 六、 實(shí)驗(yàn)內(nèi)容: 一位小學(xué)教師 Ken 希望完成這樣的任務(wù):針對(duì)于小學(xué)生正在學(xué)習(xí)四邊形 (quadrangle) 的特性,編寫(xiě)一個(gè)小軟件, 能夠隨機(jī)在屏幕上顯示矩形 (rectangle) 正方形(square)、平行 四邊形(parallelogram)、梯形(trapezoid) 和菱形 (diamond) 五種形體之一, 同時(shí)顯示該形體的特性和關(guān)鍵數(shù)據(jù) (隨機(jī)產(chǎn)生),學(xué)生 復(fù)習(xí)形體的特性, 然后根據(jù)給出的關(guān)鍵數(shù)據(jù)計(jì)算形體的面積

3、, 軟件判斷其結(jié)果的 正確性。在學(xué)習(xí)過(guò)程中,軟件記錄產(chǎn)生的每一個(gè)形體,在學(xué)生選擇不再繼續(xù)后, 將其學(xué)習(xí)的過(guò)程重放一遍,用以重溫,加深印象。 根據(jù)上述描述,需要完成: 1) 必做內(nèi)容 根據(jù)Ken老師的要求,需要至少編寫(xiě)六個(gè)類(lèi): Rect // 注意:類(lèi)名不要使用 Rectangle Square Parallelogram Trapezoid Diam ond List (注:這六個(gè)類(lèi)必須以上述名字命名) 其中,前五個(gè)類(lèi)用于描述五種形體。五種形體不用頂點(diǎn)坐標(biāo)的表示形式,而 只是簡(jiǎn)單地用它們的特征值表示。例如:矩形、平行四邊形用長(zhǎng)和高表示;正方 形用邊長(zhǎng)表示;梯形用兩條平行邊

4、長(zhǎng)和高表示;菱形用兩條對(duì)象線(xiàn)長(zhǎng)表示。要求 為這五種形體編寫(xiě)相應(yīng)的類(lèi),每個(gè)類(lèi)的設(shè)計(jì)要求如下: (1) Quadrangle類(lèi)必須成為抽象類(lèi),是其它形體類(lèi)的祖先。它擁有如下 成員: 成員 類(lèi)型 是否純虛 n ame 數(shù)據(jù) / area 函數(shù) 是 draw 函數(shù) 是 what 函數(shù) 可選 (2) 其它形體類(lèi)之間的繼承關(guān)系請(qǐng)自行擬定。 其中,Parallelogram 類(lèi)必 須擁有如下虛成員: Width(); // 返回寬 Height(); // 返回高 (3) 每個(gè)形體類(lèi)必須完成如下操作: [1] 設(shè)置標(biāo)志名屬性name五種形體的標(biāo)志名必須是 Par

5、allelogram、 Rectangle、Diamond Trapezoid 和 Square 之一(第一個(gè)字母大寫(xiě), 其余小寫(xiě)); [2] 重載area()成員; [3] 重載draw()成員; [4] 重載Width()成員以返回寬; [5] 重載Height()成員以返回高; [6] 提供Width2()成員以返回第二條平行邊長(zhǎng)(僅對(duì)梯形) (4) List類(lèi)必須擁有如下成員函數(shù): size() ; //返回列表中的節(jié)點(diǎn)數(shù) push_back() ; //將數(shù)據(jù)添加到列表末尾 operator]] ; //返回指定下標(biāo)的數(shù)據(jù) traverse() ; // 遍歷,

6、需要一個(gè)訪(fǎng)問(wèn)函數(shù)作為參數(shù) pop_back() // 用來(lái)刪除列表的最后一個(gè)節(jié)點(diǎn),其原型為: void pop_back(); ( 5) 重溫過(guò)程實(shí)際上就是遍歷 List 類(lèi)對(duì)象的過(guò)程。 2) 選作內(nèi)容 List 類(lèi)實(shí)際上是一種稱(chēng)為“容器”的類(lèi)。除了容納形體指針,其實(shí)它還可以 容納任何類(lèi)型的對(duì)象。在本選作內(nèi)容中, ( 1) 請(qǐng)將 List 類(lèi)改為模板類(lèi),使其能容納任何類(lèi)型的對(duì)象; ( 2) 請(qǐng)為 List 類(lèi)編寫(xiě)迭代器。要求如下: 該迭代器的類(lèi)名為 Iterator; 該迭代器必須重載如下運(yùn)算符: ++:迭代器后移 != :兩個(gè)迭代器比較 * :返回迭代器指向節(jié)點(diǎn)的數(shù)據(jù)域中

7、的值,即 quad 指針。 =:兩個(gè)迭代器的復(fù)制 +。該運(yùn)算符函數(shù)的原型為: Iterator operator+(int i); 其功能為:假設(shè)當(dāng)前迭代器(的內(nèi)部指針)指向了第 k 個(gè)節(jié)點(diǎn)(從 0 開(kāi) 始計(jì)數(shù)),那么 +運(yùn)算符返回一個(gè)迭代器,該迭代器是在當(dāng)前迭代器的基礎(chǔ)上 向后移動(dòng) i 個(gè)位置得到的,即該迭代器指向了第 k+i 個(gè)節(jié)點(diǎn)。例如: Iterator itr = list.begin() + 5; 那么迭代器 itr 就指向了從列表的頭節(jié)點(diǎn)往后數(shù)第 5 個(gè)結(jié)點(diǎn)。 為 Iterator 類(lèi)編寫(xiě) begin() 和 end() 成員。 七、實(shí)驗(yàn)器材(設(shè)備、元器件) :

8、PC計(jì)算機(jī)、Windows系列操作系統(tǒng)、Visual Studio2013軟件 八、實(shí)驗(yàn)步驟: 1 )完成類(lèi)的設(shè)計(jì); 2)根據(jù)設(shè)計(jì)結(jié)果編寫(xiě)各種形體類(lèi)的代碼;完成學(xué)習(xí)模式的編程與測(cè)試 3) 完成List類(lèi)的編碼與測(cè)試; 4) 完善程序流程,實(shí)現(xiàn)復(fù)習(xí)模式; 5) 對(duì)前面完成的所有文件進(jìn)行整合,生成一個(gè)解決方案,并進(jìn)行調(diào)試; 6) 程序優(yōu)化。 九、實(shí)驗(yàn)程序及結(jié)果分析: Can vas.h: #pragma once #i nclude "quad.h" class Quadrangle; // Can vas 視圖 class Canvas : public CScroll

9、View { DECLARE_DYNCREATE(Ca nvas) //protected: public : Can vas(); //動(dòng)態(tài)創(chuàng)建所使用的受保護(hù)的構(gòu)造函數(shù) virtual ~Ca nvas(); public : #ifdef _DEBUG virtual void AssertValid() const; #ifndef _WIN32_WCE virtual #en dif void Dump(CDumpContext& dc) const; #en dif protected : virtual void On Dra

10、w(CDC* pDC); // 重寫(xiě)以繪制該視圖 virtual void Onlni tialUpdate(); // 構(gòu)造后的第一次 DECLARE_MESSAGE_MAP() public : static static Can vas * pCa nvas; void drawQuad( const Quadrangle *quad); static bool isLearning; bool toggleMode( void ); double area; private : enum_QUAD_ { para = 0, rect, sqr,

11、 diam, trap }; typedef pair KV; mapvstri ng, _QUAD_> quadMap; }; Diam: #pragma once #include #include #i nclude "Ca nvas.h" #include "para.h" using namespacestd; class Diamond : public Para { public : Diamond(int d1 = 4, int d2 = 8, string nm= "Diamon

12、d") : Para(d1, d2, nn){}; ~Diamo nd(){}; void draw() const{ Para::draw(); }; double area() const { return ( double )width*height/2; }; string what() const { return name; }; int & Width1(){ return d1; }; int & Width2(){ return d2; }; friend ostream&operator<<( ostream& os, const Diamond &c2);

13、 Diamond& operator= ( const Diamond& di) { name = di .name; d1 = di .d2; d2 = di .d2; return * this ; } protected : int d1, d2; }; Experime nt: // experime nt.h : PROJECT_NAME 應(yīng)用程序的主頭文件 // #pragma once #ifndef __AFXWIN_H__ #error "在包含此文件之前包含 “ stdafx.h ”以生成PCH文件" #en dif #include "r

14、esource.h" // 主符號(hào) // Cexperime ntApp: //有關(guān)此類(lèi)的實(shí)現(xiàn),請(qǐng)參閱 experime nt.cpp // class CexperimentApp : public CWinApp { public : Cexperime ntApp(); //重寫(xiě) public : virtual BOOL nitl nsta nce(); //實(shí)現(xiàn) DECLARE_MESSAGE_)MAP }; exter n Cexperime ntApp theApp; Experime ntdlg.h: // experime ntDlg.h :

15、頭文件 // #pragma once #in clude "ca nvas.h" // Cexperime ntDlg 對(duì)話(huà)框 class CexperimentDlg : public CDialogEx { //構(gòu)造 public : CexperimentDlg( CWnd pParent = NULL; // 標(biāo)準(zhǔn)構(gòu)造函數(shù) //對(duì)話(huà)框數(shù)據(jù) en um{ IDD = IDD_EXPERIMENT_DIALQG protected : virtual void DoDataExchange( CDataExchang@ pDX); // DDX/DDV 支持

16、//實(shí)現(xiàn) protected : HICONm_hlc on; //生成的消息映射函數(shù) virtual BOOLO nln itDialog(); afx_msg void OnSysCommandUINT nID, LPARAMParam); afx_msg void On Paint(); afx_msg HCURSOOnQueryDraglcon(); DECLARE_MESSAGE_)MAP public : Can vas *pCa nvas; afx_msg void OnBnClickedOk(); double an swer; CString res

17、ult; afx_msg void OnClickedButtonNext(); afx_msg void OnClickedButtonStop(); afx_msg void OnClickedButtonSubmit(); public : QUADPTReateAquad( void ); private : bool lastDone; virtual BOOLOnCommandW/PARAMParam, LPARAMParam); }; List.h: #pragma once #i nclude "quad.h" #inelude

18、#inelude _| //typedef void(*ACCESSFUN)(QUADPTR); // 定義遍歷時(shí)節(jié)點(diǎn)處理函數(shù)類(lèi)型 class List { protected : struct Node { QUADPTRata; Node* next; Node(QUADPTR) :data( d){} } *head, *tail; //鏈表的頭尾指針 //typedef Node* _ran ge; size_t len; //鏈表中節(jié)點(diǎn)的數(shù)目即鏈表的長(zhǎng)度 public : List() :head( NULL, tail( NULI){ l

19、en = 0; } // 平凡構(gòu)造函數(shù) List( List con st & l) { head = tail = NULL Node*p = l .head; while (p != NULL { this ->push_back(p->data); p = p_>n ext; } len = 0; | } //復(fù)制構(gòu)造函數(shù) ~List() { Node*p = head, *q; while (p != NULL { q = p; p = p_>n ext; delete q; } }; Node *Tail(){ return tail; }

20、 //size_t size(){ return le n; }; // 獲取鏈表的長(zhǎng)度 size_t List ::size() Node*p = head; size_t i = 0; while (p != NULL { p = p_>n ext; ++i; } return i; } void push_back( con st QUADPTRuad) // 尾部添加 { Node*p = new Node( quad); p-> next = NULL if (tail == NULL head = tail = p; else { tail->next

21、 = p; tail = p; } len++; } int pop_back() { if (len == 0) return len; Node*c = head; if (c == tail){ delete c; head = tail = NULL } else { while (c->next != tail) c++; delete tail; tail = c; tail-> next = NULL | } len--; return len; } void traverse( void (* f)( const QUADPT&R) {

22、 Node*p = head; int i = 1; while (p != NULL cout << "第"<< i++ << "個(gè)"<< endl; f (p->data); p = p_>n ext; //請(qǐng)自行添加指針移動(dòng)部分 } }//遍歷 List & operator=( const List & l ) { head = tail = NULL Node*p = l .head; while (p != NULL { this ->push_back(p->data); p = p_>n ext; } len = 0; retur

23、n * this ; } List & operato葉=(const QUADPTSRdata) { Node*p = new Node( data); p-> next = NULL if (tail == NULL head = tail = p; else { tail->n ext = p; tail = p; } len++; return * this ; } QUADPTSRoperator[]( size_t n) { Node*p = head; for ( size_t i = 1; i <= n; i++){ p = p_>n ex

24、t; } return p->data; } }; Para.h: #pragma once #inelude vstring> #inelude #inelude "quad.h" #i nclude "Can vas.h" using namespacestd; class Para : public Quadrangle { public : Para(int w = 5, int h = 7, string nm= "Parallelogram" ) :width( w), height( h),

25、 Quadra ngle (n n){}; ~Para(){}; void draw() const{ Canvas::drawQuad( this ); }; double area() const { return width*height; }; stri ng what() con st { retur n Quadra ngle ::what(); }; int & Width(){ return width; }; //獲取矩形的寬。如果是梯形,還需要一個(gè)成員 int& Width2() 來(lái)獲取另一條平行邊的長(zhǎng)度 int & Height(){ return heig

26、ht; }; // 獲取矩形的高 friend ostream &operator<<( ostream & os, const Para &c3); Para &operator=( const Para&pa) { n ame = pa.n ame; width = pa.width; height = pa.height; return * this ; } protected : int width; int height; }; Quad.h: #pragma once #include | #in clude "Can vas.h"

27、 using namespacestd; class Quadrangle { protected : public : string name; //形體的標(biāo)識(shí) Quadrangle( string nm = "Quadrangle" ) :name( nn){} virtual stri ng double area() const =0; return n ame; }; what() const { virtual void draw() const =0; }; typedef Quadrangle * QUADPTjR Rect.h:

28、#pragma once #include _| #include #include "para.h" #i nclude "Can vas.h" using namespacestd; class Rect : public Para { public : Rect( int w = 4, int h = 8, string nm= "Rectangle" ) : Para( w, h, nn){}; ~Rect(){}; stri ng what() con st { return Para::what(); }; double

29、 area() con st { return Para::area(); } void draw() con st { Can vas::drawQuad( this ); } int Width() con st { return width; } int Height() const{ return height; } friend ostream&operator<<( ostream& os, const Rect &c1); Rect &operator=( const Rect&re) { n ame = re. name; width = re .width;

30、 height = re .height; return * this ; }; Resource*: 〃{{NO_DEPENDENCIES}} // Microsoft Visual C++ gen erated in elude file. // Used by experime nt.rc // #defi ne IDM_ABOUTBOX 0x0010 #defi ne IDD_ABOUTBOX 100 #defi ne IDS_ABOUTBOX 101 #defi ne IDD EXPERIMENT DIALOG 102 #defi ne IDR

31、_MAINFRAME 128 #defi ne IDC_EDIT_ANSWER 1000 #defi ne IDC_BUTTON_SUBMIT 1001 #defi ne IDC_BUTTON_NEXT 1002 #defi ne IDC BUTTON STOP 1003 #defi ne IDC_EDIT_RESULT 1004 #defi ne IDC_STATIC_GROUP 1005 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APS

32、TUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 129 #define _APS_NEXT_COMMAND_VALUE 32771 #define _APS_NEXT_CONTROL_VALUE 1006 #define _APS_NEXT_SYMED_VALUE 101 #en dif #en dif Squa.h: #pragma once #include #include #include "rect.h" #in clude "Can vas.h" usin

33、g namespacestd; class Square : public Rect { public : ~Square(){}; void draw() const{ Rect::draw(); }; double area() con st { return width*width; }; string what() con st { return Rect::what(); }; int & Width(){ return width; }; friend ostream &operator<<( ostream & os, const Square &c4

34、); Square(int w = 6, string nm= "Square") : Rect(w,w, nn){}; Square&operator=( const Square&sq) { n ame = sq.n ame; width = sq.width; return * this ; } }; Stdafx.h: // stdafx.h : 標(biāo)準(zhǔn)系統(tǒng)包含文件的包含文件, //或是經(jīng)常使用但不常更改的 //特定于項(xiàng)目的包含文件 #pragma once #ifndef _SECURE_ATL #defi ne _SECURE_ATIL #en dif

35、 #ifndef VC_EXTRALEAN #define VC_EXTRALEAN //從 Windows頭中排除極少使用的資料 #en dif #i nclude "targetver.h" #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 構(gòu)造函數(shù)將是顯式的 //關(guān)閉MFC對(duì)某些常見(jiàn)但經(jīng)??煞判暮雎缘木嫦⒌碾[藏 #defi ne _AFX_ALL_WARNINGS #include vafxwin.h> // MFC核心組件和標(biāo)準(zhǔn)組件 #include // MFC 擴(kuò)展 #i

36、n clude // MFC自動(dòng)化類(lèi) #ifndef _AFX_NO_OLE_SUPPORT #i nclude // MFC 對(duì) In ternet Explorer 4 公共控件的支持 #en dif #ifndef _AFX_NO_AFXCMN_SUPPORT #include // MFC 對(duì) Windows 公共控件的支持 #en dif // _AFX_NO_AFXCMN_SUPPORT #include // 功能區(qū)和控件條的 MFC 支持 #ifd

37、ef _UNICODE #if defined _M」X86 #pragma commentlinker, "/manifestdependency:\"type='win32' #elif defined _M_X64 #pragma commentlinker, "/manifestdependency:\"type='win32' publicKeyToke n='6595b64144ccf1df' la nguage='*'\"" ) #else #pragma commentlinker, "/manifestdependency:\"type='win32'

38、 #en dif #en dif #in clude #in elude 〃{{ 你編寫(xiě)的頭文件都包含在這里 〃}} using namespacestd; Targetver.h: #pragma once //包括SDKDDKVer.h將定義最高版本的可用 Windows平臺(tái)。 //如果要為以前的 Windows平臺(tái)生成應(yīng)用程序,請(qǐng)包括 WinSDKVer.h,并將 // WIN32_WINNT宏設(shè)置為要支持的平臺(tái),然后再包括 SDKDDKVerh #in clude Trap.h: #pragma

39、 once #include | #include #include "quad.h" #i nclude "Can vas.h" using namespacestd; class Trapezoid : public Quadrangle { public : Trapezoid( int w1 = 5.0, int w2 = 7.0, int h = 8.0, string nm= "Trapezoid" ) :width1( w1), width2( w?,height( h), Quadrangle (nn){}; ~Tra

40、pezoid(); void draw() const{ Canvas::drawQuad( this ); }; double area() const { return ( double )(width1+width2)*height/2; }; string what() const { return name; }; int Width1(){ return width1; }; int Width2(){ return width2; }; int Height(){ return height; }; friend ostream&operator<<( ostrea

41、m& os, const Trapezoid &c5); Trapezoid &operator=( const Trapezoid &tr ) { name = tr .name; width1 = tr .width1; width2 = tr .width2; height = tr .height; return * this ; } private : int widthl; int width2; int height; }; Can vas.cpp: // Can vas.cpp : 實(shí)現(xiàn)文件 // #i nclude "stdafx.h" #

42、in clude "experime nt.h" #i nclude "Can vas.h" #include "quad.h" #include "diam.h" #include "list.h" #include "para.h" #include "rect.h" #include "squa.h" #include "trap.h" 〃{{ 外部說(shuō)明添加到這里 extern List list; 〃}} // Can vas Can vas * Can vas:pCa nvas = NULL bool Canvas::isLearning = false

43、; IMPLEMENT_DYNCREACTfivas, CScrollView ) Can vas:Ca nvas() { pCanvas = this ; quadMap.insert( KV( "Parallelogram" , para)); quadMap.insert( KV( "Rectangle" , rect )); quadMap.insert( KV( "Square" , sqr)); quadMap.insert( KV("Diamond", diam)); quadMap.insert( KV( "Trapezoid" , trap )); }

44、static CString formatString[] = | { _T("寬=%d,高=%d,面積="), _T("對(duì)角線(xiàn)1=%d,對(duì)角線(xiàn)2=%d,面積="), _T("平行邊1=%d,平行邊2=%d,高=%d,面積=") }; Can vas:~Ca nvas() { } BEGIN_MESSAGE_MCPivas, CScrollView ) END_MESSAGE_MAP // Can vas 繪圖 void Canvas::OnlnitialUpdate() { CScrollView ::OnlnitialUpdate(); //CSize size

45、Total; // TODO:計(jì)算此視圖的合計(jì)大小 //sizeTotal.cx = sizeTotal.cy = 100; 〃SetScrollSizes(MM_TEXT, sizeTotal); } union _QUADPTR_ { Quadra ngle *q; Para *p; Rect *r; Diam on d*d; Square *s; Trapezoid *t; }; void Canvas::OnDraw( CDC pDC { CDocumen* pDoc = GetDocume nt(); // TODO:在此添加繪制代碼 CRect

46、rect; GetClie ntRect(&rect); | CBrush br( RGI(220, 200, 170)); CBrush * oldBrush = reinterpret_cast ( pDG>SelectObject (&br)); int xc, yc; int vw = rect.Width (), vh = rect.Height (); int sw = static_cast (vw * 0.75 / 2.0), sh = static_cast (vh * 0.75 / 2.0); SIZE ad[5][4

47、]= { { { -sw + 50, -sh }, { sw + 50, -sh }, { sw - 50, sh }, { -sw - 50, sh } }, { { -sw, -sh }, { sw, -sh }, { sw, sh }, { -sw, sh } }, | { { -sh, -sh }, { sh, -sh }, { sh, sh }, { -sh, sh } }, { { 0, -sh }, { sw, 0 }, { 0, sh }, { -sw, 0 } }, { { -sw + 120, -sh }, { sw - 80, -sh }, { sw, sh }

48、, { -sw, sh } }, | }; double ratio = 1.0; int yOffset = 120; if (isLearning) { xc = vw / 2; yc = vh / 2; } else { xc = 80; | yc = 60; ratio = 0.3; } POINTvert[4]; int shape; size_t i, beg in = 0, end = list.size(); if (isLearning) begin = end - 1; _QUADPTR_jad; stri ng n ame; CS

49、tring msg, msg2; for (i = begin; i<= end; ++i) { quad.q = list[i]; n ame = quad.q->what(); area = quad.q->area (); shape = quadMap[ name]; switch (shape) { case trap : msg.Format(formatStri ng[2], quad.t->Width1(), quad.t->Width2(), quad.t->Height()); break; case diam: msg.Format(forma

50、tString[1], quad.p->Width(), quad.p->Height()); break; default : msg.Format(formatString[0], quad.p->Width(), quad.p->Height()); } if (isLearning) msg2 = _T(" ?"); else msg2.Format ( T("%.1lf" ), area); msg += msg2; for ( int i = 0; i < 4; ++i) { vert[i].x = static_cast (xc + (ad[shape

51、][i].cx * ratio)); vert[i].y = static_cast (yc + (ad[shape][i].cy * ratio)); } int tx, ty; if (isLearning) { tx = xc - sw; ty = yc + sh + 8; } else { CBrush br( RGB240, 240, 240)); CBrush *oldbr = reinterpret_cast vCBrush *>( pDG>SelectObject(&br)); CPen*oldpen = reinterpret_cast

52、( pDG>SelectStockObject( NULL_PEN; pDG>Recta ngle (xc - 80, yc - 50, xc + 600, yc + 50); pDG>SelectObject(oldbr); pDG>SelectObject(oldpe n); tx = xc + yOffset - 24; ty = yc - 8; yc += yOffset; } pDOPolygon (vert, 4); pDOSetBkMode ( TRANSPARENT pDOTextOutW (tx, ty, msg); } pDG>SelectOb

53、ject (oldBrush); } void Canvas::drawQuad( const Quadrangle * quad) { if (isLearning) pGanvas->lnvalidate (); } // Can vas 診斷 #ifdef _DEBUG void Canvas::AssertValid() const| { CScrollView ::AssertValid(); } #ifndef _WIN32_WCE void Canvas::Dump( CDumpContex& dc) const { CScrollView ::Dump(

54、dc); } #en dif #en dif 〃_DEBUG bool Canvas::toggleMode( void ) { retur n isLear ning = !isLear ning; Experime nt.cpp: // experime nt.cpp : 定義應(yīng)用程序的類(lèi)行為。 // #i nclude "stdafx.h" #in elude "experime nt.h" #i nclude "experime ntDIg.h" #ifdef _DEBUG #defi ne n ewDEBUG_NEW #en dif // Cexper

55、ime ntApp BEGIN_MESSAGE_MAP(Cexperime ntApp, CWin App) ON_COMMAND(ID_HELP, &CWin App::O nH elp) END_MESSAGE_MAP() // Cexperime ntApp 構(gòu)造 Cexperime ntApp::Cexperime ntApp() { //支持重新啟動(dòng)管理器 m_dwRestartMa nagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO:在此處添加構(gòu)造代碼, //將所有重要的初始化放置在I

56、nitln sta nee 中 } // 唯一的一個(gè) CexperimentApp 對(duì)象 Cexperime ntApp theApp; // Cexperime ntApp 初始化 BOOL Cexperime ntApp::l nit In sta nce() { //如果一個(gè)運(yùn)行在Windows XP上的應(yīng)用程序清單指定要 //使用ComCtl32.dll 版本6或更高版本來(lái)啟用可視化方式, //則需要InitCommonControlsEx()。否則,將無(wú)法創(chuàng)建窗口。 INITCOMMONCONTROLSEX Ini tCtrls; InitCtrls.dwSiz

57、e = sizeof (InitCtrls); //將它設(shè)置為包括所有要在應(yīng)用程序中使用的 //公共控件類(lèi)。 In itCtrls.dwICC = ICC_WIN95_CLASSES; In itCommo nCon trolsEx (&ln itCtrls); CWin App::I nitI nsta nce(); AfxE nableCo ntrolCo ntain er(); //創(chuàng)建shell管理器,以防對(duì)話(huà)框包含 //任何shell 樹(shù)視圖控件或shell 列表視圖控件。 CShellMa nager *pShellMa nager = n ewCShellMa

58、nager; //標(biāo)準(zhǔn)初始化 //如果未使用這些功能并希望減小 //最終可執(zhí)行文件的大小,則應(yīng)移除下列 //不需要的特定初始化例程 //更改用于存儲(chǔ)設(shè)置的注冊(cè)表項(xiàng) // TODO:應(yīng)適當(dāng)修改該字符串, //例如修改為公司或組織名 SetRegistryKey(_T("應(yīng)用程序向?qū)傻谋镜貞?yīng)用程序")); Cexperime ntDlg dlg; m_pMai nWnd = & dlg; INT_PTR nRespo nse = dlg.DoModal(); if (n Response == IDOK) { // TODO:在此放置處理何時(shí)用 // “確定”來(lái)關(guān)

59、閉對(duì)話(huà)框的代碼 } else if (nResponse == IDCANCEL) { // TODO:在此放置處理何時(shí)用 // “取消”來(lái)關(guān)閉對(duì)話(huà)框的代碼 //刪除上面創(chuàng)建的shell管理器。 if (pShellManager != NULL) { delete pShellManager; } //由于對(duì)話(huà)框已關(guān)閉,所以將返回 FALSE以便退岀應(yīng)用程序, // 而不是啟動(dòng)應(yīng)用程序的消息泵。 return FALSE; } Exprime ntdlg.cpp: // experime ntDlg.cpp : 實(shí)現(xiàn)文件 // #i nclude "std

60、afx.h" #in clude "experime nt.h" #i nclude "experime ntDlg.h" #i nclude "afxdialogex.h" #include "quad.h" #include "diam.h" #include "list.h" #include "para.h" #include "rect.h" #include "squa.h"_| #include "trap.h" #ifdef _DEBUG #defi ne n ewDEBUG_NEW #en dif 〃{{ 全局說(shuō)明添加在這里 List list;

61、 〃}} void access( const QUADPTR& quad) { quad_>draw(); } //用于應(yīng)用程序“關(guān)于”菜單項(xiàng)的CAboutDlg對(duì)話(huà)框 class CAboutDlg : public CDialogEx { public : CAboutDlg(); //對(duì)話(huà)框數(shù)據(jù) en um{ IDD = IDD_ABOUTBOX }; protected : virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 //實(shí)現(xiàn) protected : DECLARE_ME

62、SSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExcha nge(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // Cexperime ntDlg 對(duì)話(huà)框 CexperimentDlg::CexperimentDlg(CWnd* pParent /*=N

63、ULL*/ ) :CDialogEx(Cexperime ntDlg::IDD, pPare nt) ,lastDone( false ) { m_hIc on = AfxGetApp()->LoadIco n( IDR_MAINFRAME); an swer = 0.0; result = _T(""); void CexperimentDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExcha nge(pDX); DDX_Text(pDX, IDC_EDIT_ANSWER, an swer); DDV

64、_Mi nMaxDouble(pDX, an swer, 1, 5000); DDX_Text(pDX, IDC_EDIT_RESULT, result); DDV_MaxChars(pDX, result, 30); } BEGIN_MESSAGE_MAP(Cexperime ntDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDOK, & Cexperime ntDlg::O nBn ClickedOk) ON_BN_CLICKED(IDC_BUTTO

65、N_NEXT, & Cexperime ntDlg::O nClickedButt onN ext) ON_BN_CLICKED(IDC_BUTTON_STOP, & Cexperime ntDlg::O nClickedButt on Stop) ON_BN_CLICKED(IDC_BUTTON_SUBMIT, & Cexperime ntDlg::O nClickedButt on Submit) END_MESSAGE_MAP() // Cexperime ntDlg 消息處理程序 BOOL Cexperime ntDlg::O nln itDialog() { CDialogE

66、x::O nlni tDialog(); //將“關(guān)于…”菜單項(xiàng)添加到系統(tǒng)菜單中。 // IDM_ABOUTBOX必須在系統(tǒng)命令范圍內(nèi)。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMe nu* pSysMe nu = GetSystemMe nu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CStri ng strAboutMe nu; bNameValid = strAboutMe nu.LoadStri ng(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.lsEmpty()) { pSysMe nu->Appe ndMe nu(MF_SEPARATOR); pSysMe nu->Appe ndMe nu(MF_STRING, IDM_ABOUTBOX, strAboutMe nu); } } //設(shè)置此對(duì)話(huà)框的圖標(biāo)。當(dāng)

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲