Ayuda codigo C++ (Agenda)

Iniciado por L0R0, 25 Febrero 2011, 21:49 PM

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

Edu

Mmmm no se bien q es lo q quieres hacer vs pero fijate bien lo del while a ver si en vez de || tienes q poner && , haz pruebas

Confunde q pongas 1<opc en vez de opc>1 , ese ultimo se lee mejor ;)

L0R0

Si esa es la forma normal pss pero si lo coloco asi no me corre..... tonces probe con esa otra forma..... pero ni idea pq.....  :-\
"Es preferible estar expuesto a los inconvenientes que surgen de un exceso de libertad que a los que provienen de una falta de ella."-Thomas Jefferson

Twitter: @loro11

dato000

#12
aqui esta:

No supe como dar la salida si el usuario digita 2. NO en la opcion 3. Salida, lo demás funciona.

Si el problema persiste por lo de "opc >,opc <, opc =", puede que sea por el compilador o el firewall, o hasta el SO que usas viejo.

No soy un experto, pero trate de hacer lo que pude.

Pa eso estamos, no??



#include <cstdlib>
#include <iostream>

using namespace std;


struct Persona {
  char Nombre[65];
  char Estado[65];
  int ANacimiento;
 
}plantilla;

int main(int argc, char *argv[]) //WHAT THE FUCK IS THIS??? SI TIENES TIEMPO EXPLICAME!! fuerteizquierdo@hotmail.com
{
    int opc;
 
    do
    {    
           system("CLS");      
           cout<< "Selecione Su Opcion:  ";
           cout<< endl;
           cout<< "1. Ingresar Usuario. ";
           cout<<endl;
           cout<< "2. Ver Usuario. ";
           cout<<endl;
           
           //para este yo no preguntaria nuevamente, si el usuario eligio salir,
           //pues que salga, para eso esta la opcion
           cout<< "3. Salir. ";
           cout<<endl;
           cout<< "Opcion: ";
           cin>> opc;
           cout<<endl;
           system("CLS");
                 
           switch (opc)
           {
                         
                case 1:
                   
                       //viejo, al usuario no se le debe limpiar la pantalla solo por dos o tres lineas
                       //no abuses del CLS pues cualquiera que no sepa del codigo queda confundido.
                       //el profesor seguramente joderia por eso
                       cout<< "introduzca nombre: "; cout<<endl;
                       cin>> plantilla.Nombre;
                       cout<<endl;cout<<endl;
                       cout<< "introduzca estado: "; cout<<endl;
                       cin>> plantilla.Estado;
                       cout<<endl;cout<<endl;
                       
                       //especifica que sea un año!!!
                       cout<< "introduzca AÑO DE nacimiento: "; cout<<endl;
                       cin>> plantilla.ANacimiento;
                       cout<<endl;cout<<endl;
                       
                       //porque continue y no break...pues porque solo asi me funciono.
                       continue;
                 
               
               
                   
                case 2:
                     
                       continue;
                     
                     
                     
                     
               case 3:
                       
                       //en mi opinion r deberia ir aqui, ya que solo es usado para la opcion de salida
                       //y pues ni pondria esto, solo EXIT y ya!! pa que complicarse!!
                       int r;
                       
                       cout<< "De Verdad Desea Salir?";
                       cout<< endl;
                       cout<< "1.Si.                        2.No.";
                       cout<<endl;
                       cout<< "opcion: ";
                       cin>>r;    
                       if (r==1)
                       {
                                return EXIT_SUCCESS;
                       }
                       
                       
             }//end del switch
           
             //hay que cambiar el valor de opc pues el programa siempre quedaria
             //con la opcion inicial y quedaria en un ciclo infinito
             opc=0;
             
             //yo rompi con el switch para dar salida, siempre hago eso, es mi return EXIT_SUCCESS
             //limitado a casos switch
             break;
      } while (opc==1 || opc==2); //end del while
}



Dejame darte una sugerencia: SIEMPRE USA COMENTARIOS, AYUDA A UBICARTE EN EL CODIGO, puede que un experto no lo use, pero a mi me funciona para recordar funciones y todo eso.



Edu

Y acuerdate q el switch tiene un default: podrias usarlo

dato000

ups, bueno, aún así funciona, digamos que lo mejor es ponerlo.



L0R0

#15
Bueno aca esta el codigo ya mas adelantado y con los comentarios,,, Si alguien sabe como puedo hacer en este caso para eliminar a algun contacto y ordenarlos todos nuevamente,, me ayudaria muchisimo!!!

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>

using namespace std;


struct Persona {
char Nombre[65];
char apellido[65];
char numcel[65];

}plantilla[100];

int main(int argc, char *argv[])
{
int opc;
/// variables opcion nuevo contacto:
int r;
int cont=0; /// sirve tambien para opcion 2 y 3.
/// variable opcion lista de contactos:
int a;
int tr;
//// variable opcion de salida:
int s;
//// variables opcion buscador:
char buscont[65];
int bus1;
int bus2;
int vrf=0;

//// Variables opcion Opciones:
int op;
int rep;
///variable opciones 1 modificar
int g;
int val;
int va;
int mod;
int op1;
// variables opciones 2 borrar
int del;
int delm;
int h;

do
{


system("CLS");
cout<< "Selecione Su Opcion: ";
cout<< endl;
cout<< "1. Agregar un nuevo Contacto. ";
cout<<endl;
cout<< "2. Ver la lista de Contactos agregados. ";
cout<<endl;
cout<< "3. Buscar contacto por nombre. ";
cout<<endl;
cout<< "4. Opciones. ";
cout<<endl;
cout<< "5. Salir. ";
cout<<endl;
cout<< "Opcion: ";
cin>> opc;
cout<<endl;
rep=0;
system("CLS");




switch (opc)
{
//Comienza agregar contactos.
case 1:

r=cont++;


cout<< "Agregue el nombre del nuevo contacto: ";
cin>> plantilla[r].Nombre;
cout<<endl;

cout<< "Agregue el apellido del nuevo contacto: ";
cin>> plantilla[r].apellido;
cout<<endl;

cout<< "Agregue el numero movil del nuevo contacto: ";
cin>> plantilla[r].numcel;
cout<<endl;
system("CLS");

break;
//termina agregar contactos.


case 2:
//comienza lista de contactos.
cout<< "Lista de Contactos: ";
cout<< endl;

if (cont==0)
{
cout<< "Lista de contactos vacia.";
cout<<endl;
system ("PAUSE");
system("CLS");
break;
} else {


for(a=0;a<r+1;a++)

{
tr=a;

cout<< tr+1<< ". ";
cout<< plantilla[a].Nombre;
cout<<endl;
}
system("PAUSE");
system("CLS");
break;

}
//termina lista de contactos.
case 3:
//comienza buscar contactos.
cout<< "Igrese el nombre que desea buscar: ";
cin>> buscont;
cout<<endl;

if (cont==0)
{
cout<< "Lista de contactos vacia.";
cout<<endl;
system ("PAUSE");
system("CLS");
break;
}

for(bus1=0;bus1<r+1;bus1++)
{
if (strcmp(plantilla[bus1].Nombre,buscont)==0)
{ cout<<"Resulatdo Encontrado: "<<endl;
cout<<"Nombre: "<<plantilla[bus1].Nombre<<endl;
cout<<"Apellido: "<<plantilla[bus1].apellido<<endl;
cout<<"Numero Movil: "<<plantilla[bus1].numcel<<endl;
vrf=1;
cout<<endl;


}

}
if (vrf==0)
{
cout<<"Resultado No Encontrado....."<<endl;


}





system ("PAUSE");

vrf=0;

break;
//termina buscar contactos.
case 4:
//comienza opciones.
do
{
system ("CLS");
cout<<"Eliga su nueva opcioc: "<<endl;
cout<<"1.Modificar contacto."<<endl;
cout<<"2.Borrar contacto. "<<endl;
cout<<"3.Menu principal. "<<endl;
cout<<"Opcion: ";
cin>>op;
system ("CLS");


switch(op)
{
case 1:
//modificar contactos:
//lista contactos:
cout<< "Lista de Contactos: ";
cout<< endl;

if (cont==0)
{
cout<< "Lista de contactos vacia.";
cout<<endl;
system ("PAUSE");
system("CLS");
break;
} else {


for(a=0;a<r+1;a++)

{
tr=a;

cout<< tr+1<< ". ";
cout<< plantilla[a].Nombre;
cout<<endl;
}
}
//fin lista contactos.
//pregunta 1:
cout<<"Seleccione el numero del contacto que desea modificar: ";
cin>>val;
mod=val-1;
g=r+1;


if (val<=g)
{
//opcion modificar contacto:
do
{
system ("CLS");
cout<<"Contacto:"<<endl;
cout<<"1. Nombre: "<<plantilla[mod].Nombre<<endl;
cout<<"2. Apellido: "<<plantilla[mod].apellido<<endl;
cout<<"3. Numero Movil: "<<plantilla[mod].numcel<<endl;
cout<<"4. Menu anterior."<<endl;
cout<<"Seleccione la opcion que desea modificar: ";
cin>>op1;
switch (op1)
{
case 1:
cout<< "Modifique el nombre del contacto: ";
cin>> plantilla[mod].Nombre;
cout<<endl;
break;
case 2:
cout<< "Modifique el apellido del contacto: ";
cin>> plantilla[mod].apellido;
cout<<endl;
break;
case 3:
cout<< "Modifique el numero de movil del contacto: ";
cin>> plantilla[mod].numcel;
cout<<endl;
break;
case 4:
rep=1;
break;
}
}while (rep==0);//fin modificar contacto.
}else {cout<<"El contacto no existe."<<endl;
system ("PAUSE");}
rep=0;
//fin pregunta 1.


break;
//fin modificar contactos.
case 2:
//borrar contactos.
//lista contactos:
cout<< "Lista de Contactos: ";
cout<< endl;

if (cont==0)
{
cout<< "Lista de contactos vacia.";
cout<<endl;
system ("PAUSE");
system("CLS");
break;
} else {


for(a=0;a<r+1;a++)

{
tr=a;

cout<< tr+1<< ". ";
cout<< plantilla[a].Nombre;
cout<<endl;
}
}
//fin lista contactos.

//pregunta 2:
cout<<"Seleccione el numero del contacto que desea eliminar: ";
cin>>del;
delm=del-1;
h=r+1;

if (del<=h)
{
plantilla[delm].Nombre;
plantilla[delm].apellido;
plantilla[delm].numcel;
break;
}else {cout<<"El contacto no existe."<<endl;
system ("PAUSE");}
//fin regunta 2.
system ("PAUSE");


break;
//fin borrar contactos.
case 3:
rep=1;
break;

}



}while (rep==0);

break;

//termina opciones

case 5:
//comienza salida.
cout<< "De Verdad Desea Salir?";
cout<< endl;
cout<< "1.Si. 2.No.";
cout<<endl;
cout<< "opcion: ";
cin>>s;
if (s==1)
{
return EXIT_SUCCESS;
} else {
break;
}





}


} while (1<opc || 5>opc);

//termina salida.
}
"Es preferible estar expuesto a los inconvenientes que surgen de un exceso de libertad que a los que provienen de una falta de ella."-Thomas Jefferson

Twitter: @loro11

rommel89

Tu error esta es que utilisas la misma variable tanto para elegir las opciones como para salir: dices que si presiono uno opcion=1; y me lleva al caso 1: hago las acciones de ese caso y cuando salgo pregunta en el while() que si opcion es  menor 1 y como 1 no es menor a uno se sale.  y por eso siempre que entres al caso 1 simepre te saldras del programa

L0R0

No, pero es que ya no tengo problemas con el menu, bueno en realidad si, uno y es que cuando ingreso una letra el programa colapsa, pero de resto no hay problemas con el menu o por lo menos yo lo corro en mi PC y no tengo problemas....

La duda que tengo ahora es de como debo hacer para eliminar un contacto de la lista y que luego la agenda los vuelva a ordenar..... he pensado hacerlo con strings pero que va la logica no me da.

Quisiera saber si hay alguna forma de que el arreglo quede otra vez sin ningun valor ya sea un entero o una letra, etc.... Gracias!!!
"Es preferible estar expuesto a los inconvenientes que surgen de un exceso de libertad que a los que provienen de una falta de ella."-Thomas Jefferson

Twitter: @loro11

Akai

#18
La clase "String" es para cadenas de caracteres, no te va a servir si quieres, por ejemplo, tener una lista de objetos de tu clase o estructura persona.

Para ello, tienes dos opciones, utilizar las clases std::list o std::vector Si optas por esto, tendrás un contenedor donde tus objetos estarán y podrás insertar o quitar de forma dinámica, pero ordenarlos queda a tu tarea (a menos que sobrecargues los operadores necesarios para que la lista o el vector los puedan ordenar con sus métodos, mira las referencias que te he puesto).

O bien, implementarte tu propia estructura de tipo lista para poder hacer inserciones y eliminar elementos de forma dinámica y ordenarlos a tu antojo.

PD: mauriciodelos, ¿qué haces citando el post anterior y no diciendo nada más?

mauriciodelos

Cita de: loro!!88 en 12 Marzo 2011, 07:04 AM
No, pero es que ya no tengo problemas con el menu, bueno en realidad si, uno y es que cuando ingreso una letra el programa colapsa
para solucionar eso tendrías que crear un booleano que se active si se teclea algo que no es. Por ejemplo:


---------

// variables opciones 2 borrar
int del;
int delm;
int h;
bool error; /*Declará el booleano (puede ser acá o antes del main, pero siempre antes del do while)*/

do
{
system("CLS");
if (error==true){cout<<"Elija una opción real\n\n";error=false;}/*Este if detecta si se activó el error y te da un consejo, también vuelve a error a false por las dudas*/
cout<< "Selecione Su Opcion: ";
cout<< endl;
cout<< "1. Agregar un nuevo Contacto. ";
cout<<endl;
cout<< "2. Ver la lista de Contactos agregados. ";
cout<<endl;
cout<< "3. Buscar contacto por nombre. ";
cout<<endl;
cout<< "4. Opciones. ";
cout<<endl;
cout<< "5. Salir. ";
cout<<endl;
cout<< "Opcion: ";
cin>> opc;
cout<<endl;
if(opc>1||opc>6){error=true;} /*Este if verifica si se escribió alguna de las opciones, o sea, si no es un número del 1 al 6, pone la bandera de error en verdadero y avisa que hay un error*/
rep=0;
system("CLS");

---------------------------------------

}


} while (opc!=5); /*A este while yo lo cambiaría así para que sólo salga cuando presionas la opción 5.*/

//termina salida.




CitarLa duda que tengo ahora es de como debo hacer para eliminar un contacto de la lista y que luego la agenda los vuelva a ordenar..... he pensado hacerlo con strings pero que va la logica no me da. Quisiera saber si hay alguna forma de que el arreglo quede otra vez sin ningun valor ya sea un entero o una letra, etc.... Gracias!!!

Para borrar todos los datos de algun array:

strcpy(nombreDelArrayAborrar,"\0");

Y para acomodarlos podrías crear alguna función que al borrar un contacto, copie el siguiente  a ese lugar, y así sucesivamente hasta acomodarlos todos. ej:

int copiar=NumeroContactoBorrado;//Al elegir cual borrar deberías guardar la selección.

strcpy(contacto[copiar],contacto.nombre[copiar+1])//Se copiaría el contenido del siguiente contacto.
strcpy(contacto.nombre[copiar+1],"\0")//Borrar el que ya copiaste
copiar++ //Subir en 1 el numero a copiar, o sea, el que ya copiaste y borraste, lo preparás para copiarle el siguiente.


Cita de: Akai en 13 Marzo 2011, 23:21 PMPD: mauriciodelos, ¿qué haces citando el post anterior y no diciendo nada más?

Jajajajajjajajajaj. Perdón, es que estaba respondiendo y en vez de presionar alt+p para previsualizar, aprete alt+s. Y ni si quiera había empezado.

El fanatismo es la máxima estupidez humana.