Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: xmtrooper en 29 Noviembre 2017, 05:28 am



Título: Ayuda es urgente por favor ya no se me ocurre nada que poner hacer
Publicado por: xmtrooper en 29 Noviembre 2017, 05:28 am
Veran, recientemente me encargaron un proyecto en la univerisdad, y estoy haciendo un programa con una .txt de base de datos plano, el problema reside en que al poner un espacio en el area de "registro" me crea un usuario "fantasma" con las letras tomadas despues de el espacio, osea en la segunda palabra.
recurro a ustedes porque mi cabeza ah explotado,, no logro resolver el error llevo noches enteras en las cuales no logro resolverlo y me quedo dormido frente al monitor les dejo mi codigo para que lo revisen ustedes mismos gracias. el probkema reside en el metodo "inscribir alumno"
 
Código
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <string.h>
  4. #include <fstream>
  5. #include <stdlib.h>
  6.  
  7. //Limpiar pantalla//
  8. #ifdef _WIN32
  9. #define CLEAR "cls"
  10. #elif defined(unix)||defined(__unix__)||defined(__unix)||defined(__APPLE__)||defined(__MACH__)
  11. #define CLEAR "clear"
  12. #else
  13. #endif
  14.  
  15. using namespace std;
  16.  
  17. class proyecto
  18. {
  19.    private:
  20.        char nombre[100];
  21.        char carrera[100];
  22.        char num[100];
  23.        char curp[100];
  24.  
  25.    public:
  26.        void altaAlumno();
  27.        void bajaAlumno();
  28.        void modificarAlumno();
  29.        void listaAlumnos();
  30.        void menuPrincipal();
  31.        void detallesAlumno();
  32.        void mostarRegistro(char codigo [100]);
  33. };
  34.  
  35.  
  36. void pausa();
  37. void error();
  38.  
  39. void proyecto::menuPrincipal()
  40. {
  41.    int o;
  42.  
  43.    do
  44.    {
  45.     cout<<"--------------------------------------------------------------------------"<<endl;
  46.        cout<<"                    ~ PORTAL ASPIRANTES/ESTUDIANTES UV ~"<<endl;
  47.        cout<<"--------------------------------------------------------------------------"<<endl;
  48.        cout<<"     ADVERTENCIA: El uso de caracteres que no sean numeros enteros, "<<endl;
  49.        cout<<" haran que el programa no corra, NO UTILIZAR LETRAS NI NUMEROS DECIMALES."<<endl;
  50.        cout<<"--------------------------------------------------------------------------"<<endl;
  51.        cout<<"1. Inscribirse"<<endl;
  52.        cout<<"2. Mostrar mis datos"<<endl;
  53.        cout<<"3. Lista de Alumnos"<<endl;
  54.        cout<<"4. Dar de baja"<<endl;
  55.        cout<<"5. Modificar mis datos"<<endl;
  56.        cout<<"6. Salir"<<endl;
  57.        cout<<"--------------------------------------------------------------------------"<<endl;
  58.        cout<<"Elija una opcion: "<<endl;
  59.        cin>>o;
  60.        system(CLEAR);
  61.        switch(o)
  62.        {
  63.        case 1:
  64.            altaAlumno();
  65.            break;
  66.  
  67.        case 2:
  68.            detallesAlumno();
  69.            break;
  70.  
  71.        case 3:
  72.            listaAlumnos();
  73.            break;
  74.  
  75.        case 4:
  76.            bajaAlumno();
  77.            break;
  78.  
  79.        case 5:
  80.            modificarAlumno();
  81.            break;
  82.  
  83.        case 6:
  84.            break;
  85.  
  86.        default:
  87.            cout<<"Ha ingresado una opcion no valida."<<endl;
  88.            break;
  89.        }
  90.    }
  91.    while(o!=6);
  92. }
  93.  
  94. void proyecto::altaAlumno()
  95. {
  96.    ofstream escribir;
  97.    ifstream checar;
  98.    char auxCurp[100];
  99.    bool coincidencia=false;
  100.    checar.open("alumnos.txt",ios::in);
  101.    escribir.open("alumnos.txt",ios::app);
  102.    if(escribir.is_open()&&checar.is_open())
  103.    {
  104.        cout<<"--------------------------------------------------------------------------"<<endl;
  105.        cout<<"                                 INSCRIBIRSE"<<endl;
  106.        cout<<"--------------------------------------------------------------------------"<<endl;
  107.        fflush(stdin);
  108.        cout<<"Ingrese su Curp: ";
  109.        cin.getline(auxCurp,100, '\n');
  110.        cout<<"--------------------------------------------------------------------------"<<endl;
  111.        if(strcmp(auxCurp,"")==0)
  112.            do
  113.            {
  114.                cout<<"Curp no valido!, intentalo nuevamente: ";
  115.                cin.getline(auxCurp,100, '\n');
  116.                cout<<"--------------------------------------------------------------------------"<<endl;
  117.            }
  118.            while(strcmp(auxCurp,"")==0);
  119.        do
  120.        {
  121.            checar.seekg(0);
  122.            checar>>curp;
  123.            while(!checar.eof())
  124.            {
  125.                checar>>nombre>>carrera>>num;
  126.  
  127.                if(strcmp(curp,auxCurp)==0)
  128.                {
  129.                    coincidencia=true;
  130.                    cout<<"\n\nYa existe un alumno con ese curp."<<endl;
  131.                    cout<<"Ingresa un curp valido: "<<endl;
  132.                    cin.getline(auxCurp,100, '\n');
  133.                    cout<<"--------------------------------------------------------------------------"<<endl;
  134.                    if(strcmp(auxCurp,"")==0)
  135.                        do
  136.                        {
  137.                            cout<<"\nCurp no valido!, intentalo nuevamente: ";
  138.                            cin.getline(auxCurp,100, '\n');
  139.                            cout<<"--------------------------------------------------------------------------"<<endl;
  140.                        }
  141.                        while(strcmp(auxCurp,"")==0);
  142.  
  143.                    break;
  144.                }
  145.  
  146.                checar>>curp;
  147.            }
  148.  
  149.            if(checar.eof()&&strcmp(auxCurp,curp)!=0)
  150.                coincidencia=false;
  151.  
  152.        }
  153.        while(coincidencia==true);
  154.        system(CLEAR);
  155.        strcpy(curp,auxCurp);
  156.        cout<<"--------------------------------------------------------------------------"<<endl;
  157.        cout<<"                                 INSCRIBIRSE"<<endl;
  158.        cout<<"--------------------------------------------------------------------------"<<endl;
  159.        cout<<"Ingrese su Curp: ";
  160.        cout<<curp;
  161.        cout<<"\n\n";
  162.        fflush(stdin);
  163.        cout<<"Ingrese su Nombre: ";
  164.        cin.getline(nombre,100, '\0');
  165.        cout<<"\n\n";
  166.        fflush(stdin);
  167.        cout<<"Ingrese la Carrera solicitada: ";
  168.        cin.getline(carrera,100, '\0');
  169.        cout<<"\n\n";
  170.        fflush(stdin);
  171.        cout<<"Ingrese su Numero de telefono: ";
  172.        cin.getline(num,100, '\0');
  173.        cout<<"\n\n";
  174.        fflush(stdin);
  175.  
  176.  
  177.        escribir<<curp<<"\n\n"<<nombre<<"\n\n"<<carrera<<"\n\n"<<num<<"\n\n";
  178.  
  179.        cout<<"Inscripcion exitosa, Bienvenido."<<endl;
  180.    }
  181.  
  182.    else
  183.    {
  184.        error();
  185.    }
  186.  
  187.    escribir.close();
  188.    checar.close();
  189.    pausa();
  190. }
  191.  
  192. void proyecto::bajaAlumno()
  193. {
  194.    ifstream leer;
  195.    ofstream auxiliar;
  196.    bool encontrado=false;
  197.    char auxCurp[100];
  198.    char mismoCurp[100];
  199.    char respuesta[5];
  200.    leer.open("alumnos.txt",ios::in);
  201.    auxiliar.open("auxiliar.txt",ios::out);
  202.    cout<<"--------------------------------------------------------------------------"<<endl;
  203.    cout<<"                                 SISTEMA DE BAJAS"<<endl;
  204.    cout<<"--------------------------------------------------------------------------"<<endl;
  205.    if(leer.is_open()&&auxiliar.is_open())
  206.    {
  207.        fflush(stdin);
  208.        cout<<"Ingresa el Curp para dar de baja: "<<endl;
  209.        cin.getline(auxCurp,100, '\n');
  210.        cout<<"--------------------------------------------------------------------------"<<endl;
  211.        leer>>curp;
  212.        while(!leer.eof())
  213.        {
  214.            leer>>nombre>>carrera>>num>>mismoCurp;
  215.            if(strcmp(auxCurp,curp)==0)
  216.            {
  217.                encontrado=true;
  218.                cout<<"\n\nCurp Encontrado\n\n";
  219.                cout<<"Curp: "<<curp<<endl;
  220.                cout<<"Nombre: "<<nombre<<endl;
  221.                cout<<"Carrera: "<<carrera<<endl;
  222.                cout<<"Numero de telefono: "<<num<<endl;
  223.                cout<<"\n\n";
  224.                cout<<"--------------------------------------------------------------------------"<<endl;
  225.                cout<<"Realmente deseas darte de baja: "<<nombre<<" (s/n)?: ";
  226.                cin.getline(respuesta,5, '\n');
  227.                if(strcmp(respuesta,"s")==0||strcmp(respuesta,"S")==0||
  228.                        strcmp(respuesta,"si")==0||strcmp(respuesta,"SI")==0||
  229.                        strcmp(respuesta,"Si")==0||strcmp(respuesta,"sI")==0)
  230.                {
  231.                    cout<<"\n\nTe has dado de naja correctamente\n\n";
  232.                    cout<<"--------------------------------------------------------------------------"<<endl;
  233.                }
  234.  
  235.                else
  236.                {
  237.  
  238.                    cout<<"\n\nCliente conservado\n\n";
  239.                    auxiliar<<curp<<"\n\n"<<nombre<<"\n\n"<<carrera<<"\n\n"<<num<<"\n\n";
  240.                    cout<<"--------------------------------------------------------------------------"<<endl;
  241.                }
  242.            }
  243.            else
  244.            {
  245.                auxiliar<<curp<<"\n\n"<<nombre<<"\n\n"<<carrera<<"\n\n"<<num<<"\n\n";
  246.            }
  247.            leer>>curp;
  248.        }
  249.        if(encontrado==false)
  250.        {
  251.            cout<<"\n\nNo se encontro el curp: "<<auxCurp<<"\n\n";
  252.            cout<<"--------------------------------------------------------------------------"<<endl;
  253.        }
  254.    }
  255.    else
  256.    {
  257.        error();
  258.    }
  259.    leer.close();
  260.    auxiliar.close();
  261.    remove("alumnos.txt");
  262.    rename("auxiliar.txt","alumnos.txt");
  263.    pausa();
  264. }
  265.  
  266. void proyecto::detallesAlumno()
  267. {
  268.    char auxCurp [100];
  269.    ifstream mostrar;
  270.    bool encontrado=false;
  271.    mostrar.open("alumnos.txt",ios::in);
  272.    if(mostrar.is_open())
  273.    {
  274.        fflush(stdin);
  275.        cout<<"--------------------------------------------------------------------------"<<endl;
  276.        cout<<"                                 CONSULTAR MIS DATOS"<<endl;
  277.        cout<<"--------------------------------------------------------------------------"<<endl;
  278.        cout<<"Ingrese su curp por favor: ";
  279.        cin.getline(auxCurp,100, '\n');
  280.        cout<<"--------------------------------------------------------------------------"<<endl;
  281.        mostrar>>curp;
  282.        while(!mostrar.eof())
  283.        {
  284.            mostrar>>nombre>>carrera>>num;
  285.            if(strcmp(auxCurp,curp)==0)
  286.            {
  287.                encontrado=true;
  288.                cout<<"\n\nRegistro Encontrado\n\n";
  289.                cout<<"Curp: "<<curp<<endl;
  290.                cout<<"Nombre: "<<nombre<<endl;
  291.                cout<<"Carrera: "<<carrera<<endl;
  292.                cout<<"Numero de telefono: "<<num<<endl;
  293.                cout<<"\n\n";
  294.                cout<<"--------------------------------------------------------------------------"<<endl;
  295.            }
  296.  
  297.            mostrar>>curp;
  298.        }
  299.  
  300.        if(encontrado==false)
  301.        {
  302.            cout<<"\n\nNo se encontro el registro: "<<auxCurp<<"\n\n";
  303.            cout<<"--------------------------------------------------------------------------"<<endl;
  304.        }
  305.    }
  306.  
  307.    else
  308.    {
  309.        error();
  310.    }
  311.  
  312.    mostrar.close();
  313.    pausa();
  314. }
  315.  
  316. void proyecto::modificarAlumno()
  317. {
  318.    ifstream leer;
  319.    ifstream checar;
  320.    ofstream auxiliar;
  321.    char auxCurp[100];
  322.    char curpModif[100];
  323.    char auxNombre[100];
  324.    char auxcarrera[100];
  325.    char auxnum[100];
  326.    char auxFecha[100];
  327.    bool encontrado=false;
  328.    bool coincidencia=false;
  329.    bool mismoCurp=false;
  330.    leer.open("alumnos.txt",ios::in);
  331.    checar.open("alumnos.txt",ios::in);
  332.    auxiliar.open("auxiliar.txt",ios::out);
  333.    cout<<"--------------------------------------------------------------------------"<<endl;
  334.    cout<<"                                 MODIFICAR MIS DATOS"<<endl;
  335.    cout<<"--------------------------------------------------------------------------"<<endl;
  336.    if(leer.is_open()&&checar.is_open()&&auxiliar.is_open())
  337.    {
  338.        fflush(stdin);
  339.        cout<<"Ingrese su curp por favor: ";
  340.        cin.getline(auxCurp,100, '\n');
  341.        cout<<"--------------------------------------------------------------------------"<<endl;
  342.  
  343.        if(strcmp(auxCurp,"")==0)
  344.        {
  345.            do
  346.            {
  347.                cout<<"Curp invalido!, intentalo nuevamente: ";
  348.                cin.getline(auxCurp,100, '\n');
  349.                cout<<"--------------------------------------------------------------------------"<<endl;
  350.            }
  351.            while(strcmp(auxCurp,"")==0);
  352.        }
  353.  
  354.        strcpy(curpModif,auxCurp);
  355.  
  356.        leer>>curp;
  357.        while(!leer.eof())
  358.        {
  359.            leer>>nombre>>carrera>>num;
  360.            if(strcmp(auxCurp,curp)==0)
  361.            {
  362.                encontrado=true;
  363.                mostarRegistro(curpModif);
  364.  
  365.                cout<<"--------------------------------------------------------------------------"<<endl;
  366.                cout<<"Ingresa la nueva informacion\n\n";
  367.                fflush(stdin);
  368.                cout<<"Ingrese su curp: ";
  369.                cin.getline(auxCurp,100, '\n');
  370.                cout<<"--------------------------------------------------------------------------"<<endl;
  371.                if(strcmp(auxCurp,curpModif)==0)
  372.                {
  373.                    mismoCurp=true;
  374.                }
  375.                if(mismoCurp==false)
  376.                {
  377.                    do
  378.                    {
  379.                        if(strcmp(auxCurp,curpModif)==0)
  380.                        {
  381.                            coincidencia=false;
  382.                            break;
  383.                        }
  384.                        checar.seekg(0);
  385.                        checar>>curp;
  386.                        while(!checar.eof())
  387.                        {
  388.                            checar>>nombre>>carrera>>num;
  389.  
  390.                            if(strcmp(curp,auxCurp)==0)
  391.                            {
  392.                                coincidencia=true;
  393.                                cout<<"\n\nYa existe un curp igual!\n\n";
  394.                                cout<<"Ingresa un curp valido!: ";
  395.                                cin.getline(auxCurp,100, '\n');
  396.                                cout<<"--------------------------------------------------------------------------"<<endl;
  397.  
  398.                                if(strcmp(auxCurp,"")==0)
  399.                                {
  400.                                    do
  401.                                    {
  402.                                        cout<<"\n Curp no valido, ";
  403.                                        cout<<"intentalo nuevamente: ";
  404.                                        cin.getline(auxCurp,100, '\n');
  405.                                        cout<<"--------------------------------------------------------------------------"<<endl;
  406.                                    }
  407.                                    while(strcmp(auxCurp,"")==0);
  408.                                }
  409.                                break;
  410.                            }
  411.  
  412.                            checar>>curp;
  413.                        }
  414.  
  415.                        if(checar.eof()&&strcmp(auxCurp,curp)!=0)
  416.                        {
  417.                            coincidencia=false;
  418.                        }
  419.  
  420.                    }
  421.                    while(coincidencia==true);
  422.                }
  423.                system(CLEAR);
  424.                cout<<"--------------------------------------------------------------------------"<<endl;
  425.                cout<<"                                 MODIFICAR MIS DATOS"<<endl;
  426.                cout<<"--------------------------------------------------------------------------"<<endl;
  427.                cout<<"Ingrese su Curp por favor: ";
  428.                cout<<curpModif;
  429.                mostarRegistro(curpModif);
  430.                cout<<"--------------------------------------------------------------------------"<<endl;
  431.                cout<<"\n\n";
  432.                cout<<"Ingresa la nueva informacion \n\n";
  433.                cout<<"Ingrese su Curp: ";
  434.                cout<<auxCurp;
  435.                cout<<"\n\n";
  436.                fflush(stdin);
  437.                cout<<"Ingrese su Nomre: ";
  438.                cin.getline(auxNombre,100, '\n');
  439.                fflush(stdin);
  440.                cout<<"\n\n";
  441.                fflush(stdin);
  442.                cout<<"Ingresa el Numero de telefono: ";
  443.                cin.getline(auxnum,100, '\n');
  444.                cout<<"\n\n";
  445.                fflush(stdin);
  446.                auxiliar<<auxCurp<<"\n\n"<<auxNombre<<"\n\n"<<auxcarrera<<"\n\n"<<auxnum
  447.                        <<"\n\n";
  448.                cout<<"Los datos de han modificado correctamente.\n\n";
  449.            }
  450.  
  451.  
  452.            else
  453.            {
  454.  
  455.                auxiliar<<curp<<"\n\n"<<nombre<<"\n\n"<<carrera<<"\n\n"<<num
  456.                        <<"\n\n";
  457.            }
  458.  
  459.  
  460.            leer>>curp;
  461.        }
  462.  
  463.    }
  464.    else
  465.    {
  466.        error();
  467.    }
  468.  
  469.    if(encontrado==false)
  470.    {
  471.        cout<<"\n\nNo se encontro su curp.\n\n";
  472.        cout<<"--------------------------------------------------------------------------"<<endl;
  473.    }
  474.    leer.close();
  475.    checar.close();
  476.    auxiliar.close();
  477.    remove("alumnos.txt");
  478.    rename("auxiliar.txt","alumnos.txt");
  479.    pausa();
  480. }
  481.  
  482. void proyecto::listaAlumnos()
  483. {
  484.    int i=0;
  485.    ifstream leer;
  486.    leer.open("alumnos.txt",ios::in);
  487.    if(leer.is_open())
  488.    {
  489.     cout<<"--------------------------------------------------------------------------"<<endl;
  490.        cout<<"                            LISTADOS DE ALUMNOS INSCRITOS"<<endl;
  491.        cout<<"--------------------------------------------------------------------------"<<endl;
  492.        leer>>curp;
  493.        while(!leer.eof())
  494.        {
  495.            i++;
  496.            leer>>nombre>>carrera>>num;
  497.            cout<<"Curp: "<<curp<<endl;
  498.            cout<<"Nombre: "<<nombre<<endl;
  499.            cout<<"Carrera: "<<carrera<<endl;
  500.            cout<<"Numero de telefono: "<<num<<endl;
  501.            leer>>curp;
  502.            cout<<"--------------------------------------------------------------------------"<<endl;
  503.        }
  504.  
  505.        if(i==1)
  506.            cout<<"Solo hay un Alumno inscrito."<<endl;
  507.  
  508.        else
  509.  
  510.            cout<<"Hay un total de "<<i<<" Alumnos inscritos. "<<endl;
  511.    }
  512.    else
  513.    {
  514.        error();
  515.    }
  516.    leer.close();
  517.    pausa();
  518. }
  519.  
  520. void pausa()
  521. {
  522.    cout<<"Presiona Enter para continuar...";
  523.    getch();
  524.    system(CLEAR);
  525. }
  526.  
  527. int main()
  528. {
  529.    proyecto inicio;
  530.    system ("color 00");
  531.    inicio.menuPrincipal();
  532.    return 0;
  533. }
  534.  
  535. void error()
  536. {
  537.    cout<<"No se pudo abrir el archivo de registros, asegurese que el archivo se encuentre en"<<endl;
  538.    cout<<"la misma ubicacion que el programa o que el archivo de texto se llame: "<<endl;
  539.    cout<<"alumnos.txt, si el archivo tiene otro nombre renombrelo al ya mencionado"<<endl;
  540. }
  541.  
  542. void proyecto::mostarRegistro(char codigo[100])
  543. {
  544.  
  545.    ifstream mostrar;
  546.    mostrar.open("alumnos.txt",ios::in);
  547.    mostrar>>curp;
  548.    while(!mostrar.eof())
  549.    {
  550.        mostrar>>nombre>>carrera>>num;
  551.        if(strcmp(codigo,curp)==0)
  552.        {
  553.            cout<<"\n\nRegistro Encontrado\n\n";
  554.            cout<<"--------------------------------------------------------------------------"<<endl;
  555.            cout<<"Curp: "<<curp<<endl;
  556.            cout<<"Nombre: "<<nombre<<endl;
  557.            cout<<"Carrera: "<<carrera<<endl;
  558.            cout<<"Numero de telefono: "<<num<<endl;
  559.        }
  560.  
  561.        mostrar>>curp;
  562.    }
  563.  
  564.    mostrar.close();
  565. }
  566.  
  567.  

[MOD] Usar etiquetas GeSHi para publicar codigo.


Título: Re: Ayuda es urgente por favor ya no se me ocurre nada que poner hacer
Publicado por: MAFUS en 30 Noviembre 2017, 00:06 am
És C++, por lo que se me escapa un poco, pero veo la función llena de malas prácticas. Lo que te voy a comentar no te resolverá el problema pero podría acercarte a la solución:
Si usas C++ úsalo en su totalidad, en vez de atrás de char usa la clase string.
No abras un archivo para lectura y escritura de forma separada y al mismo tiempo con dos manejadores distintos. Mantén tus recursos cargados el tiempo imprescindible, es decir: abre el archivo y lo lees (cópialo a un arraya si es necesario) y cierralo. Ábrelo de nuevo para escritura el tiempo necesario para modificarlo.

Intenta encontrar el bucle que mejor se ajuste al momento. Esos do-while que usas son muy redundantes.

Todo eso hace el código tuyo demasiado 'sucio'. Intenta refactorizarlo marcando bien las pautas de cada sección.