You are on page 1of 13

INSTITUTO POLITCNICO NACIONAL

UNIDAD PROFESIONAL INTERDISCIPLINARIA EN INGENIERA Y


TECNOLOGAS AVANZADAS

INTEGRANTES:

Casas Caldern de la Barca Daniel Demetrio


Prez Alfaro Jos de Jess
Ramrez Pineda Csar
Reyes Herrera Gustavo

Proyecto:

PROGRAMACION ESTRUCTURADA

Grupo:

1TV1

Fecha de entrega:

02/MARZO/ 2015

Pgina 1
ndice.
Descripcin.- ......................................................................................................................................3
Cdigo.- ..............................................................................................................................................4
Capturas de pantalla del programa.- .................................................................................................10
Conclusiones.- ..................................................................................................................................13

Pgina 2
Descripcin.-
En este proyecto, se crear un programa de gestin de banco de sangre para su
administracin. El programa debe cumplir los siguientes requisitos:

Registrar un nuevo usuario


Guardar datos clave como el grupo sanguneo, el factor RH (positivo/negativo), el
nombre del donante, direccin, nmero de telfono.
Recuperar los datos anteriores mediante una bsqueda.
Encontrar un emparejamiento adecuado para un grupo sanguneo determinado y un
factor RH.
Mostrar la cantidad de los diferentes tipos de sangre actualmente guardados.
Pedir a los donantes su historial mdico previo y mostrar una coincidencia positiva
En caso de que no se encuentren coincidencias mdicas, enviar un mensaje al
donante si los niveles de reserva de su tipo sanguneo son bajos.

Pgina 3
Cdigo.-
Para la realizacin de este proyecto se ocuparon tres estructuras mediante las cuales se
manipularon los datos de entrada. Las estructuras son:

typedef struct Banco_s{


char grupo_sangineo[10];
char rh[10];
unsigned int cantidad;

}Sangre;
typedef struct Expediente{
char nombre[30];
char direccion[30];
unsigned long numero_tel;
unsigned int edad;
float peso;
unsigned int contador;
Sangre tipo_sangre;

}Expediente;
typedef struct clave
{
char pass[15];
char pass2[15];
}clave;

Para el funcionamiento del sistema se han creado 6 funciones que a continuacin se describen:
clave sesion(){
clave a;
clave b;
int x;
strcpy(a.pass,"password");
do
{
printf("\n\n\n\n\n\n\n\n\n\n PASSWORD");
printf("\n _________________________");
printf("\n | |\n");
printf(" ");
scanf("%s",&b.pass2);
system("cls");
//system("clear");
x=strcmp(a.pass,b.pass2);
}while(x!=0);
}

Pgina 4
Mediante el uso de las estructuras y el manejo de archivos se ha creado una funcin donde se
almacenan los datos de un nuevo usuario, los datos se almacenaran en un archivo llamado
Expediente_medico.txt y su escritura es de forma binaria.

Expediente registro_usuario(){

Expediente Expediente;

FILE*ptrArchivo;
ptrArchivo=fopen("Expediente_medico.txt","ab+");
if(ptrArchivo==NULL){
ptrArchivo = fopen("Expediente_medico", "ab+");;
}
else{
printf("Ingrese el nombre del donante (sin espacios):");
scanf("%s",&Expediente.nombre);
printf("Ingrese la direccion(sin espacios):");
scanf("%s",&Expediente.direccion);
printf("Ingrese el numero telefonico:");
scanf("%i",&Expediente.numero_tel);
printf("Ingrese la edad:");
scanf("%i",&Expediente.edad);
printf("Ingrese el peso:");
scanf("%f",&Expediente.peso);
Expediente.tipo_sangre = capturar_datos();
fwrite(&Expediente,sizeof(Expediente),1,ptrArchivo);
fclose(ptrArchivo);
}

return Expediente;
}
Se ha creado otra funcin para almacenar los datos de la informacin del tipo sanguneo los cuales
se almacenaran en otro archivo llamado Base_de_tipos_de_sangre.txt con escritura en binario.
Cabe mencionar que las estructuras Expediente y Sangre estn anidadas
Sangre capturar_datos(){
Sangre Sangre;
FILE*ptrArchivo;
ptrArchivo=fopen("Base_de_tipos_de_sangre.txt","ab+");
if(ptrArchivo==NULL){
ptrArchivo = fopen("Base_de_tipos_de_sangre.txt","ab+");
}
else{
printf("Ingrese el tipo de sangre (O,A,B,AB)");
scanf("%s",&Sangre.grupo_sangineo);
printf("Ingrese el factor RH (+) (-):");
scanf("%s",&Sangre.rh);
printf("Ingrese la cantidad de sangre:");
scanf("%d",&Sangre.cantidad);

Pgina 5
fwrite(&Sangre,sizeof(Sangre),1,ptrArchivo);
fclose(ptrArchivo);
}
return Sangre;

Para la realizacin de las bsquedas y manipulacin de los datos de los archivos se han creado 3
funciones que a continuacin se describen:
Esta funcin nos permite encontrar la relacin del tipo de sangre realizando una bsqueda por
nombre donde el resultado ser el numero de coincidencias con el nombre ingresado.
void emparejamiento();
void emparejamiento(){
Expediente expe;
FILE *archbus;
archbus = fopen("Expediente_medico.txt","at+");

char nombreClave[30];
char grupoSValido[10];
char factorSValido[10];
unsigned int cont=0;

printf("Ingresa el nombre del paciente: ");


scanf("%s",&nombreClave);

system("clear");

printf("Buscando coincidencias...");

while(fread(&expe,sizeof(expe),1,archbus)==1){
if(strcmp(nombreClave,expe.nombre)==0){
strcpy(grupoSValido,expe.tipo_sangre.grupo_sangineo);
strcpy(factorSValido,expe.tipo_sangre.rh);
}

if( (strcmp(grupoSValido,expe.tipo_sangre.grupo_sangineo)==0) &&


(strcmp(factorSValido,expe.tipo_sangre.rh)==0) ){
cont ++;
}
}

system("clear");
printf("* * * * * Resultados * * * * *\n\n");

Pgina 6
if(cont ==0 || cont == 1){
printf("-> No se encontraron resultados\n");
}else{
printf("-> Se encontraron %i coincidencias\n",cont-1);
}
fclose(archbus);
getchar();
}

Mediante esta funcin se realiza una bsqueda por medio del tipo de sangre donde el resultado es
el nmero de personas que cuentan con el tipo de sangre ingresado.
void tipoSangre();
void tipoSangre(){
Expediente expe;
FILE *archbus;
archbus = fopen("Expediente_medico.txt","at+");

char tipoClave[10];
char factorClave[10];
unsigned int cont=0;

printf("Ingresa el tipo de sangre: ");


scanf("%s",&tipoClave);
printf("Ingresa el factor RH (+) (-):");
scanf("%s",&factorClave);

system("clear");

printf("Buscando coincidencias...");

while(fread(&expe,sizeof(expe),1,archbus)==1){

if((strcmp(tipoClave,expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp(factorClave,expe.ti
po_sangre.rh)==0)){
cont ++;
}
}

system("clear");
printf("* * * * * Resultados * * * * *\n\n");
if(cont ==0 || cont == 1){
printf("-> No se encontraron resultados\n");

Pgina 7
}else{
printf("-> Se encontraron a %i personas con el mismo tipo de sangre\n",cont-1);
}
fclose(archbus);
getchar();
}

Finalmente mediante esta funcin se realizara el calculo de la cantidad de los siferentes tipos
sanguneos con los que se cuentan, adems, en caso de que los niveles de sangre sean bajos
desplegara un mesaje en pantalla el cual avisara si algn tipo de sangre cuenta con pocas reservas.

void sangreTotal();
void sangreTotal(){

Expediente expe;

FILE *archbus;

archbus = fopen("Expediente_medico.txt","at+");

unsigned int contOP=0;

unsigned int contON=0;

unsigned int contABP=0;

unsigned int contABN=0;

unsigned int contAP=0;

unsigned int contAN=0;

unsigned int contBP=0;

unsigned int contBN=0;

while(fread(&expe,sizeof(expe),1,archbus)==1){

if((strcmp("O",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("+",expe.tipo_sangre.rh)==0)){

contOP += expe.tipo_sangre.cantidad;

if((strcmp("O",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("-",expe.tipo_sangre.rh)==0)){

contON += expe.tipo_sangre.cantidad;

Pgina 8
if((strcmp("AB",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("+",expe.tipo_sangre.rh)==0)){

contABP += expe.tipo_sangre.cantidad;

if((strcmp("AB",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("-",expe.tipo_sangre.rh)==0)){

contABN += expe.tipo_sangre.cantidad;

if((strcmp("A",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("+",expe.tipo_sangre.rh)==0)){

contAP += expe.tipo_sangre.cantidad;

if((strcmp("A",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("-",expe.tipo_sangre.rh)==0)){

contAN += expe.tipo_sangre.cantidad;

if((strcmp("B",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("+",expe.tipo_sangre.rh)==0)){

contBP += expe.tipo_sangre.cantidad;

if((strcmp("B",expe.tipo_sangre.grupo_sangineo)==0)&&(strcmp("-",expe.tipo_sangre.rh)==0)){

contBN += expe.tipo_sangre.cantidad;

printf("* * * * * Sangre En el Banco * * * * *\n\n");

printf("A+ : %i litros",contAP);

printf("\nA- : %i litros",contAN);

printf("\nB+ : %i litros",contBP);

printf("\nB- : %i litros",contBN);

printf("\nAB+ : %i litros",contABP);

printf("\nAB- : %i litros",contABN);

printf("\nO+ : %i litros",contOP);

Pgina 9
printf("\nO- : %i litros\n",contON);

fclose(archbus);

getchar();

Capturas de pantalla del programa.-

Pgina 10
Pgina 11
Pgina 12
Conclusiones.-
Casas Caldern de la Barca Daniel Demetrio.-

Mediante el uso de los temas vistos se ha podido crear un sistema de administracin que
nos permite manipular informacin y transformarla de tal manera que el resultado facilita el
trabajo a realizar. Esta idea puede ser transformada para una amplia gama de proyectos, no
solo de administracin, su uso es ilimitado y solo depende de la visin que se tenga.

Prez Alfaro Jos de Jess.-

Con el uso de las sintaxis y trabajos realizados en clase, se cre un sistema en donde se
puede manipular informacin y dems, todo esto de una manera sencilla, y de fcil
comprensin.

Reyes Herrera Gustavo.-

El sistema fue algo sencillo de realizar, aunque bastante interactivo, ayuda mucho para
poder tomar experiencia en la programacin bsica y en el manejo de archivos, me hubiese
gustado trabajar con algo diferente, ya que al inicio se mencion el uso de arduinos, por
causas externas no se logr. Fue agradable trabajar con C ya que pude trabajarlo sobre
Linux y a la vez sobre Windows.

Ramrez Pineda Cesar.-

Con el programa realizado es posible manipular informacin, el ms notorio y complicado


es el manejo de archivos para manipular informacin, pero con el trabajo quedo un poco
ms claro ya que fue lo que abarco ms el proyecto.

Pgina 13