#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
struct date
{
int Umiditatea;
int CodZien;
float Temperatura;
float VitezaVint;
char DirVint[3];
}zi[30];
void RewriteFile();
void ReadDate();
void NewInfo();
void DelLine();
void TempMed();
void Atributes();
void TempMin();
void VintMax();
void DirVintDes();
void NewFile();
int n = 0;
int i = 0;
void ReadDate()
{
ifstream in("File_meteo.txt");
while (!in.eof())
{
in >> zi[i].CodZien
>> zi[i].Temperatura
>> zi[i].Umiditatea
>> zi[i].DirVint
>> zi[i].VitezaVint;
if (!in.eof())
i++;
}
n = i;
in.close();
}
void NewInfo()
{
cout << "\n-------------------------------------\n";
cout << "Introduceti codul zilei (ex: -034- ): ";
cin >> zi[i].CodZien;
cout << "Temperatura zilei (*C) : ";
cin >> zi[i].Temperatura;
cout << "Umiditatea (%) : ";
cin >> zi[i].Umiditatea;
cout << "Directia vantului (NE, SW etc) : ";
cin >> zi[i].DirVint;
cout << "Viteza vantului (m/s) : ";
cin >> zi[i].VitezaVint;
ofstream out("File_meteo.txt",ios::app);
out << zi[i].CodZien << " " << zi[i].Temperatura << " "
<< zi[i].Umiditatea << " " << zi[i].DirVint << " "
<< zi[i].VitezaVint;
i++;
n = i;
out.close();
}
float media = 0;
void TempMed()
{
for (int i = 0; i < n; i++)
{
media += zi[i].Temperatura;
}
media = media / n;
cout << "Temperatura medie este " << media << " *C\n";
}
float temp_min;
void TempMin()
{
temp_min = zi[0].Temperatura;
for (int i = 1; i < n; i++)
{
if (temp_min > zi[i].Temperatura)
temp_min = zi[i].Temperatura;
}
for (int i = 0; i < n; i++)
{
if (zi[i].Temperatura == temp_min)
cout << "Ziua cu temperatura cea mai joasa are codul: " << zi[i].CodZien << endl;
}
}
float vit_max;
void VintMax()
{
vit_max = zi[0].VitezaVint;
for (int i = 1; i < n; i++)
{
if (vit_max < zi[i].VitezaVint)
vit_max = zi[i].VitezaVint;
}
for (int i = 0; i < n; i++)
{
if (zi[i].VitezaVint == vit_max)
cout << "Ziua cu viteza maxima a vatului are codul: " << zi[i].CodZien << endl;
}
}
void Atributes()
{
cout << "\nCaracteristicile zilelor fara vant:\n";
for (int i = 0; i < n; i++)
{
if (zi[i].VitezaVint == 0)
{
cout << "\tCodul zilei: - " << zi[i].CodZien << " - \n";
cout << "\tTemperatura zilei: " << zi[i].Temperatura << " *C\n";
cout << "\tUmiditatea zilei: " << zi[i].Umiditatea << " %\n";
cout << "\tDirectia vantului: " << zi[i].DirVint << endl << endl;
}
}
}
char direction[3] = "E";
void NewFile()
{
for(i=0; i<n; i++)
{
if(zi[i].DirVint==direction)
{
cout<<zi[i].DirVint<<endl;
ofstream fout("Est.txt",ios::app);
fout << zi[i].CodZien << " " << zi[i].Temperatura << " "
<< zi[i].Umiditatea << " " << zi[i].DirVint << " "
<< zi[i].VitezaVint<<endl;
fout.close();
}
}
}
//Functia ce sterge o linie din Fisier.
int cod;
int poz = -1;
//Functia ce rescrie Fisierul. Foloseste la stergerea unei linii.
void RewriteFile()
{
ofstream out("File_meteo.txt");
out << zi[i].CodZien << " " << zi[i].Temperatura << " "
<< zi[i].Umiditatea << " " << zi[i].DirVint << " "
<< zi[i].VitezaVint;
out.close();
}
void DelLine()
{
cout << "Codul liniei pentru stergere - ";
cin >> cod;
for (i = 0; i < n; i++)
if (zi[i].CodZien == cod)
poz = i;
if (poz == -1)
cout << "Nu exista asa carte!";
else
{
n--;
for (int i = poz; i < n; i++)
{
zi[i].CodZien = zi[i + 1].CodZien;
zi[i].Umiditatea = zi[i + 1].Umiditatea;
strcpy(zi[i].DirVint,zi[i+1].DirVint);
zi[i].Temperatura = zi[i + 1].Temperatura;
zi[i].VitezaVint = zi[i + 1].VitezaVint;
}
void RewriteFile();
}
}
int main()
{
int ch;
do
{
cout << "Alegeti operatia dorita:\n";
cout << "\t 0-Iesire din program. (EXIT)\n";
cout << "\t 1-Inregistrarea datelor despre o zi noua.\n";
cout << "\t 2-Stergerea datelor a unei linii.\n";
cout << "\t 3-Temperatura medie pe o perioada.\n";
cout << "\t 4-Informatii despre zilele fara vant.\n";
cout << "\t 5-Ziua cu temperatura cea mai joasa.\n";
cout << "\t 6-Ziua cu viteza maxima a vantului.\n";
cout << "\t 7-Directia din care cel mai des a batut vantul.\n";
cout << "\t 8-Crearea Fisier cu zilele cu vantul din est, in ordine ascendenta a temp.\n";
cout << ">>"; cin >> ch;
switch (ch)
{
case 1:
{
ReadDate();
NewInfo();
break;
}
case 2:
{
ReadDate();
//DelLine();
break;
}
case 3:
{
ReadDate();
TempMed();
break;
}
case 4:
{
ReadDate();
Atributes();
break;
}
case 5:
{
ReadDate();
TempMin();
break;
}
case 6:
{
ReadDate();
VintMax();
break;
}
case 7:
{
ReadDate();
//DirVintDes();
break;
}
case 8:
{
ReadDate();
NewFile();
break;
}
}
}
while (ch != 0);
return 0;
}