Se debe realizar el programa de una agenda. Para ello se debe crear la clase Agenda, que poseerá los siguientes atributos:ATRIBUTO:_______ TIPO: _____ACCESIBILIDAD _____-LECTURA/ESCRITURAId ______________int_________ privado____________ solo lecturaAmigo _________ Persona______ "____________________ siObservaciones ___string ________"____________________ siAlarma _______ DateTime______ "_____________________ si
La clase PersonaATRIBUTO_____ ________TIPO____ ACCESIIBILIDAD____ LECTURA/ESCRITURAnombre _______________string______ privado_______________ siApellido _________________"___________ " __________________siTelefono ________________"___________ " __________________siFecha de nacimiento ____ DateTime______ "__________________ siLos datos de las personas se deben persistir en un archivo llamado ‘agenda.xml’.Cada vez que se abra se debe el campo observaciones de todos los registros que tengan ‘seteada’ la alarma en esa fecha (fecha actual). Para ello se deberá llamar al método de clase TrerAniversarios. Dado que el programa requiere de varias tareas, se deberá contar con un menú de opciones como el siguiente:- Cargar personas
- Modificación de datos
- Eliminar personas
- Aniversarios
- Buscar
- Realizar backup
- Salir
El menú se debe mostrar en mayúscula y en color (distinto al blanco) la letra que hay que presionar para elegir la opción.A continuación se describe la función de cada ítem del menú de opciones.Cargar personas: Permite cargar los datos la primera vez y agregar datos una vez generado el archivo. El ‘Id’, que identifica a cada persona, deberá ser auto numérico. Si el archivo no contiene registros el primero será el 1.Modificación de datos: Permite al usuario modificar algún campo en particular. El registro a modificar se busca ingresando el nombre y apellido en el archivo, si el registro existe, se permitirá modificar cualquier campo (a excepción de Id), previa confirmación del usuario. Si el registro no existe, se deberá informar adecuadamente.Eliminar personas: Al ingresar a esta opción se ingresará el nombre, apellido y/o Id. Si el registro existe, se eliminara esa persona del archivo, previa confirmación por parte del usuario. Si el registro no existe, se deberá informar adecuadamente.Aniversarios: Se mostrara por pantalla todos los datos de las personas que cumplan años en ese día. Para esto no se debe ingresar la fecha, el programa debe tomar la fecha del sistema.Buscar personas: Se debe mostrar un submenú como el siguiente:·Buscar por apellido·Buscar por localidadPara buscar por apellido se ingresara el dato y, si existe, se mostraran todos los datos de la o las personas que coincidan con el apellido ingresado.Misma tarea tendrá la opción de búsqueda por localidad.Realizar backup: Al elegir esta opción se realizara una copia de seguridad del archivo ‘agenda.xml’, la copia de seguridad se llamara ‘agendabackup.xml’Salir: Termina con la ejecución del programa.NOTAS- Todas las opciones del menú se deben realizar por métodos del objeto miAgenda, que será creado en el Main.
- Se deberá crear una lista de Agenda para serializar y/o deserializar.
- Todos los ingresos de datos deben ser claros para el usuario, por ejemplo, ingresar las fechas con formato DD/MM/AAAA.
- Todas las pantallas deben ser hechas en forma prolija, como por ejemplo mostrar los datos encolumnados y alineados por algún criterio.
- Utilizar rutinas de control de errores y validación de datos.
- Cada vez que se realice una carga, modificación o borrado de registros se deberá llamar al método estático GuardarEnDisco.
- Respetar las nomenclaturas para atributos, métodos, clases, propiedades, etc.
- Utilizar comentarios documentados y todo aquello que crea necesario para la mejor comprensión del programa.
- Agregue todo aquello que crea necesario para una buena presentación de las pantallas e interfaz con el usuario.
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace agenda
{
class Persona
{
#region Atributos
private int _id;
private string _nombre;
private string _apellido;
private string _tel;
private DateTime _nacimiento;
private string _local;
#endregion
#region Propiedades
public int Id
{
get { return _id; }
}
public string Nombre
{
get { return _nombre; }
set { _nombre = value; }
}
public string Apellido
{
get { return _apellido; }
set { _apellido = value; }
}
public string Tel
{
get { return _tel; }
set { _tel = value; }
}
public DateTime Nacimineto
{
get { return _nacimiento; }
set { _nacimiento = value; }
}
public string Local
{
get { return _local; }
set { _local = value; }
}
#endregion
#region Constructor
public Persona()
{ }
public Persona(string nom, string ape, string tel, DateTime nacimiento, string local)
{
_nombre = nom;
_apellido = ape;
_tel = tel;
_nacimiento = nacimiento;
_local = local;
}
#endregion
}
[Serializable]
class Agenda
{
#region Atributos
private List<string> _observaciones;
private List<Persona> _amigo;
private List<DateTime> _alarma;
public const string FILE = "c:\\MiAgenda.xml";
#endregion
#region Propiedades
public List<string> Observaciones
{
get { return _observaciones; }
set { _observaciones = value; }
}
public List<Persona> Amigo
{
get { return _amigo; }
set { _amigo = value; }
}
public List<DateTime> Alarma
{
get { return _alarma; }
set { _alarma = value; }
}
#endregion
#region Metodos
static public void GuardarEnDisco(Agenda aux)
{
XmlTextWriter wr = new XmlTextWriter(FILE, Encoding.UTF8);
XmlSerializer sr = new XmlSerializer(typeof(Agenda));
sr.Serialize(wr, aux);
Console.WriteLine("Guardando datos...");
Console.ReadKey();
Console.WriteLine("Datos guardados");
Console.Read();
}
public Agenda()
{
_observaciones =new List<string>();
_amigo = new List<Persona>();
_alarma = new List<DateTime>();
}
public void CargarPersonas()
{
Console.WriteLine("Nombre:");
string nom = Console.ReadLine();
Console.WriteLine("Apellido:");
string ape = Console.ReadLine();
Console.WriteLine("Teléfono: ");
string tel = Console.ReadLine();
Console.WriteLine("Localidad: ");
string loc = Console.ReadLine();
Console.WriteLine("Ingrese Fecha de nacimiento: \n Año:");
int año = int.Parse(Console.ReadLine());
Console.WriteLine("Mes:\n");
int mes = int.Parse(Console.ReadLine());
Console.WriteLine("Dia: ");
int dia = int.Parse(Console.ReadLine());
DateTime fech = new DateTime(año, mes, dia);
Persona auxx = new Persona(nom, ape, tel, fech, loc);
Amigo.Add(auxx);
}
public void ModificarDatos(Agenda aux)
{
GuardarEnDisco(aux);
string rta = "s";
while (rta == "s")
{
Console.WriteLine("Datos de la persona a buscar:");
Console.WriteLine("Nombre:");
string auxnom = Console.ReadLine();
Console.WriteLine("Apellido:");
string auxape = Console.ReadLine();
//Persona aux=new Persona();
int flag = 0;
foreach (Persona a in Amigo)
{
if (a.Nombre == auxnom && a.Apellido == auxape)
{
flag = 1;
Console.WriteLine("Ingrese nuevos datos");
CargarPersonas();
}
}
if (flag == 0)
{
Console.WriteLine("Persona inexistente");
Console.Read();
}
Console.WriteLine("Modificar otro -> s/n?");
rta = Console.ReadLine();
while (rta != "s" || rta != "n")
{
Console.WriteLine("Respuesta no valida\nReingrese");
Console.WriteLine("Modificar otro -> s/n?");
rta = Console.ReadLine();
}
}
}
public void EliminarPersonas(Agenda aux)
{
GuardarEnDisco(aux);
string rta = "s";
while (rta == "s")
{
Console.WriteLine("Datos de la persona a eliminar:");
Console.WriteLine("Nombre:");
string auxnom = Console.ReadLine();
Console.WriteLine("Apellido:");
string auxape = Console.ReadLine();
//Persona aux=new Persona();
int flag = 0;
foreach (Persona a in Amigo)
{
if (a.Nombre == auxnom && a.Apellido == auxape)
{
flag = 1;
Console.WriteLine("Realmente desea eliminar esta persona?");
Console.WriteLine("Nombre:{0}\nApellidp:{0}", auxnom, auxape);
Console.WriteLine("s/n?");
string op = Console.ReadLine();
while (op != "s" || op != "n")
{
Console.WriteLine("Respuesta no valida\nReingrese:");
Console.WriteLine("Eliminar ->s/n?");
op = Console.ReadLine();
}
if (rta == "s")
{
Console.WriteLine("Persona Eliminada");
}
}
}
if (flag == 0)
{
Console.WriteLine("Persona inexistente");
}
Console.WriteLine("Eliminar otro -> s/n?");
rta = Console.ReadLine();
while (rta != "s" || rta != "n")
{
Console.WriteLine("Respuesta no valida\nReingrese");
Console.WriteLine("Eliminar otro -> s/n?");
rta = Console.ReadLine();
}
}
}
public void BuscarPersonas()
{
Console.WriteLine(" BUSQUEDA DE PERSONAS \n ");
Console.WriteLine("1-por apellido\n2-por loccalidad");
int opi = int.Parse(Console.ReadLine());
while (opi != 1 && opi != 2)
{
Console.WriteLine(" ERROR, opcion no valida reingrese\nBUSQUEDA DE PERSONAS \n ");
Console.WriteLine("1-por apellido\n2-por loccalidad");
opi = int.Parse(Console.ReadLine());
}
int esta = 0;
if (opi == 1)
{
Console.WriteLine(" Ingrese Apellido: \n");
string auxape = Console.ReadLine();
foreach (Persona var in _amigo)
{
if (auxape == var.Apellido)
Console.WriteLine("ID:{0}\nNombre:{0}\nApellido:{0}\nFecha de nacimiento:{0}\nTelefono:{0}\nLocalidad:{0}", var.Id, var.Nombre, var.Apellido, var.Nombre, var.Tel, var.Local);
Console.Read();
esta = 1;
}
}
else
{
Console.WriteLine(" Ingrese Localidad: \n");
string auxloki = Console.ReadLine();
foreach (Persona var in _amigo)
{
if (auxloki == var.Local)
Console.WriteLine("ID:{0}\nNombre:{0}\nApellido:{0}\nFecha de nacimiento:{0}\nTelefono:{0}\nLocalidad:{0}", var.Id, var.Nombre, var.Apellido, var.Nombre, var.Tel, var.Local);
Console.Read();
esta = 1;
}
}
if (esta == 0)
Console.WriteLine(" la persona es inexistente");
}
public void Aniversarios()
{
DateTime actual = DateTime.Now;
int flag = 0;
foreach (Persona fecha in Amigo)
{
if (fecha.Nacimineto == actual)
{
flag = 1;
Console.WriteLine("FELIZ CUMPLEAÑOS {0}{1}\n", fecha.Nombre, fecha.Apellido);
Console.WriteLine("ID:{0}\nNombre:{0}\nApellido:{0}\nFecha de nacimiento:{0}\nTelefono:{0}\nLocalidad:{0}", fecha.Id, fecha.Nombre, fecha.Apellido, fecha.Nombre, fecha.Tel, fecha.Local);
Console.Read();
}
}
if (flag == 0)
{
Console.WriteLine("No hay aniversarios");
Console.ReadLine();
}
}
public void Salir()
{
Console.WriteLine("SALIR, ADIOOOOSS!!");
Console.Read();
}
public void DefinirAlarma()
{
Console.WriteLine("ingrse fecha de recordatorio");
Console.WriteLine("Año:");
int año = int.Parse(Console.ReadLine());
while (año < DateTime.Now.Year)
{
Console.WriteLine("ERROR, REINGRSE año:");
año = int.Parse(Console.ReadLine());
}
Console.WriteLine("Mes:\n");
int mes = int.Parse(Console.ReadLine());
while (mes < DateTime.Now.Month)
{
Console.WriteLine("REINGRESE Mes:");
mes = int.Parse(Console.ReadLine());
}
Console.WriteLine("Dia: ");
int dia = int.Parse(Console.ReadLine());
while (dia > 31 && dia < 0)
{
Console.WriteLine("REINGRESE dia:");
dia = int.Parse(Console.ReadLine());
}
if (mes == DateTime.Now.Month)
while (dia < DateTime.Now.Day)
{
Console.WriteLine("ERROR, no puede ingresar una fecha anterior,,, Reingrse:");
dia = int.Parse(Console.ReadLine());
}
DateTime fech = new DateTime(año, mes, dia);
Alarma.Add(fech);
Console.WriteLine("Ingrese observacion");
string obs = Console.ReadLine();
Observaciones.Add(obs);
}
public void RealizarBackup(Agenda aux)
{
GuardarEnDisco(aux);
}
public void Menu()
{
Console.Clear();
Console.BackgroundColor = ConsoleColor.DarkBlue;
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("╔══════════════════════════════════════════════╗");
Console.WriteLine("║ MENU ║");
Console.WriteLine("╚══════════════════════════════════════════════╝");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("C");
Console.ResetColor();
Console.WriteLine("argar Personas");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("M");
Console.ResetColor();
Console.WriteLine("odificacion de Datos");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("E");
Console.ResetColor();
Console.WriteLine("liminar Personas");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("A");
Console.ResetColor();
Console.WriteLine("niversarios");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("D");
Console.ResetColor();
Console.WriteLine("efinir Alarmas");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("B");
Console.ResetColor();
Console.WriteLine("uscar");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("R");
Console.ResetColor();
Console.WriteLine("ealizar Backup");
Console.ForegroundColor = ConsoleColor.Red;
Console.Write("S");
Console.ResetColor();
Console.WriteLine("alir");
Console.ForegroundColor = ConsoleColor.Red;
Console.Read();
}
#endregion
}
class Program
{
static void Main(string[] args)
{
Agenda miagenda = new Agenda();
miagenda.Menu();
string op =Console.ReadLine();
while (op != "C" && op != "M" && op != "E" && op != "A" && op != "D" && op != "B" && op != "R" && op != "S")
{
Console.Beep(200, 35);
Console.WriteLine("ERROR, REINGRESE SU OPCION:");
op = Console.ReadLine();
}
switch (op)
{
case "C":
miagenda.CargarPersonas();
break;
case "M":
miagenda.ModificarDatos(miagenda);
break;
case "E":
miagenda.EliminarPersonas(miagenda);
break;
case "A":
miagenda.Aniversarios();
break;
case "D":
miagenda.DefinirAlarma();
break;
case "B":
miagenda.BuscarPersonas();
break;
case "R":
miagenda.RealizarBackup(miagenda);
break;
case "S":
miagenda.Salir();
break;
}
}
}
}
si puede decirme en donde esta mal ...
publicación de Time