> # ♻️ 资源
> **大小:** 534kB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010121**](https://www.yuque.com/sxbn/ks/100010121)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87357261**](https://download.csdn.net/download/s1t16/87357261)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# 平面上的形状编辑
## 一、设计目的:
实现一个平面上的形状编辑程序。
## 二、程序功能简介:
1. 按照下图给出的层次关系来定义类。
![0437f7d6615973653cd93f244ca46ce0.PNG](https://cdn.nlark.com/yuque/0/2023/png/2469055/1703475677721-f0e6d9b5-faa2-4adc-b6fd-19829dc8359b.png#averageHue=%23fbfbfb&clientId=u63d3bdb4-4543-4&from=paste&height=186&id=u83536c57&originHeight=232&originWidth=838&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=43798&status=done&style=none&taskId=ufec9ca97-06fa-49e9-99b3-61a4ba1212a&title=&width=670.4)
2.所有形状支持无参数构造,有参数构造,拷贝构造,析构。
3.所有形状支持平移操作,需要重载 operator+。
4.所有形状(除去无意义的),均支持计算周长。
5.所有形状(除去无意义的),均支持 Draw()操作,此时只要显示形状的名 称,位置等信息。
6.需要实现一个 CShapeArray 类,该类类似一个数组,用来存放编辑过程中的 平面形状。该类需要支持:添加,插入,删除,查询,复制等操作。可以支持形 状编辑中需要的针对形状的操作。
7.主程序中实现用户输入形状及其参数,然后把形状存入 6 中定义的 CShapeArray。在输入形状的同时,用户可以查询当前已经输入的形状(可按名 称(需要对每个平面形状加入名称),位置来查询)。支持用户对形状的复制,粘 贴(粘贴时假设用户指定粘贴的位置)。同时支持用户对形状的删除操作。
8.输入和处理好的形状可以存入文件,并从文件中读入。
9.支持对当前所有形状的 Draw()。
## 三、详细介绍:
### 1、关于程序使用的代码风格
本程序使用 Visual Studio 2010 编写,并按照规范风格,将类、函数、变量的声明、 其他头文件的引用等写在头文件(*.h 文件)中,并使用头文件保护符(#pragma once)保护以免重复编译,具体函数的定义等则写在对应的源文件中。函数的注 释说明写在头文件函数声明处,函数内部具体代码说明写在源文件代码处。
### 2、程序中类的声明
本程序定义了以下几个类(其中由于 CPoint 为 VS 中的保留类名,改用 CCPoint):
```cpp
class CShape;
class CCircle : public CShape;
class CCPoint : public CShape;
class CLine : public CShape;
class CRectangle : public CShape;
class CPolygon : public CShape;
class CTriangle : public CPolygon;
class CShapeArray;
```
基类 CShape 定义如下,其中函数
```cpp
virtual void Draw(void);
virtual void Calc(void);
virtual void saveToFile(ofstream&);
virtual CShape& loadFromFile(ifstream&);
virtual int exist();
```
为虚函数,具体根据继承的子类不同而有不同定义,体现了 C++ 的多态性;变量 const static int SHAPE_CIRCLE 等用于区分不同子类的具体类型,用于全局函 数 loadFromFile()从文件加载形状信息。
```cpp
class CShape {
public: const static int SHAPE_CIRCLE = 1;
const static int SHAPE_POINT = 2;
const static int SHAPE_LINE = 3;
const static int SHAPE_POLYGON = 4;
const static int SHAPE_RECTANGLE = 5;
const static int SHAPE_TRIANGLE = 6;
// 无参数构造
CShape(void);
// 有参数构造
CShape(char * );
// 析构函数
~CShape(void);
// 拷贝构造
CShape(const CShape & );
// 获取名称
char * getName();
// 显示名称等信息,使用虚函数
virtual void Draw(void);
// 计算并显示周长,使用虚函数
virtual void Calc(void);
// 保存至文件
virtual void saveToFile(ofstream & );
// 从文件读取
virtual CShape & loadFromFile(ifstream & );
// 判断形状是否存在
virtual int exist()
protected:
// 图形的名称 char* name; int shape;
};
```
子类 CCircle, CCPoint, CLine, CRectangle, CPolygon 继承于基类 CShape,类 CTriangle 继承于类 CPolygon,分别表示具体的形状,并分别定义了各自的 Draw(),Calc(), saveToFile,loadFromFile 等函数。
类 CShapeArray 用于存放编辑过程中的平面形状,支持:添加,插入,删除,查 询,复制等操作。使用 vector<CShape*> vec 来保存添加进的 CShape 对象的指针。 其定义如下:
```cpp
class CShapeArray {
public: CShapeArray(void);~CShapeArray(void);
// 添加
void add(CShape * );
// 插入
void insert(int, CShape);
// 删除
void del(int);
// 清除全部
void clear(void);
// 查询
CShape * get(int);
// 复制
void copy(int, int);
// 显示所有元素
void drawAll(void);
// 获取元素数目
int getSize(void);
// 根据名称查询
int findByName(char * );
private: vector < CShape * >vec;
};
```
### 3、全局变量及全局函数
```cpp
/**********************全局变量声明**********************/
// 保存到的文件名
const static char *fname = "D:\\dat.txt";
// CShapeArray 对象
CShapeArray arr;
// 记录要复制的形状所在位置
int copyPos = -1;
/************************函数声明************************/
// 输入数字进行选择
int input(char *, int);
// 清屏
void clr();
// 暂停
void pause();
// 选择操作
void inputOp();
// 选择形状
void inputShape();
// 查询
void inputQuery();
// 输入位置查询
void inputPos();
// 输入名称查询
void inputName();
// 复制
void inputCopy();
// 粘贴
void inputPaste();
// 删除
void inputDel();
// 保存至文件
void saveToFile();
// 从文件读取
void loadFromFile();
// 输入矩形
CRectangle* inputRectangle();
// 输入圆形
CCircle* inputCircle();
// 输入多边形
CPolygon* inputPolygon();
// 输入三角形
CTriangle* inputTriangle();
// 输入点
CCPoint* inputPoint();
// 输入直线
CLine* inputLine();
```
### 4、程序的使用
程序启动即进入功能选择主菜单。用户通过输入数字并按回车进行功能的选择,如果用户输入的不是数字,或数字超出了输入范围,则提示输入错误需要重 新输入(该功能由 input 函数实现)。
添加形状时,根据用户选择的形状不同,要求输入的参数也不同,如果输入 的参数能构成相应形状(如三角形两边之和要大于第三边,此功能由 exist 函数 实现),则添加该形状至对象 CShapeArray arr 中,否则提示错误而不保存。输入形状的名称时,支持输入中英文,并可包含空格。
### 5、程序的稳定性
本程序能自动纠正部分用户输入错误,以及从文件读取时发生的错误,并给出相应提示信息。
![d9248f531cad0be3d1d830c885551f82.PNG](https://cdn.nlark.com/yuque/0/2023/png/2469055/1703475751515-fbfdfe86-8076-4e12-acbf-03b0f90e379f.png#averageHue=%23060606&clientId=u63d3bdb4-4543-4&from=paste&height=434&id=u75f44078&originHeight=543&originWidth=831&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=1808474&status=done&style=none&taskId=u7e9019de-5658-4ccf-8b45-4868550b9c8&title=&width=664.8)
### 6、运行结果
启动后提示输入数字选择操作:
选择操作输入形状,选择要输入的形状为圆形:
![d5711cc3fca22e11de98f8828fea2fe9.PNG](https://cdn.nlark.com/yuque/0/2023/png/246905
没有合适的资源?快使用搜索试试~ 我知道了~
基于C++实现一个平面上的形状编辑程序【100010121】
共27个文件
cpp:9个
h:9个
pdf:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 56 浏览量
2023-01-01
17:40:52
上传
评论
收藏 535KB ZIP 举报
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010121 1.按照下图给出的层次关系来定义类。 2.所有形状支持无参数构造,有参数构造,拷贝构造,析构。 3.所有形状支持平移操作,需要重载 operator+。 4.所有形状(除去无意义的),均支持计算周长。 5.所有形状(除去无意义的),均支持 Draw()操作,此时只要显示形状的名 称,位置等信息。 6.需要实现一个 CShapeArray 类,该类类似一个数组,用来存放编辑过程中的 平面形状。该类需要支持:添加,插入,删除,查询,复制等操作。可以支持形 状编辑中需要的针对形状的操作。 7.主程序中实现用户输入形状及其参数,然后把形状存入 6 中定义的 CShapeArray。在输入形状的同时,用户可以查询当前已经输入的形状(可按名 称(需要对每个平面形状加入名称),位置来查询)。支持用户对形状的复制,粘 贴(粘贴时假设用户指定粘贴的位置)。同时支持用户对形状的删除操作。 8.输入和处理好的形状可以存入文件,并从文件中读入。 9.支持对当前所有形状的 Draw()。
资源推荐
资源详情
资源评论
收起资源包目录
100010121-基于C++实现一个平面上的形状编辑程序.zip (27个子文件)
xzbj
C++程序设计作业报告.pdf 469KB
LICENSE 1KB
homework
homework.suo 33KB
homework.sln 871B
homework
homework.vcxproj.filters 2KB
Line.h 495B
Shape.h 815B
Line.cpp 1KB
ShapeArray.h 469B
Circle.cpp 1KB
homework.cpp 7KB
Polygon.cpp 3KB
CPoint.cpp 975B
Rectangle.h 568B
Shape.cpp 676B
ShapeArray.cpp 1KB
homework.h 1KB
homework.vcxproj 4KB
Triangle.cpp 2KB
Circle.h 544B
Triangle.h 559B
Polygon.h 541B
homework.vcxproj.user 141B
CPoint.h 502B
Rectangle.cpp 1KB
2012期末大作业.pdf 125KB
README.md 14KB
共 27 条
- 1
资源评论
神仙别闹
- 粉丝: 4133
- 资源: 7483
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功