Anuncios
Anuncios

Bienvenidos sean a este post, hasta ahora hemos creado dos proyectos para nuestra solucion llamada Universidad, en el primer caso vimos a los Alumnos y para el segundo vimos a la Secretaria que se encarga de administrar a los alumnos de la universidad, el dia de hoy crearemos un nuevo proyecto para agregar a los profesores.

Primero abriremos nuestra solucion Universidad, en el explorador de soluciones haremos click con el boton derecho y seleccionaremos Agregar -> Nuevo Proyecto, luego nos aparecera una ventana donde seleccionaremos Aplicacion de Consola .Net Framework, pulsamos siguiente, le pondremos como nombre Profesores y le elegiran la misma version que la usada en Universidad, pulsamos Crear y generamos a nuestro nuevo proyecto.

Volveremos a crear una nueva carpeta que llamaremos Clases, dentro de esta carpeta crearemos una nueva clase que llamaremos Profesor, una vez creado modificaremos el codigo generado por el siguiente:

Profesor.cs

using System;
using System.IO;

namespace Profesores.Clases
{
    class Profesor
    {
        string pathAlumnos = "..\\..\\..\\alumnos.txt";
        string pathExamenes = "..\\..\\..\\examenes.txt";
        string pathNotas = "..\\..\\..\\notas.txt";

        public void CrearExamen()
        {
            string codigo, fecha, tipo;
            int pos = 0;
            Console.Clear();
            Console.Write("Ingresa la fecha de examen: ");
            fecha = Console.ReadLine();
            Console.Write("Elige el tipo de examen (P) Parcial o (F) Final: ");
            tipo = Console.ReadLine();

            if (!File.Exists(pathExamenes))
                using (StreamWriter sw = File.CreateText(pathExamenes)) { }

            using(StreamReader sr = File.OpenText(pathExamenes))
            {
                while ((sr.ReadLine()) != null)
                {
                    pos++;
                }
            }
            if (tipo.ToUpper() == "P")
                codigo = "PA100" + pos;
            else
                codigo = "FI100" + pos;

            using (StreamWriter sw = File.AppendText(pathExamenes))
            {
                sw.WriteLine(codigo + "," + fecha);
            }
            Console.Write("Presiona Enter para volver al Menu");
            Console.ReadLine();
        }

        public void AgregarNota()
        {
            string alumno, examen, nota;
            Console.Clear();
            Console.WriteLine("Codigo de 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 codigo del alumno: ");
            alumno = Console.ReadLine();
            Console.WriteLine("Codigos de examenes:");
            using (StreamReader sr = File.OpenText(pathExamenes))
            {
                string linea;
                string[] s;

                while ((linea = sr.ReadLine()) != null)
                {
                    s = linea.Split(',');
                    Console.WriteLine(s[0] + " - " + s[1]);
                }
            }
            Console.Write("Ingresa el codigo del examen: ");
            examen = Console.ReadLine();
            Console.Write("Ingresa la nota: ");
            nota = Console.ReadLine();
            using(StreamWriter sw = File.AppendText(pathNotas))
            {
                sw.WriteLine(examen.ToUpper() + "," 
                    + alumno.ToUpper() + "," + nota);
            }
            Console.Write("Presiona Enter para volver al menu");
            Console.ReadLine();
        }

        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();
        }
    }
}
Anuncios

En esta clase primero crearemos tres variables para almacenar los distintos paths de los tres archivos que vamos a usar:

        string pathAlumnos = "..\\..\\..\\alumnos.txt";
        string pathExamenes = "..\\..\\..\\examenes.txt";
        string pathNotas = "..\\..\\..\\notas.txt";
Anuncios

Con esto estableceremos la ubicacion de los tres archivos que manejaremos, el primero sera para el archivo de los alumnos, pathAlumnos, el segundo sera para el archivo de los examenes, pathExamenes, y el ultimo sera para las notas de los examenes, pathNotas, con esto aclarado pasemos al primer metodo:

        public void CrearExamen()
        {
            string codigo, fecha, tipo;
            int pos = 0;
            Console.Clear();
            Console.Write("Ingresa la fecha de examen: ");
            fecha = Console.ReadLine();
            Console.Write("Elige el tipo de examen (P) Parcial o (F) Final: ");
            tipo = Console.ReadLine();

            if (!File.Exists(pathExamenes))
                using (StreamWriter sw = File.CreateText(pathExamenes)) { }

            using(StreamReader sr = File.OpenText(pathExamenes))
            {
                while ((sr.ReadLine()) != null)
                {
                    pos++;
                }
            }
            if (tipo.ToUpper() == "P")
                codigo = "PA100" + pos;
            else
                codigo = "FI100" + pos;

            using (StreamWriter sw = File.AppendText(pathExamenes))
            {
                sw.WriteLine(codigo + "," + fecha);
            }
            Console.Write("Presiona Enter para volver al Menu");
            Console.ReadLine();
        }
Anuncios
Anuncios

Primero crearemos tres variables de tipo string llamadas codigo, para almacenar el codigo de identificacion del examen, luego uno llamada fecha para almacenar la fecha del examen y el ultimo sera para el tipo (si es un parcial o un final), y despues generamos uno de tipo int llamado pos con el valor 0, limpiamos la pantalla, y solicitamos que ingrese la fecha del examen, luego le pediremos que ingresen una letra (P o F) para indicar si es un parcial o un final y este lo almacenaremos en tipo, luego usaremos un condicional donde verificara si no existe el archivo indicado en pathExamenes, en caso de ser verdadero procedera a generar un archivo vacio mediante esta linea:

using (StreamWriter sw = File.CreateText(pathExamenes)) { }
Anuncios

Luego usaremos el bloque de using que nos permite abrir el archivo informado en pathExamenes, en ella usaremos un bucle while que lo hara mientras la lectura de lineas sea distinta de null, y en el bloque lo unico que haremos es incrementar el valor de pos, donde tendremos este condicional:

            if (tipo.ToUpper() == "P")
                codigo = "PA100" + pos;
            else
                codigo = "FI100" + pos;
Anuncios

En este caso chequea si tipo (usamos el ToUpper para que lo transforme en mayusculas) si es P mayuscula asignara a codigo la identificacion para parciales y al final el valor final de pos, en caso contrario asignara a codigo la identificacion para final y al valor por ultimo le asignamos el valor de pos, el siguiente bloque se encarga de abrir nuestro archivo para agregar una nueva linea (AppendText) y despues por medio de WriteLine le pasaremos el valor de codigo y la fecha, pasemos a nuestro siguiente metodo:

        public void AgregarNota()
        {
            string alumno, examen, nota;
            Console.Clear();
            Console.WriteLine("Codigo de 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 codigo del alumno: ");
            alumno = Console.ReadLine();
            Console.WriteLine("Codigos de examenes:");
            using (StreamReader sr = File.OpenText(pathExamenes))
            {
                string linea;
                string[] s;

                while ((linea = sr.ReadLine()) != null)
                {
                    s = linea.Split(',');
                    Console.WriteLine(s[0] + " - " + s[1]);
                }
            }
            Console.Write("Ingresa el codigo del examen: ");
            examen = Console.ReadLine();
            Console.Write("Ingresa la nota: ");
            nota = Console.ReadLine();
            using(StreamWriter sw = File.AppendText(pathNotas))
            {
                sw.WriteLine(examen.ToUpper() + "," 
                    + alumno.ToUpper() + "," + nota);
            }
            Console.Write("Presiona Enter para volver al menu");
            Console.ReadLine();
        }
Anuncios

Este metodo se encargara de agregar las notas a los examenes, primero crearemos tres variables para almacenar al alumno, el examen y la nota, despues limpiaremos la pantalla y vamos a generar el primer listado donde mostraremos a los alumnos, para ello usaremos este bloque:

            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]);
                }
            }
Anuncios
Anuncios

En este caso usaremos el using para abrir el archivo de alumnos por medio de StreamReader, luego usaremos dos variables de tipo string, la llamada linea sera para leer linea por linea del archivo y la llamada s sera en realidad un array de tipo string, nuestro siguiente paso sera un bucle donde a linea le asignaremos el valor obtenido por ReadLine, y la condicion del while se hara mientras que esta variable sea distinta de null, en el bloque del while, usaremos a Split para dividir a linea y asignaremos los valores a la variable s, nuestro siguiente paso sera mostrar los valores almacenados en s de la mejor forma que creamos conveniente, despues habra otro bucle donde haremos exactamente lo mismo que explicamos pero con los examenes, luego le pediremos que ingrese el valor de la nota, despues de esto procedera a abrir el archivo de notas por medio de using y StreamWriter donde por medio de AppendText agregaremos los tres valores dentro del archivo, en el siguiente orden:

  • examen
  • alumno
  • nota

En los dos primeros casos usamos ToUpper para que lo almacene en mayusculas, con esto cubrimos como agregar una nota para el examen, ahora solo nos falta el siguiente metodo:

        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();
        }
Anuncios

En este ultimo metodo declaramos una sola variable llamada alumno, luego usaremos exactamente el mismo bucle para obtener los codigos de los alumnos tal como lo vimos en el metodo anterior, despues le pediremos que ingrese el codigo del alumno, una vez ingresado usaremos el siguiente bloque:

            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]);
                }
            }
Anuncios
Anuncios

En este caso trabaja de una forma muy similar porque tendremos las dos variables y volveremos a usar el split para obtener todos los datos pero en este caso mostraremos en pantalla solamente si el valor de alumno es igual a s[1], de lo contrario omitira el resto, con esto ya explicamos el metodo para mostrar las notas, con esto concluimos con esta clase, nuestra siguiente modificacion sera en Program.cs donde cambiaremos el codigo generado por el siguiente:

Program.cs

using System;
using Profesores.Clases;

namespace Profesores
{
    class Program
    {
        static void Main(string[] args)
        {
            int opcion;
            Profesor profesor = new Profesor();

            do
            {
                Console.Clear();
                Console.WriteLine("Bienvenido a la Universidad.");
                Console.WriteLine("Opciones disponibles:");
                Console.WriteLine("(1) Agregar Examen");
                Console.WriteLine("(2) Agregar notas");
                Console.WriteLine("(3) Ver notas de alumno");
                Console.WriteLine("(4) Salir del programa");
                Console.Write("Elige una opcion:");
                opcion = int.Parse(Console.ReadLine());

                switch (opcion)
                {
                    case 1:
                        profesor.CrearExamen();
                        break;
                    case 2:
                        profesor.AgregarNota();
                        break;
                    case 3:
                        profesor.MostrarNotas();
                        break;
                    case 4:
                        break;
                    default:
                        Console.WriteLine("Debes elegir una opcion entre 1-4");
                        Console.ReadLine();
                        break;
                }
            } while (opcion!=4);
        }
    }
}
Anuncios
Anuncios

Para esta clase primero declaramos una variable para las opciones, y luego creamos un objeto de la clase Profesor, nuestro siguiente bloque sera un bucle do…while que lo hara mientras opcion sea distinta de 4, despues tendremos un bloque que solo se encarga de mostrar el menu que mostraremos en pantalla para que el usuario pueda usarlo, pediremos una de las opciones disponibles con esto cargado tendremos el siguiente switch:

                switch (opcion)
                {
                    case 1:
                        profesor.CrearExamen();
                        break;
                    case 2:
                        profesor.AgregarNota();
                        break;
                    case 3:
                        profesor.MostrarNotas();
                        break;
                    case 4:
                        break;
                    default:
                        Console.WriteLine("Debes elegir una opcion entre 1-4");
                        Console.ReadLine();
                        break;
                }
Anuncios
Anuncios

En este bloque en base a cada valor que ingresemos llamara a los distintos metodos de la clase Profesor, para el valor 1 sera para crear un nuevo examen, en el valor 2 sera para agregar nuevas notas en los examenes, si e valor es 3 sera para ver todas las notas del alumno y por ultimo el 4 sera para salir del programa, por eso esta vacia y cumple la condicion del bucle while, por ultimo el default para cuando ingresamos un valor incorrecto, con todo esto modificado podemos proceder a compilarlo y probarlo tal como se ve en el siguiente video

Anuncios

En el video vemos como se crean los examenes, luego como podemos agregar las notas para cada uno de los alumnos en cada uno de los examenes y finalmente hicimos algunas consultas, viendo el resultado en pantalla, por ultimo vamos a la ubicacion de los archivos para mostrar el nuevo contenido de los mismos.

Anuncios
Nota: En las ubicaciones de los archivos de texto usamos esa ubicacion para que esten todos en el mismo lugar, mas adelante lo volveremos a modificar para nuestra solucion final.
Anuncios

En resumen, hoy hemos visto como crear un proyecto para poder crear los examenes, luego para ingresar nuevas notas en los examenes, como lo relacionamos con los alumnos y por ultimo como hacer una consulta de todas sus notas, 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.

Anuncios

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 $