#include"clinica.h"
#include<stdlib.h>
#include"quirofano.h"
//para las funciones genericas/////////////
const int TIEMPO = 2000;
const int TAM_CADENA = 30;
typedef char cadena[TAM_CADENA];
int azar(int n) {
return (rand()%n + 1); //se genera un número aleatorio entre 1 y n
}
bool pacienteOperado() {
return (azar(TIEMPO) == 1); //si el valor generado es 1..se considera operado, sino sigue operándose
}
//fin funciones genericas
Clinica::Clinica(char nombreFichero[]) {
fichero.open(nombreFichero, ios::in | ios::out | ios::binary);
if(fichero.fail()){ //si peta
cout<<"\nEl fichero peto, hay que hacer otro\n";
fichero.close();// primero se cierra
fichero.clear();//despues se borra la info del fallo
fichero.open(nombreFichero, ios::out | ios::binary);//se crea otra si fallo
numPacientes=0;
fichero.write((char*) &numPacientes,sizeof(int));
fichero.close();
fichero.open(nombreFichero, ios::in | ios::out | ios::binary);
}
else{
// cout<<"\nFichero ya estaba creado \n\n";
fichero.read((char *) &numPacientes, sizeof(int));
}
system("pause");
system("cls");
}
void Clinica::posicionar(int p,char oper) {
switch(oper){
case 'R':
case 'r':
fichero.seekg(sizeof(int)+sizeof(Paciente)*(p-1),ios::beg); //nos posicionamos en lo que valga int + la struct *(num que nos pasa-1)
break;
case 'W':
case 'w':
fichero.seekp(sizeof(int)+sizeof(Paciente)*(p-1),ios::beg);
break;
}
}
void Clinica:: consultar ( char inicial ) {
Paciente pa;
bool encontrado=false;
posicionar(1,'r');
for(int i=0; i<numPacientes;i++){//modificar 10 por numPacientes
fichero.read((char *) &pa,sizeof(Paciente));// he copiado lo que hay en fichero en un struc llamado pa, es decir me lo llevo a memoria y curro con el
if(inicial=='*') {
encontrado=true;
cout<<"\nNombre: "<<pa.nombre<<" Apellido: "<<pa.apellidos<<" Edad: "<<pa.edad<<" Identificacion: "<<pa.id<<" La i= "<<i<<"\n";
}
else if(inicial==pa.apellidos[0]) {
cout<<"\nNombre: "<<pa.nombre<<" Apellido: "<<pa.apellidos<<" Edad: "<<pa.edad<<" Identificacion: "<<pa.id<<"\n";
encontrado=true;
}
}
if(!encontrado) cout<<"\nNo se ha encontrado\n";
system("pause");
system("cls");
}
void Clinica::insertar(Paciente p){
Paciente x;
posicionar(1,'r');
int i=0;
bool encontrado=false;
while(i<numPacientes && !encontrado){
fichero.read((char *) &x,sizeof(Paciente));
if(x.id==p.id)
encontrado=true;
i++;
}
i++;
cout<<"la i vale: "<<i;
if(!encontrado){
numPacientes++;
posicionar(i,'W');
fichero.write((char*)&p,(sizeof(Paciente))) ;//escribir en fichero lo que hay en p, cuya longitud es Paciente
fichero.seekg(0,ios::beg);
fichero.write((char *) &numPacientes,(sizeof(int)));
}
else cout<<"\nEl paciente ya existia\n";
system("pause");
system("cls");
}
void Clinica::modificar(int id){
Paciente pa;
bool encontrado=false;
int i=1;
posicionar(1,'r');
while(i<=numPacientes && !encontrado){
fichero.read((char *) &pa,sizeof(Paciente));
if(pa.id==id) encontrado=true;
i++;
}
if(!encontrado) cout<<"El paciente no ha sido encontrado\n";
else{
posicionar(i,'w');
cout<<"Escriba el nuevo nombre: ";
cin>>pa.nombre;
cout<<"Escriba el nuevo apellido: ";
cin>>pa.apellidos;
cout<<"Escriba la nueva edad: ";
cin>>pa.edad;
fichero.write((char*)&pa,(sizeof(Paciente)));
}
system("cls");
}
void Clinica::eliminar(int id){
Paciente x;
int posicion;
posicionar(1,'r');
int i=1;
bool encontrado=false;
while(i<=numPacientes && !encontrado){
fichero.read((char *) &x,sizeof(Paciente));
if(x.id==id) {
encontrado=true;
posicion=i; } //la posicion encontrada a eliminar
else
i++;
}
if(encontrado){
while(posicion<numPacientes){
posicionar(posicion+1,'r');
fichero.read((char*)&x,(sizeof(Paciente)));
posicionar(posicion,'w');
fichero.write((char *) &x,(sizeof(Paciente)));
posicion++;
}
numPacientes--;
fichero.seekg(0,ios::beg);
fichero.write((char *) &numPacientes,(sizeof(int)));
}
}
void Clinica::simularOperaciones(){
Quirofano tabla[3];
Paciente x;
posicionar(1,'r');
for(int i=0;i < numPacientes ;i++){
fichero.read((char *) &x,sizeof(Paciente));
tabla[(azar(3)-1)].anadirpaciente(x.id);
cout<<"n vale: "<<n<<" i vale: "<<i<<"\n";
}
/*
do{
system("cls");
cout<<" quirofano 1: " <<tabla[0].numpacientes() <<"\n";
cout<<" quirofano 2: " <<tabla[1].numpacientes() <<"\n";
cout<<" quirofano 3: " <<tabla[2].numpacientes() <<"\n";
while(tabla[0].quirofanovacio() && tabla[1].quirofanovacio && tabla[2].quirofanovacio());
system("pause");
*/
}