#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;
#define CARGA_ARCHIVO 0
#define OPCION_ANADIR 1
#define OPCION_ELIMINAR 2
#define OPCION_BUSCAR 3
#define OPCION_LISTAR 4
#define OPCION_SALIR 5
struct Auto {
std::string modelo;
int anio;
std::string estado;
int kilometraje;
};
///////////////////////////////////////////////////////
string archivo = "autos.dat";
map<int, Auto> autos;
int actualID = 1;
void anadirAuto() {
string modelo, estado;
int anio, kilometraje;
cout << "Dame los datos del auto" << endl;
cout << "Modelo: ";
cin.ignore();
cin >> modelo;
cout << "Anio: ";
cin >> anio;
cout << "Estado: ";
cin >> estado;
cin.ignore();
cout << "Kilometraje: ";
cin >> kilometraje;
Auto coche = {modelo, anio, estado, kilometraje};
autos[actualID] = coche;
cout << "El auto se añadio con ID: " << actualID << endl;
actualID++;
}
void eliminarAuto(){
int id;
cout << "ID del auto a eliminar: ";
cin >> id;
if(autos.find(id) != autos.end()){
autos.erase(id);
cout << "Auto con ID: " << id << " eliminado" << endl;
} else {
cout << "Auto con ID: " << id << " no se encontro" << endl;
}
}
void buscarAuto(){
int id;
cout << "ID del auto a buscar: ";
cin >> id;
if(autos.find(id) != autos.end()){
Auto coche = autos[id];
cout << "ID: " << id << endl;
cout << "Modelo: " << coche.modelo << endl;
cout << "Anio: " << coche.anio << endl;
cout << "Estado: " << coche.estado << endl;
cout << "Kilometraje: " << coche.kilometraje << endl;
} else {
cout << "Auto con ID: " << id << " no se encontro" << endl;
}
}
void listarAutos(){
for(const auto& pair : autos){
cout << "ID: " << pair.first << endl;
cout << "Modelo: " << pair.second.modelo << endl;
}
}
void guardarArchivo() {
ofstream outFile(archivo, ios::binary);
if (outFile.is_open()) {
outFile.write(reinterpret_cast<const char*>(&actualID), sizeof(actualID));
int size = autos.size();
outFile.write(reinterpret_cast<const char*>(&size), sizeof(size));
for (const auto& pair : autos) {
outFile.write(reinterpret_cast<const char*>(&pair.first),
sizeof(pair.first));
int modelSize = pair.second.modelo.size();
outFile.write(reinterpret_cast<const char*>(&modelSize),
sizeof(modelSize));
outFile.write(pair.second.modelo.c_str(), modelSize);
outFile.write(reinterpret_cast<const char*>(&pair.second.anio),
sizeof(pair.second.anio));
int estadoSize = pair.second.estado.size();
outFile.write(reinterpret_cast<const char*>(&estadoSize),
sizeof(estadoSize));
outFile.write(pair.second.estado.c_str(), estadoSize);
outFile.write(reinterpret_cast<const char*>(&pair.second.kilometraje),
sizeof(pair.second.kilometraje));
}
outFile.close();
} else {
cout << "Error: al abrir el archivo para guardar." << endl;
}
}
void leerArchivo() {
ifstream inFile(archivo, ios::binary);
if (inFile.is_open()) {
inFile.read(reinterpret_cast<char*>(&actualID), sizeof(actualID));
int size;
inFile.read(reinterpret_cast<char*>(&size), sizeof(size));
for (int i = 0; i < size; ++i) {
int id, anio, kilometraje, modeloSize, estadoSize;
inFile.read(reinterpret_cast<char*>(&id), sizeof(id));
inFile.read(reinterpret_cast<char*>(&modeloSize), sizeof(modeloSize));
char* modeloBuffer = new char[modeloSize];
inFile.read(modeloBuffer, modeloSize);
string modelo(modeloBuffer, modeloSize);
delete[] modeloBuffer;
inFile.read(reinterpret_cast<char*>(&anio), sizeof(anio));
inFile.read(reinterpret_cast<char*>(&estadoSize), sizeof(estadoSize));
char* estadoBuffer = new char[estadoSize];
inFile.read(estadoBuffer, estadoSize);
string estado(estadoBuffer, estadoSize);
delete[] estadoBuffer;
inFile.read(reinterpret_cast<char*>(&kilometraje),
sizeof(kilometraje));
autos[id] = {modelo, anio, estado, kilometraje};
}
inFile.close();
} else {
cout << "Error: al abrir el archivo para leer." << endl;
}
}
int main() {
int opcion;
do {
cout << "=== Agencia de Autos ===" << endl;
cout << "Elige la operacion a realizar:" << endl;
cout << "0. Cargar lista de autos" << endl;
cout << "1. Agregar auto" << endl;
cout << "2. Eliminar auto" << endl;
cout << "3. Buscar auto" << endl;
cout << "4. Listar autos" << endl;
cout << "5. Salir" << endl;
cin >> opcion;
switch (opcion) {
case CARGA_ARCHIVO:
leerArchivo();
listarAutos();
break;
case OPCION_ANADIR:
anadirAuto();
break;
case OPCION_ELIMINAR:
eliminarAuto();
break;
case OPCION_BUSCAR:
buscarAuto();
break;
case OPCION_LISTAR:
listarAutos();
break;
case OPCION_SALIR:
cout << "Programa finalizado." << endl;
break;
default:
cout << "Opcion invalida. Repita su eleccion:" << endl;
}
} while (opcion != OPCION_SALIR);
guardarArchivo();
return 0;
}