![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Entonces sí es como te digo maugescully, procedo a desglosar el enunciado del ejercico:
Orientada a oBjetos: Tendras que hacer una clase "Alumno" o algun esquema similar Administrar: El clásico CRUD como más adelante te lo pone en los menús. Archivo de Acceso Directo: NO es un archivo de texto, es un archivo como el que creaste en el primer post que pusiste, eso está correcto. Los Menús que te ponen son las funciones que tendrías que desarrollar, que prácticamente son triviales. La unit 1 que hiciste es la que corresponderia a "Agregar Alumno". De manera que vamos olvidándonos de un archivo de texto, y vamos a repasar el tema de manejo de archivos de Delphi y las funciones: Rewrite; Reset; CloseFile; Seek;
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
|
#2
|
|||
|
|||
|
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!! |
|
#3
|
||||
|
||||
|
Hola
No entiendo nada de nada. Es mas, nadaaaaaaaa. No entiendo como es posible complicarse la vida tanto para hacer un programa que inserte, modifique, vea, busque y todo lo demas de un archivo text. Como dije: No entiendo nada. Me ayudais a enterder?, a ver si aprendo algo nuevo. Saludos
__________________
Siempre Novato |
|
#4
|
||||
|
||||
|
Hola
Ahora pensando un poco: Esto es una tarea, por eso es que se necesita complicarse tanto la vida creando Clases y esas cosas?. Es que así lo pide el Maisstro?. Saludos PD: Esto me hace acordar al Viejo codigo de C en el que se debía declarar todo. Por eso lo odio y nunca pude entenderlo jejejee.
__________________
Siempre Novato |
|
#5
|
||||
|
||||
|
Hola
Siguiendo con esto que no me deja dormir. ![]() ![]() Viendo el codigo de maugescully creo que se paso de querer hacer un archivo txt (Ficheros Ascii) a un archivo Dat (Ficheros Binarios). Dos cosas completamente diferentes en el uso de Rewrite, Reset, CloseFile y por supuesto Seek que no esta en los TXT, ademas de Filesize, y FilePos. Sigo sin entender muchas cosas, entre ellas por que la eleccion de archivos binarios, por que la separacion de codigo de los forms 1 y 2, por que no se ligan en el uses etc. Logicamente si se envia Byte se recibe Byte por eso es que me cuestiono el uso de este tipo de archivo, salvo que sea un requisito del Profesor en cuestion. Me gustaria tener el programa de maugescull para poder analizarlo y aprender. Saludos
__________________
Siempre Novato |
|
#6
|
||||
|
||||
|
Yo tengo un programa que hace exactamente eso que quiere magescull de alla de mis épocas pascaleras, pero...estan en un floppy de 5 1/4 y no encuentro el lector que tenía por ahi arrumbado. Por cierto el programita era una agenda simple pero con el rimbombante nombre de "Datamaster" jajaja
En realidad es muy sencillo caral...no se si nuestro amigo todavia tenga tiempo para su entrega pero podemos ir haciendolo entre los 3 desde cero, nomás les pido paciencia porque no siempre entro a cada rato. Ahi me confirman y lo hacemos
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
|
#7
|
||||
|
||||
|
Por cierto caral, un comentario para ver si se te aclara el panorama:
Los archivos binarios son meros archivos que pueden guardar cualquier tipo de datos de delphi en forma secuencial. Así, puedes declarar un archivo como de chars, integers, strings o lo que es mas usado: de records. Delphi incorpora funciones que permiten abrirlos, crearlos, leerlos y escribirlos, más funciones para ir a un determinado registro. Aquí no cuentan índices ni nada, es una mera lista. Prácticamente todas los procesos que involucran leer todos los registros implica utilizar un ciclo "while not eof" e ir leyendo cada registro secuencialmente. Ahora bien, si pensamos en OOP, basta con imaginarse por ejemplo una clase TAlumno que puede contener propiedades como nombre, apellido, grado, clase, etc. y algunos métodos para su control. Y tendríamos otra clase llamada TAlumnos que es la que se encargaría de gestionarlos, así, esta clase puede construirte un objeto TAlumno, le puede s pasar un TAlumno y decirle que lo guarde o pedirle que te cree un objeto TAlumno conteniendo los dato de x alumno o bien que te borre x. Internamente la clase lo que hará es acceder al archivo binario y hacer lo que corresponda. También le puedes decir a la clase que te liste los alumnos o que te genere un txt. Como ves, cuando piensas en objetos es muy sencillo modelar un sistema rápidamente aún sin haber tecleado nada y sin preocuparse por el como hacer cada cosa.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
|
#8
|
||||
|
||||
|
Hola
Cita:
![]() Cita:
) pero sigo con la duda de el por que hacer un archivo binario, no lo entiendo, salvo como dije, que sea una peticion del profesor y de ser asi no me meteria a hacerlo ya que si el profesor les pidio retroceder en el tiempo pues su razon tendra.Saludos
__________________
Siempre Novato |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| string literal may have at most 255 elements?? auxilio | einarcito | SQL | 7 | 26-08-2008 01:26:15 |
| Auxilio con FastReport | nmg05 | Impresión | 0 | 14-04-2008 18:42:43 |
| Auxilio en ComboBox | Luis | Conexión con bases de datos | 4 | 30-09-2004 09:43:55 |
| Auxilio....Tipos de datos | buitrago | Firebird e Interbase | 0 | 07-09-2004 00:51:20 |
|