#include <iostream>
#include <fstream>
#include <string.h>
#include <iomanip>
#include <math.h>
using namespace std;
//p288 输入输出流 三角形 2020.03.04 todo debug
class Triangle{
double x,y,z,area;
public:
Triangle(){}
void getArea(){
double p = (x+y+z)*0.5;
area = sqrt(p*(p-x)*(p-y)*(p-z));
}
void dispa(){
cout<<" 三角形三边"<<x<<","<<y<<","<<z<<",面积为:"<<area<<endl;
}
friend void setdata();
friend void readdata();
};
void setdata(){
Triangle t;
double a,b,c;
int n=0;
char *filename = "trig.dat";
fstream iofile;
iofile.open(filename,ios::in|ios::out);
if(!iofile){
cout<<"不能正确建立文件!"<<endl;
return;
}
while(1){
cout<<" 输入一个三角形"<<endl;
cout<<" 三角形边a:";
cin>>a;
if(a==-1) break;
cout<<" 三角形边b:";
cin>>b;
cout<<" 三角形边c:";
cin>>c;
if(a>0 && b>0 &&c>0 && a+b>c && a+c>b && b+c>a){
t.x = a;
t.y = b;
t.z = c;
t.getArea();
n++;
iofile.write((char *)&t, sizeof(t));
}else cout<<"不能组成三角形,重新输入"<<endl;
}
iofile.close();
cout<<"一共写入"<<n<<"个三角形信息"<<endl;
}
void readdata(){
Triangle t;
char *filename = "trig.dat";
fstream iofile;
iofile.open(filename,ios::in|ios::out);
cout<<"读数据"<<endl;
if(!iofile){
cout<<" 不能打开指定的文件!"<<endl;
return ;
}
iofile.seekg(0,ios::beg);
while (!iofile.eof()){
iofile.read((char *)&t,sizeof(t));
if(iofile.eof()) break;
t.dispa();
}
iofile.close();
}
int main(){
cout<<"输入若干个三角形存入文件"<<endl;
setdata();
cout<<"从文件中读出三角形"<<endl;
readdata();
return 0;
}