/**
* NombreProg: Alumnos
* Descripcion: Archivo de registro de alumnos
*
* AUTORES: Yoy alguien más
* Fecha: 07 de Diciembre de 2007
*/
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
struct ALUMNO
{
char Cod[9];
char Nombre[50];
char Escuela[4];
float Peso;
int Cond;
};
struct ALUMNO Registro;
FILE *F;
int MenuAlumno();
void IngresarRegAlumno();
void BuscarxCodAlumno();
void MostrarRegAlumno();
void EliminacionxCodAlumno();
void EliminacionFisicaxCodAlumno();
void ActualizacionxCodAlumno();
/***********************************************************************************/
//Cabecera del llamado a funciones validar enteros de tamaño definido.
int ConvCadDig_Int(char *c);
int LeerCadDig(char *c,int x,int y,int tam);
int LeerInt(int x,int y,int tam); //Funcion a utilizar
/***********************************************************************************/
int Leercod(char c[9],int x,int y);
int Leernom(char c[50],int x,int y);
int main()
{
int Opcion;
do
{
Opcion = MenuAlumno();
switch(Opcion)
{
case 1 : IngresarRegAlumno();
break;
case 2 : BuscarxCodAlumno();
break;
case 3 : ActualizacionxCodAlumno();
break;
case 4 : EliminacionxCodAlumno();
break;
case 5 : EliminacionFisicaxCodAlumno();
break;
case 6 : MostrarRegAlumno();
break;
}
}while(Opcion != 0);
system("pause");
return(0);
}
int MenuAlumno()
{
int i;
do
{
system("cls");
cout << "nnr U N I V E R S I D A D N A C I O N A L D E I N G E N I E R I A ";
cout << "nnr D E P A R T A M E N T O M E D I C O ";
cout << "nnr ARCHIVO DE ALUMNOS ";
cout << "nr";
cout << "nnnr 1.- INGRESAR REGISTRO DE ALUMNOS";
cout << "nr 2.- BUSCAR ALUMNOS POR CODIGO";
cout << "nr 3.- ACTUALIZAR DATOS DE ALUMNOS";
cout << "nr 4.- ElIMINACION DE REGISTRO DE ALUMNOS ";
cout << "nr 5.- LIMPIAR REGISTROS ";
cout << "nr 6.- MOSTRAR REGISTROS";
cout << "nr 0.- TERMINAR";
cout << "nnnr Seleccione su opcion ---> ";
i=LeerInt(28,20,1);
//cin >> i;
}while(i<0 || i>6);
return(i);
}
void IngresarRegAlumno()
{
char Codigo[9];
system("cls");
cout << "nr INGRESAR REGISTROS DE ALUMNOS ";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL)
{
F = fopen("Alumnos.Sec","wb");
}
cout << "nnnrCodigo ---> ";
Leercod(Codigo,14,5);
getch();
//Test del código
//cout<<"nEste es el codigo: "<<Codigo;
fread(&Registro,sizeof(Registro),1,F);
while(!feof(F))
{
if(strcmp(Registro.Cod,Codigo)==0)
{
cout << "nnnrRegistro DUPLICADO ...!!!";
fclose(F);
getch();
return;
}
fread(&Registro,sizeof(Registro),1,F);
}
//strcpy(Registro.Cod,"");
//strcpy(Registro.Cod,Codigo);
//Test del Código
//cout<<"nEste es el codigo: "<<Registro.Cod;
cout<< "nrNombre ----> ";
//strcpy(Registro.Nombre,"
//Aquí esta el error a solucionar
Leernom(Registro.Nombre,14,6);
//cout<<"nEste es eL NOMBRE: "<<Registro.Nombre;
//Test del Código
//cout<<"nEste es el codigo: "<<Registro.Cod;
//strcpy(Registro.Cod,"");
//strcpy(Registro.Cod,Codigo);
cout<< "nrPeso ------> ";
Registro.Peso=0;
cin>> Registro.Peso;
cout<< "nrEscuela ---> ";
strcpy(Registro.Escuela,"");
cin>> Registro.Escuela;
do
{
system("cls");
cout << "nr AUTOSEGURO DE ALUMNOS ";
cout << "nr";
cout << "nr Ingrese 1 Si Cancelo Autoseguro.-";
cout << "nr Ingrese 2 Si No Cancelo Autoseguro.-" ;
cout << "nr";
cout << "nr Condicion--> ";
Registro.Cond = LeerInt(15,7,9);
//cin >> Registro.Cond;
}while(Registro.Cond<=0 || Registro.Cond>2);
fwrite(&Registro, sizeof(Registro), 1, F);
fclose(F);
cout << "nnnrALUMNO registrado !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void MostrarRegAlumno()
{
int i=0;
system("cls");
cout << "nrtttLISTADO DE REGISTROS DE ALUMNOS";
F = fopen("Alumnos.Sec","rb");
if(F == NULL)
{
cout << "nnnrNo existe el archivo !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "nr===============================================================================";
cout << "nr CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "r------------------------------------------------------------------------------- ";
fread(&Registro, sizeof(Registro), 1, F);
while(!feof(F))
{
gotoxy(2,7+i);
cout<<Registro.Cod;
gotoxy(17,7+i);
cout<<Registro.Nombre;
//printf("%s",&Registro.Nombre);
gotoxy(53,7+i);
cout<<Registro.Escuela;
gotoxy(65,7+i);
cout<<Registro.Peso;
gotoxy(75,7+i);
cout<<Registro.Cond;
i=i+1;
//printf("nr%9it%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre,Registro.Escuela,Registro.Peso,Registro.Cond);
fread(&Registro,sizeof(Registro),1,F);
}
fclose(F);
cout << "nnr------------------------------------------------------------------------------";
cout << "nrFin del listado !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void BuscarxCodAlumno()
{
char Codigo[9];
system("cls");
cout << "nrBUSCAR REGISTROS POR CODIGO DE ALUMNOS";
F = fopen("Alumnos.Sec","rb");
if(F == NULL)
{
cout << "nnnrNo existe el archivo !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "nnnr Codigo ----> ";
//Codigo=LeerInt(15,5,8);
Leercod(Codigo,15,5);
fread(&Registro, sizeof(Registro), 1, F);
while(!feof(F))
{
if(strcmp(Registro.Cod,Codigo)==0)
{
cout << "nr===============================================================================";
cout << "nr CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "nr------------------------------------------------------------------------------- ";
printf("nr%9st%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
cout << "nr-------------------------------------------------------------------------------";
getch();
return;
}
fread(&Registro, sizeof(Registro), 1, F);
}
cout << "nrNo se encuentra ese registro !!!n";
fclose(F);
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void ActualizacionxCodAlumno()
{
char Codigo[9];
system("cls");
cout << "nrACTUALIZAR REGISTROS POR CODIGO DE ALUMNOS";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL)
{
cout << "nnnrNo existe el archivo !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "nnnrCodigo ----> ";
//Codigo=LeerInt(14,5,8);
Leercod(Codigo,14,5);
fread(&Registro, sizeof(Registro), 1, F);
while(!feof(F))
{
if(strcmp(Registro.Cod,Codigo)==0)
{
cout << "nr===============================================================================";
cout << "nr CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "nr------------------------------------------------------------------------------- ";
printf("nr%9st%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
cout << "nr-------------------------------------------------------------------------------";
cout << "nnnrIngrese los nuevos datos ...";
cout << "nrEscuela ---> "; cin >> Registro.Escuela;
cout << "nrNombre ----> "; gets(Registro.Nombre);
cout << "nrPeso ------> "; cin >> Registro.Peso;
cout << "nrCondicion -> ";
Registro.Cond = LeerInt(14,24,1);
//cin >> Registro.Cond;
fseek(F, ftell(F)-sizeof(Registro), SEEK_SET);
fwrite(&Registro, sizeof(Registro), 1, F);
fclose(F);
cout << "nnnrRegistro modificado !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
fread(&Registro, sizeof(Registro), 1, F);
}
cout << "nrNo se encuentra ese registro !!!n";
fclose(F);
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void EliminacionxCodAlumno()
{
char Codigo[9];
char op;
system("cls");
cout << "nrELIMINACION LOGICA DE REGISTROS DE ALUMNOS";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL) // Checa la existencia del archivo
{
cout << "nnnrNo existe el archivo !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "nnnrCodigo ----> ";
//Codigo=LeerInt(14,5,8);
Leercod(Codigo,14,5);
fread(&Registro, sizeof(Registro), 1, F);
while(!feof(F))
{
if(strcmp(Registro.Cod,Codigo)==0)
{
cout << "nr===============================================================================";
cout << "nr CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "nr------------------------------------------------------------------------------- ";
printf("nr%9st%-30st%8st%-6.1f%6it",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
cout << "nr-------------------------------------------------------------------------------";
strcpy(Registro.Cod,"");
strcpy(Registro.Nombre, "");
strcpy(Registro.Escuela, "");
Registro.Peso = 0.0;
Registro.Cond = 0.0;
do {
cout << "nnr¿... SEGURO que desea BORRARLO ...? [S/N] ---> ";
scanf("%s",&op);
}while(op!='S' && op!='N' && op!='s' && op!='n');
if(op == 'S' || op == 's')
{
fseek(F, ftell(F)-sizeof(Registro), SEEK_SET);
fwrite(&Registro, sizeof(Registro), 1, F);
cout << "nnnrRegistro eliminado !!!n";
}
fclose(F);
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
fread(&Registro, sizeof(Registro), 1, F);
}
cout << "nrNo se encuentra ese registro !!!n";
fclose(F); // Cierra el archivo
cout << "nr<<< ... RESIONE ENTER para continuar >>>";
getch();
return;
}
void EliminacionFisicaxCodAlumno()
{
//Variable para controlar el archivo temporal
FILE *Temporal;
system("cls");
cout << "nrELIMINACION FISICA DE REGISTROS DE ALUMNOS";
// Intenta abrir el archivo PRODUCTO.SEC en modo de solo lectura
F = fopen("Alumnos.Sec","rb");
// Valida la existencia del archivo
if(F == NULL)
{
cout << "nnnrNo existe el archivo !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
// Crea el archivo Temporal.Sec
Temporal = fopen("Temporal.Sec","wb");
fread(&Registro, sizeof(Registro), 1, F);
while(!feof(F))
{
if(Registro.Cod != 0)
// Graba el registro valido en el archivo temporal
fwrite(&Registro, sizeof(Registro), 1, Temporal);
//Lee el siguinete elemento del archivo
fread(&Registro, sizeof(Registro), 1, F);
}
//fcloseall(); // Cierra todos los archivos abiertos
fclose(F);
fclose(Temporal);
remove("Alumnos.Sec"); //Elimina el archivo original
rename("Temporal.Sec", "Alumnos.Sec");
//Renombra el archivo temporal con el nombre del archivo original
cout << "nnnrArchivo DEFRAGMENTADO ... !!!n";
cout << "nr<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
/*****************************************************************************/
//Funcion Valida enteros, compara cadenas bloquea el ingreso de char y enter,
// intro, tabulador, etc medinate la funcion isdigit().
/*****************************************************************************/
int ConvCadDig_Int(char *c)
{ int dig,vacio=1,ii=0,pp=0;
while(c[ii]!=' ')
{vacio=0;
switch(c[ii])
{ case '0':dig=0;break;
case '1':dig=1;break;
case '2':dig=2;break;
case '3':dig=3;break;
case '4':dig=4;break;
case '5':dig=5;break;
case '6':dig=6;break;
case '7':dig=7;break;
case '8':dig=8;break;
case '9':dig=9;break;
}
pp=pp*10+dig;ii++;
}
if(vacio)
{pp=-1;cprintf("Ingrese Entero No Nulo! <<CLICK>>");getch();
}
return (pp);
}
int LeerCadDig(char *c,int x,int y,int tam)
{char opc,esp=' ';
int i;
i=0;
do
{ gotoxy(x+i,y);
do
{opc=getch();
}while(!(isdigit(opc)||opc=='b'||opc=='r'||opc=='t'));
if(opc=='b')
{ if(i==0)
{c[0]=' ';
}else
i--;
c[i]=' ';cout<<'b'<<esp;
}
else
{ if(opc!='r'&&opc!='t')
{
c[i]=opc;
cprintf("%c",opc);
i++;
}else
c[i]=' ';
if(i==tam) //TAM min 1 TAM Max 9
{opc=getch();
if(opc=='b')
{ i--;c[i]=' ';cout<<'b'<<esp;
}
else
{c[i]=' ';opc='r';
}
}
}
}while(!(opc=='r'||opc=='t'));
//getch();
return 0;
}
int LeerInt(int x,int y,int tam)//en la posicion g(x,y) y de tamaño max. tam
{ int p;
char cing[11],ccte[11]="999999999";
LeerCadDig(cing,x,y,tam);
if(strcmp(cing,ccte)<=0)
p=ConvCadDig_Int(cing);
else
p=-1;
cout << "n";
return (p);
}
int Leernom(char c[50],int x,int y)
{ int i;
char car;
for(i=0;i<50;i++)
{
if(i<50)
{
do{
gotoxy(x+i-1,y);
cout<<" ";
gotoxy(x+i-1,y);
car=getche();
if(car==' ')
{
gotoxy(x+i+1,y);
}
if(car=='r')
{
return 0;
}
}while((car<'A'||car>'Z')&& car!=' '&&car!='r');
}
c[i]=car;
}
//Test del código
cout<<"tEste es el nombre: "<<c;
return 0;
}
int Leercod(char c[9],int x,int y)
{ int i;
char car;
for(i=0;i<=8;i++)
{
if(i<8)
{
do{
gotoxy(x+i-1,y);
cout<<" ";
gotoxy(x+i-1,y);
car=getche();
}while(car<'0'||car>'9');
}
else
{
do{
gotoxy(x+i-1,y);
cout<<" ";
gotoxy(x+i-1,y);
car=getche();
}while(car<'A'||car>'Z');
}
c[i]=car;
}
c[9]=' ';
//Test del código
//cout<<"nEste es el codigo: "<<c;
return 0;
}