Está en la página 1de 13

3.

Una Clinica ultimamente se ve saturada con pacientes de varias enfermedades y


estados de salud y requiere organizarse para una mejor atención. Para ello cada
día hace una revisión del estado de los a pacientes. Los pacientes tiene informacion
conformada de la siguiente forma: Codigo de paciente, Nombre,fecha del día,
estado de salud del paciente: sanó, leve, grave, nuevo( por hospitalizarse)
Se pide:

a. Crear un archivo general de todos los pacientes del hospital en el momento actual o a
la fecha menos los nuevos que requiern hospitalización
b. Recorrer el Archivo, contabilizar y mostrar el Archivo general de pacientes
c. Buscar los pacientes de estado de salud grave, contabilizarlos y mostrarlos
d. Buscar pacientes de estado de salud leve, contabilizarlos y mostrarlos
e. Dar de alta o eliminar del archivo a los pacientes de estado de salud sanó, contabilizar
y mostrarlos
f. Insertar o hospitalizar a nuevos pacientes en estado de salud grave, contabilizar y
mostrarlos.

Precondición:
- Se tiene acceso a un archivo con la información de los pacientes.
- La información de cada paciente incluye: Código de paciente, nombre, fecha del día y
estado de salud.
- Los posibles estados de salud son: sanó, leve, grave y nuevo (para hospitalización).
Postcondición:
- Se ha creado un archivo general de pacientes excluyendo los pacientes nuevos que
requieren hospitalización.
- Se han contabilizado y mostrado todos los pacientes del archivo general.
- Se han contabilizado y mostrado los pacientes en estado de salud grave.
- Se han contabilizado y mostrado los pacientes en estado de salud leve
- Se han dado de alta o eliminado del archivo los pacientes en estado de salud sanó y se
ha contabilizado y mostrado esta información.
- Se han insertado u hospitalizado a nuevos pacientes en estado de salud grave y se ha
contabilizado y mostrado esta información.
Pseudocódigo:
Funcion principal()
// Crear archivo general de pacientes
archivo_general = crearArchivo("pacientes.txt")

// Cargar pacientes desde archivo o ingreso manual


cargarPacientes(archivo_general)

// Mostrar archivo general de pacientes


mostrarArchivo(archivo_general)

// Contabilizar pacientes en estado grave


pacientes_graves = contarPacientes(archivo_general, "grave")
mostrarPacientes(pacientes_graves)

// Contabilizar pacientes en estado leve


pacientes_leves = contarPacientes(archivo_general, "leve")
mostrarPacientes(pacientes_leves)

// Eliminar pacientes en estado sano


pacientes_sanos = eliminarPacientes(archivo_general, "sano")
mostrarPacientes(pacientes_sanos)

// Insertar pacientes en estado grave


nuevos_pacientes = ingresarPacientes(archivo_general, "grave")
mostrarPacientes(nuevos_pacientes)
FinFuncionPrincipal

Funcion crearArchivo(nombre_archivo)
Abrir(nombre_archivo, "w")
Cerrar(nombre_archivo)
FinFuncion

Subproceso cargarPacientes(archivo)
// Cargar pacientes desde archivo o ingreso manual
Abrir(archivo, "a")
Escribir("Ingrese el codigo del paciente: ")
Leer(codigo)
Escribir("Ingrese el nombre del paciente: ")
Leer(nombre)
Escribir("Ingrese el estado del paciente (sanado, leve, grave): ")
Leer(estado)
Escribir("Ingrese la fecha del dia: ")
Leer(fecha)
Escribir(nombre_archivo, codigo, nombre, fecha, estado)
Cerrar(archivo)
FinSubproceso

Subproceso mostrarArchivo(archivo)
// Mostrar archivo general de pacientes
Abrir(archivo, "r")
Mientras no fin de archivo
Leer(linea)
Mostrar(linea)
FinMientras
Cerrar(archivo)
FinSubproceso

Funcion contarPacientes(archivo, estado)


// Contabilizar pacientes en estado especificado
Abrir(archivo, "r")
contador = 0
Mientras no fin de archivo
Leer(linea)
Si linea.contiene(estado) Entonces
contador = contador + 1
FinSi
FinMientras
Cerrar(archivo)
Retornar(contador)
FinFuncion

Funcion eliminarPacientes(archivo, estado)


// Eliminar pacientes en estado especificado y retornar la lista
Abrir(archivo, "r")
lista_pacientes = []
Mientras no fin de archivo
Leer(linea)
Si no linea.contiene(estado) Entonces
lista_pacientes.agregar(linea)
FinSi
FinMientras
Cerrar(archivo)
Abrir(archivo, "w")
Para cada paciente en lista_pacientes
Escribir(archivo, paciente)
FinPara
Cerrar(archivo)
Retornar(lista_pacientes)
FinFuncion

Funcion ingresarPacientes(archivo, estado)


// Ingresar nuevos pacientes en estado especificado y retornar la lista
Abrir(archivo, "a")
Escribir("Ingrese el codigo del paciente: ")
Leer(codigo)
Escribir("Ingrese el nombre del paciente: ")
Leer(nombre)
Escribir("Ingrese la fecha del dia: ")
Leer(fecha)
Escribir(nombre_archivo, codigo, nombre, fecha, estado)
Cerrar(archivo)
lista_pacientes = contarPacientes(archivo, estado)
Retornar(lista_pacientes)
FinFuncion

Subproceso mostrarPacientes(lista_pacientes)
// Mostrar lista de pacientes por pantalla
Para cada paciente en lista_pacientes
Mostrar(paciente)
FinPara
FinSubproceso

Código en c++:

#include <iostream>
#include <conio.h>
#include <iomanip>
#include <fstream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

void menu();

struct Paciente {
int codigo;
string nombre;
string estado;
string fecha;
};
class FILA{

FILE *F;
FILE *G;
Paciente P;

public:
void crear();
void recorrer();
void buscar();
void modificar();
void contarPorEstado(string estado);
void eliminar();
void insertar();
};

void FILA::crear(){

char opcion;
F = fopen("PACIENTES.txt", "w");
if (F == NULL){
cout<<"No se puede abrir el archivo"<<endl;
exit(1);
}

do {
// Leer datos del paciente
cout << "Ingrese el codigo del paciente: ";
cin >> P.codigo;
cin.ignore(); // Ignorar el salto de línea pendiente
cout << "Ingrese el nombre del paciente: ";
getline(cin, P.nombre);
cout << "Ingrese el estado del paciente (sanado, leve, grave): ";
getline(cin, P.estado);
cout << "Ingrese la fecha del dia: ";
getline(cin, P.fecha);

// Escribir datos del paciente en el archivo


fwrite(&P,sizeof(P),1,F);

// Preguntar si desea cargar otro paciente


cout << "Desea cargar otro paciente? (S/N): ";
cin >> opcion;
cin.ignore(); // Limpiar el buffer de entrada
} while (opcion == 'S' || opcion == 's');

cout<<"\n\nPresione una tecla para continuar";


fclose(F);
getch();
system("cls");
}

void FILA::recorrer() {
F = fopen("PACIENTES.txt", "r");
if (F == NULL) {
cout << "\nNo se puede abrir el archivo";
exit(1);
}

fread(&P, sizeof(P), 1, F);


int bol = 0;
cout << "Reporte de Pacientes\n";
cout << setfill('=') << setw(120) << "\n";
cout << setfill(' ');
cout << "| " << setw(8) << left << "Codigo" << " | " << setw(30) << left << "Nombre" << "
|"
<< setw(15) << left << "Estado" << " | " << setw(15) << left << "Fecha" << " |" <<
endl;
cout << setfill('=') << setw(120) << "\n";
cout << setfill(' ');
while (!feof(F)) {
bol++;
cout << "| " << setw(8) << left << P.codigo << " | " << setw(30) << left << P.nombre <<
"|"
<< setw(15) << left << P.estado << " | " << setw(15) << left << P.fecha << " |" <<
endl;
fread(&P, sizeof(P), 1, F);
}
cout << setfill('=') << setw(120) << "\n";
cout << endl << "\nPresione una tecla ? n para continuar";
fclose(F);
getch();
system("cls");
}

void FILA::buscar(){
F = fopen ("PACIENTES.txt","r");
if(F == NULL){
cout<<"No se puede abrir el archivo";
exit(1);
}
fread (&P,sizeof(P),1,F);
int bol = 0;

cout << setfill('-') << setw(100) << "" << endl; // línea divisoria superior
cout << left << setw(10) << "No." << "|";
cout << left << setw(20) << "Código" << "|";
cout << left << setw(30) << "Nombre" << "|";
cout << left << setw(20) << "Estado" << "|";
cout << left << setw(20) << "Fecha" << "|";
cout << endl;
cout << setfill('-') << setw(100) << "" << endl; // línea divisoria inferior

while(!feof(F)) {
if(P.estado == "sano"){
bol++;
cout << left << setw(10) << bol << "|";
cout << left << setw(20) << P.codigo << "|";
cout << left << setw(30) << P.nombre << "|";
cout << left << setw(20) << P.estado << "|";
cout << left << setw(20) << P.fecha << "|";
cout << endl;
}
fread (&P,sizeof(P),1,F);
}
cout << setfill('-') << setw(100) << "" << endl; // línea divisoria inferior
cout << "\nPresione una tecla para continuar...";
fclose(F);
getch();
system("cls");
}

void FILA::eliminar(){
int hallado=0;
F = fopen ("PACIENTES.txt","rb");
if(F == NULL){
cout<<"No se puede abrir el archivo";
exit(1);
}
G = fopen("ACopia.text","wb");
fread(&P,sizeof(P),1,F);
while(!feof(F)){
if(P.estado == "sano"){
cout << P.codigo << "\t" << P.nombre << "\t" << P.estado << "\t" << P.fecha << endl;
hallado = 1;
}
else {
fwrite(&P,sizeof(P),1,G);
}
fread(&P,sizeof(P),1,F);
}
fclose(F);
fclose(G);
remove("PACIENTES.txt");
rename("ACopia.text","PACIENTES.txt");
if(hallado==0){
cout<<"No existen pacientes sanos";
}
else cout<<endl<<"Se eliminaron los pacientes sanos";
cout<<endl<<"\nPresione una tecla para continuar";
getch();
system("cls");
}

void FILA::insertar(){
char opcion;
F = fopen ("PACIENTES.txt","a+");
if(F == NULL){
cout<<"No se puede abrir el archivo";
exit(1);
}
do {
// Leer datos del paciente
cout << "Ingrese el codigo del paciente: ";
cin >> P.codigo;
cin.ignore(); // Ignorar el salto de línea pendiente
cout << "Ingrese el nombre del paciente: ";
getline(cin, P.nombre);
cout << "Ingrese el estado del paciente (sanado, leve, grave): ";
getline(cin, P.estado);
cout << "Ingrese la fecha del dia: ";
getline(cin, P.fecha);

// Escribir datos del paciente en el archivo


fwrite(&P,sizeof(P),1,F);
// Preguntar si desea cargar otro paciente
cout << "Desea cargar otro paciente? (S/N): ";
cin >> opcion;
cin.ignore(); // Limpiar el buffer de entrada
} while (opcion == 'S' || opcion == 's');
fclose(F);

cout<<"\nSe agregaron los pacientes correctamente";


cout<<endl<<"\nPresione una tecla ? n para continuar";
getch();
system("cls");
}

void FILA::modificar(){
int codigo;
string nuevo_estado;

// Abrir el archivo en modo lectura


F = fopen("PACIENTES.txt","r");
if(F == NULL){
cout<<"No se puede abrir el archivo";
exit(1);
}

// Abrir un archivo temporal en modo escritura


G = fopen("temp.txt","w");
if(G == NULL){
cout<<"No se puede abrir el archivo temporal";
fclose(F);
exit(1);
}

// Pedir al usuario el código del paciente a modificar


cout << "Ingrese el código del paciente a modificar: ";
cin >> codigo;

// Buscar el paciente en el archivo


fread(&P, sizeof(P), 1, F);
bool encontrado = false;
while(!feof(F)){
if(P.codigo == codigo){
encontrado = true;
cout << "Paciente encontrado:\n";
cout << " Código: " << P.codigo << endl;
cout << " Nombre: " << P.nombre << endl;
cout << " Estado actual: " << P.estado << endl;
cout << " Fecha de ingreso: " << P.fecha << endl;

// Pedir al usuario el nuevo estado de salud del paciente


cout << "Ingrese el nuevo estado de salud (sano/enfermo): ";
cin >> nuevo_estado;
P.estado = nuevo_estado;
}

// Escribir el paciente actual en el archivo temporal


fwrite(&P, sizeof(P), 1, G);

// Leer el siguiente paciente del archivo


fread(&P, sizeof(P), 1, F);
}

// Cerrar los archivos


fclose(F);
fclose(G);

// Eliminar el archivo original


remove("PACIENTES.txt");

// Renombrar el archivo temporal como el archivo original


rename("temp.txt", "PACIENTES.txt");

// Mostrar un mensaje de confirmación


if(encontrado){
cout << "El paciente fue modificado exitosamente.\n";
} else {
cout << "El paciente con código " << codigo << " no fue encontrado.\n";
}

cout << "Presione cualquier tecla para continuar...";


getch();
system("cls");
}

void FILA::contarPorEstado(string estado) {


F = fopen ("PACIENTES.txt","r");
if(F == NULL){
cout<<"No se puede abrir el archivo";
exit(1);
}
fread (&P,sizeof(P),1,F);
int contador = 0;
while(!feof(F)) {
if(P.estado == estado) {
contador++;
}
fread (&P,sizeof(P),1,F);
}
fclose(F);
cout << "El total de pacientes en estado " << estado << " es: " << contador << endl;
cout << endl << "Presione una tecla ? n para continuar";
getch();
system("cls");
}

int main(){

char opc;
FILA FIL;

do {
menu();
cin>>opc;

switch(opc){

case '1': {
system("cls");
FIL.crear();
break;
}

case '2': {
system("cls");
FIL.recorrer();

break;
}

case '3': {
system("cls");
string estado = "grave";
FIL.contarPorEstado(estado);
break;
}

case '4': {
system("cls");
system("cls");
string estado = "leve";
FIL.contarPorEstado(estado);
break;
}

case '5': {
system("cls");
FIL.eliminar();
break;
}

case '6': {
system("cls");
FIL.insertar();
break;
}

case '7': {
system("cls");
FIL.modificar();
break;
}

case '8': {
cout<<"\n\n\t\tAdios";
break;
}

default:{
cout << "\t\tOpcion invalida." << endl;
break;
}

}while(opc != '8');
getch();
return 0;
}

void menu(){
system("cls");
cout<<"\t\t-----------------------------" << endl;
cout<<"\t\t MENU PRINCIPAL " << endl;
cout<<"\t\t-----------------------------" << endl<<endl;
cout<<"\t\t1. Cargar pacientes" << endl;
cout<<"\t\t2. Mostrar archivo general de pacientes" << endl;
cout<<"\t\t3. Contabilizar pacientes en estado grave" << endl;
cout<<"\t\t4. Contabilizar pacientes en estado leve" << endl;
cout<<"\t\t5. Eliminar pacientes en estado sanado" << endl;
cout<<"\t\t6. Ingresar nuevos pacientes en estado grave" << endl;
cout<<"\t\t7. Modificar estado de salud" << endl;
cout<<"\t\t8. Salir" << endl;
cout<<"\t\tIngrese opcion --->";
}

También podría gustarte