Evaluacion 2 german
Transcript of Evaluacion 2 german
![Page 1: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/1.jpg)
![Page 2: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/2.jpg)
2. Al momento de ingresar a un hospital a un paciente, se le solicitan los siguientes datos:
Nombre Edad Sexo Domicilio:( calle, número, ciudad) Teléfono Seguro médico ( si verdadero y
no falso) Elabore un programa en C que pueda llevar a cabo las siguientes Operaciones: a)
Obtener el porcentaje de mujeres y hombres hospitalizadas b) Calcular el porcentaje de
pacientes que poseen seguro médico. Se tiene N=50 pacientes. Nota: use programación
modular y arreglos de registros
include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef __MSDOS__
#include <search.h>
#endif
#ifdef __linux__
![Page 3: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/3.jpg)
#include <termios.h>
#include <unistd.h>
#define CLEAR_SCREEN "clear"
#define aacute "\xC3\xA1"
#define oacute "\xC3\xB3"
#define uacute "\xC3\xBA"
#define Uacute "\xC3\x9A"
int _getch ();
#else
#include <conio.h>
#define CLEAR_SCREEN "cls"
#define aacute "\240"
#define oacute "\242"
#define uacute "\243"
#define Uacute "\351"
#ifdef __MSDOS__
#define _getch getch
#endif
#endif
typedef struct TDAPaciente {
char* nombre;
char sexo;
char* domicilio;
char* telefono;
char seguro;
} Paciente;
void* arreglo_insertar (void *arreglo, size_t *tamano,
size_t size, const void *dato);
void* arreglo_quitar (void *arreglo, size_t *tamano,
size_t size, const void *dato);
void arreglo_recorrer (void *arreglo, size_t tamano,
size_t size, void *parametros, void (*funcion)(void*,
void*));
void pausar (const char *mensaje);
char* leer_linea (const char *mensaje);
char* leer_cadena (const char *mensaje, char *cadena
);
int leer_entero (const char *mensaje);
char leer_caracter (const char *mensaje);
![Page 4: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/4.jpg)
int leer_campo (FILE *archivo, char *campo);
int comparar_paciente (const Paciente *paciente1, co
nst Paciente *paciente2);
void imprimir_paciente (Paciente *dato, int *contador
);
void imprimir_en_archivo (Paciente *dato, FILE *archi
vo);
const char *ruta = "pacientes.tsv";
int main ()
{
Paciente *pacientes = NULL;
size_t tamano=0;
Paciente *dato, paciente;
int contador=0, opcion, subopcion;
char campo[255];
FILE *archivo = fopen (ruta, "r");
if (archivo!=NULL)
{
while (leer_campo (archivo, campo))
{
paciente.nombre = strdup (campo);
leer_campo (archivo, campo);
paciente.sexo = campo[0];
leer_campo (archivo, campo);
paciente.domicilio = strdup (campo);
leer_campo (archivo, campo);
paciente.telefono = strdup (campo);
leer_campo (archivo, campo);
paciente.seguro = campo[0];
pacientes = (Paciente*) arreglo_insertar (
pacientes, &tamano, sizeof (Paciente), &paciente);
}
fclose (archivo);
}
do {
system (CLEAR_SCREEN);
printf ("MEN" Uacute "\n");
printf ("1.- Altas\n");
printf ("2.- Consultas\n");
![Page 5: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/5.jpg)
printf ("3.- Actualizaciones\n");
printf ("4.- Bajas\n");
printf ("5.- Ordenar registros\n");
printf ("6.- Listar registros\n");
printf ("7.- Salir\n");
printf ("Seleccione una opci" oacute "n: ");
fflush (stdout);
do
opcion = _getch ();
while (opcion<'1' || opcion>'7');
printf ("%c\n\n", opcion);
if (tamano==0 && opcion!='1' && opcion!='7')
{
pausar ("No hay registros.\n");
continue;
}
if (opcion<'5')
{
paciente.nombre = leer_cadena ("Ingrese el
nombre del paciente", campo);
dato = (Paciente*) lfind (&paciente, pacie
ntes, &tamano, sizeof (Paciente), (int(*)(const void*,
const void*))comparar_paciente);
if (dato!=NULL)
{
putchar ('\n');
imprimir_paciente (dato, &contador);
}
}
if (opcion=='1' && dato!=NULL)
printf ("El registro ya existe.\n");
else if (opcion>='2' && opcion<='4' && dato==N
ULL)
printf ("\nRegistro no encontrado.\n");
else switch (opcion)
{
case '1':
paciente.nombre = strdup (campo);
paciente.sexo = leer_caracter ("Ingres
e el sexo");
paciente.domicilio = leer_linea ("Ingr
![Page 6: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/6.jpg)
ese el domicilio");
paciente.telefono = leer_linea ("Ingre
se el telefono");
paciente.seguro = leer_caracter ("Ingr
ese el seguro");
pacientes = (Paciente*) arreglo_insert
ar (pacientes, &tamano, sizeof (Paciente), &paciente);
printf ("\nRegistro agregado
correctamente.\n");
break;
case '3':
printf ("Men" uacute " de
modificaci" oacute "n de campos\n");
printf ("1.- sexo\n");
printf ("2.- domicilio\n");
printf ("3.- telefono\n");
printf ("4.- seguro\n");
do {
subopcion = leer_entero ("Seleccio
ne un n" uacute "mero de campo a modificar");
if (subopcion<1 || subopcion>4)
printf ("Opci" oacute "n no
v" aacute "lida.\n");
} while (subopcion<1 || subopcion>4);
switch (subopcion)
{
case 1:
dato-
>sexo = leer_caracter ("Ingrese el nuevo sexo");
break;
case 2:
free (dato->domicilio);
dato-
>domicilio = leer_linea ("Ingrese el nuevo
domicilio");
break;
case 3:
free (dato->telefono);
dato-
>telefono = leer_linea ("Ingrese el nuevo telefono");
break;
![Page 7: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/7.jpg)
case 4:
dato-
>seguro = leer_caracter ("Ingrese el nuevo seguro");
break;
}
printf ("\nRegistro actualizado
correctamente.\n");
break;
case '4':
memcpy (&paciente, dato, sizeof (Pacie
nte));
pacientes = (Paciente*) arreglo_quitar
((void**)pacientes, &tamano, sizeof (Paciente), dato)
;
free (paciente.nombre);
free (paciente.domicilio);
free (paciente.telefono);
printf ("Registro borrado
correctamente.\n");
break;
case '5':
qsort (pacientes, tamano, sizeof (Paci
ente), (int(*)(const void*,const void*))comparar_pacie
nte);
printf ("Registros ordenados
correctamente.\n");
break;
case '6':
contador = 0;
arreglo_recorrer (pacientes, tamano, s
izeof (Paciente), &contador, (void(*)(void*,void*))imp
rimir_paciente);
printf ("Total de registros:
%d.\n", contador);
break;
}
if (opcion!='7')
pausar ("");
} while (opcion!='7');
archivo = fopen (ruta, "w");
if (archivo!=NULL)
![Page 8: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/8.jpg)
{
arreglo_recorrer (pacientes, tamano, sizeof (P
aciente), archivo, (void(*)(void*,void*))imprimir_en_a
rchivo);
fclose (archivo);
}
return EXIT_SUCCESS;
}
void* arreglo_insertar (void *arreglo, size_t *tamano,
size_t size, const void *dato)
{
char *registro;
arreglo = realloc (arreglo, size * (*tamano+1));
registro = (char*)arreglo + *tamano * size;
memcpy (registro, dato, size);
(*tamano)++;
return arreglo;
}
void* arreglo_quitar (void *arreglo, size_t *tamano, s
ize_t size, const void *dato)
{
size_t i;
char *registro = (char*)arreglo;
for (i=0; i<*tamano && dato!=registro; i++, regist
ro+=size);
if (i<*tamano)
{
for (i++; i<*tamano; i++)
{
registro+=size;
memcpy (registro-size, registro, size);
}
(*tamano)--;
arreglo = realloc (arreglo, size * (*tamano));
}
return arreglo;
}
void arreglo_recorrer (void *arreglo, size_t tamano, s
![Page 9: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/9.jpg)
ize_t size, void *parametros, void (*funcion)(void*,vo
id*))
{
char *registro = (char*)arreglo;
if (tamano>0)
{
funcion (registro, parametros);
arreglo_recorrer (registro+size, tamano-
1, size, parametros, funcion);
}
}
int comparar_paciente (const Paciente *paciente1, cons
t Paciente *paciente2)
{
return paciente1==paciente2 ? 0 : strcmp (paciente
1->nombre, paciente2->nombre);
}
void imprimir_paciente (Paciente *dato, int *contador)
{
printf ("nombre : %s\n", dato->nombre);
printf ("sexo : %c\n", dato->sexo);
printf ("domicilio: %s\n", dato->domicilio);
printf ("telefono : %s\n", dato->telefono);
printf ("seguro : %c\n", dato->seguro);
putchar ('\n');
(*contador)++;
}
void imprimir_en_archivo (Paciente *dato, FILE *archiv
o)
{
fprintf (archivo, "%s\t", dato->nombre);
fprintf (archivo, "%c\t", dato->sexo);
fprintf (archivo, "%s\t", dato->domicilio);
fprintf (archivo, "%s\t", dato->telefono);
fprintf (archivo, "%c\n", dato->seguro);
}
char* leer_linea (const char *mensaje)
![Page 10: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/10.jpg)
{
char linea[255];
leer_cadena (mensaje, linea);
return strdup (linea);
}
char* leer_cadena (const char *mensaje, char *cadena)
{
printf ("%s: ", mensaje);
scanf ("%[^\r\n]", cadena);
getchar ();
return cadena;
}
int leer_entero (const char *mensaje)
{
int entero;
printf ("%s: ", mensaje);
scanf ("%d", &entero);
getchar();
return entero;
}
char leer_caracter (const char *mensaje)
{
char caracter;
printf ("%s: ", mensaje);
caracter = (char)getchar();
getchar();
return caracter;
}
int leer_campo (FILE *archivo, char *campo)
{
fscanf (archivo, "%[^\t\n\r]", campo);
fgetc (archivo);
return feof (archivo) == 0;
}
void pausar (const char *mensaje)
{
![Page 11: Evaluacion 2 german](https://reader036.fdocuments.es/reader036/viewer/2022092622/5876c3431a28ab6d5a8b54a7/html5/thumbnails/11.jpg)
printf ("%s\nPresione una tecla para continuar . .
. ", mensaje);
fflush (stdout);
_getch ();
}
#ifdef __linux__
int _getch ()
{
int ch;
struct termios oldt, newt;
tcgetattr (STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr (STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr (STDIN_FILENO, TCSANOW, &oldt);
return ch;
}