注意每道題的難度等級(jí)不同_第1頁
注意每道題的難度等級(jí)不同_第2頁
注意每道題的難度等級(jí)不同_第3頁
注意每道題的難度等級(jí)不同_第4頁
注意每道題的難度等級(jí)不同_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、注意:每道題的難度等級(jí)不同,*越多,難度等級(jí)越高??梢愿鶕?jù)自己的能力,選做恰當(dāng)難度的題。編程文檔部分可以選做。6.1 設(shè)計(jì)一個(gè)抽象基類Worker,并從該基類中派生出計(jì)時(shí)工人類HourlyWorker和計(jì)薪工人類SalariedWorker。每名工人都具有姓名name、年齡age、性別sex和小時(shí)工資額pay_per_hour等屬性;周薪計(jì)算成員函數(shù)void Compute_pay(double hours),(其中參數(shù)hours為每周的實(shí)際工作時(shí)數(shù))和用于顯示工人的基本信息的標(biāo)準(zhǔn)輸出運(yùn)算符友元函數(shù)ostream& operator<<(ostream& out,

2、Worker& worker)。工人的薪金等級(jí)以小時(shí)工資額劃分:計(jì)時(shí)工人的薪金等級(jí)分為10、20和40 US$/hour三個(gè)等級(jí);計(jì)薪工人的薪金等級(jí),分為30和50 US$/hour兩個(gè)等級(jí)。不同類別和等級(jí)工人的周薪計(jì)算方法不同,計(jì)時(shí)工人周薪的計(jì)算方法是:如果每周的工作時(shí)數(shù)(hours)在40以內(nèi),則周薪 = 小時(shí)工資額 × 實(shí)際工作時(shí)數(shù);如果每周的工作時(shí)數(shù)(hours)超過40,則周薪 = 小時(shí)工資額 × 40 + 1.5 × 小時(shí)工資額 ×(實(shí)際工作時(shí)數(shù) 40)。而計(jì)薪工周薪的計(jì)算方法是:如果每周的實(shí)際工作時(shí)數(shù)不少于35小時(shí),則按40小時(shí)計(jì)周

3、薪(允許有半個(gè)工作日的事/病假),超出40小時(shí)部分不計(jì)薪,即周薪 = 小時(shí)工資額 × 40;如果每周的實(shí)際工作時(shí)數(shù)少于35小時(shí)(不含35小時(shí)),則周薪 = 小時(shí)工資額 實(shí)際工作時(shí)數(shù) + 0.5 × 小時(shí)工資額 × (35 - 實(shí)際工作時(shí)數(shù))。要求:1. 定義Worker、HourlyWorker和SalariedWorker類,并實(shí)現(xiàn)它們的不同周薪計(jì)算方法。2. 在主函數(shù)main()中使用HourlyWorker和SalariedWorker類完成如下操作: 通過控制臺(tái)輸入、輸出操作順序完成對(duì)5個(gè)不同工人的基本信息(姓名、年齡、性別、類別和薪金等級(jí))的注冊(cè)。注意,

4、5個(gè)工人應(yīng)分屬于兩類工人的5個(gè)等級(jí)。 通過一個(gè)菜單結(jié)構(gòu)實(shí)現(xiàn)在5個(gè)工人中可以任意選擇一個(gè)工人,顯示該工人的基本信息,根據(jù)每周的實(shí)際工作時(shí)數(shù)(通過控制臺(tái)輸入)計(jì)算并顯示該工人的周薪。直至選擇退出操作。提示:1. 可以定義一個(gè)Worker類的指針數(shù)組Worker* workers5;用于指向5個(gè)動(dòng)態(tài)創(chuàng)建的HourlyWorker或SalariedWorker類對(duì)象。注意,程序結(jié)束前,應(yīng)撤消這些動(dòng)態(tài)創(chuàng)建的對(duì)象。2. 可以為Worker類增加一個(gè)成員函數(shù)void Name();用于在菜單結(jié)構(gòu)中顯示每個(gè)工人的姓名作為用戶選擇的菜單項(xiàng)。難度等級(jí):*6.2 定義一個(gè)能描述多種幾何圖形的類派生層次結(jié)構(gòu):Shap

5、eCircleEllipseRectangleTrianglePolygonHouseShapeRingbase1roof1outside1inside1其中基類Shape是一個(gè)只描述了幾何圖形共同概念屬性和操作接口的抽象類,而不描述任何針對(duì)具體幾何圖形相關(guān)的屬性和操作接口。該類的定義如下:enum ShapeTypeCircle, Ellipse, Rectangle, Triangle, Polygon, HouseShape, Ring;class ShapeProtected:ShapeType type;/ 幾何圖形類型public:Shape(ShapeType type);Sha

6、pe();virtual double Perimeter() = 0;/ 計(jì)算幾何圖形的周長(zhǎng)virtual double Area() = 0;/ 計(jì)算幾何圖形的面積;由基類Shape派生的圓類Circle、橢圓類Ellipse、矩形類Rectangle、三角形類Triangle、正多邊形Polygon、屋形類HouseShape和環(huán)形類Ring都在Shape基礎(chǔ)上增加了各自相應(yīng)的形態(tài)屬性:Circle類增加了半徑屬性double radius;Ellipse類增加了長(zhǎng)軸屬性double long_axis;和短軸屬性double short_axis;Rectangle類增加了長(zhǎng)屬性dou

7、ble length;和寬屬性double width;Triangle類增加了底屬性double bottom;和高屬性double height;Polygon類增加了邊數(shù)屬性double num;和邊長(zhǎng)屬性double length;lengthnum = 6例如正六邊形:HouseShape類增加了屋基屬性Rectangle base;和屋頂屬性Triangle roof;roof.heightbase.lengthbase.width或roof.bottomRing類增加了內(nèi)圓屬性Circle inside;和外圓屬性Circle outside;inside.radiusoutsi

8、de.radius并依據(jù)各自的形態(tài)屬性重新定義統(tǒng)一的接口操作Perimeter和Area。同時(shí)為了使各個(gè)幾何圖形對(duì)象的輸入和輸出標(biāo)準(zhǔn)化,每個(gè)派生圖形類還要重載輸入運(yùn)算符operator>>和輸出運(yùn)算符operator<<,實(shí)現(xiàn)相應(yīng)圖形類對(duì)象的形態(tài)參數(shù)和輸出顯示圖形類對(duì)象的基本信息。要求:1. 按照題意定義和實(shí)現(xiàn)Shape、Circle、Ellipse、Rectangle、Triangle、Polygon、HouseShape和Ring構(gòu)成的幾何圖形類結(jié)構(gòu)。2. 在主函數(shù)main()中編寫一個(gè)用于測(cè)試所定義的幾何圖形類結(jié)構(gòu)中各個(gè)類功能的多態(tài)性的菜單選擇結(jié)構(gòu),直至選擇退出測(cè)

9、試,結(jié)束程序執(zhí)行。在菜單選擇結(jié)構(gòu)中對(duì)選中的幾何圖形類進(jìn)行測(cè)試的內(nèi)容和步驟如下: 動(dòng)態(tài)創(chuàng)建選中的幾何圖形類對(duì)象; 為所創(chuàng)建的幾何圖形輸入形態(tài)參數(shù); 顯示所創(chuàng)建圖形的基本信息; 計(jì)算并顯示所創(chuàng)建圖形的周長(zhǎng)和面積; 上述操作結(jié)束后刪除動(dòng)態(tài)創(chuàng)建的幾何圖形類對(duì)象。3. 要求編寫編程文檔,文檔內(nèi)容包括: 繪制基類Shape和派生類Circle、Ellipse、Rectangle、Triangle、Polygon、HouseShape、Ring的類圖,以及它們之間的靜態(tài)關(guān)聯(lián)圖。 各個(gè)派生幾何圖形類的定義描述。 main()的流程圖。提示:1. 如果橢圓的長(zhǎng)軸 = 2a,短軸 = 2b,則橢圓的周長(zhǎng) 1.5(

10、a + b) - ab ,橢圓的面積 = ab。a2tgn2n如果正n邊形的邊長(zhǎng) = a,則正n邊形的面積 = ah,其中h = ,而 = 。2. 屋形類HouseShape是由矩形類Rectangle和三角形類Triangle聚合而成,所以HouseShape的接口操作應(yīng)借助Rectangle和Triangle的接口操作來實(shí)現(xiàn)。同樣, 環(huán)形類Ring是由圓形類Circle聚合而成,所以Ring的接口操作也應(yīng)借助Circle的接口操作來實(shí)現(xiàn)。難度等級(jí):*6.3 歸納繪制各類圖形所需要的共同屬性和操作接口,可以定義一個(gè)只為不同圖形繪制類提供繪制屬性和繪制操作的接口規(guī)則,以及為將不同圖形繪制類對(duì)象

11、連接成一個(gè)鏈表提供連接屬性和插入鏈表操作的接口規(guī)則,而不實(shí)現(xiàn)任何具體圖形繪制操作和對(duì)象插入操作的抽象類Figure如下:enum TYPE LINE, CIRCLE, ELLIPSE, ARC, RECTANGLE, TRIANGLE, POLYGON;class FigureLink;/ 超前聲明 class Figurefriend class FigureLink;/ FigureLink是連接不同圖形繪制類對(duì)象的鏈表類protected:TYPE type;/ 圖形類別:直線 = LINE, 圓 = CIRCLE, 橢圓 = / ELLIPSE, 弧 = ARC, 矩形 = RECTA

12、NGLE, 三角/ 形 = TRIANGLE, 正多邊形 = POLYGONint cx, cy;/ 繪制圖形的中心位置坐標(biāo)int linestyle;/ 畫線樣式int linewidth;/ 畫線寬度int linecolor;/ 畫線顏色int fillpattern;/ 封閉圖形的填充樣式int fillcolor;/ 封閉圖形的填充顏色static Figure* ptr;/ 指向?qū)⒁迦腈湵淼膱D形繪制對(duì)象Figure* next;/ 指向鏈表中下一個(gè)圖形繪制對(duì)象public:Figure(int x, int y, TYPE tp, int style = SOLID_LINE,

13、int lnwidth = NORM_WIDTH, int lncolor = WHITE, int pattern = EMPTY_FILL, fcolor = BLACK)cx = x;cy = y;type = tp;linestyle = style;fillpattern = pattern;fillcolor = fcolor;linewidth = lnwidth;linecolor = lncolor;virtual Figure() virtual void Draw() = 0;/ 圖形繪制操作的接口規(guī)則vitural void Insert() = 0;/ 圖形繪制類對(duì)象

14、插入鏈表操作的接口規(guī)則void show();/ 在圖形方式下按指定格式顯示圖形的各項(xiàng)屬性(中/ 心位置坐標(biāo)屬性除外)。;注意,構(gòu)造函數(shù)中為各項(xiàng)繪圖屬性的缺省值是繪圖系統(tǒng)已經(jīng)預(yù)先定義的符號(hào)常量,這些符號(hào)常量的種類和含義可以參見提示中響應(yīng)的相應(yīng)常量表。要求:1. 從Figure定義以下圖形繪制類:Line直線、Circle圓、Ellipse橢圓、Arc弧、Rectangle矩形、Triangle三角形、Poligon正多邊形。2. 每種圖形繪制類除了從基類繼承共同屬性外,還分別具有描述自身形狀和尺寸的屬性,每種圖形繪制類的新增屬性如下:Line類int length;/ 直線長(zhǎng)度int angl

15、e/ 直線與水平方向的夾角 (以度單位)Circle類int radius;/ 圓半徑Ellipse類int horizAxis/ 橢圓水平軸int vertAxis/ 橢圓垂直軸Arc類int radius;/ 弧線半徑int stAngle/ 弧線的起點(diǎn)角(以度單位) int endAngle/ 弧線的止點(diǎn)角(以度單位)Rectangle類int length;/ 矩形的長(zhǎng)度int width;/ 矩形的寬度Triangle類int side1;/ 三角形的一條邊長(zhǎng)int side2;/ 三角形的另一條邊長(zhǎng)int angle/ 兩邊的夾角(以度單位)Polygon類int pointNum

16、;/ 正多邊形的頂點(diǎn)個(gè)數(shù)int sideLength;/ 正多邊形的(頂點(diǎn)之間)邊長(zhǎng)3. 上述各個(gè)派生類的屬性(包括所有圖形類的共同屬性在內(nèi))的設(shè)置可以通過兩個(gè)途徑實(shí)現(xiàn): 通過構(gòu)造函數(shù)設(shè)置為你確定的特定值。 為每個(gè)派生類重載函數(shù)調(diào)用運(yùn)算符operator(),通過該運(yùn)算符函數(shù)的參數(shù)列表為相應(yīng)圖形的各個(gè)屬性指定設(shè)置值。注意,在為各個(gè)圖形的形態(tài)屬性賦值前,應(yīng)檢測(cè)所設(shè)置屬性值在屏幕繪制范圍內(nèi)的合法性。4. 要求每種圖形的接口函數(shù)Draw()將該圖形繪制在一個(gè)矩形邊框的中央,并在邊框的左上角顯示該圖形的類型名稱和屬性(文字顯示操作由成員函數(shù)Show完成)。例如調(diào)用一個(gè)圓的Draw(),顯示結(jié)果如下:1

17、 Line 2 Circle 3 Ellipse 4 Arc 5 Rectangle 6 Triangle 7 Polygon 8 ExitCircle: Position of center = (320, 240) , Radius = 100Pen style = SOLID_LINEPen width = NORM_WIDTHPen color = REDFill pattern = LTSLASH_FILLFill color = BLUE 注意,上圖示中頂部的文字串是程序的主菜單,它不是Draw()的顯示內(nèi)容。5. 各類圖形派生類的接口函數(shù)Insert()所實(shí)現(xiàn)的功能是動(dòng)態(tài)復(fù)制一個(gè)

18、所操作的圖形對(duì)象,用于插入鏈表。例如Circle:Insert()的實(shí)現(xiàn)代碼可以按如下定義:void Circle:Insert()ptr = new Circle(cx, cy, linestyle, linewidth, linecolor, fillpattern, fillcolor);6. 各類圖形派生類的成員函數(shù)Show是在調(diào)用基類的Show的基礎(chǔ)上增加顯示圖形種類的文字信息。7. 定義一個(gè)可以存放各種圖形對(duì)象的鏈表類FigureLink。要求該類應(yīng)該具有如下屬性和操作:屬性: 鏈表頭指針屬性head:該屬性應(yīng)該是Figure類型的指針。操作: 構(gòu)造操作:創(chuàng)建一個(gè)空鏈表,即設(shè)置he

19、ad = 0。 析構(gòu)操作:刪除鏈表中的所有圖形對(duì)象。 判空操作Empty:判斷鏈表中是否存放了圖形對(duì)象,如果鏈表中存放了圖形對(duì)象,則返回true;否則返回false。該操作函數(shù)的原型如下: bool Empty(); 插入操作Insert:該操作用于向鏈表中插入一個(gè)圖形繪制對(duì)象,被插入的對(duì)象的地址通過參數(shù)傳遞。該操作函數(shù)的原型如下:void Insert(Figure* figureNode); 檢索操作Search:該操作用于在鏈表中檢索一個(gè)指定類型的圖形對(duì)象,如果被檢索的圖形對(duì)象存在,則返回該圖形對(duì)象的地址,否則返回0。被檢索圖形的類型值通過參數(shù)傳遞。該操作函數(shù)的原型如下:Figure*

20、Search(TYPE type);8. 編制一個(gè)主函數(shù)完成如下工作: 創(chuàng)建一個(gè)存放圖形對(duì)象的鏈表(FigureLink對(duì)象); 創(chuàng)建各個(gè)圖形類對(duì)象插入到鏈表中; 編寫一個(gè)菜單選擇結(jié)構(gòu),并通過該菜單選擇結(jié)構(gòu)選擇測(cè)試鏈表中各種圖形的繪制功能,直至選擇Exit菜單項(xiàng)退出菜單選擇結(jié)構(gòu),結(jié)束程序執(zhí)行。提示:1. 可以在Turbo C+ 環(huán)境中實(shí)現(xiàn)該程序需要完成的繪圖操作。在Turbo C+ 環(huán)境中如何創(chuàng)建一個(gè)程序項(xiàng)目,并利用項(xiàng)目管理程序的編寫、編譯、鏈接、運(yùn)行請(qǐng)參閱文檔“使用TC建立程序項(xiàng)目”。2. 在控制臺(tái)屏幕上繪圖各類圖形時(shí)都必須以確定畫線樣式、寬度、顏色,以及填充樣式、顏色進(jìn)行繪制操作。系統(tǒng)繪圖

21、環(huán)境中為各種不同的畫線和填充屬性定義了相應(yīng)的符號(hào)標(biāo)識(shí)常量和相應(yīng)的庫(kù)函數(shù)進(jìn)行繪圖屬性設(shè)置: 畫線樣式和寬度符號(hào)標(biāo)識(shí)常量和設(shè)置:畫線樣式和寬度的設(shè)置函數(shù)原型:void far setlinestyle(int linestyle, unsigned upattern, int thickness);其中的參數(shù)的取值:linestyle: 為畫線樣式,取值范圍見下表:符號(hào)名常量值線型描述SOLID_LINE0實(shí)線DOTTED_LINE1點(diǎn)虛線CENTER_LINE2點(diǎn)劃線(中心線)DASHED_LINE3短劃虛線USERBIT_LINE4用戶定義樣式upattern: 為用戶定義樣式,即linest

22、yle = USERBIT_LINE時(shí),該16位值的0、1排列表示用戶指定的畫線樣式。thickness: 為畫線寬度,取值范圍見下表:符號(hào)名常量值線寬描述NORM_WIDTH0/11個(gè)象素寬THICK_WIDTH33個(gè)象素寬 畫線顏色符號(hào)標(biāo)識(shí)常量和設(shè)置:畫線顏色的設(shè)置函數(shù)原型:void far setcolor(int color);其中的參數(shù)取值:color: 為顏色值,取值范圍見下表:符號(hào)名常量值顏色符號(hào)名常量值顏色BLACK 0黑色DARKGRAY8深灰色BLUE1蘭色LIGHTBLUE9淺蘭色GREEN2綠色LIGHTGREEN10淺綠色CYAN3青色LIGHTCYAN11淺青色RE

23、D4紅色LIGHTRED12淺紅色MAGENTA5紫色LIGHTMAGENTA13淺紫色BROWN6棕色YELLOW14黃色LIGHTGRAY7淺灰色WHITE15白色 封閉圖形的填充樣式和顏色符號(hào)標(biāo)識(shí)常量和設(shè)置:填充樣式和顏色的設(shè)置函數(shù)原型: void far setfillstyle(int pattern, int color); 其中的參數(shù)取值: pattern:為填充樣式值,取值范圍見下表:符號(hào)名常量值圖案樣式EMPTY_FILL 0無填充SOLID_FILL1實(shí)心圖案LINE_FILL2水平直線圖案LTSLASH_FILL3細(xì)斜線圖案SLASH_FILL4斜線圖案BKSLASH_F

24、ILL5反斜線圖案LTBKSLASH_FILL6細(xì)反斜線圖案HATCH_FILL7十字交叉線圖案XHATCH_FILL8粗十字交叉線圖案INTERLEAVE_FILL9斜十字交叉線圖案WIDE_DOT_FILL10稀疏點(diǎn)圖案CLOSE_DOT_FILL11密集點(diǎn)圖案USER_FILL12用戶定義填充圖案 color: 為填充顏色值,取值范圍與畫線顏色值相同。3. 各類圖形的繪制操作Draw是在一個(gè)矩形區(qū)域中進(jìn)行的,因此,需要設(shè)置該矩形區(qū)域的位置和尺寸,并在每個(gè)新圖形繪制之前應(yīng)先清除該矩形區(qū)域中的所有顯示內(nèi)容。設(shè)置圖形繪制區(qū)域的庫(kù)函數(shù)原型:void setviewport(int left, i

25、nt top, int right, int bottom, int clip);其中的參數(shù)取值:left, top, right和bottom用于指定繪圖區(qū)域的4個(gè)頂點(diǎn)的坐標(biāo),left和right的取值范圍為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得),top和bottom的取值范圍為0 最大垂直坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxy()獲得)。clip: 不為0表示所繪制的圖形被剪切限制在所設(shè)置的繪制區(qū)域內(nèi)。清除圖形繪制區(qū)域中內(nèi)容的庫(kù)函數(shù)原型: void clearviewport();4. 在圖形方式下顯示文字是按照繪圖方式實(shí)現(xiàn)的,因此,一般需要如下順序進(jìn)行操作: 文字的對(duì)齊方式設(shè)置:調(diào)

26、用庫(kù)函數(shù) void settextjustify(int horiz, int vert); 其中的參數(shù)取值: horiz:指定水平對(duì)齊方式,取值范圍見下表:符號(hào)名常量值功能描述LEFT_TEXT0左對(duì)齊CENTER_TEXT1水平中心對(duì)齊RIGHT_TEXT2右對(duì)齊 vert:指定垂直對(duì)齊方式,取值范圍見下表:符號(hào)名常量值功能描述BOTTOM_TEXT0下對(duì)齊CENTER_TEXT1垂直中心對(duì)齊TOP_TEXT2上對(duì)齊 文字的顯示風(fēng)格設(shè)置:調(diào)用庫(kù)函數(shù) void settextstyle(int font, int direction, int charsize); 其中的參數(shù)取值: font

27、:指定文字的顯示字體,取值范圍見下表:符號(hào)名常量值字體樣式DEFAULT_FONT 08x8 bit-mapped fontTRIPLEX_FONT1Stroked triplex fontSMALL_FONT2Stroked small fontSANS_SERIF_FONT3Stroked sans-serif fontGOTHIC_FONT4Stroked gothic fontSCRIPT_FONT5Stroked script fontSIMPLEX_FONT6Stroked triplex script fontTRIPLEX_SCR_FONT7Stroked triplex sc

28、ript fontCOMPLEX_FONT8Stroked complex fontEUROPEAN_FONT9Stroked European fontBOLD_FONT10Stroked bold fontdirection:指定文字的顯示方向,取值范圍見下表:符號(hào)名常量值方向描述HORIZ_DIR0水平顯示VERT_DIR 1垂直顯示charsize:指定文字的顯示尺寸,對(duì)于Stroked font類型字體可取0或非0值; 對(duì)于bit-mapped font類型字體只能取非0值。 文字顯示顏色設(shè)置:與設(shè)置畫線顏色和填充顏色一樣,調(diào)用庫(kù)函數(shù)void setcolor(int color);

29、其中的參數(shù)取值:與畫線顏色和填充顏色設(shè)置相同。 在對(duì)齊方式、顯示風(fēng)格和顏色設(shè)置完成后的文字顯示:調(diào)用庫(kù)函數(shù) void outtextxy(int x, int y, char *textstring);其中的參數(shù)取值:x, y:文字顯示位置的水平和垂直坐標(biāo)值,取值范圍為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得)。textstring:指向要顯示的文字串。5. 繪制各種圖形可以調(diào)用相應(yīng)的繪圖庫(kù)函數(shù): 直線的繪制:調(diào)用庫(kù)函數(shù): void line(int x1, int y1, int x2, int y2);其中的參數(shù)取值:x1, y1, x2和 y2:指定了所繪制直線的兩個(gè)端點(diǎn)坐標(biāo),

30、取值范圍為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得)。這兩個(gè)端點(diǎn)的坐標(biāo)值可以依據(jù)Line類對(duì)象的cx, cy, length和angle屬性 值計(jì)算獲得。 圓的繪制:調(diào)用庫(kù)函數(shù): void circle(int x, int y, int radius);其中的參數(shù)取值:x和y:指定被繪制圓的圓心坐標(biāo),取值范圍為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得)。Circle類的屬性cx和cy確定了該坐標(biāo)。 radius:指定被繪制圓的半徑。Circle對(duì)象的radius屬性值確定了圓的半徑。 橢圓的繪制:調(diào)用庫(kù)函數(shù): void fillellipse(int x, int y,

31、int xradius, int yradius);其中的參數(shù)取值:x和y:指定被繪制橢圓的中心坐標(biāo),取值范圍為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得)。Ellipse對(duì)象的cx和cy屬性值確定了該坐標(biāo)。 xradius:指定橢圓的水平半徑。Ellipse對(duì)象的horizAxis屬性值確定該半徑。 yradius:指定橢圓的垂直半徑。Ellipse對(duì)象的vertAxis屬性值確定該半徑。 弧線的繪制:調(diào)用庫(kù)函數(shù): void arc(int x, int y, int stangle, int endangle, int radius);其中的參數(shù)取值:x和y:指定被繪弧線的圓心坐標(biāo)

32、,取值范圍為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得)。Arc對(duì)象的cx和cy屬性值確定了該坐標(biāo)。 stangle:指定弧線的起點(diǎn)角度。Arc對(duì)象的stAngle屬性值確定了該角度。 endangle:指定弧線的止點(diǎn)角度。Arc對(duì)象的endAngle屬性值確定了該角度。 radius:指定被繪弧線的半徑。Arc對(duì)象的radius屬性值確定了該半徑。 矩形的繪制:調(diào)用庫(kù)函數(shù): void rectangle(int left, int top, int right, int bottom);其中的參數(shù)取值:left, top, right和bottom:指定矩形的4個(gè)頂點(diǎn)的坐標(biāo),取值范圍

33、為0 最大水平坐標(biāo)(調(diào)用庫(kù)函數(shù)getmaxx()獲得)。這4個(gè)坐標(biāo)值可以依據(jù)Rectangle對(duì)象的cx, cy, length和width屬性值計(jì)算獲得。 三角形和正多邊形的繪制:繪制操作調(diào)用庫(kù)函數(shù): void drawpoly(int numpoints, int *polypoints);其中的參數(shù)取值:numpoints:指定三角形或正多邊形的頂點(diǎn)個(gè)數(shù)。對(duì)于Triangle對(duì)象,頂點(diǎn)個(gè)數(shù) = 3;對(duì)于Polygon對(duì)象,頂點(diǎn)數(shù) = pointNum屬性值。 polypoints:指向一個(gè)順序存放三角形或正多邊形的各個(gè)頂點(diǎn)坐標(biāo)值的數(shù)組。對(duì)于Triangle對(duì)象,數(shù)組中元素個(gè)數(shù) = 6,3

34、個(gè)頂點(diǎn)的坐標(biāo)值可以依據(jù)cx, cy, side1, side2和angle屬性值計(jì)算獲得;而對(duì)于Polygon對(duì)象,數(shù)組中元素個(gè)數(shù) = pointNum屬性值 × 2,各個(gè)頂點(diǎn)的坐標(biāo)值可以依據(jù)cx, cy, pointNum和sideLength 屬性值計(jì)算獲得。填充操作調(diào)用庫(kù)函數(shù):void fillpoly(int numpoints, int *polypoints);其中的參數(shù)取值與調(diào)用庫(kù)函數(shù)drawpoly相同。6. 所有的繪圖操作必須在繪圖方式下進(jìn)行。進(jìn)入繪圖方式是通過調(diào)用繪圖初始化庫(kù)函數(shù)實(shí)現(xiàn)的,該函數(shù)的原型如下:void initgraph(int *graphdrive

35、r, int *graphmode, char *pathtodriver);如果Turbo C+系統(tǒng)的子目錄“tc”位于c:盤的根目錄中,則該函數(shù)的典型的調(diào)用代碼如下:int gdriver = DETECT, gmode;initgraph(&gdriver, &gmode, “c:tcbgi”);退出繪圖方式是通過調(diào)用關(guān)閉繪圖庫(kù)函數(shù)實(shí)現(xiàn)的,該函數(shù)的原型如下:void closegraph();難度等級(jí):* 6.4 在繪圖環(huán)境實(shí)現(xiàn)如下圖所示的有基本圖形組合而成的小汽車和載重卡車的繪制、可調(diào)速地移動(dòng)。ddd8×ddd3.5×d4.5×dd4

36、15;d3×d9×d2×d2d7×d4.5×d圖1右下角參考點(diǎn)右下角參考點(diǎn)d = 車輪尺寸圖中小汽車和載重卡車的形態(tài)結(jié)構(gòu)、各部和整體尺寸都是以輪胎的直徑為參考尺寸(d個(gè)象素)的相對(duì)確定的。只有載重卡車車頭和車廂之間的數(shù)字2表示的是兩個(gè)象素的絕對(duì)尺寸,而不是相對(duì)尺寸。要求:1. 設(shè)計(jì)和定義實(shí)現(xiàn)上述題意要求所需要的類和類之間的合理結(jié)構(gòu)。2. 在main()函數(shù)中,編寫一個(gè)菜單選擇結(jié)構(gòu)用于測(cè)試小汽車和載重卡車的繪制顯示和1 Car 2 Truck 3 ExitPress <S> key to start movingPress <P

37、> key to pause/continue movingPress <E> key to end movingPress <+> key to speed upPress <-> key to speed down 圖2調(diào)速動(dòng)畫效果。屏幕的顯示效果可以參考下面的示意圖: 圖中的主菜單1 Car 2 Truck 3 Exit 用于選擇演示小汽車的繪制顯示和動(dòng)畫,或演示載重卡車的繪制顯示和動(dòng)畫,或退出演示。子菜單:Press <S> key to start moving 指示按<S>鍵,從起點(diǎn)開始動(dòng)畫移動(dòng)小汽車或卡車;Pres

38、s <P> key to pause/continue moving 指示按<P>鍵,暫停/繼續(xù)動(dòng)畫移動(dòng);Press <E> key to end moving 指示按<E>鍵,結(jié)束動(dòng)畫移動(dòng);Press <+> key to speed up指示按<+>鍵,動(dòng)畫移動(dòng)加速;Press <-> key to speed down 指示按<->鍵,動(dòng)畫移動(dòng)減速。提示:1. 實(shí)現(xiàn)小汽車和載重卡車的繪制功能可以分解為組成它們的基本圖形來完成?;緢D形繪制類可以按照6-3題中的思想來設(shè)計(jì),定義一個(gè)抽象圖形基類F

39、igure,并派生本題所需要的Circle類、Rectangle類和Triangle類。為了滿足本題中動(dòng)畫需求,需要在基類Figure中添加能夠修改圖形的畫筆和填充屬性值以及位置屬性值的操作,這些操作可以借助重載函數(shù)調(diào)用運(yùn)算符來實(shí)現(xiàn),該運(yùn)算符函數(shù)的原型可以按如下聲明:void operator()(int style, int width, int lncol, int pattern, int fcol);void operator()(int lncol, int pattern, int fcol);/ 為消隱圖形修改相應(yīng)屬性void operator()(int dx, int dy)

40、;/ 為移動(dòng)圖形修改圖形位置坐標(biāo)2. 分析小汽車和載重卡車的構(gòu)成的共性是都由若干個(gè)確定的基本圖形類對(duì)象組成的,差異只是構(gòu)成它們的基本圖形對(duì)象的種類和個(gè)數(shù)不同。另外,根據(jù)題意要求,小汽車和載重卡車需要提供的繪制顯示、消隱、移動(dòng)操作在實(shí)現(xiàn)方法是一致的,而只是繪制操作的基本圖形不同。因此,歸納小汽車和載重卡車的共性定義一個(gè)機(jī)動(dòng)車基類Vehicle并從該基類派生小汽車類Car和載重卡車類Truck是比較合理的設(shè)計(jì)。根據(jù)前面的分析Vehicle類應(yīng)具有如下屬性和操作:屬性: 構(gòu)成圖形集合屬性contents:該屬性是一個(gè)用于存放構(gòu)成該機(jī)動(dòng)車的基本圖形對(duì)象的鏈表。鏈表類可以使用6-3題中的FigureLi

41、nk類,即該屬性可以定義為:FigureLink contents;操作: 構(gòu)造操作:由于Vehicle類對(duì)象不描述任何具體的機(jī)動(dòng)車,所以構(gòu)造函數(shù)不需要進(jìn)行除分配空間以外的任何操作。 繪制操作Draw:如果鏈表contents不為空,則從頭遍歷整個(gè)鏈表,并調(diào)用結(jié)點(diǎn)所存放的基本圖形的繪制操作,完成整個(gè)機(jī)動(dòng)車的繪制。該操作的原型如下:void Draw(); 消隱操作Hide:如果鏈表contents不為空,則從頭遍歷整個(gè)鏈表,并復(fù)制結(jié)點(diǎn)所存放的基本圖形對(duì)象、修改復(fù)制的基本圖形對(duì)象屬性滿足消隱條件、調(diào)用修改后的基本圖形的繪制操作,完成整個(gè)機(jī)動(dòng)車的消隱。該操作的原型如下:void Hide(); 移

42、動(dòng)操作Move:如果鏈表contents不為空,則從頭遍歷整個(gè)鏈表,并修改結(jié)點(diǎn)所存放的基本圖形對(duì)象的位置屬性、調(diào)用修改后的基本圖形的繪制操作,完成整個(gè)機(jī)動(dòng)車在新位置的繪制顯示。該操作的原型如下:void Move(int dx, int dy);3. 從Vehicle類派生定義的小汽車類Car和載重卡車類Truck不需要增加新的屬性和操作,而只需要定義一個(gè)帶參數(shù)的構(gòu)造函數(shù):Car(int wheel_size, int xstart, int ystart);Truck(int wheel_size, int xstart, int ystart);參數(shù)的含義(參見圖1):wheel_size:車輪的尺寸,作為構(gòu)造Car或Truck對(duì)象圖形的參考尺寸。xstart:Car或Truck對(duì)象圖形的左下角水平坐標(biāo)。ystart:Car或Truck對(duì)象圖形的左下角垂直坐標(biāo)。在這兩個(gè)類的構(gòu)造函數(shù)中,將依據(jù)指定的參數(shù)wheel_size, xstart, ystart的值和構(gòu)成小汽車或載重卡車圖形的基本圖形之間的位置關(guān)系和比例關(guān)系(見圖1),計(jì)算確定構(gòu)成小汽車或載重卡車的每個(gè)基本圖形的形態(tài)參數(shù)值,創(chuàng)建相應(yīng)的基本圖形對(duì)象,

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論