Anuncios

Bienvenidos sean a este post, en el post anterior logramos que Alumnos pudiera tomar sus datos desde un archivo con extension .ini para facilitarnos a la hora de trabajar con distintas ubicaciones de los archivos y hoy veremos como aplicar lo mismo pero para los otros proyectos.

Anuncios

En este post hicimos una referencia del proyecto Alumnos para poder acceder las clases publicas del mismo, como tenemos esto realizado vamos a modificar a nuestra clase Profesor de la siguiente manera:

Profesor.cs

using System;
using System.IO;
using Alumnos.Clases;

namespace Profesores.Clases
{
    class Profesor
    {
        Inifile config = new Inifile("config.ini");

        string pathAlumnos;
        string pathExamenes;
        string pathNotas;
        public void CrearExamen()
        {
            pathExamenes = config.mostrar("rutas", "examenes");
            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()
        {
            pathExamenes = config.mostrar("rutas", "examenes");
            pathAlumnos = config.mostrar("rutas", "alumnos");
            pathNotas = config.mostrar("rutas", "notas");
            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

Nuestra primera modificacion sera esta:

using System;
using System.IO;
using Alumnos.Clases;

namespace Profesores.Clases
{
    class Profesor
    {
        Inifile config = new Inifile("config.ini");

        string pathAlumnos;
        string pathExamenes;
        string pathNotas;
Anuncios
Anuncios

Observen como agregamos la tercer linea para poder acceder a la carpeta de Clases del proyecto Alumnos, nuestra siguiente modificacion es la creacion de un objeto de la clase Inifile y le informamos el nombre del archivo donde estan las configuraciones, el siguiente paso sera la declaracion de las tres variables para almacenar los paths, nuestras siguientes modificacioens seran ahora en los metodos, veamos el metodo CrearExamen:

        public void CrearExamen()
        {
            pathExamenes = config.mostrar("rutas", "examenes");
Anuncios

En este caso le definimos a pathExamenes por medio de mostrar le pasamos los valores rutas y examenes para ubicar este archivo, nuestro siguiente metodo AgregarNotas sufrira esta modificacion:

        public void AgregarNota()
        {
            pathExamenes = config.mostrar("rutas", "examenes");
            pathAlumnos = config.mostrar("rutas", "alumnos");
            pathNotas = config.mostrar("rutas", "notas");
Anuncios
Anuncios

En este caso definiremos a las tres variables por medio del metodo mostrar de la clase Inifile, con esto ya realizamos todas las modificaciones necesarias para acceder a los archivos, recuerden que las notas de los alumnos la vemos a traves del proyecto Alumnos, nuestra ultima modificacion sera en el proyecto Secretaria.

Para el proyecto Secretaria debemos hacer primero la referencia a Alumnos, para ello vayan al Explorador de soluciones, hagan click con el boton derecho sobre Referencias en el proyecto y elegimos Agregar Referencia, luego iremos a la Opcion Proyecto->Solucion (deberia estar seleccionado automaticamente), en ella nos aparecen los proyectos restantes de la Solucion, tilden al proyecto Alumno y presionen Aceptar, con esto nos quedara dentro de las Referencias el proyecto Alumnos, nuestro siguiente paso sera modificar la clase Alumno.cs de la siguiente manera:

Alumno.cs

using System;
using System.IO;
using Alumnos.Clases;
namespace Secretaria.Clases
{
    class Alumno
    {
        Inifile config = new Inifile("config.ini");
        string nombre,apellido,edad,pcia;
        string path;
        string pathNotas;

        public void CrearArchivo()
        {
            path = config.mostrar("rutas", "alumnos");
            if (File.Exists(path))
                File.Delete(path);
            using(StreamWriter sw = File.CreateText(path)){}
        }
        public void AgregarAlumno()
        {
            path = config.mostrar("rutas", "alumnos");
            if(!File.Exists(path))
                using (StreamWriter sw = File.CreateText(path)) { }

            int pos = 0;
            using (StreamReader sr = File.OpenText(path))
            {
                string s;
                while((s = sr.ReadLine()) != null)
                {
                    pos++;
                }
            }
            Console.Write("Ingrese el nombre: ");
            nombre = Console.ReadLine();
            Console.Write("Ingrese el apellido: ");
            apellido = Console.ReadLine();
            Console.Write("Ingrese el edad: ");
            edad = Console.ReadLine();
            Console.Write("Ingrese el Provincia: ");
            pcia = Console.ReadLine();

            using (StreamWriter sw = File.AppendText(path))
            {   
                sw.WriteLine("ID100" + pos + "," + nombre 
                    + "," + apellido + "," + edad + "," + pcia);
            }

            Console.Write("Presione Enter para volver al menu");
            Console.ReadLine();
        }

        public void ListarAlumnos()
        {
            path = config.mostrar("rutas", "alumnos");
            Console.Clear();
            Console.WriteLine("Listado de alumnos regulares");
            using(StreamReader sr = File.OpenText(path))
            {
                string linea;
                string[] s;
                while ((linea = sr.ReadLine()) != null)
                {
                    s = linea.Split(',');
                    Console.WriteLine("Usuario: " + s[0] + "\t\t" 
                        + "Nombre: " + s[2] + ", " + s[1] + "\n" 
                        + "Edad: " + s[3] + "\t\t" + "Provincia: " + s[4] + "\n");
                }
                Console.ReadLine();
            }
        }

        public void CalidadAcademica()
        {
            path = config.mostrar("rutas", "alumnos");
            pathNotas = config.mostrar("rutas", "notas");
            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();
        }
    }
}
Anuncios

En este nuevo codigo haremos muy pocas modificaciones veamos las primera de ellas:

using System;
using System.IO;
using Alumnos.Clases;
namespace Secretaria.Clases
{
    class Alumno
    {
        Inifile config = new Inifile("config.ini");
        string nombre,apellido,edad,pcia;
        string path;
        string pathNotas;
Anuncios

En este caso primero agregamos la ubicacion de la carpeta Clases en el proyecto Alumnos, luego lo primero que haremos es crear un objeto para la clase Inifile donde le pasaremos el archivo config.ini, despues declararemos las distintas variables que usaremos en el programa a nivel global, nuestra siguiente modificacion estara en el metodo CrearArchivo:

        public void CrearArchivo()
        {
            path = config.mostrar("rutas", "alumnos");
Anuncios

Como se observa lo unico que hacemos es definir el valor para path que sera la ubicacion de nuestro archivo donde estan los alumnos, el resto quedara de la misma forma, pasemos a ver la modificacion de AgregarAlumno:

        public void AgregarAlumno()
        {
            path = config.mostrar("rutas", "alumnos");
Anuncios

Al igual que el anterior solo definimos el valor para path que lo obtendremos del archivo .ini, el resto debe quedar de la misma manera, nuestra siguiente modificacion sera para el metodo ListarAlumnos:

        public void ListarAlumnos()
        {
            path = config.mostrar("rutas", "alumnos");
Anuncios

En este caso volvemos a hacer lo mismo que antes solo definimos a path y el resto debe quedar como antes, nuestra ultima modificacion para el metodo CalidadAcademica:

        public void CalidadAcademica()
        {
            path = config.mostrar("rutas", "alumnos");
            pathNotas = config.mostrar("rutas", "notas");
Anuncios
Anuncios

Para este metodo definiremos primero el valor para path, al igual que antes, la siguiente variable es pathNotas y le asignaremos el valor obtenido de rutas y notas, nuestro siguiente paso sera tomar el archivo config.ini que creamos en el post anterior y lo copiaremos en las carpetas de debug de nuestros proyectos, recuerden que el config.ini siempre debe estar al lado del ejecutable para que lo pueda encontrar, con todo esto podriamos compilar y probar, pero para ahorrar tiempo voy a mostrarles un video donde lo usaremos en produccion a nuestro proyecto con todas las modificaciones realizadas

Anuncios

En este video podemos ver como primero lo compilamos, luego los pasamos a la carpeta que designamos como Produccion, el config.ini lo tenemos configurado desde el post anterior y con solo copiar los ejecutables nos alcanza, los probamos y funcionan, tambien probamos de renombrar el archivo de configuracion y vemos que los programas ya no funcionan porque no tienen los valores de path.

Anuncios

Despues creamos una carpeta para guardar los archivos con los datos, movimos los mismos a esta carpeta, luego modificamos el config.ini para que apunte a esta nueva direccion, lo chequeamos y vemos que los programas funcionan perfectos, con esto logramos tener un programa que con solo modificar un archivo de texto nos permite seguir trabajando de manera correcta sin necesidad de recompilar el programa.

Anuncios

En resumen, hoy hemos visto como podemos usar una clase entre los distintos proyectos, como nos beneficia a la hora de manejar informacion de nuestros programas, como con un solo archivo pudimos hacer que los tres programas sepan donde estan sus archivos de trabajo, tambien con este archivo y distintas secciones podemos hacer que nos almacene otras configuraciones, 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 $