524555562面向对象程序设计报告基本图形处理软件课程设计报告_第1页
524555562面向对象程序设计报告基本图形处理软件课程设计报告_第2页
524555562面向对象程序设计报告基本图形处理软件课程设计报告_第3页
524555562面向对象程序设计报告基本图形处理软件课程设计报告_第4页
524555562面向对象程序设计报告基本图形处理软件课程设计报告_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象程序设计报告一设计要求设计圆(包含椭圆)、矩形(包含正方形)、三角形、直线等基本图形类,基于这些基本图形类构造、编辑复杂图形,基本功能包括: 图形的创建:以圆(包含椭圆)、矩形(包含正方形)、三角形、直线等基本图形为元素构建复杂图形。 图形的编辑:增加图形元素(基本图形)、删除图形元素(基本图形) 图形放大、缩小 图形保存二概述 本次程序设计为基于c+的面向对象的程序设计。用c+各种基本图形(例如,圆、矩形、三角形、直线、点等)的类原型,通过继承图形这一个公共基类来实现图形的增删改以及保存等操作。通过此次实习,我对类的相关操作以及类的作用有了更深一步的认识。对面向对象程序设计有了进一步

2、的理解。特别是进一步熟悉并使用面向对象的继承、多态等机制。该系统中,定义了一个鼠标类和窗口类,窗口类又继承了鼠标类,使得所有的操作变得简单明了,代码可移植性也很强。整体操作方式与windows中画图的操作方式相似,而且可以随时更改以前画过的图形,该系统实现了各类基本图形的产生,放大,缩小,删除、移动、改变颜色、改变线型与保存等功能。采用汉字库,实现了中文显示,为该系统的使用者提供了便利。而且界面上操作很方便,可以使用快捷键,可以直接点击鼠标来轻松绘制图片。使用了turboc+编译器,编译器下载地址: 。三主要类说明1各基本图形类的基类:figure该类归纳了各种图形类的共同数据以及共同操作,声

3、明了几个纯虚函数:virtual void show()=0;virtual void hide()=0;virtual void expand(int delta)=0;virtual void save()=0;实现了同一函数在各个不同的图形类中有不同的实现。增大了程序的灵活性。其中show()函数的作用是显示图形,hide()函数是用来隐藏图形,expand()函数是用来放大选中的图形。save()函数将对应图形的相关数据以文件的形式保存。此外,此基类中还包含了一个move_to()函数,该函数实现了图形在选定方向上的移动。包含的数据成员有:整型数据x_pos,y_pos,用来记录坐标。

4、/图形类 基类/class figurepublic:figure(int x,int y,int lstyle,int lcolor);virtual void show()=0;virtual void hide(int bkcolor)=0;virtual void expand(int bkcolor,int delta)=0;virtual void save()=0;void move_to(int bkcolor,int direction,int speed);void contract(int bkcolor,int delta);int color,style;protec

5、ted: int x_pos,y_pos; ;2直线类:myline该类中的数据成员有:整型数据x_pos2,y_pos2用来记录坐标。/直线类/class myline:public figurepublic: myline(int x1,int y1,int x2,int y2,int style,int color); virtual void show(); virtual void hide(int bkcolor); virtual void expand(int bkcolor,int delta); virtual void save(); virtual void move_

6、to(int bkcolor,int direction,int speed); protected: int x_pos2,y_pos2;3三角形类:triangle该类的功能是实现以三角形为对象的各种操作。该系统中只是简单的处理了三角形的绘制,只能画等腰三角形,所以只用了一个私有数据length来记录三角形的腰长。/三角形类/class triangle:public figurepublic: triangle(int x,int y,int length,int style,int color); virtual void show(); virtual void hide(int b

7、kcolor); virtual void expand(int bkcolor,int delte); virtual void save(); protected: int length;4长方形类:rectangle该类的所有函数均由基类继承而来,包含的数据为:受保护整型数据length,width,记录长方形的长和宽。/矩形类/class rectangle:public figurepublic: rectangle(int x,int y,int len,int wid,int style,int color); virtual void show(); virtual void

8、hide(int bkcolor); virtual void expand(int bkcolor,int delta); virtual void save(); protected: int length,width;5椭圆类:ellipse该类的功能是实现以椭圆为对象的各种操作,当然也可以处理圆的操作。自身含有受保护整型数据:lenx,leny,arcstart,arcend。/椭圆类 包括圆/class ellipse:public figurepublic: ellipse(int x,int y,int astart,int aend,int lx,int ly,int styl

9、e,int color); virtual void show(); virtual void hide(int bkcolor); virtual void expand(int bkcolor,int delta); virtual void save(); protected: int lenx,leny; int arcstart,arcend;6. 鼠标类:mouse集成鼠标的基本操作,有初始化,变换形状,显示和隐藏等。/鼠标类定义/class mousepublic: mouse(); int mouseinit(); int mouseread(); void mousemath

10、(); void mouseon(); void mouseoff(); void mousechange(); int mouseinbox(int x1,int y1,int x2,int y2); int mousex,mousey,mousez; int mousekind; / 鼠标是手1还是箭头0 protected: union regs regs; int up1616,down1616; int mouse_draw1616; int pixel_save1616; / 保存被鼠标覆盖的区域颜色 int edgecolor; / 鼠标边缘颜色 int fillcolor; /

11、 鼠标中心颜色;7. 窗口类:window继承了鼠标类,集成了菜单显示及相应处理,显示友好窗口界面。/窗口类定义/class window:public mousepublic: window();void creatwindow(char *text,int x,int y,int length,int width,int color,int type); void inbutton(int x,int y,int len,int hig,int col,int typ); void outbutton(int x,int y,int len,int hig,int col,int typ)

12、; void minbar(int x,int y,int col); void maxbar(int x,int y,int col); void closebar(int x,int y,int col); int windowprocess(); protected: int winx,winy; int winlength,winwidth; int wintype; int menuposion4; char wintext50; char menutext45; static int graphmode;8. 图形列表类:graphlist将所有所作图形都用链表的形式连接起来,对它

13、进行统一的各类操作,例如,移动,保存,放大等等。它还记录当前作图信息,例如当前画图颜色,背景颜色,线条粗细等等。/记录已画图形/template<class graph>class graphlistpublic: graphlist(); void show(); void show(graph *g); void hide(); void hide(graph *g); void move_to(int derection,int step); void move_to(int derection,int step,graph *g); void expand(int delt

14、a); /放大 void expand(int delat,graph *g); void contract(int delta); /缩小 void contract(int delat,graph *g); void save(); void load(); void save(graph *g); void del(); void del(graph *g); void add(graph *g,int gkind); void curnext(); / 将当前作图的指针移到下一个 void shake(); / 图形振动 void hide_process(int x_record,i

15、nt y_record,int xtemp,int ytemp); / 隐藏画图中的多余轨迹 struct node graph *graph; int graphkind; node *next; *head,*curnode; int backgroundcolor; / 当前作图背景颜色 int paintorder; / 当前选中的tools int ispainting; / 是否是画图状态 int paintcolor; / 当前作图颜色 int linestyle; / 当前作图线宽 int paintlen; / 当前窗口长 int paintwide; / 当前窗口宽 int

16、 windowmove; / 当前作图窗口移动方式;四类的关系描述 类的关系描述如图1所示。mylineellipserectangletrianglefigure图1 类的继承关系五使用说明 四个方向键控制单个当前编辑图形的左右上下移动, a,d,w,s键控制所有图形的左右上下移动;+,-控制当前图形 的放大与缩小,b,c控制所有图形的放大缩小; 可以使用 pageup键调整当前编辑图形(会有跳动提示),按home键使当前编辑图形跳至最后所作的图形;delete键和ctrl+z删除当前 的编辑单个图形,ctrl+a键和界面上的“空”按钮删除所有图形;alt+s保存,alt+l导入,esc退出

17、。 使用鼠标点击画布边缘的标记区域,可以改边画布的大小和移动画布的位置,可以点击状态栏的前景与背景颜色框,然后可以修改当前画图颜色和,背景颜色。 其中还有画“贝赛耳曲线”、画点、填充功能没写好,所以屏蔽了这些功能。六程序清单:/程序名: graph.cpp/功 能: 基本图形的处理/作 者: 0501xql qq:527274766 2007.7.8/#include "iostream.h"#include "graphics.h"#include "process.h"#include "stdlib.h"#i

18、nclude "string.h"#include "conio.h"#include "stdio.h"#include "stdio.h"#include "bios.h"#include "math.h"#include "dos.h"#define esc 283#define allleft 29440 /ctrl <-#define allright 29696 /ctrl ->#define alllefta 7777 /'

19、;a'#define allrightd 8292 /'d'#define allupw 4471 /'w'#define alldowns 8051 /'s'#define allbigb 12386 /'b'#define allsmallc 11875 /'c' #define left 19200#define right 19712#define up 18432#define down 20480#define delete 21248#define home 18176#define page

20、up 18688#define big 20011 /'+'#define small 18989 /'-'#define save 7936 /alt s#define load 9728 /alt l#define alldel 7681 /ctrl a#define undo 11290 #define false 0#define ture 1#define ms_lclick 1 / 鼠标按键#define ms_rclick 2#define ms_dclick 3int paintx=80;int painty=50;/-/ 自定义类型/-enum

21、 toolexit,penc,line,bezi,rect,elli,circ,tria,fill,btnsave=11,btnload,erea,cleanall,line1,line3,setbkcolor,setcurcolor;struct position int x,y; int length,wide;tool1+7*2+4+8*2;/-/ 全局变量/-int tools_visible=1; / 默认显示工具按钮int up_setcolor=setcurcolor;/ 默认是设置画线的颜色/-/ 函数声明/-int bezier(float,float);int readyp

22、aint(int,int,int);int getorder(int,int,int);int menuface(int);void filling(int,int,int,int);int triangle(int,int,int);int putiamge(int x_record,int y_record,int xtemp,int ytemp);int outtext(char *string,int x,int y,int color);/文件名: graphclass.hpp/功 能: 图形类的类声明/作 者: 0501xql qq:527274766 2007.7.8/-/ 所有

23、类的声明/-/图形类 基类/class figurepublic:figure(int x,int y,int lstyle,int lcolor);virtual void show()=0;virtual void hide(int bkcolor)=0;virtual void expand(int bkcolor,int delta)=0;virtual void save()=0;void move_to(int bkcolor,int direction,int speed);void contract(int bkcolor,int delta);int color,style;

24、protected: int x_pos,y_pos; ;/直线类/class myline:public figurepublic: myline(int x1,int y1,int x2,int y2,int style,int color); virtual void show(); virtual void hide(int bkcolor); virtual void expand(int bkcolor,int delta); virtual void save(); virtual void move_to(int bkcolor,int direction,int speed)

25、; protected: int x_pos2,y_pos2;/三角形类/class triangle:public figurepublic: triangle(int x,int y,int length,int style,int color); virtual void show(); virtual void hide(int bkcolor); virtual void expand(int bkcolor,int delte); virtual void save(); protected: int length;/矩形类/class rectangle:public figur

26、epublic: rectangle(int x,int y,int len,int wid,int style,int color); virtual void show(); virtual void hide(int bkcolor); virtual void expand(int bkcolor,int delta); virtual void save(); protected: int length,width;/椭圆类 包括圆/class ellipse:public figurepublic: ellipse(int x,int y,int astart,int aend,i

27、nt lx,int ly,int style,int color); virtual void show(); virtual void hide(int bkcolor); virtual void expand(int bkcolor,int delta); virtual void save(); protected: int lenx,leny; int arcstart,arcend;/记录已画图形/template<class graph>class graphlistpublic: graphlist(); void show(); void show(graph *

28、g); void hide(); void hide(graph *g); void move_to(int derection,int step); void move_to(int derection,int step,graph *g); void expand(int delta); /放大 void expand(int delat,graph *g); void contract(int delta); /缩小 void contract(int delat,graph *g); void save(); void load(); void save(graph *g); void

29、 del(); void del(graph *g); void add(graph *g,int gkind); void curnext(); / 将当前作图的指针移到下一个 void shake(); / 图形振动 void hide_process(int x_record,int y_record,int xtemp,int ytemp); / 隐藏画图中的多余轨迹 struct node graph *graph; int graphkind; node *next; *head,*curnode; int backgroundcolor; / 当前作图背景颜色 int paint

30、order; / 当前选中的tools int ispainting; / 是否是画图状态 int paintcolor; / 当前作图颜色 int linestyle; / 当前作图线宽 int paintlen; / 当前窗口长 int paintwide; / 当前窗口宽 int windowmove; / 当前作图窗口移动方式;/graphlist<figure> glist;/鼠标类定义/class mousepublic: mouse(); int mouseinit(); int mouseread(); void mousemath(); void mouseon(

31、); void mouseoff(); void mousechange(); int mouseinbox(int x1,int y1,int x2,int y2); int mousex,mousey,mousez; int mousekind; / 鼠标是手1还是箭头0 protected: union regs regs; int up1616,down1616; int mouse_draw1616; int pixel_save1616; / 保存被鼠标覆盖的区域颜色 int edgecolor; / 鼠标边缘颜色 int fillcolor; / 鼠标中心颜色;/窗口类定义/cl

32、ass window:public mousepublic: window(); void creatwindow(char *text,int x,int y,int length,int width,int color,int type); void inbutton(int x,int y,int len,int hig,int col,int typ); void outbutton(int x,int y,int len,int hig,int col,int typ); void minbar(int x,int y,int col); void maxbar(int x,int

33、y,int col); void closebar(int x,int y,int col); int windowprocess(); protected: int winx,winy; int winlength,winwidth; int wintype;int menuposion4; char wintext50; char menutext45; static int graphmode;wnd;int window:graphmode=0;/文件名: graphclass.cpp/功 能: 图形类的类实现/作 者: 0501xql qq:527274766 2007.7.8/-/

34、 各类图形类的实现/-/#include "graphclass.hpp"figure:figure(int x,int y,int lstyle,int lcolor)x_pos=x;y_pos=y;style=lstyle;color=lcolor;return;void figure:move_to(int bkcolor,int direction,int speed)hide(bkcolor);switch(direction)/避免把图形移动到作图区域外case left:/* if(x_pos>speed)*/x_pos-=speed; break;ca

35、se right:/*if(x_pos+speed<glist.paintlen)*/ x_pos+=speed; break;case up: /*if(y_pos>speed)*/y_pos-=speed; break;case down: /*if(y_pos+speed<glist.paintwide)*/y_pos+=speed; break;default : break;show();return;void figure:contract(int bkcolor,int delta)expand(bkcolor,-delta);/纯虚函数return;/*voi

36、d fill(int x,int y,int fillcolor,int bcolor=0)/ 填充static int xycolor=getpixel(x,y);int c;if(fillcolor>15|fillcolor<0) return; c=getpixel(x,y); /获取当前点的颜色 if(c=xycolor) /如果颜色为边界色则不填充 putpixel(x, y, fillcolor); /画点 fill(fillcolor, color,x, y+1); fill(fillcolor, color,x, y-1); fill(fillcolor, colo

37、r,x+1 ,y); fill(fillcolor, color,x-1 ,y); */-myline:myline(int x1,int y1,int x2,int y2,int style,int color):figure(x1,y1,style,color)x_pos2=x2;y_pos2=y2;return;void myline:show()setcolor(color);setlinestyle(solid_line,1,style);line(x_pos,y_pos,x_pos2,y_pos2);setlinestyle(solid_line,1,1);return;void

38、myline:hide(int bkcolor)setcolor(bkcolor);setlinestyle(solid_line,1,style); line(x_pos,y_pos,x_pos2,y_pos2);setlinestyle(solid_line,1,1);return;void myline:move_to(int bkcolor,int direction,int speed)hide(bkcolor);switch(direction)case left: if(x_pos>speed) x_pos2-=speed;x_pos-=speed;break;case r

39、ight:if(x_pos+speed<glist.paintlen) x_pos2+=speed;x_pos+=speed;break;case up: if(y_pos>speed) y_pos2-=speed;y_pos-=speed;break;case down: if(y_pos+speed<glist.paintwide) y_pos2+=speed;y_pos+=speed;break;default : break;show();return;void myline:expand(int bkcolor,int delta)hide(bkcolor);if(

40、delta>0) y_pos2*=delta;x_pos2*=delta;else if(delta<0) y_pos2/=-delta;x_pos2/=-delta;show();return;void myline:save()file *fp;if(!(fp=fopen("c:paint.dat","a+")cout<<"can't open file 'paint.dat' !"<<endl;return;fprintf(fp,"%-4d t%-4d %-4

41、d %-4d %-4d t%-4d t%-4dn",line,x_pos,y_pos,x_pos2,y_pos2,style,color);fclose(fp);/-ellipse:ellipse(int x,int y,int astart,int aend,int lx,int ly,int style,int color):figure(x,y,style,color)arcstart=astart;arcend=aend;lenx=lx;leny=ly;return;void ellipse:show()setcolor(color);setlinestyle(solid_l

42、ine,1,style);ellipse(x_pos,y_pos,arcstart,arcend,lenx,leny);setlinestyle(solid_line,1,1);return;void ellipse:hide(int bkcolor)setcolor(bkcolor);setlinestyle(solid_line,1,style);ellipse(x_pos,y_pos,arcstart,arcend,lenx,leny);setlinestyle(solid_line,1,1);return;void ellipse:expand(int bkcolor,int delt

43、a)hide(bkcolor);if(delta>0 && lenx*delta<glist.paintlen && leny*delta<glist.paintwide) lenx*=delta;leny*=delta; else if(delta<0 && lenx/delta && leny/delta) lenx/=-delta;leny/=-delta; show();return;void ellipse:save()file *fp;if(!(fp=fopen("c:paint.da

44、t","a+")cout<<"can't open file 'paint.dat' !"<<endl;return;fprintf(fp,"%-4d t%-4d %-4d %-4d %-4d t%-4d t%-4dn",elli,x_pos,y_pos,lenx,leny,style,color);fclose(fp);/-rectangle:rectangle(int x,int y,int len,int wid,int style,int color):figure(x

45、,y,style,color)length=len;width=wid;return;void rectangle:show()setcolor(color);setlinestyle(solid_line,1,style);rectangle(x_pos,y_pos,x_pos+length,y_pos+width);setlinestyle(solid_line,1,1);return;void rectangle:hide(int bkcolor)setcolor(bkcolor);setlinestyle(solid_line,1,style);rectangle(x_pos,y_po

46、s,x_pos+length,y_pos+width);setlinestyle(solid_line,1,1);return;void rectangle:expand(int bkcolor,int delta)hide(bkcolor);if(delta>0 && length*delta<glist.paintlen && width*delta<glist.paintwide)length*=delta; width*=delta;else if(delta<0 && length/delta && width/delta)length/=-delta;width/=-delta;show();return;void rectangle:save()file *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论