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

Arreglo de objetos (Modificar y buscar)

Estas en el tema de Arreglo de objetos (Modificar y buscar) en el foro de C/C++ en Foros del Web. Buenas noches, llevo 4 horas en este ejercicio y no logro avanzar mucho, lo que me pide que haga es esto "En el proyecto hacer ...
  #1 (permalink)  
Antiguo 24/10/2014, 00:25
 
Fecha de Ingreso: octubre-2014
Mensajes: 2
Antigüedad: 10 años
Puntos: 0
Pregunta Arreglo de objetos (Modificar y buscar)

Buenas noches, llevo 4 horas en este ejercicio y no logro avanzar mucho, lo que me pide que haga es esto

"En el proyecto hacer las modificaciones para que las clases Médico y Paciente sean arreglos de objetos tamaño 10. Entregar código fuente en electrónico. Además agregar el método que permita hacer modificaciones en cada clase. Capturar solicitaría los datos de los 10 objetos que se almacenarán en el arreglo. Mostrar despliega los datos de los 10 datos capturados. El método modificar solicitará el Codigo del Médico o Cédula profesional, busca en cada posición del arreglo de objetos, muestra los datos de ese código o número, así como un menú con las opciones posibles a modificar (una por cada atributo de cada clase, solicitando el nuevo dato. "

Ya resolví la parte de capturar y mostrar datos, pero no logro que funcione del todo el método buscar, y no tengo de idea de como crear el método modificar, ya estuve buscando referencias por horas en Internet, y solo me topo con ejemplos estructurados o con manejo de números enteros .

Aquí dejo lo que llevo de la tarea.


Código c++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. const int telpac = 3;
  5.  
  6. class Pacientes {
  7. public:
  8. string nombre, numpac, domicilio;
  9. int telf[telpac];
  10. int numero;
  11. int p;
  12. void Capturar(int);
  13. void Mostrar(int);
  14. void Buscar();
  15. }enfermo[10];
  16.  
  17.  
  18. class Medico {
  19. private:
  20. string nombre, c_prof, dom, codigo, tel;
  21. public:
  22. void Capturar();
  23. void Mostrar();
  24. void Buscar();
  25. };
  26.  
  27.  
  28. void Medico::Capturar() {
  29. system("cls");
  30. cout << "------ Caputra de datos ------" << endl;
  31. cout << "Codigo del medico:" << endl;
  32. getline(cin, codigo);
  33. cout << "Introdusca el nombre del medico:" << endl;
  34. getline(cin, nombre);
  35. cout << "Introdusca la cedula profesional:" << endl;
  36. getline(cin, c_prof);
  37. cout << "Indtrodusca el domicilio:" << endl;
  38. getline(cin, dom);
  39. cout << "Introdusca el numero de telefono:" << endl;
  40. getline(cin, tel);
  41.  
  42. }
  43.  
  44.  
  45. void Medico::Mostrar() {
  46. system("cls");
  47. cout << "------ Datos del medico ------" << endl;
  48. cout << "Nombre: " << nombre << "\nCodigo: " << codigo << endl;
  49. cout << "Cedula profesional: " << c_prof << "\nDomicilio: " << dom << "\nTelefono: " << tel << endl;
  50. }
  51.  
  52.  
  53. void Medico::Buscar()
  54. {
  55. string cod;
  56. system("cls");
  57. cout << "------ Busqueda ------" << endl;
  58. cout << "Introdusca el codigo: " << endl;
  59. getline(cin, cod);
  60. if (codigo == cod){
  61. cout << "------ Datos del medico ------" << endl;
  62. cout << "Nombre: " << nombre << "\nCedula Profesional: " << c_prof << "\nDomicilio: " << dom << "\nTelefono: " << tel << endl;
  63. }
  64. else
  65. cout << "Codigo inexistente" << endl;
  66. }
  67.  
  68.  
  69. void Pacientes::Capturar(int x){
  70. system("cls");
  71.  
  72. cout << "------ Captura de datos ------" << endl;
  73. cout << "Paciente numero: " << (x+1) << endl;
  74. cout << "Introdusca el numero de paciente: " << endl;
  75. getline(cin, numpac);
  76. cout << "Introdusca el nombre del paciente: " << endl;
  77. getline(cin, nombre);
  78. cout << "Introdusca el domicilio del paciente: " << endl;
  79. getline(cin, domicilio);
  80. cout << "Introdusca el numero de tel del paciente: " << endl;
  81.  
  82. for (p = 0; p < telpac; p++){
  83. cout << "Opcion numero " << p + 1 << ": ";
  84. cin >> numero;
  85. telf[p] = numero;
  86. }
  87. }
  88.  
  89.  
  90. void Pacientes::Mostrar(int x){
  91. cout << "------ Paciente registrado numero " << (x+1) << " ------" << endl;
  92.  
  93. cout << "Numero de paciente: " << numpac << "\nNombre: " << nombre << endl;
  94. cout << "Domicilio: " << domicilio << endl;
  95. cout << "Numeros de telefono (Casa, Celular y oficina): " << endl;
  96. for (p = 0; p < telpac; p++)
  97. cout << telf[p] << endl;
  98.  
  99. }
  100.  
  101. void Pacientes::Buscar(){
  102. string num;
  103. system("cls");
  104. cout << "------ Busqueda ------" << endl;
  105. cout << "Introdusca el codigo: " << endl;
  106. getline(cin, num);
  107. if (num == numpac){
  108. cout << "------ Informacion del paciente ------" << endl;
  109. cout << "Numero de paciente: " << numpac << "\nNombre: " << nombre << endl;
  110. cout << "Domicilio: " << domicilio << endl;
  111. cout << "Numeros de telefono (Casa, Celular y oficina): " << endl;
  112. for (p = 0; p < telpac; p++)
  113. cout << telf[p] << endl;
  114. }
  115. else
  116. cout << "Codigo inexistente" << endl;
  117.  
  118. }
  119.  
  120.  
  121. void menuprincipal();
  122. void menupaciente();
  123. void menumedico();
  124.  
  125.  
  126.  
  127. int main()
  128. {
  129. menuprincipal();
  130. return 0;
  131. }
  132.  
  133. void menuprincipal(){
  134. int opc_menu;
  135.  
  136. do{
  137. system("cls");
  138. cout << "------ Menu Principal ------" << endl;
  139. cout << "1.-Menu Medicos" << "\n2.-Menu Pacientes" << "\n3.-Salir" << endl;
  140. cout << "Elija una opcion y oprima ENTER ===> ";
  141. cin >> opc_menu;
  142.  
  143. cin.ignore();
  144.  
  145. switch (opc_menu){
  146. case 1:
  147. menumedico();
  148. break;
  149. case 2:
  150. menupaciente();
  151. case 3:
  152. cout << "" << endl;
  153. break;
  154. default:
  155. cout << "Esta opcion es invalida" << endl;
  156. }
  157. } while (opc_menu > 0 && opc_menu < 3);
  158. }
  159.  
  160.  
  161. void menumedico(){
  162. Medico doctor;
  163. int opc_menu;
  164. do{
  165. system("cls");
  166. cout << "------ Menu Pacientes ------" << endl;
  167. cout << "1.-Caputar" << "\n2.-Mostrar" << "\n3.-Buscar" << "\n4.-Regresar" << endl;
  168. cout << "Elija una opcion y oprima ENTER ===> ";
  169. cin >> opc_menu;
  170.  
  171. cin.ignore();
  172.  
  173. switch (opc_menu){
  174. case 1:
  175. doctor.Capturar();
  176. break;
  177. case 2:
  178. doctor.Mostrar();
  179. system("PAUSE");
  180. break;
  181. case 3:
  182. doctor.Buscar();
  183. system("PAUSE");
  184. break;
  185. case 4:
  186. cout << " " << endl;
  187. break;
  188. default:
  189. cout << " " << endl;
  190. }
  191. } while (opc_menu > 0 && opc_menu <= 3);
  192.  
  193. }
  194.  
  195.  
  196.  
  197. void menupaciente(){
  198.  
  199. int opc_menu;
  200. do{
  201. system("cls");
  202. cout << "------ Menu Paciente ------" << endl;
  203. cout << "1.-Caputar" << "\n2.-Mostrar" << "\n3.-Buscar" << "\n4.-Regresar" << endl;
  204. cout << "Elija una opcion y oprima ENTER ===> ";
  205. cin >> opc_menu;
  206.  
  207. cin.ignore();
  208.  
  209. switch (opc_menu){
  210. case 1:
  211. for (int x = 0; x<10; x++){
  212. enfermo[x].Capturar(x);
  213. cin.ignore();
  214. }
  215. break;
  216. case 2:
  217. for (int x = 0; x<10; x++){
  218. enfermo[x].Mostrar(x);
  219. }
  220. system("PAUSE");
  221. break;
  222. case 3:
  223.  
  224. system("PAUSE");
  225. break;
  226. case 4:
  227. cout << " " << endl;
  228. break;
  229. default:
  230. cout << " " << endl;
  231. }
  232. } while (opc_menu > 0 && opc_menu <= 3);
  233. }

Gracias por su atención.

Última edición por miaumax; 24/10/2014 a las 00:27 Razón: Etiquetas de para codigo
  #2 (permalink)  
Antiguo 24/10/2014, 01:01
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Arreglo de objetos (Modificar y buscar)

Cita:
Iniciado por miaumax Ver Mensaje
En el proyecto hacer las modificaciones para que las clases Médico y Paciente sean arreglos de objetos tamaño 10
Tu código no cumple esta condición, ya que tanto "Medico" como "Paciente" únicamente permiten almacenar un elemento y no 10 como te piden.

Cita:
Iniciado por miaumax Ver Mensaje
Capturar solicitaría los datos de los 10 objetos que se almacenarán en el arreglo. Mostrar despliega los datos de los 10 datos capturados.
Tu código únicamente trabaja con un elemento y no con 10, luego estos métodos tampoco están correctamente terminados.

Cita:
Iniciado por miaumax Ver Mensaje
y no tengo de idea de como crear el método modificar
Si modificas las clases para que sean capaces de almacenar 10 elementos, como te piden, verás que el método buscar se basa únicamente en un bucle que recorre los 10 elementos y comprueba si alguno cumple con la condición de la búsqueda.

No se cómo esperan que resuelvas este código. Yo personalmente sacaría los miembros de "Paciente" y "Medico" a sendas estructuras y modificaría estas clases para que admitiesen 10 elementos de la estructura que les toque:

Código C++:
Ver original
  1. class Medico
  2. {
  3.   public:
  4.  
  5.     // Es una buena práctica acostumbrarse a implementar constructor y destructor
  6.     Medico( );
  7.     ~Medico( );
  8.  
  9.     void Capturar( );
  10.     void Mostrar( );
  11.     void Buscar( );
  12.  
  13.   private:
  14.  
  15.     // Tipos internos
  16.  
  17.     struct Item{
  18.       std::string nombre;
  19.       std::string c_prof;
  20.       std::string dom;
  21.       std::string codigo;
  22.       std::string tel;
  23.     };
  24.  
  25.     // Miembros de la clase
  26.  
  27.     Item items[ 10 ];    
  28. }

Con esto deberías ser capaz de resolver el problema que te plantean.

A modo de bonus te indico algunos detalles que no están del todo bien en tu código:
  • Tabula el código: Si el código no está tabulado es bastante complicado de corregir ya que no es fácil ver si una línea determinada está, por ejemplo, dentro de un if o fuera (caso de if con varias líneas se entiende)
  • No hay persistencia: si entras en el menu medico, introduces datos, sales de ese menu y vuelves al mismo los datos introducidos se han perdido irremediablemente. El objeto "Medico" debería estar declarado en el main y pasado como referencia en aquellos métodos que sea necesario, lo mismo para "Paciente".
  • Las variables que pertenecen a una clase deberían ser, como norma general, privadas.

Un saludo.
  #3 (permalink)  
Antiguo 24/10/2014, 10:33
 
Fecha de Ingreso: octubre-2014
Mensajes: 2
Antigüedad: 10 años
Puntos: 0
Respuesta: Arreglo de objetos (Modificar y buscar)

Buenas tardes eferion, veras apenas soy un n00b en el mundo de c++, y la tarea no me pide tantos requisitos, se dan con que el programa capture y muestre las cosas una sola ves, tampoco me piden que valide la entrada de datos y tampoco el uso de constructores (Es una materia de primer semestre), así que no importa (ahorita) que el programa quede primitivo, acabo de compilar el código fuente (adjunto) y pues hace lo que me piden en la escuela, solo que no entendí muy bien el como crear un método que modifique lo que se queda "guardado" en el arreglo, te dejo el código fuente actualizado (guarda 10 datos en pacientes y médicos y los muestra aunque sea solo 1 ves)





Código c++:
Ver original
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. const int telpac = 3;
  5.  
  6. class Pacientes {
  7. public:
  8.     void Capturar(int);
  9.     void Mostrar(int);
  10.     void Buscar();
  11.  
  12. private:
  13.     string nombre, numpac, domicilio;
  14.     int telf[telpac];
  15.     int numero;
  16.     int p;
  17.  
  18. }enfermo[10];
  19.  
  20.  
  21. class Medico {
  22. private:
  23.     string nombre, c_prof, dom, codigo, tel;
  24. public:
  25.     void Capturar(int);
  26.     void Mostrar(int);
  27.     void Buscar();
  28. };
  29.  
  30.  
  31. void Medico::Capturar(int x) {
  32.     system("cls");
  33.     cout << "------ Caputra de datos ------" << endl;
  34.     cout << "Doctor numero: " << (x + 1) << endl;
  35.     cout << "Codigo del medico:" << endl;
  36.     getline(cin, codigo);
  37.     cout << "Introdusca el nombre del medico:" << endl;
  38.     getline(cin, nombre);
  39.     cout << "Introdusca la cedula profesional:" << endl;
  40.     getline(cin, c_prof);
  41.     cout << "Indtrodusca el domicilio:" << endl;
  42.     getline(cin, dom);
  43.     cout << "Introdusca el numero de telefono:" << endl;
  44.     getline(cin, tel);
  45.  
  46. }
  47.  
  48.  
  49. void Medico::Mostrar(int x) {
  50.     cout << "------ Medico registrado numero " << (x + 1) << " ------" << endl;
  51.     cout << "Nombre: " << nombre << "\nCodigo: " << codigo << endl;
  52.     cout << "Cedula profesional: " << c_prof << "\nDomicilio: " << dom << "\nTelefono: " << tel << endl;
  53. }
  54.  
  55.  
  56. void Medico::Buscar()
  57. {
  58.     string cod;
  59.     system("cls");
  60.     cout << "------ Busqueda ------" << endl;
  61.     cout << "Introdusca el codigo: " << endl;
  62.     getline(cin, cod);
  63.     if (codigo == cod){
  64.         cout << "------ Datos del medico ------" << endl;
  65.         cout << "Nombre: " << nombre << "\nCedula Profesional: " << c_prof << "\nDomicilio: " << dom << "\nTelefono: " << tel << endl;
  66.     }
  67.     else
  68.         cout << "Codigo inexistente" << endl;
  69. }
  70.  
  71.  
  72. void Pacientes::Capturar(int x){
  73.     system("cls");
  74.  
  75.     cout << "------ Captura de datos ------" << endl;
  76.     cout << "Paciente numero: " << (x+1) << endl;
  77.     cout << "Introdusca el numero de paciente: " << endl;
  78.     getline(cin, numpac);
  79.     cout << "Introdusca el nombre del paciente: " << endl;
  80.     getline(cin, nombre);
  81.     cout << "Introdusca el domicilio del paciente: " << endl;
  82.     getline(cin, domicilio);
  83.     cout << "Introdusca el numero de tel del paciente: " << endl;
  84.  
  85.     for (p = 0; p < telpac; p++){
  86.         cout << "Opcion numero " << p + 1 << ": ";
  87.         cin >> numero;
  88.         telf[p] = numero;
  89.     }
  90. }
  91.  
  92.  
  93. void Pacientes::Mostrar(int x){
  94.     cout << "------ Paciente registrado numero " << (x+1) << " ------" << endl;
  95.  
  96.     cout << "Numero de paciente: " << numpac << "\nNombre: " << nombre << endl;
  97.     cout << "Domicilio: " << domicilio << endl;
  98.     cout << "Numeros de telefono (Casa, Celular y oficina): " << endl;
  99.     for (p = 0; p < telpac; p++)
  100.         cout << telf[p] << endl;
  101.  
  102. }
  103.  
  104. void Pacientes::Buscar(){
  105.     string num;
  106.     system("cls");
  107.     cout << "------ Busqueda ------" << endl;
  108.     cout << "Introdusca el codigo: " << endl;
  109.     getline(cin, num);
  110.     if (num == numpac){
  111.         cout << "------ Informacion del paciente ------" << endl;
  112.         cout << "Numero de paciente: " << numpac << "\nNombre: " << nombre << endl;
  113.         cout << "Domicilio: " << domicilio << endl;
  114.         cout << "Numeros de telefono (Casa, Celular y oficina): " << endl;
  115.         for (p = 0; p < telpac; p++)
  116.             cout << telf[p] << endl;
  117.     }
  118.     else
  119.         cout << "Codigo inexistente" << endl;
  120.        
  121. }
  122.  
  123.  
  124. void menuprincipal();
  125. void menupaciente();
  126. void menumedico();
  127.  
  128.  
  129.  
  130. int main()
  131. {
  132.     menuprincipal();
  133.     return 0;
  134. }
  135.  
  136. void menuprincipal(){
  137.     int opc_menu;
  138.  
  139.     do{
  140.         system("cls");
  141.         cout << "------ Menu Principal ------" << endl;
  142.         cout << "1.-Menu Medicos" << "\n2.-Menu Pacientes" << "\n3.-Salir" << endl;
  143.         cout << "Elija una opcion y oprima ENTER ===> ";
  144.         cin >> opc_menu;
  145.  
  146.         cin.ignore();
  147.  
  148.         switch (opc_menu){
  149.         case 1:
  150.             menumedico();
  151.             break;
  152.         case 2:
  153.             menupaciente();
  154.         case 3:
  155.             cout << "" << endl;
  156.             break;
  157.         default:
  158.             cout << "Esta opcion es invalida" << endl;
  159.         }
  160.     } while (opc_menu > 0 && opc_menu < 3);
  161. }
  162.  
  163.  
  164. void menumedico(){
  165.     Medico doctor[10];
  166.     int opc_menu;
  167.     do{
  168.         system("cls");
  169.         cout << "------ Menu Pacientes ------" << endl;
  170.         cout << "1.-Caputar" << "\n2.-Mostrar" << "\n3.-Buscar" << "\n4.-Regresar" << endl;
  171.         cout << "Elija una opcion y oprima ENTER ===> ";
  172.         cin >> opc_menu;
  173.  
  174.         cin.ignore();
  175.  
  176.         switch (opc_menu){
  177.         case 1:
  178.             for (int x = 0; x<10; x++){
  179.                 doctor[x].Capturar(x);
  180.                 cin.ignore();
  181.             }
  182.             break;
  183.         case 2:
  184.             for (int x = 0; x<10; x++){
  185.                 doctor[x].Mostrar(x);
  186.             }
  187.             cin.get();
  188.             break;
  189.         case 3:
  190.            
  191.             cin.get();
  192.             break;
  193.         case 4:
  194.             cout << " " << endl;
  195.             break;
  196.         default:
  197.             cout << " " << endl;
  198.         }
  199.     } while (opc_menu > 0 && opc_menu <= 3);
  200.  
  201. }
  202.  
  203.  
  204.  
  205. void menupaciente(){
  206.    
  207.     int opc_menu;
  208.     do{
  209.         system("cls");
  210.         cout << "------ Menu Paciente ------" << endl;
  211.         cout << "1.-Caputar" << "\n2.-Mostrar" << "\n3.-Buscar" << "\n4.-Regresar" << endl;
  212.         cout << "Elija una opcion y oprima ENTER ===> ";
  213.         cin >> opc_menu;
  214.  
  215.         cin.ignore();
  216.  
  217.         switch (opc_menu){
  218.         case 1:
  219.             for (int x = 0; x<10; x++){
  220.                 enfermo[x].Capturar(x);
  221.                 cin.ignore();
  222.             }
  223.             break;
  224.         case 2:
  225.             for (int x = 0; x<10; x++){
  226.                 enfermo[x].Mostrar(x);
  227.             }
  228.             cin.get();
  229.             break;
  230.         case 3:
  231.            
  232.             cin.get();
  233.             break;
  234.         case 4:
  235.             cout << " " << endl;
  236.             break;
  237.         default:
  238.             cout << " " << endl;
  239.         }
  240.     } while (opc_menu > 0 && opc_menu <= 3);
  241. }
  #4 (permalink)  
Antiguo 24/10/2014, 11:28
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Arreglo de objetos (Modificar y buscar)

A ver, si la clase "Medico" únicamente permite almacenar los datos de un elemento no tiene sentido que dicha clase tenga un método "buscar".... porque cada objeto únicamente se conoce a sí mismo y no tiene ni idea de lo que le rodea. Si "Medico" tiene que tener implementado un método "Buscar" entonces es porque, internamente, "Medico" tiene que disponer de un arreglo que permita almacenar "N" elementos... en este caso "N" es 10.

La trampa que has hecho de "Medico doctor[10];" no te sirve porque, si bien es cierto que con eso puedes almacenar 10 elementos de tipo "Medico", el método "Buscar" de "Medico" no puede acceder a los 10 elementos... ni sabe que existen ni los espera.

Si te fijas en el código que te puse en mi anterior mensaje, creo una estructura con los miembros de tu clase "Medico" e instancio un arreglo de 10 elementos de esta estructura dentro de "Medico"... a partir de ese momento, todos los métodos de "Medico" pueden acceder a dicho arreglo y trabajar con cualquiera de los 10 objetos que hay instanciados... el camino que tienes que tomar para resolver tu ejercicio va en esa dirección.

Un saludo.

Etiquetas: arreglo, clase, funcion, int, modificar, objetos
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 03:45.