ESTRUCTURAS

ISAIAS DUQUE GOMEZ
18 de Febrero del 2006
pueden checar el codigo y chequen los problemas, no los veo...



#include<conio.h>
#include<dos.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//ESTRUCTURA

struct reg
{
int sem;
char matricula[5];
char nombre[15],paterno[12],materno[12];
};

//PROTOTIPO DE FUNCION

void altas(struct reg alum[],int *n);
void listado(struct reg A[], int n);
void centra(char *texto,int fila);
void consulta(struct reg A[], int n);
int buscar(struct reg A[], int n,int dato[]);


//FUNCION PRINCIPAL

void main()
{
int n=0;
char tecla;
struct reg alumno[20];

do
{
clrscr();
centra("Control Escolar",16);
gotoxy(20,19);printf("Altas.................................1");
gotoxy(20,21);printf("Bajas.................................2");
gotoxy(20,23);printf("Cambios...............................3");
gotoxy(20,25);printf("Consultas.............................4");
gotoxy(20,27);printf("Listado...............................5");
gotoxy(20,29);printf("Salir.................................6");
gotoxy(20,32);printf("Opcion...............................[ ]bb");
tecla=getche();
switch(tecla)
{
case '1':altas(alumno,&n); break;
//case '2':bajas(alumno,&n); break;
// case '3':cambios(alumno,&n); break;
case '4':consulta(alumno,n); break;
case '5':listado(alumno,n); break;
case '6': break;
}
}
while(tecla!='6');
}


/*********************************************************************/
//DA DE ALTAS REGISTROS

void altas(struct reg alum[],int *n)
{
int band=0;
char aux[5];
clrscr();
centra("Altas",16);
gotoxy(13,19);printf("Matricula: ");
gets(aux);
for(int x=0;x<*n;x++)
{
if(strcmp(aux,alum[x].matricula)==0 && *n>0)
{//verifica que no se dupliquen matriculas
band=1;
}
}
if(!band) //si las matricula no es igual a las que existen
{ //damos de alta otro nuevo registro
strcpy(alum[*n].matricula,aux);
gotoxy(13,21);printf("Nombre: "); gets(alum[*n].nombre);
gotoxy(13,23);printf("Apellido 1: "); gets(alum[*n].paterno);
gotoxy(13,25);printf("Apellido 2: "); gets(alum[*n].materno);
gotoxy(13,27);printf("Semestre: ");
do
{
scanf("%d",&alum[*n].sem);
}
while(alum[*n].sem<1 || alum[*n].sem>9);
(*n)++;
gotoxy(1+(80-23)/2,33);printf("şAcabas de dar de alta!");
delay(2000);
}
else
{
gotoxy(1+(80-23)/2,25);printf("Matricula ya existe");
}
getch();
}
/*********************************************************************/
//LISTADO

void listado(struct reg A[], int n)
{
int y=21;
clrscr();
centra("Listado",16);
gotoxy(8,19);printf("Matricula");
gotoxy(19,19);printf("Nombre");
gotoxy(29,19);printf("Apellido 1");
gotoxy(43,19);printf("Apellido 2");
gotoxy(57,19);printf("Semestre");
y=21;
for(int x=0;x<n;x++)
{
gotoxy(9,y); printf("%s",A[x].matricula);
gotoxy(20,y); printf("%s",A[x].nombre);
gotoxy(30,y); printf("%s",A[x].paterno);
gotoxy(44,y); printf("%s",A[x].materno);
gotoxy(59,y); printf("%d",A[x].sem);
y+=2;
}
getch();
}
/*********************************************************************/
//BUSCA

int buscar(struct reg A[],int n, char dato[])
{
int pos=-1; //indica que no lo encontro (centinela)
int band=0,x=0;
while(x<n && !band)
{
if(strcmp(dato,A[x].matricula)==0)
{
pos=x;
band=1;
}
x++;
}
return pos;
}

/*********************************************************************/
//CONSULTA INDIVIDUAL

void consulta(struct reg A[], int n)
{
char aux[4];
int pos;
clrscr();
centra("Consulta",16);
gotoxy(8,19);printf("Matricula: ");gets(aux);
pos=buscar(A,n,aux);
if(pos!=-1)
{
gotoxy(8,19);printf("Matricula");
gotoxy(9,21);printf("%s",A[pos].matricula);
gotoxy(19,19);printf("Nombre");
gotoxy(20,21);printf("%s",A[pos].nombre);
gotoxy(29,19);printf("Apellido 1");
gotoxy(30,21);printf("%s",A[pos].paterno);
gotoxy(43,19);printf("Apellido 2");
gotoxy(44,21);printf("%s",A[pos].materno);
gotoxy(57,19);printf("Semestre");
gotoxy(59,21);printf("%d",A[pos].sem);
}
else
{
centra("No Existe La Matricula",25);
}
getch();
return;
}


/******************************************************************/
void marco(int x1,int x2,int y1,int y2,int fondo,int color,int sombra,char *texto)
{
int cont,cont2,longitud;
textbackground(fondo);
for(cont=x1;cont<=x2;cont++)
{
textcolor(color);
gotoxy(cont,y1);cprintf("═");
gotoxy(cont,y2);cprintf("═");
}
for(cont2=y1;cont2<=y2;cont2++)
{
textcolor(color);
gotoxy(x1,cont2);cprintf("║");
gotoxy(x2,cont2);cprintf("║");
}
for(cont=x1+1;cont<=x2-1;cont++)
{
for(cont2=y1+1;cont2<=y2-1;cont2++)
{
gotoxy(cont,cont2); cprintf(" ");
}
}
if(sombra)
{
for(cont=x1+1;cont<=x2+1;cont++)
{
textcolor(0);
gotoxy(cont,y2+1);cprintf("█");
}
for(cont2=y1+1;cont2<=y2+1;cont2++)
{
textcolor(0);
gotoxy(x2+1,cont2);cprintf("█");
}
}
longitud=strlen(texto);
gotoxy(1+((x2-longitud)+x1)/2,y1+2);
cprintf("%s",texto);
textcolor(color);
gotoxy(x1,y1);cprintf("╔");
gotoxy(x2,y1);cprintf("╗");
gotoxy(x2,y2);cprintf("╝");
gotoxy(x1,y2);cprintf("╚");
}
/*******************************************************************/

void centra(char *texto,int fila)
{
gotoxy((80-strlen(texto))/2,fila);cprintf("%s",texto);
return;
}

Noel Solw
18 de Febrero del 2006
[a] : que es lo que codigo tiene que hacer ?
[b] : cuales son los problemas que se te presentan ?

[email protected]
18 de Febrero del 2006
asi de edntrada veo que el prototipo de la funcion buscar difiere de su declaracion en un tipo de dato.
prototipo:
int buscar(struct reg A[], int n,int dato[]);
declaracion:
int buscar(struct reg A[],int n, char dato[])

como ves el parametro data es int y despues char.

ISAIAS DUQUE GOMEZ
18 de Febrero del 2006
YA RESOLVI ESOS PROBLEMAS, GRACIAS, eso que mencionas de int dato,

int buscar(struct reg A[], int n, char dato[])

capturo dato como char, eso esta bien
ya arregle eso, pero ahora estoy en el proceso de bajas y cambios y ahi tengo dudas, voy a pegar el codigo completo para que lo vean, agrezco mucho su atencion, ejecutenlo, es un programa de control escolar, donde almaceno alumnos, con sus datos personales, pero ahora quiero dar de baja y cambiar registros, en eso no puedo, gracias, espero y me puedan orientar...


ISAIAS DUQUE GOMEZ
18 de Febrero del 2006
ya esta corregido, nomas falta lo de bajas y cambios, espero y me puedan orientar, gracias

#include<conio.h>
#include<ctype.h>
#include<dos.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

//ESTRUCTURA

struct reg
{
int sem;
char matricula[5];
char nombre[15],paterno[12],materno[12],esp[5];
};

//PROTOTIPO DE FUNCION

void altas(struct reg alum[],int *n);
void listado(struct reg A[], int n);
void consulta(struct reg A[], int n);
int buscar(struct reg A[], int n,int dato[]);
void bajas(struct reg A[],int n);
void marco(int x1,int x2,int y1,int y2,int fondo,int color,int sombra,char *texto);
void centra(char *texto,int fila);


//FUNCION PRINCIPAL

void main()
{
int n=0;
char tecla;
struct reg alumno[20];

do
{
textbackground(9);
clrscr();
marco(6,74,11,38,7,0,1,"");
centra("Control Escolar",16);
gotoxy(20,19);printf("Altas.................................1");
gotoxy(20,21);printf("Bajas.................................2");
gotoxy(20,23);printf("Cambios...............................3");
gotoxy(20,25);printf("Consultas.............................4");
gotoxy(20,27);printf("Listado...............................5");
gotoxy(20,29);printf("Salir.................................6");
gotoxy(20,32);printf("Opcion...............................[ ]bb");
tecla=getche();
switch(tecla)
{
case '1': altas(alumno,&n); break;
case '2': bajas(alumno,n); break;
// case '3':cambios(alumno,&n); break;
case '4': consulta(alumno,n); break;
case '5': listado(alumno,n); break;
case '6': break;
}
}
while(tecla!='6');
}


/*********************************************************************/
//DA DE ALTAS REGISTROS

void altas(struct reg alum[],int *n)
{
int band;
char aux[5];
textbackground(9);
clrscr();
marco(6,74,11,38,7,0,1,"");
centra("Altas",16);
gotoxy(13,19);printf("Matricula: "); scanf("%s",&aux);
band=0;
for(int x=0;x<*n;x++)
{
if(strcmp(aux,alum[x].matricula)==0)
{//verifica que no se dupliquen matriculas
band=1;
}
}
if(!band) //si las matricula no es igual a las que existen
{ //damos de alta otro nuevo registro
strcpy(alum[*n].matricula,aux);
gotoxy(13,21);printf("Nombre: ");scanf("%s",&alum[*n].nombre);
gotoxy(13,23);printf("Apellido 1: ");scanf("%s",&alum[*n].paterno);
gotoxy(13,25);printf("Apellido 2: ");scanf("%s",&alum[*n].materno);
gotoxy(13,27);printf("Especialidad: ");scanf("%s",&alum[*n].esp);
do
{
gotoxy(13,29);printf("Semestre: ");
scanf("%d",&alum[*n].sem);
}
while(alum[*n].sem<1 || alum[*n].sem>9);
(*n)++;

gotoxy(1+(80-23)/2,33);printf("şAcabas de dar de alta!");
delay(2000);
}
else
{
gotoxy(1+(80-23)/2,25);printf("Matricula ya existe");
}
getch();
}
/*********************************************************************/
//LISTADO

void listado(struct reg A[], int n)
{
int y=21;
textbackground(9);
clrscr();
marco(5,75,11,38,7,0,1,"");
centra("Listado",16);
gotoxy(7,19);printf("Matricula");
gotoxy(19,19);printf("Nombre");
gotoxy(28,19);printf("Apellido 1");
gotoxy(41,19);printf("Apellido 2");
gotoxy(55,19);printf("Carrera");
gotoxy(64,19);printf("Semestre");

y=21;
for(int x=0;x<n;x++)
{
gotoxy(9,y); printf("%s",A[x].matricula);
gotoxy(19,y); printf("%s",A[x].nombre);
gotoxy(28,y); printf("%s",A[x].paterno);
gotoxy(41,y); printf("%s",A[x].materno);
gotoxy(55,y); printf("%s",A[x].esp);
gotoxy(64,y); printf("%d",A[x].sem);
y+=2;
}
getch();
}
/*********************************************************************/
//BUSCA

int buscar(struct reg A[],int n, char dato[])
{
int pos=-1; //indica que no lo encontro (centinela)
int band=0,x=0;
while(x<n && !band)
{
if(strcmp(dato,A[x].matricula)==0)
{
pos=x;
band=1;
}
x++;
}
return pos;
}

/*********************************************************************/
//CONSULTA INDIVIDUAL

void consulta(struct reg A[], int n)
{
char aux[5];
int pos=0;
textbackground(9);
clrscr();
marco(6,74,11,38,7,0,1,"");
centra("Consulta",16);
gotoxy(8,19);printf("Matricula: ");scanf("%s",&aux);
pos=buscar(A,n,aux);
if(pos!=-1)
{
gotoxy(8,23);printf("Matricula"); gotoxy(10,25);printf("%s",A[pos].matricula);
gotoxy(19,23);printf("Nombre"); gotoxy(19,25);printf("%s",A[pos].nombre);
gotoxy(28,23);printf("Apellido 1");gotoxy(28,25);printf("%s",A[pos].paterno);
gotoxy(41,23);printf("Apellido 2");gotoxy(41,25);printf("%s",A[pos].materno);
gotoxy(55,23);printf("Carrera"); gotoxy(55,25);printf("%s",A[pos].esp);
gotoxy(64,23);printf("Semestre"); gotoxy(64,25);printf("%d",A[pos].sem);

}
else
{
centra("No Existe La Matricula",25);
}
getch();
return;
}


/******************************************************************/
//DA DE BAJA REGISTROS

void bajas(struct reg A[],int n)
{
int baja=0,pos;
char aux[5],tecla;
textbackground(9);
clrscr();
marco(5,75,11,38,7,0,1,"");
centra("Bajas",16);
gotoxy(8,19);printf("Matricula: ");scanf("%s",&aux);
pos=buscar(A,n,aux);
if(pos!=-1)
{
do
{
gotoxy(8,23);printf("Matricula"); gotoxy(10,25);printf("%s",A[pos].matricula);
gotoxy(19,23);printf("Nombre"); gotoxy(19,25);printf("%s",A[pos].nombre);
gotoxy(28,23);printf("Apellido 1");gotoxy(28,25);printf("%s",A[pos].paterno);
gotoxy(41,23);printf("Apellido 2");gotoxy(41,25);printf("%s",A[pos].materno);
gotoxy(55,23);printf("Carrera"); gotoxy(55,25);printf("%s",A[pos].esp);
gotoxy(64,23);printf("Semestre"); gotoxy(64,25);printf("%d",A[pos].sem);
gotoxy(22,31);printf("Deseas Eliminar Registro S/N.....[ ]bb");
tecla=getche();
if(tecla=='s' || tecla=='S')
{

//DAR DE BAJA REGISTRO
}
}
while(toupper(tecla)!='N');
}
else
{
centra("No Existe La Matricula",25);
}
getch();
return;
}

/******************************************************************/

void marco(int x1,int x2,int y1,int y2,int fondo,int color,int sombra,char *texto)
{
int cont,cont2,longitud;
textbackground(fondo);
for(cont=x1;cont<=x2;cont++)
{
textcolor(color);
gotoxy(cont,y1);cprintf("═");
gotoxy(cont,y2);cprintf("═");
}
for(cont2=y1;cont2<=y2;cont2++)
{
textcolor(color);
gotoxy(x1,cont2);cprintf("║");
gotoxy(x2,cont2);cprintf("║");
}
for(cont=x1+1;cont<=x2-1;cont++)
{
for(cont2=y1+1;cont2<=y2-1;cont2++)
{
gotoxy(cont,cont2); cprintf(" ");
}
}
if(sombra)
{
for(cont=x1+1;cont<=x2+1;cont++)
{
textcolor(0);
gotoxy(cont,y2+1);cprintf("█");
}
for(cont2=y1+1;cont2<=y2+1;cont2++)
{
textcolor(0);
gotoxy(x2+1,cont2);cprintf("█");
}
}
longitud=strlen(texto);
gotoxy(1+((x2-longitud)+x1)/2,y1+2);
cprintf("%s",texto);
textcolor(color);
gotoxy(x1,y1);cprintf("╔");
gotoxy(x2,y1);cprintf("╗");
gotoxy(x2,y2);cprintf("╝");
gotoxy(x1,y2);cprintf("╚");
}
/*******************************************************************/

void centra(char *texto,int fila)
{
gotoxy((80-strlen(texto))/2,fila);cprintf("%s",texto);
return;
}