Gracias AzidRain. Te mando lo que tengo hasta el momento...
UNIT1
Código:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, Unit2;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
Archivo1: TMenuItem;
Nuevo1: TMenuItem;
Abrir1: TMenuItem;
Guardar1: TMenuItem;
AgregarAlumno1: TMenuItem;
EliminarAlumno1: TMenuItem;
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label4: TLabel;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Cerrar1: TMenuItem;
Herramientas1: TMenuItem;
Buscar1: TMenuItem;
Listac1: TMenuItem;
N1: TMenuItem;
ListadeLibres1: TMenuItem;
Salir1: TMenuItem;
Label8: TLabel;
Label9: TLabel;
Button1: TButton;
Edit8: TEdit;
Label10: TLabel;
Edit9: TEdit;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Nuevo1Click(Sender: TObject);
procedure Abrir1Click(Sender: TObject);
procedure AgregarAlumno1Click(Sender: TObject);
procedure Cerrar1Click(Sender: TObject);
procedure Buscar1Click(Sender: TObject);
procedure Salir1Click(Sender: TObject);
procedure Guardar1Click(Sender: TObject);
procedure Listac1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
z:TAlumno;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
z:=TAlumno.Create;
end;
procedure TForm1.Nuevo1Click(Sender: TObject);
begin
If saveDialog1.Execute then
begin
z.ArchivoNuevo(Savedialog1.FileName+'.txt');
showmessage('Se creó el archivo:'+Savedialog1.filename+'.txt')
end
end;
procedure TForm1.Abrir1Click(Sender: TObject);
begin
If OpenDialog1.Execute
then begin
z.AbrirArchivo(OpenDialog1.filename);
showmessage('Archivo '+OpenDialog1.filename+' Abierto')
end
end;
procedure TForm1.Guardar1Click(Sender: TObject);
var c:ficha ;cod:byte ;
begin
If saveDialog1.Execute then
begin
c.DNI:=StrToInt(Edit1.Text);
c.Apellido:=Edit2.Text;
c.Nombres:=Edit3.Text;
c.nota1:=StrToInt(edit4.text);
c.nota2:=StrToInt(Edit5.Text);
c.nota3:=StrToInt(Edit6.text);
c.Promedio:=(c.nota1+c.nota2+c.nota3)/3;
if c.Promedio<=60 then
begin
c.Condicion:='Libre';
end
else c.Condicion:='Regular';
z.guardarcomo (Savedialog1.FileName+'.txt', c, cod);
showmessage('El Archivo se a guardado como '+OpenDialog1.filename);
end
end;
procedure TForm1.AgregarAlumno1Click(Sender: TObject);
var c:Ficha; cod:byte ;
begin
c.DNI:=StrToInt(Edit1.Text);
c.Apellido:=Edit2.Text;
c.Nombres:=Edit3.Text;
c.nota1:=StrToInt(edit4.text);
c.nota2:=StrToInt(Edit5.Text);
c.nota3:=StrToInt(Edit6.text);
c.Promedio:=(c.nota1+c.nota2+c.nota3)/3;
if c.Promedio<=60 then
begin
c.Condicion:='Libre';
end
else c.Condicion:='Regular';
z.GrabarAlumno(c,cod);
If cod<>0 then
ShowMessage('No se pudo Agregar el Cliente.Seguramente no Abrió antes el archivo')
else ShowMessage('Se ha agregado el registro');
end;
procedure TForm1.Cerrar1Click(Sender: TObject);
begin
z.CerrarArchivo;
z.free;
Close
end;
procedure TForm1.Buscar1Click(Sender: TObject);
var i:word; c:Ficha; mensaje:string;
begin
i:=StrToInt(Edit9.Text);
z.BuscarAlumno(i,c,mensaje);
If mensaje='OK' then
begin
Edit1.Text:=IntToStr(c.DNI);
Edit2.Text:=c.Apellido;
Edit3.Text:=c.Nombres;
Edit4.Text:=IntToStr(c.nota1);
Edit5.Text:=IntToStr(c.nota2);
Edit6.Text:=IntToStr(c.nota3);
Edit7.Text:=FloatToStr(c.Promedio);
Edit8.Text:=c.Condicion;
end
else
ShowMessage(mensaje);
end;
procedure TForm1.Salir1Click(Sender: TObject);
begin
close();
end;
procedure TForm1.Listac1Click(Sender: TObject);
var A: TAlumno;
begin
if opendialog1.Execute then
begin
A:= Talumno.Create;
A.ListaPromedios(Memo1, opendialog1.FileName);
A.Free;
end;
end;
end.
UNIT2
Código:
unit Unit2;
interface
uses SysUtils, Dialogs, StdCtrls;
Type
Ficha= Record
DNI:longint;
Apellido, nombres: string[20];
nota1,nota2,nota3:integer;
Promedio:real;
Condicion: string[10];
end;
TAlumno=class
private
Archi: File of Ficha;
public
procedure ArchivoNuevo(ArchiFisico:string);
procedure AbrirArchivo(ArchiFisico:string);
procedure Guardarcomo(ArchiFisico:String; c:ficha; var cod:byte);
procedure GrabarAlumno(c:Ficha; var cod:byte);
procedure ListaPromedios(var Tm1: TMemo; ArchiFisico: string);
//procedure Eliminar(ArchiFisico:string);
procedure CerrarArchivo;
procedure BuscarAlumno(p:word; var c:Ficha; var m:string);
//procedure Promedio(P:prom.);
//procedure Regulares;
//procedure Libres;
end;
implementation
procedure TAlumno.ArchivoNuevo(ArchiFisico:string);
begin
AssignFile(Archi,ArchiFisico);
Rewrite(Archi);
end;
procedure TAlumno.AbrirArchivo(ArchiFisico:string);
begin
AssignFile(Archi,ArchiFisico);
Reset(Archi)
end;
procedure TAlumno.Guardarcomo(ArchiFisico:string; c:ficha; var cod:byte);
begin
AssignFile(Archi,ArchiFisico);
ReWrite(Archi) ;
{$I-}
Seek(Archi, FileSize(archi));
{$I+};
cod:=IOResult;
If cod=0 then
Write(Archi,c);
end;
procedure TAlumno.GrabarAlumno(c:Ficha; var cod:byte);
begin
{$I-}
Seek(Archi, FileSize(archi));
{$I+};
cod:=IOResult;
If cod=0 then
Write(Archi,c);
end;
procedure TAlumno.BuscarAlumno(p:word;var c:Ficha;var m:string);
var Largo:word;
begin
{$I-} Largo:=FileSize(archi);{$I+};
If (IOResult<>0)
then
begin
m:='Problemas con el archivo. Está creado o abierto ?';
exit // sale del procedure
end
else if p>=Largo then
begin
m:='El Número de registro está fuera de rango.';
exit; // sale del procedure
end;
Seek(Archi, p);
Read(archi,c);
m:='OK';
end;
procedure TAlumno.ListaPromedios (var Tm1: TMemo; ArchiFisico: string);
var Archi:TextFile;
Nomb, cadena: string;
DNI:longint;
n1,n2,n3: integer;
Promedio: real;
begin
AssignFile(Archi, ArchiFisico);
{$I-}
Reset(Archi);
{$I+}
if IOResult=0 then begin
readln(Archi, Nomb);//leo la comision
while not EOF(Archi) do
begin
readln(Archi,nomb);
readln(Archi,n1,n2,n3);
Promedio:= (n1+n2+n3)/3;
cadena:= 'Nota 1: '+inttostr(n1)+', Nota 2: '+inttostr(n2)+', Nota 3: '+inttostr(n3)+', Promedio: '+FormatFloat('###.##',promedio);
Tm1.Lines.Add(Nomb);
Tm1.Lines.Add(cadena);
end;
CloseFile(Archi);
end;
end;
procedure TAlumno.CerrarArchivo;
begin
CloseFile(Archi)
end;
end.
ahora el problema que tengo es que puedo grabar y puedo leer pero solo por byte... y si logro que busque solo me lee los simbolos no la informacion que corresponde! (la busqueda sería desde el edit1 no desde el 9, esa fue solo una prueba)
en eso trabajo ahora, si tenes alguna ayudita o correccion para darme seria muy agradecida!!