#include <ostream>
#include <istream>
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;
 
struct TipoProveedor {
   	int 	Clave;
	char 	RFC[13];
	char 	Nombre[40];
	float 	PrecioM3Troceria;
};

int main() {
	TipoProveedor RegistroTemp;
	short opcion=0;
	ofstream Salida;
	ifstream Entrada;
	do 
		{
		system("cls"); 
		cout << "1.- Alta Proveedores" << endl;
		cout << "2.- Consulta Proveedor" << endl;
		cout << "3.- Reporte Proveedores" << endl;
		cout << "0.- Terminar" << endl;;
		cout << "Elija una opcion: ";scanf("%d",&opcion);
		switch (opcion) 
			{
			case 1:
			 	Salida.open("C:\\TEMP\\prueba.dat", ios::in | ios::out | ios::binary);
				if (!Salida) {
					Salida.open("C:\\TEMP\\prueba.dat", ios::out | ios::binary | ios::trunc);
        			Salida.close();
					Salida.open("C:\\TEMP\\prueba.dat", ios::in | ios::out | ios::binary);
			 		}
				cout << "Clave del Proveedor   : ";scanf("%d",&RegistroTemp.Clave);
				cout << "RFC del Proveedor     : ";scanf("%s",&RegistroTemp.RFC);
				cout << "Nombre del Proveedor  : ";scanf("%s",&RegistroTemp.Nombre);
				cout << "Precio Trocerķa por M3: ";scanf("%f",&RegistroTemp.PrecioM3Troceria);
				Salida.seekp(0,ios::end);
				Salida.write(reinterpret_cast<char *>(&RegistroTemp), sizeof(TipoProveedor));
				Salida.close();
				break;
			case 2:
				{
				Entrada.open("C:\\TEMP\\prueba.dat", ios::in | ios::binary);
 			   	int ClaveBuscar;
			   	bool Encontrado=false;
				cout << "Clave del Proveedor a buscar: ";scanf("%d",&ClaveBuscar);
				Entrada.seekg(0,ios::beg);
				while (not Entrada.eof())
					{
						Entrada.read(reinterpret_cast<char *>(&RegistroTemp), sizeof(TipoProveedor) );
			    		if (RegistroTemp.Clave==ClaveBuscar)
			    			{
							Encontrado=true;
							break;
							}
					};
				if (Encontrado)
					{
					cout << "Clave del Proveedor   : " << RegistroTemp.Clave << endl;
					cout << "RFC del Proveedor     : " << RegistroTemp.RFC << endl;
					cout << "Nombre del Proveedor  : " << RegistroTemp.Nombre << endl;
					cout << "Precio Trocerķa por M3: " << RegistroTemp.PrecioM3Troceria << endl;
					system("pause");
			    	}
				else
					{
				    cout << "No existe un proveedor con esa clave" << endl;
					system("pause");
				    }
				Entrada.close();
				};
				break;
			case 3:
			 	{
				int contador=0;
				Entrada.open("C:\\TEMP\\prueba.dat", ios::in | ios::binary);
				if (!Entrada) {
					cout << "No existe el archivo!" << endl;
					system("pause");
					break;
			 		}
				Entrada.seekg(0,ios::beg);
			    Entrada.read(reinterpret_cast<char *>(&RegistroTemp), sizeof(TipoProveedor) );
			    while (not Entrada.eof())
					{
						cout << ++contador << ' ' << RegistroTemp.Clave << ' ' << RegistroTemp.RFC << 
						    ' ' << RegistroTemp.Nombre << 
							' ' << RegistroTemp.PrecioM3Troceria << endl ;
						Entrada.read(reinterpret_cast<char *>(&RegistroTemp), sizeof(TipoProveedor) );
			    	};
				system("pause");
				Entrada.close();
				};
				break;
			}
   		}
   	while (opcion!=0);
   	return 0;
}

