Se me ordenan mal unos datos y se imprimen mal otros
Publicado por frobbers (2 intervenciones) el 01/10/2021 21:19:30
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
#include <iostream>
#include <conio.h>
#include <cstring>
/* NOTAS:
*La funcion empleados_a_jubilarse no ordena los nombres correctamente
*Al imprimir los datos con datos_empleado, el estado civil se adjunta al sexo (ejemplo: "MC" o "FS")*/
using namespace std;
struct Empleado
{
char nombre[30];
int dni;
int telefono;
char direccion[30];
int edad;
char sexo[1]; // M hombre S mujer
char estado_civil[1]; // C casado S soltero
} emp[25];
void cargar_emp();
void menu();
void ingresar_empleado();
void burbujeo();
void empleados_a_jubilarse();
void edad_promedio();
void datos_empleado();
int salir=0;
int cont=2;
int contJ=0;
float suma=0, promedio=0;
char jubilados[25][30];
int main()
{
cargar_emp();
while(salir!=1)
{
menu();
}
cout << "Programa finalizado. Presione una tecla para salir" << endl;
return 0;
}
void menu()
{
int opcion;
cout << "MENU" << endl;
cout << "1- Ingresar un empleado" << endl;
cout << "2- Listar los empleados proximos a jubilarse" << endl;
cout << "3- Edad promedio de los empleados" << endl;
cout << "4- Datos de un empleado" << endl;
cout << "5- Salir" << endl << endl;
cout << "Seleccione una opcion: ";
cin >> opcion;
system("cls");
switch(opcion)
{
case 1:
ingresar_empleado();
break;
case 2:
burbujeo();
empleados_a_jubilarse();
break;
case 3:
edad_promedio();
break;
case 4:
datos_empleado();
break;
case 5:
salir=1;
break;
default:
cout << "Valor invalido. Presione una tecla para continuar" << endl;
getch();
system("cls");
break;
}
}
void ingresar_empleado()
{
if(cont>25)
{
cout << "Ya se ha alcanzado la cantidad maxima de empleados. Presione una tecla para continuar" << endl;
getch();
system("cls");
return;
}
cout << "EMPLEADO N" << cont+1 << endl;
fflush(stdin);
cout << "\t*Nombre: ";
cin.getline(emp[cont].nombre, 30, '\n');
cout << "\t*DNI: ";
cin >> emp[cont].dni;
cout << "\t*Telefono: ";
cin >> emp[cont].telefono;
fflush(stdin);
cout << "\t*Direccion: ";
cin.getline(emp[cont].direccion, 30, '\n');
cout << "\t*Edad: ";
cin >> emp[cont].edad;
suma+= emp[cont].edad;
promedio++;
fflush(stdin);
cout << "\t*Sexo: ";
cin.getline(emp[cont].sexo, 1, '\n');
if((strcmp(emp[cont].sexo,"F")==0 && emp[cont].edad<60 && emp[cont].edad>=55) || ((strcmp(emp[cont].sexo, "M")==0) && emp[cont].edad<65 && emp[cont].edad>=60))
{
strcpy(jubilados[cont], emp[cont].nombre);
contJ++;
}
cout << "\t*Estado civil: ";
cin.getline(emp[cont].estado_civil, 1, '\n');
cout << "\nIngreso de datos exitoso. Presione una tecla para continuar" << endl;
getch();
system("cls");
cont++;
}
void burbujeo()
{
char aux[30];
for(int i=0; i<25; i++)
{
for(int k=i+1; k<25; k++)
{
if(jubilados[i]<jubilados[k])
{
strcpy(aux, jubilados[i]); // aux= jubilados[i]
strcpy(jubilados[i], jubilados[k]); // jubilados[i]= jubilados[k]
strcpy(jubilados[k], aux); // jubilados[k]= aux
}
}
}
}
void empleados_a_jubilarse()
{
cout << "--EMPLEADOS A JUBILARSE ORDENADOS ALFABETICAMENTE--" << endl;
for(int j=0; j<25; j++)
{
if(strcmp(jubilados[j], "Z")!=0)
{
cout << "\t*" << jubilados[j] << endl;
}
}
cout << "Proceso finalizado. Presione una tecla para continuar" << endl;
getch();
system("cls");
}
void edad_promedio()
{
cout << "EDAD PROMEDIO DE LOS EMPLEADOS: " << suma/promedio;
cout << "\n\nPresione una tecla para continuar" << endl;
getch();
system("cls");
}
void datos_empleado()
{
int dni_aux, error=0;
cout << "Ingrese el DNI del empleado que desea buscar: ";
cin >> dni_aux;
fflush(stdin);
for(int d=0; d<25; d++)
{
if(dni_aux==emp[d].dni)
{
cout << "\n\n\t*Nombre: " << emp[d].nombre;
cout << "\n\t*DNI: " << emp[d].dni;
cout << "\n\t*Telefono: " << emp[d].telefono;
cout << "\n\t*Direccion: " << emp[d].direccion;
cout << "\n\t*Edad: " << emp[d].edad;
cout << "\n\t*Sexo: " << emp[d].sexo;
cout << "\n\t*Estado civil: " << emp[d].estado_civil;
error=0;
}
}
if(error==1)
{
cout << "\n\t*No se ha encontrado el empleado. Ingrese otro valor";
}
cout << "\n\n\nProceso finalizado. Presione una tecla para continuar" << endl;
getch();
system("cls");
}
void cargar_emp()
{
strcpy(emp[0].nombre, "Burrenzo");
strcpy(jubilados[0], emp[0].nombre);
emp[0].dni= 123;
emp[0].telefono=123;
strcpy(emp[0].direccion, "Rivadavia 5431");
emp[0].edad= 61;
suma+= emp[0].edad;
promedio++;
strcpy(emp[0].sexo, "M");
strcpy(emp[0].estado_civil, "C");
strcpy(emp[1].nombre, "Anabel");
strcpy(jubilados[1], emp[1].nombre);
emp[1].dni= 456;
emp[1].telefono=123;
strcpy(emp[1].direccion, "Casanova 1973");
emp[1].edad= 56;
suma+= emp[1].edad;
promedio++;
strcpy(emp[1].sexo, "F");
strcpy(emp[1].estado_civil, "S");
for(int z=2; z<25; z++)
{
strcpy(jubilados[z], "Z");
}
}
Lo que dice el título
El programa muestra un menu con 5 opciones
1- Cargar empleado
2- Mostrar empleados próximos a jubilarse ordenados alfabéticamente según el nombre (en hombres, entre 60 y 65 años. En mujeres, entre 55 y 60 años)
3- Calcular el promedio de la edad de los empleados
4- Imprimir los datos de un empleado ingresando su DNI para buscarlo
5- Salir
(La función cargar_emp hace 3 cosas: carga los datos de los empleados, los agrega al array jubilados (ya que están en el rango de edad) y luego carga el array de jubilados (de la posición 2 para adelante) con la letra "Z" para que sea más fácil hacer el burbujeo. Esto lo hice básicamente para no tener que cargar datos cada vez que ejecuto el programa, ya que se estaba volviendo tedioso)
Cuando ingreso la opción 2, el programa coloca primero a Anabela y después a Burrenzo. Al principio no está mal, pero si cambio el nombre de "Anabela" a "Daniela" (por ejemplo), coloca primero a Daniela, cuando tendría que estar primero Burrenzo y después Daniela
Cuando ingreso la opción 4, todo parece estar en orden hasta que en vez de imprimir "*Sexo: M" me imprime "*Sexo: MC". Es decir, me agrega el estado civil al final del sexo.
Si alguien fuera tan amable de ayudarme o de darme algún consejo en general, estaría muy agradecido.
Si tienen alguna duda sobre el código, estoy abierto a cualquier pregunta
Valora esta pregunta
0