Vous êtes sur la page 1sur 12

#include <stdlib.

h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct _TipoPaciente
{
long cedula;
char nombre[20];
char sexo;
int edad;
char dir[30];
float peso;
float talla;
float presion;
};
typedef _TipoPaciente TPaciente;
struct _TNodoPaciente
{
TPaciente Paciente;
struct _TNodoPaciente *pacSiguiente;
};
typedef _TNodoPaciente *pNodoPaciente;
typedef _TNodoPaciente *TCola;
struct _TColaConsultorio
{
TCola Frente;
TCola Final;
};
typedef _TColaConsultorio tipoCola;
struct _TipoConsultorio
{
int nro_consultorio;
char consultorio[30];
char doctor[30];
};
typedef _TipoConsultorio TConsultorio;
struct _TipoEstadistica
{
int nroPacientesAten;
int nroMujeres;
int nroHombres;
};
typedef _TipoEstadistica TEstadistica;
struct _TipoNodoConsultorio
{
TConsultorio Consultorio;
TPaciente PacAtendido;
TEstadistica Estadistica;
tipoCola Cola;
struct _TipoNodoConsultorio *conSiguiente;
};
typedef _TipoNodoConsultorio *pNodoConsultorio;
typedef _TipoNodoConsultorio *TLista;
void insertar_consultorio(TLista *L, TConsultorio C)
{
pNodoConsultorio nuevo, anterior;
nuevo = (pNodoConsultorio)malloc(sizeof(_TipoNodoConsultorio));
if (!nuevo) {
printf("No hay memoria suficiente...\n");
exit(0);
}
nuevo->Consultorio = C;
(nuevo->Estadistica).nroPacientesAten = 0;
(nuevo->Estadistica).nroMujeres = 0;
(nuevo->Estadistica).nroHombres = 0;
(nuevo->Cola).Frente = NULL;
(nuevo->Cola).Final = NULL;
(nuevo->PacAtendido).cedula = 0;
nuevo->PacAtendido.nombre[0] = '\x0';
nuevo->PacAtendido.sexo = ' ';
(nuevo->PacAtendido).edad = 0;
nuevo->PacAtendido.dir[0] = '\x0';
(nuevo->PacAtendido).peso = 0;
(nuevo->PacAtendido).talla = 0;
(nuevo->PacAtendido).presion = 0;
if (!*L) {
nuevo->conSiguiente = *L;
*L = nuevo;
} else {
anterior = *L;
while (anterior->conSiguiente) {
anterior = anterior->conSiguiente;
}
nuevo->conSiguiente = anterior->conSiguiente;
anterior->conSiguiente = nuevo;
}
}
TLista LstConsultorios = NULL;
void crearConsultorios(TLista *L)
{
TConsultorio C;
C.nro_consultorio = 1;
strcpy(C.consultorio, "M. General 1\x0");
strcpy(C.doctor, "Pedro Ramirez\x0");
insertar_consultorio(L, C);
C.nro_consultorio = 2;
strcpy(C.consultorio, "M. General 2\x0");
strcpy(C.doctor, "Humberto Guerrero\x0");
insertar_consultorio(L, C);
C.nro_consultorio = 3;
strcpy(C.consultorio, "Pediatria\x0");
strcpy(C.doctor, "Rodolfo Canelon\x0");
insertar_consultorio(L, C);
C.nro_consultorio = 4;
strcpy(C.consultorio, "Ginecologia\x0");
strcpy(C.doctor, "Rosa Rodriguez\x0");
insertar_consultorio(L, C);
C.nro_consultorio = 5;
strcpy(C.consultorio, "Cardiologia\x0");
strcpy(C.doctor, "Pedro Perez\x0");
insertar_consultorio(L, C);
C.nro_consultorio = 6;
strcpy(C.consultorio, "Odontologia\x0");
strcpy(C.doctor, "Alexis Gimenez\x0");
insertar_consultorio(L, C);
}
TPaciente obtener_paciente_cola(TCola *P, TCola *U){
/* Declaración del nodo auxiliar para obtner el primer nodo*/
pNodoPaciente nodo_auxiliar;
/* Declaración de la variable auxiliar para obtener el dato
* del almacenado en el nodo (numero de cliente)*/
TPaciente valor_auxiliar;
/* Se le asigna al nodo auxiliar el frente de la cola */
nodo_auxiliar = *P;
/* si nodo auxiliar no apunta nada retorna 0 */
if(!nodo_auxiliar) return valor_auxiliar;
/*Se hace que el frente de la cola apunte al siguiente nodo */
*P = nodo_auxiliar->pacSiguiente;
/* se le asigna al valor auxiliar el dato cotenido en el nodo */
valor_auxiliar = nodo_auxiliar->Paciente;
/* se libera la memoria del nodo */
free(nodo_auxiliar);
/* si el frente de la cola no apunta a nada se hace que el apuntador
* del final de la cola apunte a NULL */
if(!*P) *U=NULL;
/* El valor del dato contenido en el nodo es retornando */
return valor_auxiliar;
}
TPaciente obtener_primer_paciente(TCola *P){
/* Declaración del nodo auxiliar para obtner el primer nodo*/
pNodoPaciente nodo_auxiliar;
/* Declaración de la variable auxiliar para obtener el dato
* del almacenado en el nodo (numero de cliente)*/
TPaciente valor_auxiliar;
valor_auxiliar.cedula = 0;
valor_auxiliar.nombre[0] = '\x0';
valor_auxiliar.sexo = ' ';
valor_auxiliar.dir[0] = '\x0';
valor_auxiliar.peso = 0;
valor_auxiliar.talla = 0;
valor_auxiliar.presion = 0;
/* Se le asigna al nodo auxiliar el frente de la cola */
nodo_auxiliar = *P;
/* si nodo auxiliar no apunta nada retorna 0 */
if(!nodo_auxiliar) return valor_auxiliar;
/* se le asigna al valor auxiliar el dato cotenido en el nodo */
valor_auxiliar = nodo_auxiliar->Paciente;
/* El valor del dato contenido en el nodo es retornando */
return valor_auxiliar;
}
void eliminar_sala_espera(pNodoConsultorio *C)
{
pNodoConsultorio T;
TCola P = NULL;
TCola U = NULL;
T = *C;
P = T->Cola.Frente;
U = T->Cola.Final;
while(P) {
obtener_paciente_cola(&P, &U);
}
T->Cola.Frente = P;
T->Cola.Final = U;
*C = T;
}
void borrarConsultorios(TLista *L)
{
pNodoConsultorio nodo;
while(*L)
{
nodo = *L;
eliminar_sala_espera(&nodo);
*L = nodo->conSiguiente;
free(nodo);
}
}
void mostrarConsultorios(TLista *L)
{
pNodoConsultorio nodo;
clrscr();
printf("%29c",32);
printf("LISTADO DE CONSULTORIOS\n\n\n");
printf(" NRO CONSULTORIO DOCTOR\n");
printf(" === =========== ======\n");
nodo = *L;
while(nodo)
{
printf("%3d", nodo->Consultorio.nro_consultorio);
printf("%8c",32);
printf("%s",nodo->Consultorio.consultorio);
for(int i = 0;i<(20-strlen(nodo->Consultorio.consultorio));i++)
printf("%c",32);
printf("%s\n",nodo->Consultorio.doctor);
nodo = nodo->conSiguiente;
}
printf("\n\n\nPresione una tecla para continuar...");
getch();
}

void mostrarEstadisticas(TLista *L)


{
pNodoConsultorio nodo;
long totalPac = 0;
long totalHom = 0;
long totalMuj = 0;
float promHom = 0;
float promMuj = 0;
float proporH = 0;
float proporM = 0;
clrscr();
printf("%26c",32);
printf("ESTADISTICA DE CONSULTORIOS\n\n\n");
nodo = *L;
while(nodo)
{
totalPac += (nodo->Estadistica).nroPacientesAten;
totalMuj += (nodo->Estadistica).nroMujeres;
totalHom += (nodo->Estadistica).nroHombres;

nodo = (nodo->conSiguiente);
}
promMuj = totalMuj / 6;
promHom = totalHom / 6;
if (totalPac>0){
proporH = totalHom / totalPac;
proporM = totalMuj / totalPac;
}
printf("Pacientes atendidos: %ld\n",totalPac);
printf("T. Hombres atendidos: %ld\n",totalHom);
printf("T. Mujeres atendidos: %ld\n",totalMuj);
printf("Promedio de Hombres: %0.2f\n",promHom);
printf("Promedio de Mujeres: %0.2f\n",promMuj);
printf("Proporción Hombres: %0.2f\n",proporH);
printf("Proporción Mujeres: %0.2f\n",proporM);
printf("\n\n\nPresione una tecla para continuar...");
getch();
}
void agregar_paciente_cola(TCola *Frente, TCola *Final, TPaciente valor) {
/* Declaración del nodo que manejara los pacientes en la cola */
pNodoPaciente nuevo_paciente = NULL;
/* Se reserva el espacio de memoria para el nodo que maneja
* a los pacientes */
nuevo_paciente = (pNodoPaciente)malloc(sizeof(_TNodoPaciente));
if (!nuevo_paciente) {
printf("No hay memoria suficiente...\n");
exit(0);
}
/* Se asigna el valor del dato de información al dato del nodo
* que en particular es el nuevo paciente */
nuevo_paciente->Paciente = valor;
/* Se asigna NULL a nodo siguiente del nuevo paciente dado que
* éste es el último y no hay más nadie despues de él */
nuevo_paciente->pacSiguiente = NULL;
/* Si el apuntador al final de la cola apunta a un valor
* entonces el nodo siguiente del apuntador final de la
* cola apunta al nuevo nodo */
if(*Final)
{
(*Final)->pacSiguiente = nuevo_paciente;
}
/* Se asigna al apuntador Final de la cola el nuevo nodo*/
*Final = nuevo_paciente;
/* Si frente no apunta a nada, entonces frente se le asigna el
* valor al que apunta el nuevo nodo*/
if(!*Frente)
{
*Frente = nuevo_paciente;
}
}
void mostrarProximoPaciente(pNodoConsultorio *C)
{
pNodoConsultorio T;
TPaciente paciente;
pNodoPaciente nodo = NULL;
T = *C;
nodo = (T->Cola).Frente;
paciente = obtener_primer_paciente(&nodo);
clrscr();
printf("%29c",32);
printf("PROXIMO PACIENTE EN ATENDER\n");
printf("%29c",32);
printf("===========================\n\n\n");
if(nodo)
{
paciente = nodo->Paciente;
printf("%9ld ", paciente.cedula);
printf("%s ", paciente.nombre);
for(int i=0;i<(21-strlen(paciente.nombre));i++)
printf("%c",' ');
printf("%c ", paciente.sexo);
printf("%d ", paciente.edad);
printf("%s ",paciente.dir);
for(i=0;i<(21-strlen(paciente.dir));i++)
printf("%c",' ');
printf("%2.2f ", paciente.peso);
printf("%4.2f ", paciente.talla);
printf("%2.2f\n", paciente.presion);
} else {
printf("\n\n\nNo hay paciente a la espera...");
}
printf("\n\n\nPresione una tecla para continuar...");
getch();
}
void mostrarPacientesEspera(pNodoConsultorio *C)
{
pNodoConsultorio T;
TPaciente paciente;
pNodoPaciente nodo = NULL;
T = *C;
nodo = (T->Cola).Frente;
clrscr();
printf("%29c",32);
printf("LISTADO DE PACIENTES EN ESPERA\n");
printf("%29c",32);
printf("==============================\n\n\n");
if (nodo) {
while(nodo)
{
paciente = nodo->Paciente;
printf("%9ld ", paciente.cedula);
printf("%s ", paciente.nombre);
for(int i=0;i<(21-strlen(paciente.nombre));i++)
printf("%c",' ');
printf("%c ", paciente.sexo);
printf("%d ", paciente.edad);
printf("%s ",paciente.dir);
for(i=0;i<(21-strlen(paciente.dir));i++)
printf("%c",' ');
printf("%2.2f ", paciente.peso);
printf("%4.2f ", paciente.talla);
printf("%2.2f\n", paciente.presion);
nodo = nodo->pacSiguiente;
}
} else {
printf("\n\n\nNo hay pacientes a la espera...");
}
printf("\n\n\nPresione una tecla para continuar...");
getch();
}
TPaciente obtener_dato_Paciente()
{
TPaciente p;
clrscr();
printf("%31c%s\n", 32, "DATOS DE PACIENTE");
printf("%31c%s\n\n\n", 32, "=================");
printf("Cedula : ");
scanf("%ld",&(p.cedula));
fflush(stdin);
printf("Nombre : ");
gets(p.nombre);
strcat(p.nombre,'\x0');
printf("Sexo[M/F]: ");
do{
printf("\b \b");
p.sexo = getch();
if ((p.sexo=='m')||(p.sexo=='f'))
{
p.sexo = p.sexo - 32;
}
putc(p.sexo, stdout);
} while(!strchr("mMfF",p.sexo));
printf("\n");
printf("Edad : ");
scanf("%d",&(p.edad));
fflush(stdin);
printf("Direccion: ");
gets(p.dir);
strcat(p.dir,'\x0');
printf("Peso : ");
scanf("%f",&(p.peso));
printf("Talla : ");
scanf("%f",&(p.talla));
printf("Presion : ");
scanf("%f",&(p.presion));
printf("\n\n\nPresione una tecla para continuar...");
getch();
return(p);
}
void Agregar_Paciente(pNodoConsultorio *C)
{
TPaciente pac;
pNodoConsultorio T;
pNodoPaciente P = NULL;
pNodoPaciente U = NULL;
T = *C;
P = (T->Cola).Frente;
U = (T->Cola).Final;
pac = obtener_dato_Paciente();
agregar_paciente_cola(&P, &U, pac);
T->Cola.Frente = P;
T->Cola.Final = U;
*C = T;
}
void atenderPaciente(pNodoConsultorio *C)
{
pNodoConsultorio T;
TPaciente pacAux;
TCola P = NULL;
TCola U = NULL;
T = *C;
P = T->Cola.Frente;
U = T->Cola.Final;
clrscr();
if(P)
{
pacAux = obtener_paciente_cola(&P, &U);
T->PacAtendido = pacAux;
(T->Estadistica).nroPacientesAten = (T->Estadistica).nroPacientesAten + 1;
switch(pacAux.sexo)
{
case 'm' :
case 'M' : (T->Estadistica).nroHombres = (T->Estadistica).nroHombres
+ 1; break;
case 'f' :
case 'F' : (T->Estadistica).nroMujeres = (T->Estadistica).nroMujeres
+ 1; break;
}
printf("\n\n\nSe ha atendido al paciente...");
} else {
printf("\n\n\nNo hay pacientes a la espera...");
}
T->Cola.Frente = P;
T->Cola.Final = U;
*C = T;
printf("\n\n\nPresione una tecla para continuar...");
getch();
}
pNodoConsultorio obtener_DirMem_cons(TLista *L, int nro_Con)
{
pNodoConsultorio nodo;
nodo = *L;
if(nodo)
{
while((nodo)&&(nodo->Consultorio.nro_consultorio!=nro_Con))
{
nodo = nodo->conSiguiente;
}
return nodo;
} else {
return NULL;
}
}
void quienEsAtendido(pNodoConsultorio *C)
{
pNodoConsultorio T;
TPaciente pacAux;
T = *C;
clrscr();
pacAux = T->PacAtendido;
if ((pacAux.cedula)>0)
{
printf("\n\n\nSe esta atendido al paciente:\n\n\n");
printf("%9ld ", pacAux.cedula);
printf("%s ", pacAux.nombre);
for(int i=0;i<(21-strlen(pacAux.nombre));i++)
printf("%c",' ');
printf("%c ", pacAux.sexo);
printf("%d ", pacAux.edad);
printf("%s ",pacAux.dir);
for(i=0;i<(21-strlen(pacAux.dir));i++)
printf("%c",' ');
printf("%2.2f ", pacAux.peso);
printf("%4.2f ", pacAux.talla);
printf("%2.2f\n", pacAux.presion);
} else {
printf("\n\n\nNo hay paciente en consulta...");
}
*C = T;
printf("\n\n\nPresione una tecla para continuar...");
getch();
}
void estadisticaConsultorio(pNodoConsultorio *C)
{
}
void administrarConsultorio(TLista *L, char Op)
{
char opc = ' ';
int nro = Op - 48;
pNodoConsultorio cualConsultorio;
cualConsultorio = obtener_DirMem_cons(L,nro);
do {
clrscr();
printf("Nro. Consult.: %d\n",nro);
printf("Especialidad : %s\n",cualConsultorio->Consultorio.consultorio);
printf("Doctor : %s\n",cualConsultorio->Consultorio.doctor);
printf("\n\n\n");
printf(" OPCIONES DE CONSULTORIO\n\n\n");
printf(" [1] Agregar paciente\n");
printf(" [2] Proximo paciente\n");
printf(" [3] Pacientes en espera\n");
printf(" [4] Atender paciente\n");
printf(" [5] Quien esta siendo atendido\n");
printf(" [E] Estadistica consultorio\n\n");
printf(" [S] SALIR\n");
printf(" Seleccione una opci¢n: ");
do {
opc = getch();
} while(!strchr("1234567eEsS",opc));
switch(opc)
{
case '1' : Agregar_Paciente(&cualConsultorio);break;
case '2' : mostrarProximoPaciente(&cualConsultorio);break;
case '3' : mostrarPacientesEspera(&cualConsultorio);break;
case '4' : atenderPaciente(&cualConsultorio);break;
case '5' : quienEsAtendido(&cualConsultorio);break;
case 'e' :
case 'E' : estadisticaConsultorio(&cualConsultorio);break;
}
} while(!strchr("sS",opc));
}
void menuPrincipal()
{
char op = ' ';
do{
clrscr();
printf(" CONSULTORIOS MENU PRINCIPAL\n\n\n");
printf(" [1] MEDICINA GENERAL CONS. 1\n");
printf(" [2] MEDICINA GENERAL CONS. 2\n");
printf(" [3] PEDIATRIA\n");
printf(" [4] GINECOLOGIA\n");
printf(" [5] CARDIOLOGIA\n");
printf(" [6] OFTALMOLOGIA\n");
printf(" [7] LISTAR CONSULTORIOS\n");
printf(" [E] ESTADISTICAS\n\n");
printf(" [S] SALIR\n");
printf(" Seleccione una opci¢n: ");
do {
op = getch();
} while(!strchr("1234567eEsS",op));
switch(op)
{
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' : administrarConsultorio(&LstConsultorios, op);break;
case '7' : mostrarConsultorios(&LstConsultorios);break;
case 'e' :
case 'E' : mostrarEstadisticas(&LstConsultorios);break;
}
} while((op!='s')&&(op!='S'));
}
void main()
{
crearConsultorios(&LstConsultorios);
menuPrincipal();
borrarConsultorios(&LstConsultorios);
}

Vous aimerez peut-être aussi