ayuda

Iniciado por Fatmf44, 17 Junio 2010, 07:26 AM

0 Miembros y 1 Visitante están viendo este tema.

Fatmf44

hola

bueno soy un novato en esto de programacion y quisiera un poco de ayuda o me brinden ideas de como hacer este pequeño trabajo lo 1ro q deseo saber es como crear un archivo de texto en c++ luego q me permita agregar, guardar y eliminar cosas de ese archivo de texto todo en c++

saludos

PD: gracias de antemano a la ayuda brindada

Gallu

Si no pones código y haces preguntas concretas no creo que te vaya a ayudar nadie , lo que tu preguntas lo puedes averiguar tranquilamente de los libros o haciendo una busqueda en google . :-X
Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.


Fatmf44

#3
hola mil disculpas bueno el codigo q tengo es este:
Código (cpp) [Seleccionar]

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#define MAXSTR 0xFF

using namespace std;

typedef struct ClaseAlumno {
   int matricula;
   char* nombre;
} Alumno;

int comparar_alumno (const void *alumno1, const void *alumno2);
void imprimir_alumno (Alumno *alumno);
Alumno* agregar_alumno (Alumno *alumnos, Alumno *alumno, int *n);
char* leer_linea    (const char *mensaje);
char* leer_cadena   (const char *mensaje, char *cadena);
int   leer_entero   (const char *mensaje, int menor, int mayor);
float leer_real     (const char *mensaje);
char  leer_caracter (const char *mensaje);
int   leer_campo (FILE *archivo, char *cadena);

int main ()
{
   Alumno alumno, *alumnos = NULL, *p;
   int opcion, n=0, i;
   char cadena[MAXSTR], *ruta = "D:\\alumnos.txt";
   FILE *archivo;
   archivo = fopen (ruta, "r");
   if (archivo!=NULL)
   {
       while (leer_campo (archivo, cadena))
       {
           alumno.matricula = atoi (cadena);
           leer_campo (archivo, cadena);
           alumno.nombre = strdup (cadena);
           alumnos = agregar_alumno (alumnos, &alumno, &n);
       }
       fclose (archivo);
   }
   do {
       system ("cls");
       cout<<endl
<<"MENU"<<endl
<<"1.- Nuevo"<<endl
<<"2.- Salir"<<endl
<<endl;

       opcion = leer_entero ("Seleccione una opcion: ", 1, 2);

       if (opcion < 2)
       {
           alumno.matricula = leer_entero ("Ingrese el matricula del alumno: ", 0, INT_MAX);
           p = n==0? NULL: (Alumno*) bsearch (&alumno, alumnos, n, sizeof (Alumno), comparar_alumno);
           if (p!=NULL)
               imprimir_alumno (p);
       }
       if (p!=NULL && opcion==1)
           cout<<"El alumno ya existe"<<endl;
       else if (p==NULL && opcion>=2 && opcion<=1)
           cout<<"Alumno no encontrado"<<endl;
       else switch (opcion)
       {
           case 1:
               alumno.nombre = leer_linea ("Ingrese el nombre: ");
               alumnos = agregar_alumno (alumnos, &alumno, &n);
               cout<<"Registro agregado correctamente"<<endl;
               break;
       }
       if (opcion<2 && opcion>=1)
       {

           system ("pause");
       }
   } while (opcion!=2);
   archivo = fopen (ruta, "w");
   if (archivo!=NULL)
   {
       for (i=0; i<n; i++)
           fprintf (archivo, "%d,%s\n", alumnos[i].matricula, alumnos[i].nombre);
       fclose (archivo);
   }
   return EXIT_SUCCESS;
}

int comparar_alumno (const void *alumno1, const void *alumno2)
{
   return ((Alumno*)alumno1)->matricula - ((Alumno*)alumno2)->matricula;
}

void imprimir_alumno (Alumno *alumno)
{
    printf ("matricula: %d\n", alumno->matricula);
printf ("nombre   : %s\n", alumno->nombre);
}

Alumno* agregar_alumno (Alumno *alumnos, Alumno *alumno, int *n)
{
   *n = *n + 1;
   alumnos = (Alumno*) realloc (alumnos, sizeof (Alumno)*(*n));
   memcpy (&alumnos[(*n)-1], alumno, sizeof (Alumno));
   qsort (alumnos, *n, sizeof (Alumno), comparar_alumno);
   return alumnos;
}

char *leer_linea (const char *mensaje)
{
   char linea[MAXSTR];
   leer_cadena (mensaje, linea);
   return strdup (linea);
}

char* leer_cadena (const char *mensaje, char *cadena)
{
   char *salto;
   cout<<mensaje;
   fgets (cadena, MAXSTR, stdin);
   salto = strchr (cadena, '\n');
   if (salto!=NULL)
       *salto = '\0';
   return cadena;
}

int leer_entero (const char *mensaje, int menor, int mayor)
{
   int valor;
   do {
       valor = (int) leer_real (mensaje);
       if (valor<menor || valor>mayor)
           cout<<"Numero no valido"<<endl;
   } while (valor<menor || valor>mayor);
   return valor;
}

float leer_real (const char *mensaje)
{
   char cadena[MAXSTR];
   leer_cadena (mensaje, cadena);
   return atof (cadena);
}

char leer_caracter (const char *mensaje)
{
   char linea[MAXSTR];
   leer_cadena (mensaje, linea);
   return linea[0];
}

int leer_campo (FILE *archivo, char *cadena)
{
   fscanf (archivo, "%[^,\n\r]", cadena);
   if (feof (archivo))
       return 0;
   fgetc (archivo);
   return 1;
}

es un trabajo el cual me piden explicar todo el codigo hay cosas q entiendo como otras q no haber si me dan una mano ixplicando algunas partes.
hay posibilidad de que este codigo se redusca a mas y solo usando el cout o q sea mas orientado a C++

PD: sobre los menus me faltan añadir las demas opciones q son 6 ejem: editar busqueda el codigo lo hace solo q lo qite para poder probar algunas cosas

gracias de antemano

saludos

nicolas_cof

Fatmf44, utiliza las etiquetas GeSHI o code para postear codigo, asi se hace mas legible...

[code=cpp]codigo fuente C++[/code]

[code]codigo fuente[/code]

Pd: no te olvides de usar el boton modificar para postear.

Salu10.