using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
public class Empleado
{
private string nombre, puesto, domicilo, email, telefono;
private float sueldo;
public Empleado()
{ }
// constructor por default
public Empleado(string n, string p, float s, string dom, string tel, string eml) //constructor empleado
{
nombre = n;
puesto = p;
sueldo = s;
domicilo = dom;
telefono = tel;
email = eml;
}
public void asignaNombre(string n)
{ nombre = n; }
public string obtenNombre()
{ return nombre; }
public void asignaPuesto(string p)
{ puesto = p; }
public string obtenPuesto()
{ return puesto; }
public void asignaSueldo(float s)
{ sueldo = s; }
public float obtenSueldo()
{ return sueldo; }
public void asgniaDomicilio(string dom)
{ domicilo = dom; }
public string obtenDomicilio()
{ return domicilo; }
public void asignaTelefono(string tel)
{ telefono = tel; }
public string obtenTelefono()
{ return telefono; }
public void asignaEmail(string eml)
{ email = eml; }
public string obtenEmail()
{ return email; }
}
public class ArchivoEmpleados
{
private FileStream fs=null; //Flujo base.
private BinaryWriter bw=null; // Flujo de escritura
private BinaryReader br=null; // Flujo de lectura
public ushort nregs; // Numero de registros en el archivo
public static ushort tamanoRegistro = 82; //Tamano del registro, en bytes, se agregan 2 bytes por cada string.
public ushort c;
public string n, p, dom, emal, tel;
public float s;
public ArchivoEmpleados(string archivo)//Constructor archivo
{
fs
= new FileStream
(archivo, FileMode
.OpenOrCreate, FileAccess
.ReadWrite); bw
= new BinaryWriter
(fs
); br
= new BinaryReader
(fs
); nregs = (ushort)Math.Ceiling((double)fs.Length / (double)tamanoRegistro);
}
public void cierraArchivo()
{
bw.Close();
br.Close();
fs.Close();
}
public ushort obtenNumeroDeRegistros()
{ return nregs; }
public void escribeRegistro(ushort clave, Empleado empleado)
{
if (clave > 0 && clave <= (nregs + 1))
{
bw.BaseStream.Seek((clave - 1) * tamanoRegistro, SeekOrigin.Begin);
bw.Write(empleado.obtenNombre());
bw.Write(empleado.obtenPuesto());
bw.Write(empleado.obtenSueldo());
bw.Write(empleado.obtenDomicilio());
bw.Write(empleado.obtenTelefono());
bw.Write(empleado.obtenEmail());
}
else
{ Console.WriteLine("Clave incorrecta..."); }
}
public void captura()
{
try
{
Console.Write("Nombre: ");
n = Console.ReadLine();
n = n.PadRight(50);
Console.Write("Puesto: ");
p = Console.ReadLine();
p = p.PadRight(20);
Console.Write("Sueldo: ");
s = Single.Parse(Console.ReadLine());
Console.Write("Domicilio: ");
dom = Console.ReadLine();
dom = dom.PadRight(100);
Console.Write("Telefono: ");
tel = Console.ReadLine();
Console.Write("Email: ");
emal = Console.ReadLine();
emal = emal.PadRight(100);
}
catch (FormatException fex)
{
Console.WriteLine("nMensaje del Error: " + fex.Message);
Console.WriteLine("nRuta del Error: " + fex.StackTrace);
Console.WriteLine("nPresione <Enter> para Continuar... ");
Console.ReadKey();
}
}
public void anadeRegistro(Empleado empleado)
{
nregs++;
bw.BaseStream.Seek(nregs * tamanoRegistro, SeekOrigin.Begin);
captura();
escribeRegistro
(nregs,
new Empleado
(n, p, s, dom, tel, emal
)); }
public Empleado leeRegistro(ushort reg)
{
if (reg >= 0 && reg < nregs)
{
br.BaseStream.Seek(reg * tamanoRegistro,SeekOrigin.Begin);
n = br.ReadString();
p = br.ReadString();
s = br.ReadSingle();
dom = br.ReadString();
tel = br.ReadString();
emal = br.ReadString();
return new Empleado
(n, p, s, dom, tel, emal
); }
else
{
Console.WriteLine("Clave incorrecta...");
return null;
}
}
public void buscaRegistro()
{
try
{
do
{
Console.Write("Clave: ");
c = UInt16.Parse(Console.ReadLine());
}while (c < 1 && c > nregs);
br.BaseStream.Seek((c - 1) * tamanoRegistro, SeekOrigin.Begin);
n = br.ReadString();
n = n.TrimEnd(' ');
p = br.ReadString();
p = p.TrimEnd(' ');
s = br.ReadSingle();
dom = br.ReadString();
dom = dom.TrimEnd(' ');
tel = br.ReadString();
tel = tel.TrimEnd(' ');
emal = br.ReadString();
emal = emal.TrimEnd(' ');
Console.Clear();
Console.Write("nClave> " + c);
Console.Write("nNombre: " + n);
Console.Write("nPuesto: " + p);
Console.Write("nSueldo: {0:F2} ", s);
Console.Write("nDomicilio: " + dom);
Console.Write("nTelefono: " + tel);
Console.Write("nEmail: " + emal);
Console.WriteLine("nnPresione <Enter> para Continuar...");
Console.ReadLine();
br.BaseStream.Seek((c - 1) * tamanoRegistro, SeekOrigin.Begin);
}
catch (FormatException fex)
{
Console.WriteLine("nMensaje del Error: " + fex.Message);
Console.WriteLine("nRuta del Error: " + fex.StackTrace);
Console.WriteLine("nPresione <Enter> para Continuar... ");
Console.ReadKey();
}
catch (IOException ioex)
{
Console.WriteLine("nMensaje del Error: " + ioex.Message);
Console.WriteLine("nRuta del Error: " + ioex.StackTrace);
Console.WriteLine("nPresione <Enter> para Continuar... ");
Console.ReadKey();
}
}
public void cambiaRegistro()
{
buscaRegistro();
Console.Write("nDesea cambiarlo(S/N)? : ");
char op;
do
{
op = (char)Console.Read();
op = Char.ToUpper(op);
}
while (op != 'N' && op != 'S');
Console.ReadLine();
if (op == 'S')
{
captura();
Empleado e
= new Empleado
(n, p, s, dom, tel, emal
); escribeRegistro((ushort)(c), e);
}
}
public void desplieguaRegistros()
{
Console.Clear();
int i;
for (i = 0; br.BaseStream.Length != br.BaseStream.Position; i++)
{
br.BaseStream.Seek(i * tamanoRegistro, SeekOrigin.Begin);
n = br.ReadString();
n = n.TrimEnd(' ');
p = br.ReadString();
p = p.TrimEnd(' ');
s = br.ReadSingle();
dom = br.ReadString();
dom = dom.TrimEnd(' ');
tel = br.ReadString();
tel = tel.TrimEnd();
emal = br.ReadString();
emal = emal.TrimEnd(' ');
Console.Write("nn------------------------nClave: " + (i + 1));
Console.Write("nNombre: " + n);
Console.Write("nPuesto: " + p);
Console.Write("nSueldo: {0:F2}", s);
Console.Write("nDomicilio: " + dom);
Console.Write("nTelefono: " + tel);
Console.Write("nEmail: " + emal);
}
Console.WriteLine("nnPresione <Enter> para Continuar...");
Console.ReadLine();
br.BaseStream.Seek(0, SeekOrigin.Begin);
}
public void eliminaRegistro()
{
buscaRegistro();
Console.Write("nDesea elimiarlo? (S/N): ");
char op;
do
{
op = (char)Console.Read();
op = Char.ToUpper(op);
}
while (op != 'N' && op != 'S');
if (op == 'S')
{
n = "Registro Eliminado";
n = n.PadRight(50);
p = "Registro Eliminado";
p = p.PadRight(50);
s = 0;
Empleado e
= new Empleado
(n, p, s, dom, tel, emal
); escribeRegistro(c, e);
}
}
}
public class Principal
{
static ArchivoEmpleados arEmp;
public static char menu()
{
Console.Clear();
Console.WriteLine("A.- Agregar. ");
Console.WriteLine("B.- Buscar. ");
Console.WriteLine("C.- Cambiar. ");
Console.WriteLine("D.- Desplegar. ");
Console.WriteLine("E.- Eliminar. ");
Console.WriteLine("S.- Salir. ");
Console.Write("nOpcion: ");
char op;
op = (char)Console.Read();
op = Char.ToUpper(op);
Console.WriteLine(); Console.ReadLine();
return op;
}
public static void Main(string[] args)
{
string archivo = "Empleados.dat";
arEmp
= new ArchivoEmpleados
(archivo
); char opcion;
do
{
opcion = menu();
opcion = Char.ToUpper(opcion);
switch (opcion)
{
case 'A':
{
arEmp
.anadeRegistro(new Empleado
(arEmp
.n, arEmp
.p, arEmp
.s, arEmp
.dom, arEmp
.tel, arEmp
.emal)); }
break;
case 'B':
{ arEmp.buscaRegistro(); }
break;
case 'C':
{ arEmp.cambiaRegistro(); }
break;
case 'D':
{ arEmp.desplieguaRegistros(); }
break;
case 'E':
{ arEmp.eliminaRegistro(); }
break;
case 'S':
{
arEmp.cierraArchivo();
Console.Clear();
Console.WriteLine("Fin del Programa!!!");
Console.WriteLine("nPresione <Enter> para Salir..");
Console.ReadLine();
}
break;
default:
{
Console.WriteLine("Opcion no valida! Presione <Enter> para continuar..");
Console.ReadKey();
}
break;
}
}
while (opcion != 'S');
}
}
}