Untitled
unknown
plain_text
9 months ago
7.6 kB
12
Indexable
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
public class TemperaturaFueraDeRangoException : Exception
{
public TemperaturaFueraDeRangoException()
{
}
public TemperaturaFueraDeRangoException(string message)
: base(message)
{
}
public TemperaturaFueraDeRangoException(string message, Exception inner)
: base(message, inner)
{
}
}
public class SensorTemperatura
{
private const double TEMPERATURA_MINIMA = -50.0;
private const double TEMPERATURA_MAXIMA = 100.0;
public string ID { get; private set; }
public string Ubicacion { get; private set; }
public double TemperaturaActual { get; private set; }
public SensorTemperatura(string id, string ubicacion, double tempInicial = 0.0)
{
ID = id;
Ubicacion = ubicacion;
TemperaturaActual = tempInicial;
}
public void ActualizarTemperatura(double nuevaTemp)
{
if (nuevaTemp < TEMPERATURA_MINIMA || nuevaTemp > TEMPERATURA_MAXIMA)
{
throw new TemperaturaFueraDeRangoException(
$"Error en '{ID}': La temperatura {nuevaTemp}°C está fuera del rango ({TEMPERATURA_MINIMA}°C a {TEMPERATURA_MAXIMA}°C)."
);
}
TemperaturaActual = nuevaTemp;
}
public override string ToString()
{
return $"ID: {ID,-10} | Ubicación: {Ubicacion,-20} | Temperatura: {TemperaturaActual,6:F1}°C";
}
}
public class Program
{
private static List<SensorTemperatura> sensores = new List<SensorTemperatura>();
private const string nombreArchivo = "lecturas.txt";
public static void Main(string[] args)
{
CargarSensoresDesdeArchivo();
bool salir = false;
while (!salir)
{
Console.WriteLine("\n--- Menú de Monitoreo de Sensores ---");
Console.WriteLine("1. Agregar un nuevo sensor");
Console.WriteLine("2. Actualizar temperatura de un sensor");
Console.WriteLine("3. Mostrar todas las lecturas");
Console.WriteLine("4. Calcular estadísticas (Promedio y Máxima)");
Console.WriteLine("5. Guardar y Salir");
Console.Write("Seleccione una opción: ");
switch (Console.ReadLine())
{
case "1":
AgregarSensor();
break;
case "2":
ActualizarTemperaturaSensor();
break;
case "3":
MostrarTodasLasLecturas();
break;
case "4":
CalcularEstadisticas();
break;
case "5":
GuardarSensoresEnArchivo();
salir = true;
break;
default:
Console.WriteLine("Opción no válida. Intente de nuevo.");
break;
}
}
Console.WriteLine("Programa finalizado.");
}
private static void AgregarSensor()
{
Console.Write("Ingrese el ID del nuevo sensor: ");
string id = Console.ReadLine();
Console.Write("Ingrese la ubicación del sensor: ");
string ubicacion = Console.ReadLine();
if (string.IsNullOrWhiteSpace(id) || string.IsNullOrWhiteSpace(ubicacion))
{
Console.WriteLine("El ID y la ubicación no pueden estar vacíos.");
return;
}
if (sensores.Any(s => s.ID.Equals(id, StringComparison.OrdinalIgnoreCase)))
{
Console.WriteLine("Error: Ya existe un sensor con ese ID.");
return;
}
sensores.Add(new SensorTemperatura(id, ubicacion));
Console.WriteLine("Sensor agregado exitosamente.");
}
private static void ActualizarTemperaturaSensor()
{
Console.Write("Ingrese el ID del sensor a actualizar: ");
string id = Console.ReadLine();
var sensor = sensores.FirstOrDefault(s => s.ID.Equals(id, StringComparison.OrdinalIgnoreCase));
if (sensor == null)
{
Console.WriteLine("Sensor no encontrado.");
return;
}
Console.Write($"Ingrese la nueva temperatura para el sensor '{sensor.ID}' en '{sensor.Ubicacion}': ");
if (double.TryParse(Console.ReadLine(), out double nuevaTemp))
{
try
{
sensor.ActualizarTemperatura(nuevaTemp);
Console.WriteLine("Temperatura actualizada correctamente.");
}
catch (TemperaturaFueraDeRangoException ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(ex.Message);
Console.ResetColor();
}
}
else
{
Console.WriteLine("Entrada inválida. Por favor, ingrese un número.");
}
}
private static void MostrarTodasLasLecturas()
{
Console.WriteLine("\n--- Lecturas Actuales de Sensores ---");
if (!sensores.Any())
{
Console.WriteLine("No hay sensores registrados.");
return;
}
foreach (var sensor in sensores)
{
Console.WriteLine(sensor.ToString());
}
}
private static void CalcularEstadisticas()
{
if (!sensores.Any())
{
Console.WriteLine("No hay sensores para calcular estadísticas.");
return;
}
double tempPromedio = sensores.Average(s => s.TemperaturaActual);
double tempMaxima = sensores.Max(s => s.TemperaturaActual);
Console.WriteLine("\n--- Estadísticas de Temperatura ---");
Console.WriteLine($"Temperatura Promedio: {tempPromedio:F2}°C");
Console.WriteLine($"Temperatura Más Alta: {tempMaxima:F1}°C");
}
private static void GuardarSensoresEnArchivo()
{
try
{
using (StreamWriter sw = new StreamWriter(nombreArchivo))
{
foreach (var sensor in sensores)
{
sw.WriteLine($"{sensor.ID},{sensor.Ubicacion},{sensor.TemperaturaActual}");
}
}
Console.WriteLine($"Datos guardados correctamente en '{nombreArchivo}'.");
}
catch (Exception ex)
{
Console.WriteLine($"Error al guardar el archivo: {ex.Message}");
}
}
private static void CargarSensoresDesdeArchivo()
{
if (!File.Exists(nombreArchivo))
{
Console.WriteLine("No se encontró archivo 'lecturas.txt'. Empezando desde cero.");
return;
}
try
{
string[] lineas = File.ReadAllLines(nombreArchivo);
foreach (var linea in lineas)
{
string[] partes = linea.Split(',');
if (partes.Length == 3 && double.TryParse(partes[2], out double temp))
{
sensores.Add(new SensorTemperatura(partes[0], partes[1], temp));
}
}
Console.WriteLine($"Se cargaron {sensores.Count} sensores desde '{nombreArchivo}'.");
}
catch (Exception ex)
{
Console.WriteLine($"Error al cargar el archivo: {ex.Message}");
}
}
}Editor is loading...
Leave a Comment