Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/04/2005, 18:52
Znet
 
Fecha de Ingreso: marzo-2002
Ubicación: Salta Capital - Actualmente estudiando en Córdoba
Mensajes: 430
Antigüedad: 22 años, 8 meses
Puntos: 0
PARA LOS GURUS. Help

Hola que tal, estoy teniendo un problema.
Primero describo el proyecto, el lenguaje y la plataforma.
Proyecto programa para instituto, estoy preparandolo para un final de la facultad.
Solo llegamos hasta archivo y listas nada mas sobre MS-DOS, por mi cuenta porque era un detalle para presentar en la facultad el programa, habia que investigar, trate con las clases pero la verdad que como autidacta creo que es un poquitin complejo el tema si no se entiende bien del principio, pero de todas formas me pase a 32 bits y estoy haciendo el programa sobre WINDOWS XP, en C++ en el IDE Builder 6.0. Aclaro eso de la facu por unos post que lei anteriormente.

Bueno tuve problemas en cuanto a que he creado una funcion que me crea un vector dinamico con una estructura del tipo config, el parametro para crear el tamaño del vector lo utilizo pasando por referencia un "int &i" declarado tambien en la funcion cuando vean el codigo a continuacion sera mas claro.
La cosa es que mi idea, era crear una funcion que la pueda usar varias veces al principio el llamado es para pasar los datos de un archivo a un vector y de ahi pasar los datos a un StringGrid y un ListBox, de esta manera tengo un detalle de los cursos en el stringgrid y al listbox lo utilizo para seleccionar un curso y despues modificarlo en el vector y volver a escribir en el archivo los cambios. Bueno a la parte de la seleccion para la modificacion no llegue aun ya que no me anda la funcion, la unica forma de lograr en parte que el compilador no me tire errores, fue crear un prototipo en la clase del formulario que uso, lo hice en la parte de declaraciones publicas(unit2.h), despues en el cpp (unit2.cpp) la defino y la llamo en otra fucion que es la del boton que realiza la carga en el vector y luego realiza la carga del vector al stringgrid. Pero esto ultimo no me funciona y probe toda la tarde y no lo consegui esto lo hice a ojo porque es un despelote manejar funciones en un ide asi que hacerlo en un simple devc++ por ejemplo, pero lo tome como desafio y bueno aca estoy remando aca dejo los archivos espero que se haya entendido algo de la explicacion y cualquier cosa que necesiten para hecharme una mano me preguntan.

unit2.h
Código PHP:
//---------------------------------------------------------------------------
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <Grids.hpp>
#include <ActnList.hpp>
//---------------------------------------------------------------------------
class TInsCur : public TForm
{
__published// IDE-managed Components
        
TPageControl *PageControl1;
        
TTabSheet *TabSheet1;
        
TLabel *Label1;
        
TLabel *Label5;
        
TLabel *Label6;
        
TLabel *Label2;
        
TLabel *Label3;
        
TLabel *Label4;
        
TLabel *Label8;
        
TLabel *Label7;
        
TEdit *Edit1;
        
TEdit *Edit2;
        
TEdit *Edit3;
        
TEdit *Edit4;
        
TButton *Button1;
        
TTabSheet *TabSheet2;
        
TTabSheet *TabSheet3;
        
TStringGrid *StringGrid1;
        
TButton *Button2;
        
TButton *Button3;
        
TListBox *ListBox1;
        
void __fastcall Button1Click(TObject *Sender);
        
void __fastcall Button2Click(TObject *Sender);
        
void __fastcall Button3Click(TObject *Sender);
private: 
// User declarations
public:  // User declarations
        
__fastcall TInsCur(TComponentOwner);
        
struct config
        
{
         
int id;
         
char curso[30];
         
int prec_c;
         
int prec_m;
         
char mat[30];
         
int idmat;
        };
        
void almacenacur(config *vecint &l);
};
 
//---------------------------------------------------------------------------
extern PACKAGE TInsCur *InsCur;
//---------------------------------------------------------------------------
#endif 
unit2.cpp
Código PHP:
//---------------------------------------------------------------------------
#define path ("C:\\Documents and Settings\\All Users\\Escritorio\\config.dc")
// Con esto modifico a gusto el path sobre el cual trabajar con los arhivos.
#include <vcl.h>
#include <stdio.h>
#include <ctype.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#include "estructuras.h"
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TInsCur *InsCur;
//---------------------------------------------------------------------------
__fastcall TInsCur::TInsCur(TComponentOwner)
        : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TInsCur::Button1Click(TObject *Sender)
{
 
int cid=0;
 
config auxaux1aux2;
 
FILE *fp, *fr;// fp Escritura - fr Lectura
 
char paths[100];
 
strcpy(pathspath);
 
//Verificar que esten completos todos los campos.
 
if(Edit1->Text==""||Edit2->Text=="")
 {
 
ShowMessage("Completar NOMBRE DEL CURSO y COSTO DEL CURSO");
 }
 else
 {

        if((
fr=fopen(path,"a+"))==NULL)
        {
         
ShowMessage("El archivo no se pudo cargar1.");
         exit(
0);
        }
        else
        {
           
fread(&auxsizeof(aux), 1fr);
           while(!
feof(fr))
           {
            
cid=cid+1;
            
fread(&auxsizeof(aux), 1fr);
           }
                
aux.id=cid+1;
                
strcpy(aux.cursoEdit1->Text.c_str());
                
aux.prec_c=Edit2->Text.ToInt();
                
strcpy(aux.matEdit3->Text.c_str());
                
aux.prec_m=Edit4->Text.ToInt();
                
aux.idmat=cid+1;
                if((
fp=fopen(path,"a+"))==NULL)
                {
                
ShowMessage("El archivo no se pudo cargar2.");
                exit(
0);
                }
                
fwrite(&auxsizeof(aux), 1fp);
                
fclose(fp);
        }
// cierra la lectura del archivo
        // Termina lectura y escritura de archivo.-

 
Edit1->Text="";
 
Edit2->Text="";
 
Edit3->Text="";
 
Edit4->Text="";
 
fread(&aux2sizeof(aux2), 1fr);
 while(!
feof(fr))
 {
  
fread(&aux2sizeof(aux2), 1fr);
 }
 
ShowMessage(aux2.id);
 
fclose(fr);
 }
}
//---------------------------------------------------------------------------
void __fastcall TInsCur::Button2Click(TObject *Sender)
{
  
StringGrid1->Cells[0][0]="Curso";
  
StringGrid1->Cells[1][0]="Costo";
  
StringGrid1->Cells[2][0]="Material";
  
StringGrid1->Cells[3][0]="Costo";
  
configvec;
  
int l,i;
  
TInsCur::almacenacur(vecl);
  for(
i=0i<li++)
  {
   
StringGrid1->Cells[0][i+1]=vec[i].curso;
   
StringGrid1->Cells[1][i+1]=vec[i].prec_c;
   
StringGrid1->Cells[2][i+1]=vec[i].mat;
   
StringGrid1->Cells[3][i+1]=vec[i].prec_m;
   
ListBox1->Items->Add(vec[i].curso);
  }
 
StringGrid1->RowCount=i+1;
 
//Termina creacion de filas
 //-------------------------
 
}
//---------------------------------------------------------------------------
 
void __fastcall TInsCur::Button3Click(TObject *Sender)
{
 
//int vec[10];
 //ShowMessage(ListBox1->Items->Strings[ListBox1->ItemIndex]);
 //almacenacur(vec);
 //ShowMessage("a");
 //Comparar hasta entontrar en el vector que se creo
}
//---------------------------------------------------------------------------
//Forma de usar una funcion general para la creacion de un vector
//y almacenamiento de datos en memoria.
void TInsCur::almacenacur(config *vecint &l)
{
  
// Construir las filas necesaria de la matriz para mostrar datos
 
FILE *fp,*fp2;
 
config lee,lee2;
 
int j=0;
 
char paths[100];
 
strcpy(pathspath);
 
l=0;
//Crear vector para almacenar cambios
 
fp=fopen(path"r");
 
fread(&leesizeof(lee), 1fp);
 while(!
feof(fp))
 {
   
l++;
   
fread(&leesizeof(lee), 1fp);
 }
//l da la cantidad de elementos
 
vec = new config[l];
 
delete vec//Liberamos memoria
 //Añadimos los elementos del archivo al vector
 //para trabajar los datos desde memoria y acualizar ante
 // algun cambio.
 
fp2=fopen(path"r");
 
fread(&lee2sizeof(lee2), 1fp2);
 while(!
feof(fp2))
 {
  
vec[j].id=lee2.id;
  
strcpy(vec[j].curso,lee2.curso);
  
vec[j].prec_c=lee2.prec_c;
  
strcpy(vec[j].mat,lee2.mat);
  
vec[j].prec_m=lee2.prec_m;
  
vec[j].idmat=lee2.idmat;
  
j++;
  
fread(&lee2sizeof(lee2), 1fp2);
 }
 
fclose(fp2);

Espero sugerencias
Gracias.
__________________
Nada es imposible, con un poco de esfuerzo se logran las cosas.-