Bienvenidos sean a este post, hasta ahora nuestra solucion posee tres proyectos independientes pero que empezaron a compartir informacion entre ellos, como el tema del alumnado a traves de la Secretaria y las notas de los alumnos por medio de los Profesores, hoy nos centraremos en modificar de forma definitiva el proyecto de los alumnos para que puedan ver sus notas, y haremos unas operaciones extras, tambien veremos como implementar una referencia.
Para esto volvamos a nuestra solucion Universidad, donde abriremos el proyecto alumnos y modificaremos la clase Estudiantes de la siguiente forma:
Estudiantes.cs
using System;
using System.IO;
namespace Alumnos.Clases
{
class Estudiantes
{
string pathAlumnos = "..\\..\\..\\alumnos.txt";
string pathExamenes = "..\\..\\..\\examenes.txt";
string pathNotas = "..\\..\\..\\notas.txt";
public void ListarAlumnos()
{
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("Presiona Enter para volver al menu");
Console.ReadLine();
}
public void MostrarNotas()
{
string alumno;
Console.Clear();
Console.Write("Ingresa el ID del alumno: ");
alumno = Console.ReadLine();
using (StreamReader sr = File.OpenText(pathNotas))
{
float total = 0;
int cuenta = 0;
string examen = "";
string linea,t;
string[] s, u;
while ((linea = sr.ReadLine()) != null)
{
s = linea.Split(',');
if (s[1] == alumno.ToUpper())
{
using(StreamReader sr2 = File.OpenText(pathExamenes))
{
while((t = sr2.ReadLine())!=null)
{
u = t.Split(',');
if (u[0] == s[0])
examen = u[1];
}
}
Console.WriteLine(s[1] + "\t" + examen + "\t" + s[2]);
total += float.Parse(s[2]);
cuenta++;
}
}
Console.WriteLine("Tu promedio es: " + (total/cuenta));
}
Console.Write("Presiona Enter para volver al menu");
Console.ReadLine();
}
}
}
En esta clase eliminaremos todos los metodos y propiedades que teniamos antes para reemplazarlos por tres variables donde estableceremos la ubicacion de nuestros archivos donde almacenamos los datos, por ahora lo haremos trabajar de esta manera, con esto definido vamos a pasar al primer metodo:
public void ListarAlumnos()
{
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("Presiona Enter para volver al menu");
Console.ReadLine();
}
Este codigo es para mostrar el listado de los alumos, en realidad lo usaremos para ver los codigos de cada alumno y que cada uno pueda saber el suyo, para este caso usamos el using nuevamente para poder ejecutar el StreamReader y con este abriremos nuestro archivo de alumnos (pathAlumnos), luego en el bloque definiremos una variable tipo string para almacenar las lineas del archivo y un array de tipo string para almacenar el producto del Split, luego usaremos un bucle while donde usaremos el ReadLine para leer linea por linea el archivo y esto lo almacenaremos en linea, el bucle se hara mientras que linea sea distinta de null, luego almacenaremos en s el Split de linea y luego lo mostraremos en pantalla, en este caso primero el Id y luego el apellido y el nombre, con esto explicado pasemos al siguiente metodo:
public void MostrarNotas()
{
string alumno;
Console.Clear();
Console.Write("Ingresa el ID del alumno: ");
alumno = Console.ReadLine();
using (StreamReader sr = File.OpenText(pathNotas))
{
float total = 0;
int cuenta = 0;
string examen = "";
string linea,t;
string[] s, u;
while ((linea = sr.ReadLine()) != null)
{
s = linea.Split(',');
if (s[1] == alumno.ToUpper())
{
using(StreamReader sr2 = File.OpenText(pathExamenes))
{
while((t = sr2.ReadLine())!=null)
{
u = t.Split(',');
if (u[0] == s[0])
examen = u[1];
}
}
Console.WriteLine(s[1] + "\t" + examen + "\t" + s[2]);
total += float.Parse(s[2]);
cuenta++;
}
}
Console.WriteLine("Tu promedio es: " + (total/cuenta));
}
Console.Write("Presiona Enter para volver al menu");
Console.ReadLine();
}
Este parece mas complejo pero no lo es, primero crearemos una variable para almacenar el id del alumno, nuestro siguiente paso sera solicitar al usuario en cuestion o mejor dicho su ID con esto podemos pasar a la siguiente parte, en este caso volveremos a usar un using para invocar un StreamReader que nos permitira abrir el archivo de notas, veamos las variables declaradas:
float total = 0;
int cuenta = 0;
string examen = "";
string linea,t;
string[] s, u;
En este caso definiremos uno tipo float llamado total, luego otro tipo int llamado cuenta, uno de tipo string llamado examen, dos de tipo string llamados linea y t, luego dos arrays de tipo string llamado s y u, nuestro siguiente paso sera un bucle while donde verificara que la linea leida sea distinta de null, la lectura la almacenaremos en linea, despues usaremos un Split que almacenaremos en s, nuestro siguiente paso sera usar un condicional donde le diremos que ejecute el bloque solo si s[1] es igual al alumno que ingresamos, en este caso usaremos otro using para que abra el archivo de examenes donde volveremos a repetir lo mismo para que lea linea por linea pero esta vez pondremos otro condicional donde verificara que el valor del bucle anterior s[0] sea igual a u[0], que es el nuevo Split del nuevo bucle, si ambos coinciden procedemos a almacenar el valor de u[0] en examen, pero que estamos haciendo exactamente? Simple, en lugar de informar el codigo estamos informando la fecha del examen, luego cerramos este using, mostramos en pantalla primero el usuario, luego la fecha del examen almacenada en la variable examen y por ultimo la nota.
Nuestras siguientes dos lineas se encargaran de sumar al valor de total el nuevo valor almacenado en s[2] al cual transformaremos en float con Parse, nuestra siguiente linea solo incrementa a cuenta en uno por cada pasada, una vez que termina este using procedemos a mostrar el resultado de total divido por cuenta, es decir el promedio de las notas del alumno, con esto completamos esta clase, pasemos a modificar el codigo de Program.cs donde eliminaremos todo el codigo y usaremos el siguiente:
Program.cs
using System;
using System.Collections.Generic;
using Alumnos.Clases;
namespace Alumnos
{
class Program
{
static void Main(string[] args)
{
int opcion;
Estudiantes estudiante = new Estudiantes();
do
{
Console.Clear();
Console.WriteLine("Bienvenidos a la universidad");
Console.WriteLine("Tienes este listado de opciones:");
Console.WriteLine("(1) Listado de alumnos");
Console.WriteLine("(2) Notas del alumno");
Console.WriteLine("(3) Salir del programa");
Console.Write("Elige una opcion: ");
opcion = int.Parse(Console.ReadLine());
switch (opcion)
{
case 1:
Console.Clear();
estudiante.ListarAlumnos();
break;
case 2:
estudiante.MostrarNotas();
break;
case 3:
break;
default:
Console.WriteLine("Debes elegir una opcion del menu!!!");
Console.ReadLine();
break;
}
} while (opcion != 3);
}
}
}
En este caso primero eliminamos todos las definiciones que usabamos para crear los alumnos, los examenes y las notas, para esta clase primero declararemos una variable llamada opcion, luego crearemos un objeto de la clase Estudiantes y la llamaremos estudiante, nuestro siguiente paso sera usar un do…while donde saldra del mismo solo si opcion es igual a 3, dentro del bloque mostraremos el menu que el alumno tiene disponible, luego le pediremos que ingrese un valor y por medio de switch tomaremos una decision en base al valor ingresado, si el valor es 1 llamara al metodo ListarAlumnos, si el valor es 2 llamara a MostrarNotas, en el caso de 3 sera para salir y el default para cuando ingresamos un valor equivocado.
Con todo esto explicado podemos proceder a Compilar y ejecutar nuestra aplicacion como se ve en el siguiente video
Con este video podemos ver como los alumnos pueden consultar no solamente el codigo que tienen asignado sino tambien las notas de los examenes, y el promedio de sus examenes.
En resumen, hoy hemos cambiado al proyecto Alumnos para que pueda trabajar con todos los datos que hemos generado con nuestros proyectos anteriores, hemos visto como podemos hacerlos interactuar con los archivos, tambien hemos visto como en base a un dato podemos obtener otro datos, espero les haya sido util 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 $