ErrorDeSintaxis

Pequeños fragmentos de código fuente en distintos lenguajes de programación, agrupados por categorías.

Puedes buscar entre los fuentes existentes, o aportar los tuyos.

C#: Agenda básica en C# (3)

Agenda básica, para guardar datos de hasta 1000 personas. Permite añadir y buscar. Versión con funciones y ficheros.

Lenguaje: C# (compilador: Mono 2.10.6)

Categoría: Básico

// Fuente procedente de ErrorDeSintaxis.es 
// Agenda básica, para guardar datos de hasta 
//  1000 personas. Permite añadir y buscar. 
//  Versión con funciones y ficheros. 
// Compilador: Mono 2.10.6 
// Nivel: Intermedio 
// Disponible desde 23/12/2011 
// Aportado por Nacho 
// Autor original: Nacho Cabanes 
// Web original: http://www.nachocabanes.com/csharp/curso/ 

/*
Agenda básica, para guardar datos de hasta 1000 personas.
 
De cada persona, se almacena el nombre, correo
electrónico y año de nacimiento.
 
Permite: añadir un dato, mostrar todos, buscar
Versión 3, usando funciones y ficheros
*/
 
using System;
using System.IO;
 
public class Agenda3
{
    struct tipoPersona
    {
        public string nombre;
        public string email;
        public ushort anyoNacimiento;
    }
 
    static int capacidad = 100;
    static tipoPersona[] gente = new tipoPersona[capacidad];
    static int cantidad = 0;
    static bool terminado = false;
    static string nombreFichero = "agenda.dat";
 
    public static void MostrarMenu()
    {
        Console.WriteLine("Agenda básica");
        Console.WriteLine();
        Console.WriteLine("1- Añadir una nueva persona");
        Console.WriteLine("2- Ver nombres de todos");
        Console.WriteLine("3- Buscar una persona");
        Console.WriteLine("0- Salir");
    }
 
    public static string LeerOpcion()
    {
        Console.Write("Escoja una opción: ");
        string opcion = Console.ReadLine();
        Console.WriteLine();
        return opcion;
    }
 
    public static void NuevoDato()
    {
        if (cantidad < capacidad - 1)
        {
            Console.WriteLine("Introduciendo la persona {0}",
              cantidad + 1);
 
            Console.Write("Introduzca el nombre: ");
            gente[cantidad].nombre = Console.ReadLine();
 
            Console.Write("Introduzca el correo electrónico: ");
            gente[cantidad].email = Console.ReadLine();
 
            Console.Write("Introduzca el año de nacimiento: ");
            gente[cantidad].anyoNacimiento =
                Convert.ToUInt16(Console.ReadLine());
 
            cantidad++;
            Console.WriteLine();
            GuardarEnFichero();
        }
        else
            Console.WriteLine("Base de datos llena");
    }
 
    public static void MostrarDatos()
    {
        if (cantidad == 0)
            Console.WriteLine("No hay datos");
        else
            for (int i = 0; i < cantidad; i++)
                Console.WriteLine("{0}: {1}",
                  i + 1, gente[i].nombre);
        Console.WriteLine();
    }
 
    public static void BuscarDatos()
    {
        Console.Write("¿Qué texto busca? ");
        string buscar = Console.ReadLine();
 
        bool encontrado = false;
        for (int i = 0; i < cantidad; i++)
            if (buscar.ToUpper() == gente[i].nombre.ToUpper())
            {
                encontrado = true;
                Console.WriteLine(
                  "{0}: Nombre: {1}, Email: {2}, Nacido en: {3}",
                  i + 1, gente[i].nombre, gente[i].email,
                  gente[i].anyoNacimiento);
            }
 
        if (!encontrado)
        {
            Console.WriteLine("No se ha encontrado.");
            Console.WriteLine();
        }
        Console.WriteLine();
    }
 
    public static void LeerDeFichero()
    {
        if (File.Exists(nombreFichero))
        {
            Console.WriteLine("Abriendo fichero...");
            StreamReader fichero = File.OpenText(nombreFichero);
            string linea1, linea2, linea3;
            do
            {
                linea1 = fichero.ReadLine();
                if (linea1 == null) // Fichero vacío o fin de fichero
                    break;
                linea2 = fichero.ReadLine();
                linea3 = fichero.ReadLine();
                if (cantidad < capacidad - 1)
                {
                    gente[cantidad].nombre = linea1;
                    gente[cantidad].email = linea2;
                    gente[cantidad].anyoNacimiento =
                        Convert.ToUInt16(linea3);
                    cantidad++;
                }
            }
            while ((linea1 != null) && (linea2 != null)
                && (linea3 != null));
            fichero.Close();
        }
    }
 
    public static void GuardarEnFichero()
    {
        StreamWriter fichero = File.CreateText(nombreFichero);
        for (int i = 0; i < cantidad; i++)
        {
            fichero.WriteLine(gente[i].nombre);
            fichero.WriteLine(gente[i].email);
            fichero.WriteLine(gente[i].anyoNacimiento);
        }
        fichero.Close();
    }
 
    public static void Main()
    {
        // Bucle principal
        LeerDeFichero();
        do
        {
            MostrarMenu();
            switch (LeerOpcion())
            {
                case "1": NuevoDato(); break;
                case "2": MostrarDatos(); break;
                case "3": BuscarDatos(); break;
                case "0": // Salir de la aplicación
                    Console.WriteLine();
                    Console.WriteLine("Saliendo...");
                    Console.WriteLine();
                    terminado = true;
                    break;
                default:
                    Console.WriteLine();
                    Console.WriteLine("Opción incorrecta!");
                    Console.WriteLine();
                    break;
            }
        } while (!terminado);
    }
}