elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  funcion de modificar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: funcion de modificar  (Leído 2,761 veces)
behindfa21

Desconectado Desconectado

Mensajes: 14


Ver Perfil
funcion de modificar
« en: 3 Mayo 2022, 23:38 pm »

Hola, he estado trabajando con unos menus de opciones, agregar y modificar. He hecho un archivo .cpp y otro que el libreria.h que es donde trabajo con las funciones, bien a lo que voy con esto es que la funcion de modificar he hecho varios intentos pero siempre no me termina de funcionar y queria saber si me podrian ayudar con el codigo(en esa parte especificamente).  :-(

Les dejo como lo tengo en el archivo .cpp que en caso de 'b' realice la función de modificar
Código
  1. case'b':case'B':{//Determinamos la estructura de control case para la toma de decisiones
  2. system("cls");//esta funcion que se encargara de limpiar el contenido de la pantalla
  3. cout<<"\tIngrese el codigo del Cliente que desea modificar: ";
  4. cin>>codigo;
  5. Modificar_cliente();
  6. verificar_cl=1;//Significa que el codigo existe
  7. //ciclo para buscar el codigo del producto
  8. for(i=1;i<=total_clientes;i++){
  9. if(codigo == CL[i].codigo_cliente){
  10. CL[i].Modificar_cliente();
  11. verificar_cl=0;
  12. }
  13. }
  14. if (verificar_cl==1){
  15. system("cls");
  16. cout<<"\tEl Codigo ingresado es invalido!! "<<endl;
  17. }
  18.  
  19. opcion=getch();//guarda la opcion seleccionada por el usuario
  20. system("cls");//esta funcion que se encargara de limpiar el contenido de la pantalla
  21. }break;
  22.  

y pues aqui es donde deberia de ir lo que deberia de hacer para que me funcione:
Código
  1. void Modificar_cliente(){
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11. } //fin de la funcion Modificar_cliente
  12.  

Muchas gracias por su tiempo.

MOD: El código debe ir entre etiquetas de Código GeSHi


« Última modificación: 4 Mayo 2022, 18:05 pm por K-YreX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: funcion de modificar
« Respuesta #1 en: 4 Mayo 2022, 19:37 pm »

Bueeno... Pues aquí hay un cacao bastante grande y se pueden mejorar algunas cosas de diseño.

Por un lado llamas a una función "Modificar_cliente" (línea 5) pero por otro lado llamas a una función miembro / método "Modificar_cliente" (línea 10) que tiene toda la pinta de pertenecer a una clase "Cliente" o algo así. Son 2 funciones totalmente diferentes, a no ser que el trozo de código que has pegado pertenezca a la clase "Cliente" también, en cuyo caso el código tendría un grave problema de estructuración (por lo que daré por hecho que no es el caso).

El segundo trozo de código que muestras, si está declarado fuera de la clase "Cliente", hará referencia a la función llamada en la línea 5 pero si pertenece a un fragmento de la clase, entonces hará referencia a la función llamada en la línea 10.

Voy a darte un ejemplo de cómo quedaría esto mismo con un código un poco más estructurado y haciendo uso de múltiples ficheros (los nombres son opcionales pero tienen que concordar igual que en este ejemplo).
Norma general:
- Fichero .h / .hpp -> Contiene definiciones. Define constantes globales, funciones (tipo de retorno, nombre de la función, parámetros, ...) pero sin implementación (sin contenido en la función)
- Fichero .cpp -> Contiene implementaciones. Implementa las funciones definidas en los ficheros .h o .hpp

Por un lado, como vas a trabajar con una clase Cliente, deberías crear los siguientes ficheros:
Código
  1. // FICHERO Cliente.h
  2. // Aqui definiras la estructura de la clase Cliente, solo la estructura
  3. #ifndef CLIENTE_H
  4. #define CLIENTE_H
  5.  
  6. class Cliente {
  7.  private:
  8.    int codigo;
  9.    // resto de atributos de la clase y funciones privadas
  10.    ...
  11.  
  12.  public:
  13.    Cliente(int); // El constructor. En la definicion de la clase no es necesario indicar el nombre de los argumentos
  14.  
  15.    int getCodigo();
  16.    // Otros metodos publicos de la clase (atributos preferiblemente privados)
  17.    void otraFuncionDeEjemplo();
  18.    ...
  19. }
  20.  
  21. #endif
Código
  1. // FICHERO Cliente.cpp
  2. // Aqui implementas las funciones definidas en el fichero anterior
  3. #include "Cliente.h" // Incluimos la definicion de la clase porque necesitamos conocerla desde aqui
  4.  
  5. Cliente::Cliente(int codigo) {
  6.    this->codigo = codigo;
  7. }
  8.  
  9. int Cliente::getCodigo() {
  10.    return this->codigo;
  11. }
  12.  
  13. void Cliente::otraFuncionDeEjemplo(...) {
  14.    ...
  15. }

Ahora vamos a hacer lo mismo para agrupar todas las utilidades ajenas a la clase. Esto hay muchas maneras de hacerlo: separar las utilidades en varios ficheros, definir todas en el mismo fichero, incluirlas directamente en el main, ...)
Código
  1. // FICHERO Utilidades.h
  2. #ifndef UTILIDADES_H
  3. #define UTILIDADES_H
  4.  
  5. #include "Cliente.h"
  6.  
  7. // Esta funcion devolvera el indice del cliente de la lista cuyo codigo sea el mismo que estamos buscando o -1 si no lo encuentra (lo usaremos mas adelante)
  8. int buscarIndiceCliente(Cliente[] listaClientes, int numClientes, int codigo);
  9.  
  10. #endif
Código
  1. // FICHERO Utilidades.cpp
  2.  
  3. #include "Utilidades.h"
  4. #include "Cliente.h"
  5.  
  6. int buscarIndiceCliente(Cliente[] listaClientes, int numClientes, int codigo) {
  7.    // PD: El array se tiene que recorrer desde la posicion 0 hasta la posicion numClientes (no incluida)
  8.    // En la linea 8 de tu codigo estas recorriendo desde la 1 hasta la posicion numClientes (incluida) y eso generara un error
  9.    ...
  10. }

Para usar todo esto, tenemos que crear una función main() que contiene el código principal de tu programa. Para ello usamos otro fichero
Código
  1. // FICHERO main.cpp
  2. // Basta con incluir los .h para que este fichero "conozca" la clase Cliente y las funciones (no necesita conocer la implementacion de sus funciones del .cpp)
  3. #include "Cliente.h"
  4. #include "Utilidades.h"
  5.  
  6. // ESTE FRAGMENTO se podria incluir aqui o en un fichero main.h e incluirlo al principio de este
  7. const MAX_CLIENTES = 10;
  8. // Prototipos de funciones que vayamos a usar en el main() -> La implementacion de dichas funciones iria en este mismo fichero -> En este caso usaremos Utilidades.h
  9. // FIN FRAGMENTO
  10.  
  11. int main() {
  12.    Cliente listaClientes[MAX_CLIENTES];
  13.    int numClientes = 0; // Este contador lleva el numero real de clientes en la lista
  14.  
  15.    ...
  16.  
  17.    // Ahora llegamos a tu parte:
  18.    case 'b': case 'B': // No necesitas la llave. Ademas puedes convertir la variable a mayuscula/minuscula para no hacer ambas comprobaciones
  19.        cout << "Introduce codigo: ";
  20.        cin >> codigo;
  21.  
  22.        int indiceCliente = buscarIndiceCliente(listaClientes, numClientes, codigo);
  23.        if(indiceCliente != -1) {
  24.            // Aqui ya puedes recuperar el cliente buscado a una variable para trabajar con el
  25.            Cliente c = listaClientes[indiceCliente];
  26.            // O trabajar con el directamente sin usar otra variable
  27.            listaClientes[indiceCliente].otraFuncionDeEjemplo(); // Incluyendo los mismos argumentos que hayas indicado al definir la funcion
  28.        } else {
  29.            // Si entras aqui es porque el codigo no se ha encontrado
  30.            cout << "El codigo no existe..." << endl;
  31.        }
  32.        // El uso que le das a getch() es para pausar el programa hasta que pulses una tecla y entonces limpiar la pantalla
  33.        // getch() pertenece a <conio.h> y no es estandar. En C++ la opcion recomendable es: cin.get() (y es mejor que no asignes el resultado a ninguna variable para evitar posibles errores futuros)
  34.        cin.get();
  35.        system("cls");
  36.        break;
  37.  
  38.    ....
  39. }

Código mejor estructurado y con un poco de todo para que te sirva de ayuda.

PD: Deberías pensar bien cómo quieres modificar un cliente y dónde deberías meter esa funcionalidad...  :silbar: :silbar:


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines