static bool ChequearCompatibilidad(Sangre donante, Sangre receptor) { // Cero- puede donar a todos los tipos y factores if (donante.GrupoSanguineo == GrupoSangre.Cero && donante.FactorRH == false) { return(true); } // AB+ puede recibir de todos los tipos y factorRH if (receptor.GrupoSanguineo == GrupoSangre.AB && receptor.FactorRH == true) { return(true); } // Si el donante y el receptor tienen el mismo tipo y el factor es igual o positivo if (receptor.GrupoSanguineo == donante.GrupoSanguineo) { if (donante.FactorRH || donante.FactorRH == receptor.FactorRH) { return(true); } } // AB- puede recibir de A- y B- if (receptor.GrupoSanguineo == GrupoSangre.AB && !receptor.FactorRH) { if (donante.GrupoSanguineo == GrupoSangre.A && !donante.FactorRH) { return(true); } if (donante.GrupoSanguineo == GrupoSangre.B && !donante.FactorRH) { return(true); } } // Si no se sumple ninguna condicion return(false); }
public static void Donar(List <Donante> donantes, List <Sangre> stock) { Console.WriteLine("Ingrese el DNI (sin puntos): "); int dni = Convert.ToInt32(Console.ReadLine()); Donante d = BuscarDonante(donantes, dni); if (d == null) { Console.WriteLine("\nNo existe el donante"); } else { Console.WriteLine("\nIngrese la cantidad de litros extraidos: "); int litros = int.Parse(Console.ReadLine()); Sangre s = new Sangre(litros, d.TipoSangre.GrupoSanguineo, d.TipoSangre.FactorRH); AgregarSangre(s, stock); Console.WriteLine("\nSe ha agregado la extracción al banco!"); } }
//Metodo para ingresar al sistema un nuevo paciente. private static void IngresarPaciente(Queue <Paciente> pacientes) { Console.WriteLine("\n-Ingresar Nuevo Paciente:\n "); Console.WriteLine("Ingrese el DNI (sin puntos): "); int dni = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ingrese el nombre: "); string nombre = Console.ReadLine(); Console.WriteLine("Ingrese el apellido"); string apellido = Console.ReadLine(); Console.WriteLine("Ingrese el telefono (sin guiones ni paréntesis): "); int telefono = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ingrese el mail: "); string mail = Console.ReadLine(); Console.WriteLine("Ingrese la dirección: "); string direccion = Console.ReadLine(); Sangre grupoSanguineo = IngresarTipoSangre(); Paciente paciente = new Paciente(nombre, apellido, dni, telefono, mail, direccion, grupoSanguineo); Console.WriteLine("\nCuantos litros de sangre necesita: "); int litros = Convert.ToInt32(Console.ReadLine()); grupoSanguineo.Litros = litros; pacientes.Enqueue(paciente); Console.WriteLine("-Paciente ingresado-"); }
public Paciente(string nombre, string apellido, int dni, int telefono, string mail, string direccion, Sangre tipoSangre) { this.nombre = nombre; this.apellido = apellido; this.direccion = direccion; this.dni = dni; this.telefono = telefono; this.mail = mail; this.tipoSangre = tipoSangre; }
public Donante(int dni, string nombre, string apellido, string fechaNacimiento, int telefono, string mail, string direccion, Sangre tipoSangre) { this.dni = dni; this.nombre = nombre; this.apellido = apellido; this.fechaNacimiento = fechaNacimiento; this.telefono = telefono; this.mail = mail; this.direccion = direccion; this.tipoSangre = tipoSangre; }
static void HacerTransfusion(Queue <Paciente> pacientes, List <Sangre> stock) { if (pacientes.Count == 0) { Console.WriteLine("-No hay pacientes en lista de espera.-"); return; } if (stock.Count == 0) { Console.WriteLine("-Actualmente no hay reservas disponibles en el banco.-"); return; } Paciente pacienteActual = pacientes.Peek(); Sangre sangreCompatible = null; Console.WriteLine("\nEl paciente actual en la lista de espera es: "); Console.WriteLine(pacienteActual.Nombre + " " + pacienteActual.Apellido + " DNI: " + pacienteActual.Dni); Console.WriteLine("Sangre Grupo: " + pacienteActual.TipoSangre.GrupoSanguineo + " Factor RH: " + FactorRH(pacienteActual.TipoSangre.FactorRH)); Console.WriteLine("El paciente necesita " + pacienteActual.TipoSangre.Litros + " litros de sangre."); foreach (Sangre s in stock) { if (ChequearCompatibilidad(s, pacienteActual.TipoSangre)) { if (s.Litros >= pacienteActual.TipoSangre.Litros) { sangreCompatible = s; } } } if (sangreCompatible == null) { Console.WriteLine("\nNo hay stock disponible para la cantidad necesaria de litros del grupo y factor que necesita el paciente."); } else { sangreCompatible.Litros -= pacienteActual.TipoSangre.Litros; if (sangreCompatible.Litros <= 0) { stock.Remove(sangreCompatible); } Console.WriteLine("\nLa transfusion fue realizada con exito."); pacientes.Dequeue(); Console.WriteLine("Quedan " + pacientes.Count + " pacientes en lista de espera."); } return; }
public static void EditarDonante(List <Donante> donantes) { Console.WriteLine("Ingrese el DNI (sin puntos): "); int dni = Convert.ToInt32(Console.ReadLine()); Donante d = BuscarDonante(donantes, dni); if (d == null) { Console.WriteLine("\nNo existe el donante"); } else { Console.WriteLine("Ingrese el nombre: "); string nombre = Console.ReadLine(); Console.WriteLine("Ingrese el apellido"); string apellido = Console.ReadLine(); Console.WriteLine("Ingrese la fecha de nacimiento: "); string fechaNacimiento = Console.ReadLine(); Console.WriteLine("Ingrese el telefono (sin guiones ni paréntesis): "); int telefono = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ingrese el mail: "); string mail = Console.ReadLine(); Console.WriteLine("Ingrese la dirección: "); string direccion = Console.ReadLine(); Sangre grupoSanguineo = IngresarTipoSangre(); d.Nombre = nombre; d.Apellido = apellido; d.FechaNacimiento = fechaNacimiento; d.Telefono = telefono; d.Mail = mail; d.Direccion = direccion; d.TipoSangre = grupoSanguineo; Console.WriteLine("Datos modificados"); } }
static void AgregarSangre(Sangre s, List <Sangre> stock) { Sangre resultado = stock.FirstOrDefault(x => x.GrupoSanguineo == s.GrupoSanguineo); if (resultado != null) { stock.Remove(resultado); resultado.Litros = resultado.Litros + s.Litros; stock.Add(resultado); } else { stock.Add(s); }; }
//Metodo para ingresar al sistema un nuevo donante. private static void IngresarDonante(List <Donante> donantes) { Console.WriteLine("\n-Ingresar Nuevo Donante:\n "); Console.WriteLine("Ingrese el DNI (sin puntos): "); int dni = Convert.ToInt32(Console.ReadLine()); Donante d = BuscarDonante(donantes, dni); if (d != null) { Console.WriteLine("Ya existe el donante!"); } else { Console.WriteLine("Ingrese el nombre: "); string nombre = Console.ReadLine(); Console.WriteLine("Ingrese el apellido"); string apellido = Console.ReadLine(); Console.WriteLine("Ingrese la fecha de nacimiento: "); string fechaNacimiento = Console.ReadLine(); Console.WriteLine("Ingrese el telefono (sin guiones ni paréntesis): "); int telefono = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Ingrese el mail: "); string mail = Console.ReadLine(); Console.WriteLine("Ingrese la dirección: "); string direccion = Console.ReadLine(); Sangre grupoSanguineo = IngresarTipoSangre(); Donante donante = new Donante(dni, nombre, apellido, fechaNacimiento, telefono, mail, direccion, grupoSanguineo); donantes.Add(donante); Console.WriteLine("-Donante ingresado-"); }; }
//Esta funcion se usas cuando se le solicita al usuario ingresar un tipo de sangre static Sangre IngresarTipoSangre() { bool ingresoExitoso = false; //Se instancia un nuevo objeto Sangre y se usa para ir cargando los datos ingresados Sangre tipoIngresado = new Sangre(0, GrupoSangre.A, false); while (!ingresoExitoso) { Console.WriteLine("\n1- A \n2- B \n3- AB \n4- Cero"); Console.WriteLine("Ingrese el grupo sanguíneo: "); int opcion = Convert.ToInt32(Console.ReadLine()); switch (opcion) { case 1: tipoIngresado.GrupoSanguineo = GrupoSangre.A; ingresoExitoso = true; break; case 2: tipoIngresado.GrupoSanguineo = GrupoSangre.B; ingresoExitoso = true; break; case 3: tipoIngresado.GrupoSanguineo = GrupoSangre.AB; ingresoExitoso = true; break; case 4: tipoIngresado.GrupoSanguineo = GrupoSangre.Cero; ingresoExitoso = true; break; default: Console.WriteLine("\n-Ingrese una opción valida-\n "); break; } } ingresoExitoso = false; while (!ingresoExitoso) { Console.WriteLine("Es factor RH positivo (S/N): "); string factor = Console.ReadLine().ToLower(); if (factor == "si" || factor == "s") { tipoIngresado.FactorRH = true; ingresoExitoso = true; } if (factor == "no" || factor == "n") { tipoIngresado.FactorRH = false; ingresoExitoso = true; } if (!ingresoExitoso) { Console.WriteLine("\n-Ingrese una opción valida (S/N)-\n "); } } return(tipoIngresado); }