图形工厂 课程设计报告正文.docx

上传人:b****6 文档编号:7959281 上传时间:2023-01-27 格式:DOCX 页数:23 大小:285.41KB
下载 相关 举报
图形工厂 课程设计报告正文.docx_第1页
第1页 / 共23页
图形工厂 课程设计报告正文.docx_第2页
第2页 / 共23页
图形工厂 课程设计报告正文.docx_第3页
第3页 / 共23页
图形工厂 课程设计报告正文.docx_第4页
第4页 / 共23页
图形工厂 课程设计报告正文.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

图形工厂 课程设计报告正文.docx

《图形工厂 课程设计报告正文.docx》由会员分享,可在线阅读,更多相关《图形工厂 课程设计报告正文.docx(23页珍藏版)》请在冰豆网上搜索。

图形工厂 课程设计报告正文.docx

图形工厂课程设计报告正文

目录

1前言2

2需求分析2

2.1任务和要求2

2.2运行环境2

2.3开发工具2

3分析和设计3

3.1系统分析及设计思路3

3.2主要类图4

3.3函数流程图5

4具体代码实现6

5课程设计总结6

5.1程序运行结果或预期运行结果17

5.2设计结论22

参考文献22

致谢23

1前言

工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。

为什么工厂模式是如此常用?

因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如Aa=newA()工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。

2需求分析

2.1任务和要求

设计一个使用空格和星号绘制图形的工厂,该工厂可以根据用户选择绘制不同的图形(如矩形、三角形、菱形、平行四边形、梯形等)。

具体要求:

(1)至少能够绘制6种以上的图形。

(2)可以绘制的图形名称保存在文本文件中。

(3)根据用户选择设置图形参数绘制图形,并记录绘制了的图形的个数。

(4)显示已经绘制的图形的总数。

2.2运行环境

(1)WINDOWS2000/XP系统

(2)VisualC++6.0编译环境或DEVC++5.0编译环境

2.3开发工具

C++语言

3分析和设计

3.1系统分析及设计思路

系统要求设计一个使用空格和星号绘制图形的工厂,该工厂可以根据用户选择绘制至少6种以上不同的图形(如矩形、三角形、菱形、平行四边形、梯形等)。

把可以绘制的图形名称保存在文本文件中,并实现根据用户选择设置图形参数绘制图形,并记录和显示绘制了的图形的个数。

利用文件流的打开、关闭及使用方法实现:

把可以绘制的图形名称保存在文本文件中并显示在运行屏幕上。

定义文件类infile类读取保存可以绘制的图形名称在文本文件shapeFactory.txt。

利用工厂模式的设计模式定义ShapeFactory工厂类,并定义抽象基类BaseShape类和7个具体图形派生类:

直线Line(),梯形Echelon(),直角三角形RightTriangle(),等边三角形EquilateralTriangle(),矩形Rectangle(),正方形Square(),菱形Diamond(),构造绘制图形函数DrawShape()并调用,实现根据用户选择绘制图形。

 

3.2主要类图

工厂类:

ShapeFactory类;

抽象类:

BaseShape类;

具体类:

直线Line类,梯形Echelon类,直角三角形RightTriangle类, 等边三角形EquilateraTriangle类,矩形Rectangle类,正方形Square类,菱形Diamond类。

 

图3.1图形工厂类图

 

3.3函数流程图

Draw函数和SelectShape函数流程图如下图3.2函数流程图

 

 

图3.2函数流程图

4具体代码实现

源程序代码如下:

//BaseShape.h文件

#include

usingnamespacestd;

classBaseShape{

public:

BaseShape(){};

virtual~BaseShape(){};

virtualvoidDrawShape()=0;

};

//*********************************

//ShapeFactory.h文件

#include

#include

#include"Echelon.h"

#include"Line.h"

#include"EquilateralTriangle.h"

#include"RightTriangle.h"

#include"Rectangle.h"

#include"Square.h"

#include"Diamond.h"

#include"BaseShape.h"

//定义工厂类

classShapeFactory{

public:

ShapeFactory();

~ShapeFactory();

//BaseShape*SelectShape(string);

BaseShape*SelectShape(stringshape){

if(shape=="Line"||shape=="线")returnnewLine();

if(shape=="RightTriangle"||shape=="直角三角形")returnnewRightTriangle();

if(shape=="EquilateralTriangle"||shape=="等边三角形")returnnewEquilateralTriangle();

if(shape=="Rectangle"||shape=="矩形")returnnewRectangle();

if(shape=="Square"||shape=="正方形")returnnewSquare();

if(shape=="Diamond"||shape=="菱形")returnnewDiamond();

if(shape=="Echelon"||shape=="梯形")returnnewEchelon();

elsecout<<"输入的图形名称错误!

"<

}

};

//ShapeFactory.cpp文件

#include"ShapeFactory.h"

ShapeFactory:

:

ShapeFactory(void)

{ }

ShapeFactory:

:

~ShapeFactory(void)

{ }

//********************************************

//Line.h文件

///////////////////直线Line/////////////////////

#include"BaseShape.h"

classLine:

publicBaseShape{

private:

intn;

staticintL;

public:

Line(){};

virtual~Line(){};

//构造函数成员初始化列表,构造函数之后,函数体之前。

Line(intn):

n(n){}

//覆盖抽象类的纯虚函数

virtualvoidDrawShape();

};

//Line.cpp文件

#include"Line.h"

//绘制直线

voidLine:

:

DrawShape(){

intn;

staticintL;

cout<<"请选择直线长度:

"<

cin>>n;

for(inti=0;i

cout<<"*";

}

L++;

cout<

}

//********************************************

//Echelon.h文件

///////////////////梯形Echelon/////////////////////

#include"BaseShape.h"

classEchelon:

publicBaseShape{

private:

intupside,downside;

staticintE;

public:

Echelon(){};

virtual~Echelon(){};

Echelon(intupside,intdownside)

:

upside(upside),downside(downside){}

virtualvoidDrawShape();

};

//Echelon.cpp文件

//绘制梯形

voidEchelon:

:

DrawShape(){

intupside,downside;

staticintE;

cout<<"请选择输入要组成梯形的上底、下底:

";

cin>>upside>>downside;

for(inti=upside;i

for(intj=downside-i;j>0;j--)

{cout<<"";}

for(intk=1;k<=i+2;k++)

{cout<<"*";}

cout<

}

E++;

cout<

}

//*********************************************

//Diamond.h文件

///////////////////菱形Diamond/////////////////////

#include"BaseShape.h"

classDiamond:

publicBaseShape{

private:

intn;

staticintD;

public:

Diamond(){};

virtual~Diamond(){};

//构造函数成员初始化列表,构造函数之后,函数体之前。

Diamond(intn):

n(n){}

//覆盖抽象类的纯虚函数

virtualvoidDrawShape();

};

//Diamond.cpp文件

#include"Diamond.h"

//绘制菱形

voidDiamond:

:

DrawShape(){

intn;

staticintD;

cout<<"要得到的菱形的边长大小:

"<

cin>>n;

////////////上三角//////////

for(inti=1;i<=n;++i){

for(intj=1;j<=n-i;++j)

cout<<"";

for(j=1;j<=i;++j)

cout<<"*";

cout<

}

//////////下三角///////////

for(i=n;i>=1;--i){

for(intj=1;j<=n-i;++j)

cout<<"";

for(j=1;j<=i;++j)

cout<<"*";

cout<

}

D++;

cout<

}

//*********************************************

//EquilateralTriangle.h文件

////////////////等边三角形EquilateralTriangle//////////////////

#include"BaseShape.h"

classEquilateralTriangle:

publicBaseShape{

private:

intn;

staticintET;

public:

EquilateralTriangle(){};

virtual~EquilateralTriangle(){};

//构造函数成员初始化列表,构造函数之后,函数体之前。

EquilateralTriangle(intn):

n(n){}

//覆盖抽象类的纯虚函数

virtualvoidDrawShape();

};

//EquilateralTriangle.cpp文件.

#include"EquilateralTriangle.h"

//绘制等边三角形

voidEquilateralTriangle:

:

DrawShape(){

intn;

staticintET;

cout<<"请选择输入要组成等边三角形的行数n(n>2):

";

cin>>n;

for(inti=1;i

//控制每行星号个数

for(intj=n-i;j>=0;j--)

{cout<<"";}

for(intk=1;k<=2*i-1;k++)

{cout<<"*";}

cout<

}

ET++;

cout<

}

//*********************************************

//Rectangle.h文件

///////////////////矩形Rectangle/////////////////////

#include"BaseShape.h"

classRectangle:

publicBaseShape{

private:

intwidth,height;

staticintR;

public:

Rectangle(){};

virtual~Rectangle(){};

Rectangle(intwidth,intheight):

width(width),height(height){}

virtualvoidDrawShape();

};

//Rectangle.cpp文件

#include"Rectangle.h"

//绘制矩形

voidRectangle:

:

DrawShape(){

intwidth,height;

staticintR;

cout<<"请选择输入矩形的长和宽:

 ";

cin>>width>>height;

cout<

for(inti=1;i<=height;i++){

if(i==1||i==height){//输出长,即第一行和最后一行星号

for(intj=1;j<=width;j++)

cout<<"*";

cout<

}

else{

cout<<"*";

for(intj=2;j<=2*(width-2)+2;j++)//其中2*(side-2)+2为宽除星号外的空格数

cout<<"";

cout<<"*"<

}

}

R++;

cout<

}

//*********************************************

//RightTriangle.h文件

///////////////////直角三角形RightTriangle/////////////////////

#include"BaseShape.h"

classRightTriangle:

publicBaseShape{

private:

intn;

staticintRT;

public:

RightTriangle(){};

virtual~RightTriangle(){};

//构造函数成员初始化列表,构造函数之后,函数体之前。

RightTriangle(intn):

n(n){}

//覆盖抽象类的纯虚函数

virtualvoidDrawShape();

};

//RightTriangle.cpp文件

#include"RightTriangle.h"

//绘制直角三角形

voidRightTriangle:

:

DrawShape(){

intn;

staticintRT;

cout<<"请选择输入要组成直角三角形的行数n(n>2):

";

cin>>n;

for(inti=0;i

for(intj=1;j<=i+1;j++)//控制每行星号个数

{cout<<"*";}

cout<

}

RT++;

cout<

}

//*********************************************

//Square.h文件

///////////////////正方形Square/////////////////////

#include"BaseShape.h"

classSquare:

publicBaseShape{

private:

intside;

staticints;

public:

Square(){};

virtual~Square(){};

Square(intside):

side(side){}

virtualvoidDrawShape();

};

//Square.cpp文件

#include"Square.h"

//绘制正方形

voidSquare:

:

DrawShape(){

staticints;

intside;

cout<<"请选择输入正方形的边长:

 ";

cin>>side;

cout<

for(inti=1;i<=side;i++){

if(i==1||i==side){//输出长,即第一行和最后一行星号

for(intj=1;j<=side;j++)

cout<<"*";

cout<

}

else{

cout<<"*";

for(intj=2;j<=2*(side-2)+2;j++)//其中2*(side-2)+2为宽除星号外的空格数

cout<<"";

cout<<"*"<

}

}

s++;

cout<

}

 

//*********************************************

/*

设计一个使用空格和星号绘制图形的工厂,该工厂可以根据用户选择绘制不同的图形(如矩形?

三角形?

菱形?

平行四边形?

梯形等)?

具体要求:

(1)至少能够绘制6种以上的图形?

(2)可以绘制的图形名称保存在文本文件中?

(3)根据用户选择设置图形参数绘制图形,并记录绘制了的图形的个数?

(4)显示已经绘制的图形的总数?

*/

#include

#include

#include

#include"Echelon.h"

#include"Line.h"

#include"EquilateralTriangle.h"

#include"RightTriangle.h"

#include"Rectangle.h"

#include"Square.h"

#include"Diamond.h"

#include"BaseShape.h"

#include"ShapeFactory.h"

#include

usingnamespacestd;

intmain(){

/*

读infile类的文件ShapeFactoryFile.txt中可绘制的图形并为每行加上"行号-",输出到运行屏幕上。

*/

ifstreaminfile("ShapeFactoryFile.txt");

if(!

infile){//检验文件是否成功打开

cout<<"sorry!

UnabletoopenShapeFactoryFile."<

return-1;

}

stringline;

vectortext;

while(getline(infile,line)){

text.push_back(line);

}

for(intj=0;j

cout<

cout<

//定义工厂对象、基类指针

ShapeFactoryfactory;

BaseShape*pBaseShape;

stringshape;

intt=0;

while(true){

cout<<"请输入图形(英文或中文)名称(以#为结束程序):

";

cin>>shape;

if(shape=="#")break;

BaseShape*pBaseShape=factory.SelectShape(shape);//选择具体类

pBaseShape->DrawShape();//调用具体类的画法

deletepBa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1