1 /*
2 * File: main.cpp
3 * Author: Silvia Vargas
4 *
5 * Created on 31 de octubre de 2024, 09:35 AM
6 */
7
8 #include <iostream>
9 #include <fstream>
10 #include <iomanip>
11
12 using namespace std;
13
14 #define TAM_ARREGLO 10
15
16 #include "funciones.h"
17
18 int main(int argc, char** argv) {
19 int arrDNIs[TAM_ARREGLO],arrDistritos[TAM_ARREGLO],cantPersonas;
20 double arrSueldos[TAM_ARREGLO];
21 char *arrNombres[TAM_ARREGLO];
22 //
llenarArreglos("personas.txt",arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPersonas);
23 //
mostrarArreglos("reporte.txt",arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPersonas);
24 // ordenarArreglosDNIAsc(arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPersonas);
25 //
mostrarArreglos("reporteDNIAsc.txt",arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPerson
as);
26 // ordenarArreglosNombreDesc(arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPersonas);
27 //
mostrarArreglos("reporteNombreDesc.txt",arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPe
rsonas);
28
29 llenarArreglosNuevo("nuevoPersonas.txt",arrDNIs,arrNombres,arrDistritos,
30 arrSueldos,cantPersonas);
31
mostrarArreglos("reporteNuevo.txt",arrDNIs,arrNombres,arrDistritos,arrSueldos,cantPer
sonas);
32 return 0;
33 }
34
35
36 /*
37 * File: funciones.h
38 * Author: Silvia Vargas
39 *
40 * Created on 31 de octubre de 2024, 09:36 AM
41 */
42
43 #ifndef FUNCIONES_H
44 #define FUNCIONES_H
45
46 void llenarArreglos(const char *,int *,char **,int *,double *,int &);
47 char *leeCadenaExactaDelim(ifstream &,char );
48 void mostrarArreglos(const char *,int *,char **,int *,double *,int );
49 void ordenarArreglosDNIAsc(int *,char **,int *,double *,int );
50 void cambiarInt(int &,int &);
51 void cambiarCC(char *&,char *&);
52 void cambiarDouble(double &,double &);
53 void ordenarArreglosNombreDesc(int *,char **,int *,double *,int );
54 void llenarArreglosNuevo(const char *,int *,char **,int *,double *,int &);
55 #endif /* FUNCIONES_H */
56
57 /*
58 * File: funciones.cpp
59 * Author: Silvia Vargas
60 *
61 * Created on 31 de octubre de 2024, 09:36 AM
62 */
63
64
65 #include <iostream>
66 #include <fstream>
67 #include <iomanip>
68
69 using namespace std;
70
71 #include <cstring>
72 #include "funciones.h"
73
74 void llenarArreglos(const char *nombArch,int *arrDNIs,char **arrNombres,int
*arrDistritos,
75 double *arrSueldos,int &cantPersonas){
76 ifstream archPersonas(nombArch,ios::in);
77 if (not archPersonas.is_open()){
78 cout<<"El archivo "<<nombArch<<" no se pudo abrir"<<endl;
79 exit(1);
80 }
81 int dni,dist;
82 double sueldo;
83 char *ptrNombre;
84 cantPersonas=0;
85 while(true){
86 archPersonas>>dni;
87 if (archPersonas.eof()) break;
88 archPersonas>>ws;
89 ptrNombre=leeCadenaExactaDelim(archPersonas,'}');
90 archPersonas>>dist>>sueldo;
91 arrDNIs[cantPersonas]=dni;
92 arrNombres[cantPersonas]=ptrNombre;
93 arrDistritos[cantPersonas]=dist;
94 arrSueldos[cantPersonas]=sueldo;
95 cantPersonas++;
96 }
97 }
98
99 char *leeCadenaExactaDelim(ifstream &archivo,char delim){
100 char auxiliar[100],*ptr;
101 archivo.getline(auxiliar,100,delim);
102 if (archivo.eof()) return nullptr;
103 ptr=new char [strlen(auxiliar)+1];
104 strcpy(ptr,auxiliar);
105 return ptr;
106 }
107
108 void mostrarArreglos(const char *nombArch,int *arrDNIs,char **arrNombres,
109 int *arrDistritos,double *arrSueldos,int cantPersonas){
110 ofstream archReporte(nombArch,ios::out);
111 if (not archReporte.is_open()){
112 cout<<"El archivo "<<nombArch<<" no se pudo abrir"<<endl;
113 exit(1);
114 }
115 archReporte<<"LISTADO DE PERSONAS"<<endl;
116 archReporte<<setw(8)<<"DNI"<<setw(20)<<"NOMBRE"<<setw(15)<<"DISTRITO"
117 <<setw(10)<<"SUELDO"<<endl;
118 for (int i=0;i<cantPersonas;i++)
119 archReporte<<setfill('0')<<setw(8)<<arrDNIs[i]<<setfill(' ')<<setw(4)<<' '
120 <<left<<setw(50)<<arrNombres[i]<<right<<setw(10)<<arrDistritos[i]
121 <<setw(12)<<arrSueldos[i]<<endl;
122 }
123
124 void ordenarArreglosDNIAsc(int *arrDNIs,char **arrNombres,int *arrDistritos,
125 double *arrSueldos,int cantPersonas){
126 for (int i=0;i<cantPersonas-1;i++)
127 for (int j=i+1;j<cantPersonas;j++)
128 if (arrDNIs[i]>arrDNIs[j]){
129 cambiarInt(arrDNIs[i],arrDNIs[j]);
130 cambiarCC(arrNombres[i],arrNombres[j]);
131 cambiarInt(arrDistritos[i],arrDistritos[j]);
132 cambiarDouble(arrSueldos[i],arrSueldos[j]);
133 }
134 }
135
136 void cambiarInt(int &datoI,int &datoJ){
137 int aux=datoI;
138 datoI=datoJ;
139 datoJ=aux;
140 }
141
142 void cambiarCC(char *&cadenaI,char *&cadenaJ){
143 char *aux=cadenaI;
144 cadenaI=cadenaJ;
145 cadenaJ=aux;
146 }
147
148 void cambiarDouble(double &datoI,double &datoJ){
149 double aux=datoI;
150 datoI=datoJ;
151 datoJ=aux;
152 }
153
154 void ordenarArreglosNombreDesc(int *arrDNIs,char **arrNombres,int *arrDistritos,
155 double *arrSueldos,int cantPersonas){
156 for (int i=0;i<cantPersonas-1;i++)
157 for (int j=i+1;j<cantPersonas;j++)
158 if (strcmp(arrNombres[i],arrNombres[j])<0){
159 cambiarInt(arrDNIs[i],arrDNIs[j]);
160 cambiarCC(arrNombres[i],arrNombres[j]);
161 cambiarInt(arrDistritos[i],arrDistritos[j]);
162 cambiarDouble(arrSueldos[i],arrSueldos[j]);
163 }
164 }
165
166
167 void llenarArreglosNuevo(const char *nombArch,int *arrDNIs,char **arrNombres,int
*arrDistritos,
168 double *arrSueldos,int &cantPersonas){
169 ifstream archPersonas(nombArch,ios::in);
170 if (not archPersonas.is_open()){
171 cout<<"El archivo "<<nombArch<<" no se pudo abrir"<<endl;
172 exit(1);
173 }
174 int dni,dist;
175 double sueldo;
176 char *ptrNombre;
177 cantPersonas=0;
178 while(true){
179 ptrNombre=leeCadenaExactaDelim(archPersonas,'*');
180 if (archPersonas.eof()) break;
181 /*if (ptrNombre==nullptr) break;
182 if (!ptrNombre) break;*/
183 archPersonas>>dni>>dist>>sueldo;
184 archPersonas.get();
185 arrDNIs[cantPersonas]=dni;
186 arrNombres[cantPersonas]=ptrNombre;
187 arrDistritos[cantPersonas]=dist;
188 arrSueldos[cantPersonas]=sueldo;
189 cantPersonas++;
190 }
191 }