Dudas de Programacion » Lenguajes de Proposito General » C++

Solucion a Tema Manejo de archivos C++

(2 posts)
  1. fiurer87
    Member

    Hola Jeremias,

    En base a tu codigo, mando la solucion, implemente ademas el lector de la Base De Datos, y usa fichero tipo .txt.

    Que falta? pues control de excepciones como ser: que pasara si el sistema me pide un entero y yo le paso un caracter?, bueno esos detalles, espero te guste la solucion.

    Nota: A mi me funciona y no me muestra nada de signos.
    Creo que con esto termino mi participacion en ese hilo :|
    ===========================================================
    #include <stdio.h>
    #include <stdlib.h>

    struct articulo{
    char nombre[50];
    int codigo;
    float precio;
    };

    char* enteroAcadena(int val, int base){
    static char buf[32] = {0};
    int i = 30;
    for(; val && i ; --i, val /= base)
    buf[i] = "0123456789abcdef"[val % base];
    return &buf[i+1];
    }

    void mostrarDatos(struct articulo a){
    printf("DETALLE ARTICULO: \n");
    printf("Nombre: %s\n",a.nombre);
    printf("Codigo: %d\n",a.codigo);
    printf("Precio: %.2f\n", a.precio);
    }

    void guardarDatos(struct articulo a){
    FILE *auxf = fopen("baseDeDatos.txt","a");
    fputs(a.nombre, auxf);
    fputs(" ", auxf);
    fputs(enteroAcadena(a.codigo,10),auxf);
    fputs(" ", auxf);
    char aux[50];
    sprintf(aux,"%.2f",a.precio);
    fputs(aux, auxf);
    fputs("\n", auxf);
    printf("Guardado Correctamente :) \n");
    fclose(auxf);
    }

    struct articulo leerArticulo(){
    struct articulo algo;
    printf("\nNombre: ");
    fgets(algo.nombre,50,stdin);
    scanf("%s", (char*)&algo.nombre);
    printf("\nCodigo: ");
    scanf("%d",&algo.codigo);
    printf("\nPrecio: ");
    scanf("%f",&algo.precio);
    return algo;
    }

    int menu(){
    //system("clear"); //linux
    clrscr(); //windows
    printf("========================\n");
    printf("1. Ingresar Producto.\n");
    printf("2. Leer Lista.\n");
    printf("3. Salir.\n");
    printf("========================\n");
    printf("Ingrese su opcion[1/2/3]_ ");
    int opcion;
    scanf("%d",&opcion);
    return opcion;
    }

    void leerBaseDeDatos(){
    FILE *aux;
    if((aux = fopen("baseDeDatos.txt","r")) == NULL){
    //me salgo sin hacer nada :) si no existe BD
    return;
    }
    char cadena[80];
    fgets(cadena,60,aux);
    do{
    printf("%s\n",cadena);
    }while(fgets(cadena,80,aux)!=NULL);
    int uno;
    printf("\nPresione 1 y luego Enter para volver al menu.");
    scanf("%d", &uno);
    fclose(aux);
    }

    void acciones(int opcion){
    //system("clear"); //linux
    clrscr(); //windows
    struct articulo nuevo;
    switch(opcion){
    case 1: nuevo = leerArticulo();
    guardarDatos(nuevo);
    break;
    case 2: leerBaseDeDatos(); break;
    case 3: exit(0); break;
    default: break;
    }
    }

    int main(){
    int bandera;
    while(1){
    bandera = menu();
    acciones(bandera);
    }
    return 0;
    }
    ================================================

    Espero te sirva.

    Atte: Roberto

    Posted 1 year ago #


  2. fiurer87
    Member

    Una correccion,

    en la funcion:

    struct articulo leerArticulo(){ }

    por favor quita la siguiente linea de codigo:

    fgets(algo.nombre,50,stdin);

    //estaba alli para ayudarme en linux, pero como usas win no sera necesario.

    Posted 1 year ago #

Reply

You must log in to post.

935 posts in 394 topics over 36 months by 349 of 787 members. Latest: Balkirium, redundantlogic2, shianim

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs