Adsence

lunes, 26 de agosto de 2013

Uso Struct en C para administrar una Biblioteca

Leave a Comment
Programa para una biblioteca en el cual se ejemplifica el uso de struct en C

Este programa consta de las siguientes estructuras:

Fecha

Estudiante

Libro

El programa permite determinar la fecha, agregar estudiantes, agregar libros y prestar libros a los estudiantes.

Uso Struct C

[codesyntax lang="c" lines="no" blockstate="collapsed"]
#include<stdio.h>
#include<conio.h>
#include<String.h>
struct tfecha{
int dia,mes,anio;
};

struct tlibro{
int noinv; //numero de inventario
char titulo[100];
char autor[40];
tfecha fechaentrega;
};
struct testudiante{
int codigo;
char nombre[40];
int telefono;
int sem; //semestre en que se encuentra matriculado el estudiante
int np; //numero de libros prestados
tlibro prestamo[10]; //vector para guardar los datos de los libros que tiene prestados el estudiante
};
int cmpfecha(int dx,int mx,int ax,int dy,int my,int ay)
{
int r;
if(ax<ay)
r=1;
else if(ax>ay)
r=-1;
else{
if(mx<my)
r=1;
else if(mx>my)
r=-1;
else{
if(dx<dy)
r=1;
else if(dx>dy)
r=-1;
else
r=0;
};
};
return r;
};
int clv(int d,int m,int a,struct tlibro l[],int nl)
{
int c=0;
for(int i=0;i<nl;i++)
{
int dl,ml,al;
dl=l[i].fechaentrega.dia;
ml=l[i].fechaentrega.mes;
al=l[i].fechaentrega.anio;
if(cmpfecha(dl,ml,al,d,m,a)==1)
c++;

};
return c;
};
int buscar(int ne,struct testudiante e[])
{
int p=0,c=e[0].np;
for(int i=0;i<ne;i++)
{
if(e[i].np>c)
{
p=i;
c=e[i].np;
};
};
return p;
};
int contarporsemestre(int s,struct testudiante e[],int ne)
{
int c=0;
for(int i=0;i<ne;i++)
{
if(e[i].sem==s)
c++;
};
return c;
};
int llenarEstudiante(testudiante e[],int ne)
{
char aux[40];
printf("Estudainten");
printf("Codigo:");
scanf("%d",& e[ne].codigo);
printf("Nombre: ");
scanf("%s",& e[ne].nombre);
printf("Telefono:");
scanf("%d",& e[ne].telefono);
printf("Semeste:");
scanf("%d",& e[ne].sem);
return ne+1;
};
int llenarLibro(tlibro l[],int nl)
{
printf("LIBROn");
printf("Num Inventario:");
scanf("%d",& l[nl].noinv);
printf("Titulo: ");
scanf("%s",& l[nl].titulo);
printf("Autor:");
scanf("%s",& l[nl].autor);
return nl+1;
};
void prestarLibro(testudiante e[],int ne,tlibro l[],int nl)
{
printf("PRESTAR LIBRO n");
int cod,pe=-1;
printf("Codigo del Estudiante: ");
scanf("%d",& cod);
for(int i=0;i<ne;i++)
{
if(e[i].codigo==cod)
pe=i;
};
if(pe!=-1)
{
int ni,pl=-1;
printf("Num Inventario del Libro:");
scanf("%d",& ni);
for(int i=0;i<nl;i++)
{
if(l[i].noinv==ni)
pl=i;
};
if(pl!=-1)
{
printf("Fecha de Entregan");
printf("Dia:");
scanf("%d",& l[pl].fechaentrega.dia);
printf("Mes:");
scanf("%d",& l[pl].fechaentrega.mes);
printf("Anio:");
scanf("%d",& l[pl].fechaentrega.anio);
e[pe].prestamo[e[pe].np]=l[pl];
e[pe].np=e[pe].np+1;
}else
printf("Ese libro no se encontro");
}else
printf("Ese estudiante no se encontro");

};
main()
{
int ne=0,nl=0;
testudiante e[100];
tlibro l[10];
int diaactual,mesactual,anioactual;
printf("Por favor teclee la fecha actual n");
printf(" Dia : ");
scanf("%d", & diaactual);
printf(" Mes : ");
scanf("%d", & mesactual);
printf(" Anio: ");
scanf("%d", & anioactual);
ne=llenarEstudiante(e,ne);
nl=llenarLibro(l,nl);
prestarLibro(e,ne,l,nl);
int lv = clv(diaactual,mesactual,anioactual,l,nl);
printf("existen %d libros con la fecha de entrega vencidan",lv);
for (int semestre=1;semestre<=10; semestre++){
int total=contarporsemestre(semestre,e,ne);
printf("total de libros prestados por los estudiantes de %d semestre es %dn",semestre,total);
};
int pos=buscar(ne, e);
printf(" el estudiante con mas libros prestados es %s con codigo, %d y estudia en el semestre %d", e[pos].nombre, e[pos].codigo, e[pos].sem);

getch();
return 0;
}

[/codesyntax]

0 comentarios :