Professional Documents
Culture Documents
INTEGRANTES:
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:
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:
}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;
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);
}
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;
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+");
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("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();
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.
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.
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.
Pgina 13