源程序:
#include < iostream >
#include < fstream >
#include < cmath >
#include < vector >
#include < iomanip >
#include < string >
using namespace std;
class Triangle //建立三角形類
{
private:
double sizeA, sizeB, sizeC, area; //三條邊、面積
public:
Triangle(double a = 0, double b = 0, double c = 0) //帶默認參數的構造函數
{
sizeA = a;
sizeB = b;
sizeC = c;
double p = (sizeA + sizeB + sizeC) *0.5;
area = sqrt(p * (p - sizeA) * (p - sizeB) * (p - sizeC));
}
void set_Tri(double a, double b, double c) //為三條邊賦值的函數
{
sizeA = a;
sizeB = b;
sizeC = c;
double p = (sizeA + sizeB + sizeC) *0.5;
area = sqrt(p * (p - sizeA) * (p - sizeB) * (p - sizeC));
}
void set(vector<Triangle> &); //用於輸入邊長並判斷是否合理,最后存入文件
};
//***************************************
//* 成員函數:set
//* 參 數:向量對象的引用
//* 返 回 值:無
//* 功 能:為向量賦值並將向量存入文件
//***************************************
void Triangle::set(vector<Triangle> &v) //向量的類型為Triangle
{
Triangle Tri;
double a, b, c;
while (1)
{
cout << "三角形,邊A:";
cin >> a;
if (a == -1)//a的長度輸入-1作為結束符
{
ofstream writeFile;
char fileName[20];
cout << "輸入要保存到的文件名(加后綴'.txt'):";
cin >> fileName; //輸入文件名的時候加入文件名后綴“****.txt”
cout << "保存到文件:" << fileName << endl;
writeFile.open(fileName);
if (writeFile.fail())
{
cout << "沒有正確建立文件!" << endl;
return;
}
for (int i = 0; i < v.size(); i++)
{
writeFile << "第" << i + 1 << "個三角形: ";
writeFile << v[i].sizeA << " " << v[i].sizeB << " " << v[i].sizeC << " " << v[i].area << endl;
}
writeFile.close();
cout << "一共寫入" << v.size() << "個三角形信息" << endl;
return;
}
cout << "三角形,邊B:";
cin >> b;
cout << "三角形,邊C:";
cin >> c;
if (a>0 && b>0 && c>0 && ((a + b)>c) && ((a + c)>b) && ((b + c)>a)) //任意兩邊之和應大於第三邊
{
Tri.set_Tri(a, b, c);
v.push_back(Tri);
}
else
cout << "不能組成三角形,重新輸入" << endl;
}
}
void main()
{
vector<Triangle> v_tri;
Triangle tri;
tri.set(v_tri);
}
運行結果: