Bienvenidos sean a este post, con lo anteriormente visto hoy vamos a hacer unas modificaciones fiinales para nuestros tres proyectos y vamos a mostrar como deberiamos usarlo en su version final.
Primero vamos a abrir el proyecto Secretaria, iremos a la clase Alumno.cs y agregaremos el siguiente metodo:
public void CalidadAcademica()
{
float notaAlta = 0;
float notaBaja = float.MaxValue;
float promedio = 0;
int cuenta = 0;
string linea;
string[] s;
Console.Clear();
Console.WriteLine("La calidad academica: ");
using(StreamReader sr = File.OpenText(pathNotas))
{
while((linea = sr.ReadLine()) != null)
{
s = linea.Split(',');
promedio += float.Parse(s[2]);
cuenta++;
notaAlta = Math.Max(float.Parse(s[2]), notaAlta);
notaBaja = Math.Min(float.Parse(s[2]), notaBaja);
}
}
Console.WriteLine("La media general es de: " + (promedio/cuenta));
Console.WriteLine("La nota mas alta es de: " + notaAlta);
Console.WriteLine("La nota mas baja es de: " + notaBaja);
Console.Write("Presione Enter para volver al menu");
Console.ReadLine();
}
En este metodo calcularemos un promedio de las notas y averiguaremos cual es la mejor nota y la peor de nuestros alumnos, como primer caso definiremos todas nuestras variables, la primera para la nota mas alta (notaAlta), luego para la nota mas baja (notaBaja), despues para calcular el promedio y la ultima para contar la cantidad de notas que tenemos, las tres primeras son de tipo float por si poseen decimales y la ultima de int porque no va a tener decimales, despues tendremos una de tipo string llamada linea para almacenar la linea leida y por ultimo un array de tipo string para recibir el resultado del Split.
Una curiosidad, todos nuestros valores fueron iniciados con 0 salvo notaBaja, esto es debido a que si lo hacemos de esa forma ninguna nota va a estar por debajo de ese valor, para evitar este problema le decimos que el valor inicial va a ser el maximo disponible por float, esto nos ayudara a que cualquier valor que ingresemos estara por debajo de ese y se almacenara correctamente.
Retomando, nuestro codigo limpiara la pantalla y mostrara un mensaje para luego proceder a abrir el archivo de notas, en el bloque usaremos un while para verificar que la linea leida y almacenada en linea sea distinta de null y por ende se ejecute, dentro del bucle usaremos a nuestro array de string, s, para almacenar el Split que hacemos a linea, para luego convertir el valor de la nota almacenado en la tercer posicion del array (s[2]) en float mediante el metodo Parse y sumarselo al valor de promedio, nuestro siguiente paso es incrementar cuenta y por medio de Math.Max y Math.Min almacenaremos los valores maximos y minimos en notaAlta y notaBaja respectivamente.
Nota: Math.Max recibe dos valores para comparar entre si y devolver cual es mas grande, en este caso lo comparamos con el valor que leimos y el valor almacenado en notaAlta, si el nuevo es mas grande procede a asignarselo y reemplazarlo, de esta forma siempre obtendremos el valor mas grande, Math.Min trabaja de la misma forma pero solo busca el valor mas chico.
Por ultimo, una vez que tenemos todos los datos, procedemos a mostrarlo donde primero haremos el calculo del promedio mediante la division entre promedio y cuenta, y luego mostrando los valores finales almacenados en notaAlta y notaBaja, para ir terminando con las modificaciones al principio debemos agregar esta linea junto a la de path:
string pathNotas = "..\\..\\..\\notas.txt";
Esta linea es la que nos permite ubicar el archivo de notas, pasemos a nuestra siguiente modificacion en Program.cs donde modificaremos el bucle do…while de la siguiente manera:
do
{
Console.Clear();
Console.WriteLine("Bienvenido a la secretaria.");
Console.WriteLine("Acciones disponibles:");
Console.WriteLine("1) Borrar todos los alumnos");
Console.WriteLine("2) Agregar nuevo Alumno");
Console.WriteLine("3) Listar Alumnos");
Console.WriteLine("4) Calidad Academica");
Console.WriteLine("5) Salir");
Console.Write("Elija una opcion:");
opcion = int.Parse(Console.ReadLine());
switch(opcion)
{
case 1:
alumno.CrearArchivo();
break;
case 2:
alumno.AgregarAlumno();
break;
case 3:
alumno.ListarAlumnos();
break;
case 4:
alumno.CalidadAcademica();
break;
case 5:
break;
default:
Console.WriteLine("Eliga una opcion entre 1-5");
Console.ReadLine();
break;
}
} while (opcion != 5);
En este caso modificamos el valor de while para que salga cuando opcion sea igual a 5, luego agregamos una linea mas en el menu para que 4 sea el acceso a la nueva funcion, luego modificaremos a case 4 para que llame a la funcion y por ultimo agregamos a case 5 para que sea la salida, con esto ya concluimos nuestro programa, podemos compilar y probarlo pero esto lo veremos mas adelante.
Nota: No se olviden de modificar el mensaje de default.
Para nuestro siguiente paso vamos a modificar el proyecto Profesores para que utilice el nuevo metodo para ver notas que hicimos en el proyecto Alumnos, para ello primero vamos a agregar este proyecto como Referencia, para ello debemos hacer Click con el boton derecho sobre Referencias y seleccionar Agregar Referencia, nos aparecera el siguiente cuadro

En este caso tendremos la posibilidad de poder agregar tanto librerias de Framework como asi tambien los proyectos que tenemos disponibles en nuestra solucion, debe estar seleccionado Proyectos, para este caso seleccionamos Alumnos, lo tildamos y presionamos Aceptar, y Referencias nos quedara de la siguiente manera

Como pueden ver ahora nuestro Proyecto tendra acceso al Proyecto Alumnos y por ende tendremos acceso a todas las clases de tipo publicas, volvamos a nuestra clase Profesor.cs y comentemos el metodo MostrarNotas de la siguiente manera:
/* public void MostrarNotas()
{
string alumno;
Console.WriteLine("Codigos de los alumnos: ");
using(StreamReader sr = File.OpenText(pathAlumnos))
{
string linea;
string[] s;
while((linea = sr.ReadLine()) != null)
{
s = linea.Split(',');
Console.WriteLine(s[0] + " - " + s[2] + "," + s[1]);
}
}
Console.Write("Ingresa el ID del alumno: ");
alumno = Console.ReadLine();
using(StreamReader sr = File.OpenText(pathNotas))
{
string linea;
string[] s;
while((linea = sr.ReadLine()) != null)
{
s = linea.Split(',');
if (s[1] == alumno.ToUpper())
Console.WriteLine(s[1] + "\t" + s[0] + "\t" + s[2]);
}
}
Console.Write("Presiona Enter para volver al menu");
Console.ReadLine();
} */
Nuestras siguiente modificaciones van a ser en Program.cs donde agregaremos esta linea a las de using:
using Alumnos.Clases;
Esta nos permitira tener acceso a la clase Estudiantes sin tener que usar todo el path para invocarla, dentro de main vamos a crear nuestro nuevo objeto antes del bucle do:
Estudiantes alumno = new Alumnos.Clases.Estudiantes();
Si se les autocompleta de esta forma, esta correcto y si encima les deja la notificacion de error doblemente correcto, esto es debido a que como comentamos antes cuando hacemos referencias solo tendremos acceso a las partes publicas del proyecto, por ello debemos ir al Proyecto Alumnos, abrir la clase Estudiantes y modificar esta linea:
class Estudiantes
Por esta liena:
public class Estudiantes
Con esta modificacion convertimos a la clase en publica, salvamos la modificacion y si retornamos al Proyecto Profesores ya deberia estar solucionado, y podemos modificar la linea del objeto de la siguiente manera:
Estudiantes alumno = new Estudiantes();
Nuestra ultima modificacion va a ser con el bucle do donde cambiaremos el case 3 de la siguiente manera:
case 3:
alumno.MostrarNotas();
break;
Con esto modificado, podemos compilar nuestro programa y probarlo para ver como funciona, con todo esto podemos hacer una prueba «piloto» donde veremos como seria nuestra solucion en produccion, para ello les recomiendo comentar en los tres proyectos las variables donde estan los paths de los archivos y modificarlas como les indico a continuacion:
Estudiantes.cs
/* string pathAlumnos = "..\\..\\..\\alumnos.txt";
string pathExamenes = "..\\..\\..\\examenes.txt";
string pathNotas = "..\\..\\..\\notas.txt"; */
string pathAlumnos = "alumnos.txt";
string pathExamenes = "examenes.txt";
string pathNotas = "notas.txt";
Alumno.cs
/* string path = "..\\..\\..\\alumnos.txt";
string pathNotas = "..\\..\\..\\notas.txt"; */
string path = "alumnos.txt";
string pathNotas = "notas.txt";
Profesor.cs
/* string pathAlumnos = "..\\..\\..\\alumnos.txt";
string pathExamenes = "..\\..\\..\\examenes.txt";
string pathNotas = "..\\..\\..\\notas.txt"; */
string pathAlumnos = "alumnos.txt";
string pathExamenes = "examenes.txt";
string pathNotas = "notas.txt";
Con esto haremos que busquen los archivos desde donde se esten ejecutando, nuestro siguiente paso sera crear una carpeta en el C donde ira nuestra solucion completa, por ejemplo c:\universidad, una vez hecho esto procedemos a compilarlo y por ultimo copiaremos todos los archivos .exe de nuestros proyectos y los archivos de texto en la nueva carpeta de destino, nos debera quedar algo como esto:

Con esto tenemos concluida nuestra simulacion de un entorno de «produccion», vamos a ver como hacer todos estos pasos y como se ejecuta en el siguiente video
En este video vimos como se hacen todos los pasos, y como podemos acceder a cada una de las aplicaciones para poder trabajar, cada uno con sus respectivas acciones.
En resumen, ya tenemos una aplicacion casi para nivel de produccion, hemos visto como podemos hacer una referencia de un proyecto hacia otro, por ende podemos acceder a las clases que sean publicas, con sus respectivos metodos y propiedades publicas tambien, solo nos falta una modificacion mas para que quede mas operativo, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar
Es para mantenimiento del sitio, gracias!
1.00 $