Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mejorar estructuras y procesos?

Estas en el tema de Mejorar estructuras y procesos? en el foro de C/C++ en Foros del Web. Hola saludos, escribo para que que mejoras u optimizaciones le pueden hacer a este programita para que tenga una mejor estructura y un mejor procesamiento ...
  #1 (permalink)  
Antiguo 29/01/2014, 10:10
 
Fecha de Ingreso: enero-2013
Ubicación: venezuela
Mensajes: 6
Antigüedad: 11 años, 3 meses
Puntos: 0
Pregunta Mejorar estructuras y procesos?

Hola saludos, escribo para que que mejoras u optimizaciones le pueden hacer a este programita para que tenga una mejor estructura y un mejor procesamiento de los datos.
aqui les dejo el codigo con el enunciado.


Código:
/*
	Desarrollar un programa que registre los datos 
	de un grupo de personas (cedula, nombre, apellido, teléfono). 
	El programa debe ser capaz de mostrar el registro completo de 
        una persona de acuerdo a la cedula ingresada.

*/


 #include <stdio.h>
 #include <conio.h> 
 #include <iostream>
 #include <string>
 using namespace std;
 
 int a=0;
 class Persona { 
   public:
   string nombre[50],apellido[50];
   int cedula[50],telefono[50];
   void registrar();
   void mostrar();
 }; 
 
  void Persona::registrar() { 
  cout<<"ingrese su nombre:"<<endl;
  cin>>nombre[a];
  cout<<"ingrese su apellido:"<<endl;
  cin>>apellido[a];
  cout<<"ingrese su cedula:"<<endl;
  cin>>cedula[a];
  cout<<"ingrese su telefono:"<<endl;
  cin>>telefono[a];
  cout<<"sus datos han sido registrados correctamente:"<<endl;
  system("pause");
  system("cls");
  
  a++;                    
 } 
 void Persona::mostrar(){
      int ci=0,i=0,encontrado=0;
      cout<<"\ningrese su cedula para mostrar sus datos:"<<endl;
      cin>>ci;
      for (i=0;i<51;i++){
          if (ci==cedula[i]){
              cout<<"nombre: "<<nombre[i]<<endl;
              cout<<"apellido: "<<apellido[i]<<endl;
              cout<<"cedula: "<<cedula[i]<<endl;
              cout<<"telefono: "<<telefono[i]<<endl;
              system("pause");
              system("cls");
              encontrado=1;
              break;
              }
          else
              encontrado=0;
      }
      if (encontrado==0) 
      {cout<<"No se encuentra nadie registrado con esta cedula"<<endl;}
      system("pause");
      system("cls");
         
      
}
 main() { 
   Persona p;
   int opc;    
    cout<<endl;
    cout<<"\n\nPor favor elija una opcion: \n1.-registrarse en el sistema \n2.-mostrar sus datos"<<endl;
    cin>>opc;
    while(opc){
       switch(opc){
          case 1:{
             p.registrar();
             break;}
          case 2:{
             p.mostrar();
             break;}
       }
    cout<<"\n\nPor favor elija una opcion: \n1.-registrarse en el sistema \n2.-mostrar sus datos"<<endl;
    cin>>opc;
    }
   cin.get();
   cin.get();
   return 0; 
 }
  #2 (permalink)  
Antiguo 29/01/2014, 10:22
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Mejorar estructuras y procesos?

La primera optimización es obvia... Para que usas arrays para guardar los valores dentro de la clase? Si una instancia de la clase guardará los datos de una persona, que sentido tiene usar el array?

P.D.: También tendrías que revisar la función de mostrar, porque tiene un BUG.
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 29/01/2014, 11:53
Avatar de Payaso73  
Fecha de Ingreso: abril-2009
Ubicación: Argentina
Mensajes: 309
Antigüedad: 15 años
Puntos: 20
Respuesta: Mejorar estructuras y procesos?

Agregando a lo que dijo Malenko, yo le sacaría los system("pause"), le agregaría una opción para salir del programa y un case default para opciones incorrectas.

Saludos.
  #4 (permalink)  
Antiguo 29/01/2014, 12:00
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Mejorar estructuras y procesos?

un consejo :D
hay muchas formas de tomar el nombre :D
te explico
si tienes 3 strings así:
string nombre = "noname", apellido1="nofirstap", apellido2="nosecap";
y lo tomaras con cin así:
cin >> nombre;
cin >> apellido1;
cin >> apellido2;

hay 2 formas de tomar el nombre:
1º):
introduces 1º el nombre y pulsas enter después el 1º apellido y pulsas enter y despues el 2º apellido ¿No?

2º):
Pues lo anterior no es del todo correcto:
Puedes hacerlo asi:
Foo Bar Foobar y pulsar enter.¿Entendiste?
Pues si no te lo explico:
No hace falta ir pulsando enter, escribes el nombre el primer apellido y el 2º apellido separados por espacio y la magia esta echa.
cada espacio separa las variables correctamente.
Esperamos primero el nombre, después el 1º apellido y por ultimo el 2º apellido. :D

es como si fuera:
cin >> nombre >> apellido1 >> apellido2;

ahora bien.
Si lo que quieres es juntar todo en un solo string seria asi:
getline(cin, nombrecompleto);

eso guardaría "TODO" en un solo string ;)

getline() obtiene toda una linea de texto ;)

seria asi:

string nombrecompleto;
getline(cin, nombrecompleto);

tendrias en un solo string "Foo Bar Foobar"

Pero es cuestión de gustos: XD
incluso te permitiría tener todo en una sola linea: XD
dni, nombre, edad, dirección.....
No es muy ortodoxo XD
Pero piensatelo....¿Como vas obtener la direccion de una persona?
cada uno escribe diferente.
unos ponen C/ palote 32
otro puede que ponga:
Calle palote numero 32

Para estas cosas getline te puede ser de mas ayuda que cin >>
si intentas guardar: "pepino fresco" en un string con cin
veras que solo le puedes meter pepino, y entonces te percataras que el pepino ya no esta fresco si lo imprimes XDD
  #5 (permalink)  
Antiguo 29/01/2014, 12:15
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Mejorar estructuras y procesos?

cin>>nombre[a];

Esto no me convence muy bien :D

El string seria mejor asi:

string nombre; // no hace falta que le pongas [a]
cin >> nombre; //para guardar seria asi:

O como te comente arriba con getline( cin, nombre ); envés de cin >> nombre;

string direccion;
getline(cin, direccion);

;)

si es para una sola palabra o un numero mejor seria cin>>
por que te permite guardar como int o char

sin embargo si grardaramos un numero de telefono

Esto:
string tenelono = "600999132";

no es igual a esto:

int telefono = 600999132;

mas bien es esto:

char telefono[9];

telefono[0] ='6';
telefono[1] ='0';
telefono[2] ='0';
telefono[3] ='9';
telefono[4] ='9';
telefono[5] ='9';
telefono[6] ='1';
telefono[7] ='3';
telefono[8] ='2';

Son chars :D

Mira si quieres entender las matrices mira esta pagina:
Como se crean:
http://www.zator.com/Cpp/E4_3_1.htm
Como se inicialisan:
http://www.zator.com/Cpp/E4_3_7.htm

Etiquetas: estructuras, int, mejorar, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:35.