Dev - C++ - Selección de registro

 
Vista:
sin imagen de perfil
Val: 24
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por Miguelangel (14 intervenciones) el 12/12/2016 03:41:46
Programa para almacenar registro de datos con selección de Sexo y que permita consultar los datos registrados por numero de registro o por sexo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <conio.h>
 
using namespace std;
string nombre [n];
string cedula [n];
int n;
int opcion, i, sex;
char eleccion;
int main()
{
 
    cout<<"Registro de Datos"<<endl;
    cout<<endl;
    cout<<endl;
    cout<<" Bienvenido al programa de registro de datos"<<endl;
    cout<<"Por favor ingrese a continuación los datos a registrar"<<endl;
    for(i<=1;i<=n;i++)
    {
    cout<<endl;
    cout<<"Por favor ingrese el nombre ["<<i<<"] ";
 
    getline (cin,nombre[i]) ;
    cout<<endl;
    cout<<endl;
    cout<<"Por favor ingrese la cédula ["<< i <<"]:" ;
    getline (cin, cedula[i]) ;
    cout<<endl;
    cout<<endl;
    cout<<"Seleccione Sexo de la persona : F/M"<<endl;
    cin>>sex;
    cout<<endl;
   }
    cout<<"Consultar datos registrados ";
    cout<<endl;
    elección=='s';
    while (eleccion=='s' ||'S')
    {
 
cout<<"Ingrese el numero del registro realizado :";
   cin>>opcion;
   cout<<endl;
    cout<<endl;
    cout<<"Los datos consultados son:";
 
    cout<<endl;
    cout<<endl;
    cout<<"Nombre:"<<nombre[opcion] ;
    cout<<endl;
    cout<<endl;
    cout<<"Cédula:"<<cedula[opcion] ;
 
    cout<<endl;
    cout<<endl;
    cout<<"Desea consultar otro registro? S/N:";
    cin>>eleccion;
    cout<<endl;
    cout<<endl;
    cout<<endl;
}
getch ();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por agustin (522 intervenciones) el 12/12/2016 08:45:03
De entrada no creo que eso compile por esto:
1
2
3
string nombre [n];
string cedula [n];
int n;
Usas n para indicar el tamaño de la matriz pero n ni siquiera existe en ese momento ya que la creas justo después.
Aunque n la crearas antes tampoco la inicializas con lo que su valor es indeterminado y por ende el tamaño de las matrices también.
Además usar un valor no constante para crear una matriz no es estándar con lo que no te va a funcionar con todos los compiladores. Para eso debes usar new y delete para asignarle la memoria que necesite en tiempo de ejecución o si quieres hacerlo en tiempo de compilación define antes una constante como por ejemplo:
1
2
3
#define N 10
string nombre [N];
string cedula [N];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por Miguelangel (14 intervenciones) el 12/12/2016 10:07:06
Cierto. Ese código se le solicita al usuario q indique 'n', lo q deseo hacer es cm mostrar los registros según el Sexo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por agustin (522 intervenciones) el 12/12/2016 13:08:19
Ese codigo tiene bastantes errores. Te he puesto uno corregido aunque realmente seria mejor usar funciones y separar todo para poder elegir lo que deseemos:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <limits>
 
using namespace std;
 
typedef struct {
    string nombre;
    string cedula;
    char sex;
}PERSONA;
 
int main()
{
    int n;
    int opcion;
    char eleccion;
    char sexo;
    PERSONA *personas;
 
    cout << "Registro de Datos" << endl << endl << endl;
    cout << "Bienvenido al programa de registro de datos"<<endl;
    cout << "Intruce el numero de registros a ingresar: ";
    cin >> n;
 
    if(n > 0){
        personas = new PERSONA[n];
        cout << "Por favor ingrese a continuación los datos a registrar" << endl;
 
        for(int i=0; i<n; i++)
        {
            cout << endl;
            //La siguiente linea la uso para limpiar el buffer de entrada
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
            cout << "Por favor ingrese el nombre de la persona [" << i << "] ";
 
            getline (cin,personas[i].nombre) ;
            cout << endl << endl;
            cout << "Por favor ingrese la cedula de la persona [" << i << "]:";
            getline (cin, personas[i].cedula);
            cout << endl << endl;
 
            do{
                cout << "Seleccione Sexo de la persona [" << i << "](F/M): ";
                cin >> personas[i].sex;
                cout << endl;
                personas[i].sex = toupper(personas[i].sex);
                if(personas[i].sex != 'F' && personas[i].sex != 'M')
                    cout << "Por favor intruduzca un sexo correcto" << endl;
            }while(personas[i].sex != 'F' && personas[i].sex != 'M');
        }
        cout << "Consultar datos registrados" << endl;
        eleccion = 'S';
        while (eleccion == 'S')
        {
            cout << "Ingrese el numero del registro realizado: ";
            cin >> opcion;
            cout << endl << endl;
            if(opcion >= 0 && opcion < n){
                cout << "Los datos consultados son:" << endl << endl;
                cout << "Nombre: " << personas[opcion].nombre << endl << endl;
                cout << "Cedula: " << personas[opcion].cedula << endl << endl;
                cout << "Sexo: " << personas[opcion].sex << endl << endl;
                cout << "Desea consultar otro registro? S/N: ";
                cin >> eleccion;
                eleccion = toupper(eleccion);
                cout << endl << endl << endl;
            }else{
                cout << "Ha elegido un numero de registro no valido" << endl;
            }
        }
 
        cout << "Vamos a listar todos los del mismo sexo" << endl;
        cout << "Intruduce el sexo a listar (F/M): ";
        cin >> sexo;
        sexo = toupper(sexo);
        cout << endl << endl;
        cout << "Los registros para ese sexo son:" << endl << endl;
        for(int i=0;i<n;i++)
        {
            if(personas[i].sex == sexo){
                cout << "Registro[" << i << "]" << endl;
                cout << "Nombre: " << personas[i].nombre << endl;
                cout << "Cedula: " << personas[i].cedula << endl;
                cout << "Sexo: " << personas[i].sex << endl;
                cout << endl;
            }
        }
        delete[] personas;
    }
    cout << "Pulse intro para salir";
    //La siguiente linea la uso para limpiar el buffer de entrada
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por Thanatos (190 intervenciones) el 12/12/2016 13:37:50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#include <iostream>
#include <string>   // string, getline()
#include <limits>   // numeric_limits
#include <cctype>   // toupper()
 
using namespace std;
 
struct Registro {
    size_t numero;
    string nombre;
    string cedula;
    char sexo;
};
 
void mostrarMenu(void);
bool ejecutarOpciones(const Registro[], size_t);
void ingresarDatos(Registro[], size_t);
void buscarPorNumero(const Registro[], size_t);
void listarPorSexo(const Registro[], size_t);
void mostrarRegistro(const Registro &registro);
void limpiarBuffer(void);
 
int main() {
    const size_t kSize(3);
    Registro *registros(new Registro[kSize]);
    bool continuar(false);
 
    do {
        mostrarMenu();
        continuar = ejecutarOpciones(registros, kSize);
    } while (continuar);
 
    delete[] registros;
    return 0;
}
 
void mostrarMenu() {
    cout << " ---------------------- \n"
         << "        OPCIONES        \n"
         << " ---------------------- \n"
         << "  1. Ingresar datos     \n"
         << "  2. Buscar por numero  \n"
         << "  3. Listar por sexo    \n"
         << "  4. Salir              \n"
         << " ---------------------- \n"
         << "  opcion = ";
}
 
bool ejecutarOpciones(const Registro registros[], size_t size) {
    char opcion;
 
    cin >> opcion;
 
    cout << endl;
    switch (opcion) {
        case '1':
            ingresarDatos(const_cast<Registro *>(registros), size);
            break;
        case '2':
            buscarPorNumero(const_cast<Registro *>(registros), size);
            break;
        case '3':
            listarPorSexo(const_cast<Registro *>(registros), size);
            break;
        case '4':
            return false;
        default:
            cout << " * Opcion desconocida *\n";
            break;
    }
    cout << endl;
 
    return true;
}
 
void ingresarDatos(Registro registros[], size_t size) {
    string nombre;
    string cedula;
    char sexo;
    size_t i(0);
 
    cout << " Ingrese los siguientes datos:\n";
    while (i < size) {
        cout << "\n Registro #" << i + 1 << ":\n";
        limpiarBuffer();
 
        cout << " Nombre: ....... ";
        (void)getline(cin, nombre);
 
        cout << " Cedula: ....... ";
        (void)getline(cin, cedula);
 
        cout << " Sexo (M/F): ... ";
        cin >> sexo;
        sexo = static_cast<char>(toupper(sexo));
        if (sexo == 'M' || sexo == 'F') {
            registros[i] = { i + 1, nombre, cedula, sexo };
            ++i;
        } else {
            cout << "\n * Ingrese solo M o F *\n";
        }
    }
}
 
void buscarPorNumero(const Registro registros[], size_t size) {
    bool existe(false);
    size_t numero;
 
    cout << " Ingrese el numero: ";
    cin >> numero;
    for (size_t i(0); i < size; ++i) {
        if (numero == registros[i].numero) {
            mostrarRegistro(registros[i]);
            existe = true;
        }
    }
 
    if (!existe) {
        cout << "\n* No hay coincidencias *\n";
    }
}
 
void listarPorSexo(const Registro registros[], size_t size) {
    bool existe(false);
    char sexo;
 
    cout << " Sexo (M/F): ";
    cin >> sexo;
    for (size_t i(0); i < size; ++i) {
        if (toupper(sexo) == registros[i].sexo) {
            mostrarRegistro(registros[i]);
            existe = true;
        }
    }
 
    if (!existe) {
        cout << "\n* No hay coincidencias *\n";
    }
}
 
void mostrarRegistro(const Registro &registro) {
    cout << '\n'
         << " numero -> " << registro.numero << '\n'
         << " nombre -> " << registro.nombre << '\n'
         << " cedula -> " << registro.cedula << '\n'
         << " sexo   -> " << registro.sexo   << '\n';
}
 
void limpiarBuffer() {
    (void)cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por agustin (522 intervenciones) el 12/12/2016 14:17:50
Bueno yo habia hecho otro pero Thanatos se me adelantó y la verdad es que el suyo es mas limpio pero lo pongo de todos modos por si te sirve:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <iostream>
#include <limits>
#include <ctype.h>
 
using namespace std;
 
typedef struct {
    string nombre;
    string cedula;
    char sex;
}PERSONA;
 
void ingresarRegistros(PERSONA p[],int n){
    cout << "Por favor ingrese a continuación los datos a registrar" << endl;
 
    for(int i=0; i<n; i++)
    {
        cout << endl;
        //La siguiente linea la uso para limpiar el buffer de entrada
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Por favor ingrese el nombre de la persona [" << i << "] ";
        getline (cin,p[i].nombre) ;
        cout << endl << endl;
        cout << "Por favor ingrese la cedula de la persona [" << i << "]:";
        getline (cin, p[i].cedula);
        cout << endl << endl;
 
        do{
            cout << "Seleccione Sexo de la persona [" << i << "](F/M): ";
            cin >> p[i].sex;
            cout << endl;
            p[i].sex = toupper(p[i].sex);
            if(p[i].sex != 'F' && p[i].sex != 'M')
                cout << "Por favor intruduzca un sexo correcto" << endl;
        }while(p[i].sex != 'F' && p[i].sex != 'M');
    }
}
 
void consultarRegistros(PERSONA p[],int n){
    int opcion;
    char eleccion='S';
 
    system("CLS");
    cout << "Consultar datos registrados" << endl;
 
    do
    {
        cout << "Ingrese el numero del registro a consultar (entre 0 y " << n-1 << "): ";
        cin >> opcion;
        cout << endl << endl;
        if(opcion >= 0 && opcion < n){
            cout << "Los datos consultados son:" << endl << endl;
            cout << "Nombre: " << p[opcion].nombre << endl << endl;
            cout << "Cedula: " << p[opcion].cedula << endl << endl;
            cout << "Sexo: " << p[opcion].sex << endl << endl;
            cout << "Desea consultar otro registro? S/N: ";
            cin >> eleccion;
            eleccion = toupper(eleccion);
 
            if(eleccion == 'S'){
                system("CLS");
                cout << "Consultar datos registrados" << endl;
            }
        }else{
            cout << "Ha elegido un numero de registro no valido" << endl;
        }
    }while(eleccion == 'S');
}
 
void listarFiltradoPorSexo(PERSONA p[], int n){
    char sexo;
 
    system("CLS");
    cout << "Vamos a listar todos los del mismo sexo" << endl;
    do{
        cout << "Intruduce el sexo a listar (F/M): ";
        cin >> sexo;
        sexo = toupper(sexo);
 
        if(sexo != 'F' && sexo != 'M'){
            cout << "Opcion elegida incorrecta. Vuelve a intentarlo." << endl;
        }
    }while(sexo != 'F' && sexo != 'M');
    cout << endl << endl;
    cout << "Los registros para ese sexo son:" << endl << endl;
 
    for(int i=0;i<n;i++)
    {
        if(p[i].sex == sexo){
            cout << "Registro[" << i << "]" << endl;
            cout << "Nombre: " << p[i].nombre << endl;
            cout << "Cedula: " << p[i].cedula << endl;
            cout << "Sexo: " << p[i].sex << endl;
            cout << endl;
        }
    }
    cout << "Pulse intro para continuar";
    //La siguiente linea la uso para limpiar el buffer de entrada
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get();
}
 
int menu(){
    int op;
 
    system("CLS");
    cout << "MENU" << endl;
    cout << "====" << endl;
    cout << "1-Consultar un registro" << endl;
    cout << "2-Listado de registros filtrado por sexo" << endl;
    cout << "3-Salir" << endl;
    cout << "Elije una opcion: ";
    cin >> op;
 
    return op;
}
 
int main()
{
    int n;
    int opcion;
    char eleccion;
    char sexo;
    PERSONA *personas;
 
    cout << "Registro de Datos" << endl << endl << endl;
    cout << "Bienvenido al programa de registro de datos"<<endl;
    cout << "Intruce el numero de registros a ingresar (0 para salir): ";
    cin >> n;
 
    if(n > 0){
        personas = new PERSONA[n];
 
        ingresarRegistros(personas,n);
 
        do{
            opcion = menu();
            switch(opcion)
            {
                case 1:
                    consultarRegistros(personas,n);
                    break;
                case 2:
                    listarFiltradoPorSexo(personas,n);
                    break;
                case 3:
                    cout << "Adios" << endl;
                    break;
                default:
                    cout << "Opcion no valida. pulsa intro para volver a intentarlo";
            }
        }while(opcion != 3);
        delete[] personas;
    }
    cout << "Pulse intro para salir";
    //La siguiente linea la uso para limpiar el buffer de entrada
    cin.ignore(numeric_limits<streamsize>::max(), '\n');
    cin.get();
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 24
Ha disminuido 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por Miguelangel (14 intervenciones) el 12/12/2016 15:01:30
Gracias amigos por la ayuda. Observó 2 cosas es sus códigos 1) que son monstruos programando y 2) soy un pichón aun. Si pueden sugerirme material para ampliar conocimientos se los Agradezco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Selección de registro

Publicado por agustin (522 intervenciones) el 12/12/2016 15:56:45
Te equivocas, soy novato en c++. Hay muchos libros que te pueden ayudar como por ejemplo el de "C++ Como programar" de Deitel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar