图形管理系统,根据图形类派生出多种图形,计算每种图形的周长和面积。

头文件stdfax.h
#ifndef STDFAX__H__INCLUDED
#define STDFAX__H__INCLUDED
#pragma once
#include <iostream>
#include <cmath>
using namespace std;
#endif // !STDFAX__H__INCLUDED
头文件figure.h
#ifndef FIGURE__H__INCLUDE
#define FIGURE__H__INCLUDE
#pragma once
#include "stdfax.h"
#define pai 3.14159
//平面图形类
class shape
{
//分别定义周长和面积的虚函数
virtual double calZc() = 0;
virtual double calArea() = 0;
};
//矩形类
class rectangle :public shape
{
public:
double length, width;
//获取矩形的长度与宽度
void getData()
{
cout << "请分别输入矩形的长度和宽度:";
cin >> length >> width;
}
//求矩形的周长
double calZc()
{
double Zc;
Zc = 2 * (length + width);
return Zc;
}
//求矩形的面积
double calArea()
{
double Area;
Area = length * width;
return Area;
}
};
//圆形类
class circle :public shape
{
public:
double r;
//获取圆的半径
void getData()
{
cout << "请输入圆的半径:";
cin >> r;
}
//求圆的周长
double calZc()
{
double Zc;
Zc= 2 * pai * r;
return Zc;
}
//求圆的面积
double calArea()
{
double Area;
Area = pai * r * r;
return Area;
}
};
//椭圆类
class oval :public shape
{
public:
double a, b;
//获取椭圆的长半轴与短半轴
void getData()
{
cout << "请分别输入椭圆的长半轴长与短半轴长:";
cin >> a >> b;
}
//求椭圆的周长
double calZc()
{
double Zc;
Zc = 2 * pai * b + 4 * (a - b);
return Zc;
}
//求椭圆的面积
double calArea()
{
double Area;
Area = pai * a * b;
return Area;
}
};
//三角形类
class triangle :public shape
{
public:
double a, b, c;
void getData()
{
cout << "请分别输入三角形三条边的长: ";
cin >> a >> b >> c;
}
//求三角形的周长
double calZc()
{
double Zc;
Zc = a + b + c;
return Zc;
}
//求三角形的面积
double calArea()
{
double Area, p;
p = (a + b + c) / 2;
Area = 1 / 4 * sqrt(p * (p - a) * (p - b) * (p - c));
return Area;
}
};
//正五边形类
class pentagon :public shape
{
public:
double a;
void getData()
{
cout << "请输入正五边形的边长: ";
cin >> a;
}
//求正五边形的周长
double calZc()
{
double Zc;
Zc = 5 * a;
return Zc;
}
//求正五边形的面积
double calArea()
{
double Area;
Area = 1.72048 * a * a;
return Area;
}
};
int N=100000;
string* ptr = new string[N];
double* ptrZc = new double[N];
double* ptrArea = new double[N];
//创建任意多个对象
void inputData()
{
cout << "请输入图形的个数:";
cin >> N;
for (int i = 0;i < N;++i)
{
cout << "请输入这一个图形的名称(在rectangl,circle"<<
",oval,triangle和pentagon中选择): ";
cin >> ptr[i];
}
}
//算出每个对象的周长和面积以及所有图形的面积(周长)的和
void sum()
{
double sumSz=0, sumArea=0;
for (int i = 0; i < N; ++i)
{
if (ptr[i] == "rectangle")
{
rectangle obj;
obj.getData();
sumSz += obj.calZc();
sumArea += obj.calArea();
ptrZc[i] = obj.calZc();
ptrArea[i] = obj.calArea();
cout << "第" << i + 1 << "个图形的周长为" << obj.calZc() << endl;
cout << "第" << i + 1 << "个图形的面积为" << obj.calArea() << endl;
break;
}
if (ptr[i] == "circle")
{
circle obj;
obj.getData();
sumSz += obj.calZc();
sumArea += obj.calArea();
ptrZc[i] = obj.calZc();
ptrArea[i] = obj.calArea();
cout << "第" << i + 1 << "个图形的周长为" << obj.calZc() << endl;
cout << "第" << i + 1 << "个图形的面积为" << obj.calArea() << endl;
}
if (ptr[i] == "oval")
{
oval obj;
obj.getData();
sumSz += obj.calZc();
sumArea += obj.calArea();
ptrZc[i] = obj.calZc();
ptrArea[i] = obj.calArea();
cout << "第" << i + 1 << "个图形的周长为" << obj.calZc() << endl;
cout << "第" << i + 1 << "个图形的面积为" << obj.calArea() << endl;
}
if (ptr[i] == "triangle")
{
triangle obj;
obj.getData();
sumSz += obj.calZc();
sumArea += obj.calArea();
ptrZc[i] = obj.calZc();
ptrArea[i] = obj.calArea();
cout << "第" << i + 1 << "个图形的周长为" << obj.calZc() << endl;
cout << "第" << i + 1 << "个图形的面积为" << obj.calArea() << endl;
}
if (ptr[i] == "pentagon")
{
pentagon obj;
obj.getData();
sumSz += obj.calZc();
sumArea += obj.calArea();
ptrZc[i] = obj.calZc();
ptrArea[i] = obj.calArea();
cout << "第" << i + 1 << "个图形的周长为" << obj.calZc() << endl;
cout << "第" << i + 1 << "个图形的面积为" << obj.calArea() << endl;
}
}
cout << "这" << N << "个图形的周长之和为:" << sumSz << endl;
cout << "这" << N << "个图形的面积之和为:" << sumArea << endl;
}
//指出第n个图形算出周长和面积
void oneResult()
{
int n;
cout << "请问你想要第几个图形的周长和面积:" << endl;
cin >> n;
cout << "第" << n << "个图形的周长为" << ptrZc[n-1] << endl;
cout << "第" << n << "个图形的面积为" << ptrArea[n-1] << endl;
}
//每当用户输入不同的图形时就执行不同的处理
void output()
{
int n;
cout << "请输入图形的总个数N:" << endl;
for (int i = 0;i < n;++i)
{
int name;
double sumZc = 0, sumArea = 0;
cout << "1(矩形),2(圆形),3(椭圆),4(三角), 5(正五边形)" << endl;
cout << "请输入第" << i + 1 << "个图形的名称:" << endl;
cin >> name;
switch (name)
{
case 5:
pentagon obj;
obj.getData();
cout << "周长=" << obj.calZc() << " 面积=" << obj.calArea();
sumZc += obj.calZc();
sumArea += obj.calArea();
break;
case 4:
triangle obj;
obj.getData();
cout << "周长=" << obj.calZc() << " 面积=" << obj.calArea();
sumZc += obj.calZc();
sumArea += obj.calArea();
break;
case 3:
oval obj;
obj.getData();
cout << "周长=" << obj.calZc() << " 面积=" << obj.calArea();
sumZc += obj.calZc();
sumArea += obj.calArea();
break;
case 2:
circle obj;
obj.getData();
cout << "周长=" << obj.calZc() << " 面积=" << obj.calArea();
sumZc += obj.calZc();
sumArea += obj.calArea();
break;
default:
rectangle obj;
obj.getData();
cout << "周长=" << obj.calZc() << " 面积=" << obj.calArea();
sumZc += obj.calZc();
sumArea += obj.calArea();
break;
}
cout << "这" << n << "个图形的周长之和为" << sumZc << endl;
cout << "这" << n << "个图形的面积之和为" << sumArea << endl;
}
}
#endif // !FIGURE__H__INCLUDE
源文件main.cpp
#include "stdfax.h"
#include "figure.h"
int main(){
//获取用户输入
inputData();
//N个对象的总面积和总周长
sum();
//指定图形的面积和周长
oneResult();
return 0;
}