Ayuda! Al modificar o eliminar registros no abre el archivo .dat

Iniciado por qwertyui, 23 Mayo 2016, 02:38 AM

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

qwertyui

Errores:
Case 9
case 4




Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <cstdlib>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <fstream>
#define USER "admin"
#define PASS "pavisb6"
#define ENTER 13
#define BACKSPACE 8
FILE *archivo;

using namespace std;

int main(void)
{
   system("color 0B");
  string usuario, password;
  int contador = 0;
  bool ingresa = false;

           do
            {
           system("cls");
           cout << "\t\t\tCyber Card" << endl;
           cout << "\n\tUsuario: ";
           getline(cin, usuario);

           cout << "\tPassword: ";

           char caracter;
           caracter = getch();

           password = "";

           while (caracter != ENTER) {

            if (caracter != BACKSPACE) {
        password.push_back(caracter);
        cout << "*";

} else {
           if (password.length() > 0) {
           cout << "\b \b";
           password = password.substr(0, password.length() - 1);
           }
}

caracter = getch();
           }


           if (usuario == USER && password == PASS) {
           ingresa = true;
           } else {
           cout << "\n\n\tEl usuario y/o clave de acceso son incorrectos" << endl;
           cin.get();
           contador++;
           }
           } while (ingresa == false && contador < 3);

           if (ingresa == false) {
           cout << "\n\tUsted no pudo ingresar al sistema. ADIOS" << endl;
           return 0;
           }
           else
           {
           cout << "\n\n\tBienvenido al sistema" << endl;
           system("PAUSE");
           }

           {

           system("cls");

           int opcion;
               }

   char decidir;
   int opcion;
   int opcion2;
   char regisc [20];
   char fechav [10];
   char tic [15];
   char pagop [10];
   char pregunta;
   char respuesta;
   bool regresar= false;
   char clientep [50];
   int opcion3;
   bool modificar=true;
   char codip [5];
   bool encontrado=true;
   char auxcodip [5];
   char auxnombre [30];
   char auxnumtarjeta;
   int opcion4;
   char consulta;

   do
   {
       Menu3:
       system("cls");
       cout << "Menu principal" << endl << "-----------------------" << endl;
       cout << "[1] Registrar pago con tarjeta y numero de tarjeta" << endl;
       cout << "[2] Modificar regristro de pago y  numero de tarjeta" << endl;
       cout << "[3] Consultar registro de pagos y tarjeta" << endl;
       cout << "[4] Eliminar pago con tarjeta" << endl;
       cout << "[5] salir" << endl;
       cout << "-------------------------" << endl<< endl;
       cout << "Seleccione una opcion: ";
       cin >> opcion;

       switch(opcion)

       {

           case 1:
           {
           Menu1:
          system ("title Registro");
          system ("cls");
          cout << "registros" <<endl << "____________________________________" <<endl;
          cout << "[7] resgistrar pago y tarjeta" <<endl;
          cout << "[8] menu principal" << endl << "_____________________________" <<endl;
          cout << "Elige una opcion" <<endl;
          cin >> opcion2;
           }
              switch (opcion2)


       {
           case 7:
           Menu2:
           {
           system ("title saber card");
           system ("cls");
           archivo = fopen ("registro.dat","a");
           cout <<" escriba un codigo para el registro" <<endl;
           cin.getline (codip, 5) >> codip;
           fprintf(archivo, "%s\n", codip);
           cout << "escribe el  numero de la tarjeta:" <<endl;
           cin.getline (regisc, 25) >> regisc;
           fprintf(archivo, "%s\n", regisc);
           cout <<"escribe la fecha de pago:" <<endl;
           cin.getline (fechav, 10) >> fechav;
           fprintf(archivo, "%s\n", fechav);
           cout << "escribe el tipo de tarjeta:"<< endl;
           cin.getline (tic, 15) >> tic;
           fprintf(archivo, "%s\n", tic);
           cout<< "escribe el nombre del cliente" << endl;
           cin.getline (clientep, 50) >> clientep;
           fprintf (archivo, "%s\n", clientep);
           cout << "escribe el monto a pagar del ariculo:" <<endl;
           cin.getline (pagop, 25) >> pagop;
           fprintf(archivo, "%s\n", pagop);
           cout << "Desea agregar otro registro? (s/n)";
           cin >> pregunta;

           fclose(archivo);
           if (pregunta == 's' || pregunta == 'S'){ goto Menu2;}
           else{
           cout<< "Desea realizar otra operacion? (s/n)" <<endl;
           cin>> respuesta;
           if (respuesta == 's' || respuesta == 'S')
           {
            goto Menu1;
           }

           else{
           system ("cls");
           cout << "adios que vuelva pronto" <<endl;

           exit (0);
           }
           break;
           }
           case 8:
           {
           goto Menu3;
           }
           }
           }

           {
           case 2:
           {

           Menu4:
           system("title Modificar");
           system("cls");

           cout<<"Modificar"<<endl<<"------------------------"<<endl;
           cout<<"[9]Modificar regristro de pago y/o numero de tarjeta"<<endl;
           cout<<"[10]Menu principal" <<endl;
           cout<<"Elige una opcion"<<endl;
           cin>>opcion3;
           }

           {

           switch(opcion3)



           {
       [u][/u]    case 9:

            system ("cls");
            system("title modificar registro");

           ifstream lectura;
            ofstream aux;

            encontrado=false;
            lectura.open("registro.dat",ios::in);
            aux.open("aux.dat",ios::out);

            if(aux.is_open() && lectura.is_open())
            {
            cout<< "ingresa la clave del registro que desea modificar";
            cin>>auxcodip;
            lectura>>codip;
            while(!lectura.eof())
            {
            lectura>>regisc>>fechav>>tic>>clientep>>pagop;
              if(auxcodip == codip){
                   encontrado=true;
                   cout<<"____________________________"<<endl;
                   cout<<"codigo:"<<codip<<endl;
                   cout<<"num.tarjeta:"<<regisc<<endl;
                   cout<<"fecha:"<<fechav<<endl;
                   cout<<"tipo de tarjeta:"<<tic<<endl;
                   cout<<"nom. cliente:"<<clientep<<endl;
                   cout<<"pago:"<<pagop<<endl;
                   cout<<"____________________________"<<endl;
                   cout<<"ingresa el nuevo nombre del cliente con codigo"<<codip;
                   aux <<codip<<" "<<regisc<<" "<<fechav<<" "<< tic<<" "<< auxnombre <<" "<<pagop;

               }else{
                    aux <<codip<<" "<<regisc<<" "<<fechav<<" "<<tic<<" "<<clientep<<" "<<pagop;
               }
               lectura>>codip;
               }

               }else{
               cout<<"no se a podido abrir el archivo o aun no ha sido creado"<<endl;
               }
               if(encontrado==true)
               cout<<"no se encontro ningun registro con esa clave"<<auxcodip<<endl;

               }
               while (opcion=false);

               }

               switch (opcion3)
               case 10:
               {
                goto Menu3;
               }

               }
                break;


               {

case 3:

               {
               system ("cls");
               cout << "Consulta" <<endl<< "____________________________" << endl;
               cout << "[12] Consultar datos de pago  y tarjeta"<< endl;
               cout << "[13] Menu pricipal"<<endl;
               cout << "__________________________" << endl;
               cout << "Seleccione una opcion ";
               cin>>opcion4;



                   switch(opcion4);
                   {


                   case 12:
                   Menu5:
                   {
                   case 6:
                   {
                   system ("cls");
                   archivo = fopen("registro.dat","r");
                   fscanf(archivo, "%s", regisc);
                   while(!feof(archivo))
                   {
                   cout << regisc <<endl;
                   fscanf(archivo, "%s", regisc);
                   }
                   fclose(archivo);
                   cout<< "Desea Realizar otra operacion?s/n" <<endl;
                   cin>> respuesta;
                   if (respuesta == 's' || respuesta == 'S')
                   {goto Menu3;
                           }else{
                               system ("cls");
                       cout << "Adios, nos vemos luego" <<endl;
                       return 0;
                   }
                   }

                   case 13:
                   {
                      goto Menu3;
                   }

                   }
                   }
                   }
                   }while(consulta=true);
                   break;


                    [u][/u]case 4:

                   system("cls");
                  ifstream salida;
                  salida.open("registro.dat",ios::in);
                  ofstream entrada;
                  entrada.open("temp.dat",ios::out);

                  if(salida.fail()){
                  cout<<"hubo un error al abrir el archivo registro.dat";
                  getch();
                  }
                  else{
                      cout<<"Introduzca el codigo de registro";
                      cin>>auxcodip;
                      salida>>codip;
                      while(!salida.eof()){

                      salida>>regisc>>fechav>>tic>>clientep>>pagop;

                      if(strcmp(auxcodip,codip)==0){
                       cout<<"el registro se ha eliminado";
                       getch();
                      }
                      else{
                          entrada<<codip<<" "<<regisc<<" "<<fechav<<" "<<tic<<" "<<clientep<<" "<<pagop<<endl;
                      }
                      salida>>codip;
                      }
                      entrada.close();
                      salida.close();
                       remove("registro.dat");
                       rename("temp.dat","registro.dat");
                       }

                       break;

           while (opcion=true);
                   }

                       }
while(opcion=true);


               {

}
}




Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

no nos pongas a adivinar (o a compilar) que errores tienes? habla! da detalles...

usa las etiquetas GeSHi cuando publiques código
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

qwertyui

Lo siento soy nuevo en esto

el problema es que cuando elijes  la opcion de modificar un registro que ya esta hecho previamente  no crea un archivo temporal el cual ebe de sustituir el original pero en si  no lee el original y no crea el archivo temporal, algo  similar le pasa a la opcion eliminar, no lee el registro por lo cual no puede eliminar nada


MAFUS

He dado formato a tu código como he podido. Es buena idea mantener el formato de las sangrías y todo eso.
Por otra parte, has abusado de las llaves. Hay tantas que has perdido la noción de qué es lo que encierran: hay do-whiles sin do, case con breaks y que continuan (un case no hace falta esté encerrado entre llaves).
Tienes gotos que te saltan entre cases de otros switch, creo... (me he perdido entre tanta llave).
En vez de anidar tantos switch deberías pensar en separar el programa en funciones.

Aquí dejo el código con un intento de reformateo:
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
#include <cstdlib>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#include <fstream>
#define USER "admin"
#define PASS "pavisb6"
#define ENTER 13
#define BACKSPACE 8
FILE *archivo;

using namespace std;

int main(void) {
    system("color 0B");
    string usuario, password;
    int contador = 0;
    bool ingresa = false;

    do {
        system("cls");
        cout << "\t\t\tCyber Card" << endl;
        cout << "\n\tUsuario: ";
        getline(cin, usuario);
        cout << "\tPassword: ";
        char caracter;
        caracter = getch();
        password = "";
        while (caracter != ENTER) {
            if (caracter != BACKSPACE) {
                password.push_back(caracter);
                cout << "*";
}
            else {
                if (password.length() > 0) {
                cout << "\b \b";
                password = password.substr(0, password.length() - 1);
                }
}
caracter = getch();
        }
        if (usuario == USER && password == PASS) {
            ingresa = true;
        }
        else {
            cout << "\n\n\tEl usuario y/o clave de acceso son incorrectos" << endl;
            cin.get();
            contador++;
        }
    } while (ingresa == false && contador < 3);
   
    if (ingresa == false) {
        cout << "\n\tUsted no pudo ingresar al sistema. ADIOS" << endl;
        return 0;
    }
    else {
        cout << "\n\n\tBienvenido al sistema" << endl;
        system("PAUSE");
    }
    {
        system("cls");
        int opcion;
    }

    char decidir;
    int opcion;
    int opcion2;
    char regisc [20];
    char fechav [10];
    char tic [15];
    char pagop [10];
    char pregunta;
    char respuesta;
    bool regresar= false;
    char clientep [50];
    int opcion3;
    bool modificar=true;
    char codip [5];
    bool encontrado=true;
    char auxcodip [5];
    char auxnombre [30];
    char auxnumtarjeta;
    int opcion4;
    char consulta;

    do {
        Menu3:
        system("cls");
        cout << "Menu principal" << endl << "-----------------------" << endl;
        cout << "[1] Registrar pago con tarjeta y numero de tarjeta" << endl;
        cout << "[2] Modificar regristro de pago y  numero de tarjeta" << endl;
        cout << "[3] Consultar registro de pagos y tarjeta" << endl;
        cout << "[4] Eliminar pago con tarjeta" << endl;
        cout << "[5] salir" << endl;
        cout << "-------------------------" << endl<< endl;
        cout << "Seleccione una opcion: ";
        cin >> opcion;

        switch(opcion) {
            case 1:
                {
                    Menu1:
                    system ("title Registro");
                    system ("cls");
                    cout << "registros" <<endl << "____________________________________" <<endl;
                    cout << "[7] resgistrar pago y tarjeta" <<endl;
                    cout << "[8] menu principal" << endl << "_____________________________" <<endl;
                    cout << "Elige una opcion" <<endl;
                    cin >> opcion2;
                }
                switch(opcion2) {
                    case 7:
                    Menu2:
                        {
                            system ("title saber card");
                            system ("cls");
                            archivo = fopen ("registro.dat","a");
                            cout <<" escriba un codigo para el registro" <<endl;
                            cin.getline (codip, 5) >> codip;
                            fprintf(archivo, "%s\n", codip);
                            cout << "escribe el  numero de la tarjeta:" <<endl;
                            cin.getline (regisc, 25) >> regisc;
                            fprintf(archivo, "%s\n", regisc);
                            cout <<"escribe la fecha de pago:" <<endl;
                            cin.getline (fechav, 10) >> fechav;
                            fprintf(archivo, "%s\n", fechav);
                            cout << "escribe el tipo de tarjeta:"<< endl;
                            cin.getline (tic, 15) >> tic;
                            fprintf(archivo, "%s\n", tic);
                            cout<< "escribe el nombre del cliente" << endl;
                            cin.getline (clientep, 50) >> clientep;
                            fprintf (archivo, "%s\n", clientep);
                            cout << "escribe el monto a pagar del ariculo:" <<endl;
                            cin.getline (pagop, 25) >> pagop;
                            fprintf(archivo, "%s\n", pagop);
                            cout << "Desea agregar otro registro? (s/n)";
                            cin >> pregunta;
     
                            fclose(archivo);
                           
                            if (pregunta == 's' || pregunta == 'S') {
                                goto Menu2;
                            }
                            else {
                                cout<< "Desea realizar otra operacion? (s/n)" <<endl;
                                cin>> respuesta;
                               
                                if (respuesta == 's' || respuesta == 'S') {
                                    goto Menu1;
                                }
                                else {
                                    system ("cls");
                                    cout << "adios que vuelva pronto" <<endl;
                                    exit (0);
                                }
                                break;
                            }
                        case 8:
                            {
                                goto Menu3;
                            }
                    }
                }

                {
                    case 2:
                        {

                            Menu4:
                            system("title Modificar");
                            system("cls");

                            cout<<"Modificar"<<endl<<"------------------------"<<endl;
                            cout<<"[9]Modificar regristro de pago y/o numero de tarjeta"<<endl;
                            cout<<"[10]Menu principal" <<endl;
                            cout<<"Elige una opcion"<<endl;
                            cin>>opcion3;
                        }

                        {
                            switch(opcion3) {
                                case 9:
                                    system("cls");
                                    system("title modificar registro");

                                    ifstream lectura;
                                    ofstream aux;
                                    encontrado = false;
                                    lectura.open("registro.dat",ios::in);
                                    aux.open("aux.dat",ios::out);
                                   
                                    if(aux.is_open() && lectura.is_open()) {
                                        cout<< "ingresa la clave del registro que desea modificar";
                                        cin>>auxcodip;
                                        lectura>>codip;
                                       
                                        while(!lectura.eof()) {
                                            lectura>>regisc>>fechav>>tic>>clientep>>pagop;
                                           
                                            if(auxcodip == codip) {
                                                encontrado = true;
                                                cout<<"____________________________"<<endl;
                                                cout<<"codigo:"<<codip<<endl;
                                                cout<<"num.tarjeta:"<<regisc<<endl;
                                                cout<<"fecha:"<<fechav<<endl;
                                                cout<<"tipo de tarjeta:"<<tic<<endl;
                                                cout<<"nom. cliente:"<<clientep<<endl;
                                                cout<<"pago:"<<pagop<<endl;
                                                cout<<"____________________________"<<endl;
                                                cout<<"ingresa el nuevo nombre del cliente con codigo"<<codip;
                                                aux <<codip<<" "<<regisc<<" "<<fechav<<" "<< tic<<" "<< auxnombre <<" "<<pagop;
                                            }
                                            else {
                                                aux <<codip<<" "<<regisc<<" "<<fechav<<" "<<tic<<" "<<clientep<<" "<<pagop;
                                            }
                                            lectura>>codip;
                                        }
                                    }
                                    else {
                                        cout<<"no se a podido abrir el archivo o aun no ha sido creado"<<endl;
                                    }
               
                                    if(encontrado == true)
                                        cout<<"no se encontro ningun registro con esa clave"<<auxcodip<<endl;
                            }
                            while (opcion=false);
                        }

                        switch (opcion3) // falta {
                            case 10:
                                {
                                    goto Menu3;
                                }

                        } //?
                        break;
                        {

                        case 3:
                            {
                                system ("cls");
                                cout << "Consulta" <<endl<< "____________________________" << endl;
                                cout << "[12] Consultar datos de pago  y tarjeta"<< endl;
                                cout << "[13] Menu pricipal"<<endl;
                                cout << "__________________________" << endl;
                                cout << "Seleccione una opcion ";
                                cin>>opcion4;
                               
                                switch(opcion4); /* sobra el ; */ {
                                    case 12:
                                        Menu5:
                                            {
                                                case 6:
                                                    {
                                                        system ("cls");
                                                        archivo = fopen("registro.dat","r");
                                                        fscanf(archivo, "%s", regisc);
                                                       
                                                        while(!feof(archivo)) {
                                                        cout << regisc <<endl;
                                                        fscanf(archivo, "%s", regisc);
                                                        }
                                                        fclose(archivo);
                                                        cout<< "Desea Realizar otra operacion?s/n" <<endl;
                                                        cin>> respuesta;
                                                       
                                                        if (respuesta == 's' || respuesta == 'S') {
                                                            goto Menu3;
                                                        }
                                                        else {
                                                            system ("cls");
                                                            cout << "Adios, nos vemos luego" <<endl;
                                                            return 0;
                                                        }
                                                    }
                                                case 13:
                                                    {
                                                        goto Menu3;
                                                    }

                                            }
                                }
                            }
                        } while(consulta = true);
                        break;
                        case 4:
                            system("cls");
                            ifstream salida;
                            salida.open("registro.dat",ios::in);
                            ofstream entrada;
                            entrada.open("temp.dat",ios::out);

                            if(salida.fail()) {
                                cout<<"hubo un error al abrir el archivo registro.dat";
                                getch();
                            }
                            else {
                                cout<<"Introduzca el codigo de registro";
                                cin>>auxcodip;
                                salida>>codip;
                               
                                while(!salida.eof()) {
                                    salida>>regisc>>fechav>>tic>>clientep>>pagop;

                                    if(strcmp(auxcodip,codip) == 0) {
                                        cout<<"el registro se ha eliminado";
                                        getch();
                                    }
                                    else {
                                        entrada<<codip<<" "<<regisc<<" "<<fechav<<" "<<tic<<" "<<clientep<<" "<<pagop<<endl;
                                    }
                                    salida>>codip;
                                }
                                entrada.close();
                                salida.close();
                                remove("registro.dat");
                                rename("temp.dat","registro.dat");
                            }

                            break;

                            while (opcion = true);
        }

    } while(opcion=true);
    {}
}