/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Arreglos de estructuras

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
LeoSimanca



Registrado: 15 Abr 2011
Mensajes: 20

MensajePublicado: 23/05/2011 10:16 am
Título: Arreglos de estructuras

Hola muchachos!, el problema es el siguiente:

Como proyecto debo hacer un banco y hasta ahora estoy empezando. Pero como uds saben los bancos manejan bases de datos, en este caso la debo manejar con un arreglo de tipo estructura, pero no me funciona, llevo lo siguiente:



Código:
#include <iostream>

using namespace std;

struct{
       char nombre[30];
       char apellido[30];
       string direccion[30];
       int telefono;
       int IDcliente;
       }regcliente;

int main()
{
 regcliente totalclientes[10];
 char op;
 int opcion=0;
 int Nclientes=0;
 cout<<"Que desea hacer? "<<endl;
 cout<<"1. Nuevo registro de cliente ";
 cin>>opcion;
 if(opcion==1)
 {
  system("CLS");
  cout<<"Nombre: ";    cin>>totalclientes[Nclientes].nombre;
  cout<<"Apellido: ";  cin>>totalclientes[Nclientes].apellido;
  cout<<"Direccion: "; cin>>totalclientes[Nclientes].direccion;
  cout<<"Telefono: ";  cin>>totalclientes[Nclientes].telefono;
  Nclientes++;           
  opcion=0;
  cout<<"Desea agregar un nuevo registro? S/N";    cin>>op;
  if(op=='s' || op=='S')opcion==1;
 }
 system("PAUSE");
 return 0;   
}


Es para agregas un cliente a la base de datos, lo estoy haciendo asi porque solo tengo 2 dias para hacerlos y creo que no es tiempo suficiente para aprender como manejar la base de datos desde un programa externo como Acces o SQL, sin embargo si cansideran que si es tiempo suficiente y tienen algun tutorial o me lo pueden explicar, de antemano muchisimas gracias por su ayuda![/code]
Volver arriba
LeoSimanca



Registrado: 15 Abr 2011
Mensajes: 20

MensajePublicado: 23/05/2011 10:19 am
Título:

Por cierto,


Sistema operativo: Windows 7
Compilador: Bloodshed Dev C++
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7530
Ubicación: Mexico

MensajePublicado: 23/05/2011 11:28 am
Título:

El problema es que solo tienes dos dias, si fuera un poco mas te recomendaria que lo hicieras en Access, al menos en mis tiempos (hace mas de dies años) hacer una base de datos con el era facil y si se requeria mayor control su lenguaje era Visual Basic para Aplicaciones (VBA). Relativamente facil.

En cuanto al programa no entiendo cual es el "error". Tal vez no funcione ya que falta el bucle donde se repite el proceso (presentar el menu, elegir una opcion, etc.). Tambien combinas arrays de caracteres y cadenas (clase string) algo que deberias evitar. Y ya que es C++ puedes optar por un vector (clase con el mismo nombre) para almacenar los registros.

El programa con el bucle incluido y algunas correciones mas es:
Código:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;

#include <string>
using std::string;

struct Cliente {
   string nombre;
   string apellido;
   string direccion;
   
   int telefono;
   int IDcliente;
};

const int max_num_clientes = 10;
int main()
{
   Cliente cliente[max_num_clientes];
   int i = 0;
   
   string linea;
   int opcion;
   
   do {
      cout << "Menu de opciones:" << endl;
      cout << "1) Agregar cliente" << endl;
      cout << "2) Salir " << endl;
      cout << "Que desea hacer? ";
      cin >> opcion;
      getline(cin, linea); // Descartar resto de la linea
     
      switch (opcion){
      case 1: // Agregar registro
         cout << "Nombre: ";
         getline(cin, cliente[i].nombre);
         
         cout << "Apellido: ";
         getline(cin, cliente[i].apellido);
         
         cout << "Direccion: ";
         getline(cin, cliente[i].direccion);
         
         cout << "Telefono: ";
         cin >> cliente[i].telefono;
         
         cout << "ID del cliente: ";
         cin >> cliente[i].IDcliente;
         getline(cin, linea); // Descartar resto de la linea
         
         ++i; // Actualizamos el numero de clientes
         break;
      case 2:
         // Salir, nada que hacer
         break;
      default:
         cout << "Opcion no valida!" << endl;
         break;
      }
   }while (opcion != 2);
   
   return 0;
}


En el caso ideal deberias crear funciones para cada operacion y colocar en la sentencia de seleccion "switch" solo llamadas a ellas.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language


Ultima edición por rir3760 el 24/05/2011 4:43 am; editado 1 vez
Volver arriba
LeoSimanca



Registrado: 15 Abr 2011
Mensajes: 20

MensajePublicado: 23/05/2011 7:16 pm
Título:

gracias rir3760

Pero tu version no me guarda los strings, sin embargo ya resolvi mi problema jeje era algo muy tonto, en mi codigo original tenia;

Código:
struct {

char nombre[30];
char apellido[30];
string direccion[30];
int telefono;
int IDcliente;
}regclientes;


Luego cmabie los char por strings y les quite la definicion de arreglos y aun no funcionaba, luego simplemente cambie el lugar del nombre de la estructura y funciono...jejeje quedo asi:

Código:
struct regclientes{

string nombre;
string apellido;
string direccion;
int telefono;
int IDcliente
};


Y ya sirvio....sin embargo tengo otro problema,

Como hago para que me cuente los espacios como caracteres?

porque por ejemplo cuando digito mi nombre, digito por ejemplo "Alberto Andres" y solo me guarda lo que esta antes del espacio y se salta el apellido!
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7530
Ubicación: Mexico

MensajePublicado: 24/05/2011 4:41 am
Título:

LeoSimanca escribió:
gracias rir3760

Pero tu version no me guarda los strings

Mea culpa. Abuse (solo un poco) del "Copy & Paste", ya esta corregido en el programa.

Para leer una linea de texto completa descartando el avance de linea utilizas la funcion getline.

Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com