Al leer Registro.Cod y luego Registro.Nombre parte del registro. nombre se inserta en el código, a que se debe? 8)
void IngresarRegAlumno()
{
char Codigo[9];
system("cls");
cout << "\n\r INGRESAR REGISTROS DE ALUMNOS ";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL)
{
F = fopen("Alumnos.Sec","wb");
}
cout << "\n\n\n\rCodigo ---> ";
Leercod(Registro.Cod,14,5);
//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 << "\n\n\n\rRegistro 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<< "\n\rNombre ----> ";
//strcpy(Registro.Nombre," ");
Leernom(Registro.Nombre,14,6);
//cout<<"\nEste es eL NOM: "<<Registro.Nombre;
//Test del Código
//cout<<"\nEste es el codigo: "<<Registro.Cod;
strcpy(Registro.Cod," ");
strcpy(Registro.Cod,Codigo);
cout<< "\n\rPeso ------> ";
Registro.Peso=0;
cin>> Registro.Peso;
cout<< "\n\rEscuela ---> ";
strcpy(Registro.Escuela,"");
cin>> Registro.Escuela;
do
{
system("cls");
cout << "\n\r AUTOSEGURO DE ALUMNOS ";
cout << "\n\r";
cout << "\n\r Ingrese 1 Si Cancelo Autoseguro.-";
cout << "\n\r Ingrese 2 Si No Cancelo Autoseguro.-" ;
cout << "\n\r";
cout << "\n\r 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 << "\n\n\n\rALUMNO registrado !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
Cita de: czador.asesino en Julio 09, 2008, 05:19:15 PM
Al leer Registro.Cod y luego Registro.Nombre parte del registro. nombre se inserta en el código, a que se debe? 8)
void IngresarRegAlumno()
{
char Codigo[9];
system("cls");
cout << "\n\r INGRESAR REGISTROS DE ALUMNOS ";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL)
{
F = fopen("Alumnos.Sec","wb");
}
cout << "\n\n\n\rCodigo ---> ";
Leercod(Registro.Cod,14,5);
//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 << "\n\n\n\rRegistro 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<< "\n\rNombre ----> ";
//strcpy(Registro.Nombre," ");
Leernom(Registro.Nombre,14,6);
//cout<<"\nEste es eL NOM: "<<Registro.Nombre;
//Test del Código
//cout<<"\nEste es el codigo: "<<Registro.Cod;
strcpy(Registro.Cod," ");
strcpy(Registro.Cod,Codigo);
cout<< "\n\rPeso ------> ";
Registro.Peso=0;
cin>> Registro.Peso;
cout<< "\n\rEscuela ---> ";
strcpy(Registro.Escuela,"");
cin>> Registro.Escuela;
do
{
system("cls");
cout << "\n\r AUTOSEGURO DE ALUMNOS ";
cout << "\n\r";
cout << "\n\r Ingrese 1 Si Cancelo Autoseguro.-";
cout << "\n\r Ingrese 2 Si No Cancelo Autoseguro.-" ;
cout << "\n\r";
cout << "\n\r 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 << "\n\n\n\rALUMNO registrado !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
mira, yo me especializo mas en C aunque C++ es casi = cambian unas cosas.
primero;
void IngresarRegAlumno()
{
si quisiste meter una declaracion de struct esta mal, ya que si asi inicia tu cod, tiene que llebar main() o void main
luego
Citar
F = fopen("Alumnos.Sec","rb+");
para abrir un archivo tienes que
declarar FILE *F;
despues poner
F=fopen("Alumnos.Sec","rb+");
nose conque lo quieres abrir, si lo vas a crear apenas cambia rb+ por w, luego
Alumnos.Sec cuando pones eso el archivo se llamara alumnos con extension sec
para cambiar la extension pon alumnos.txt, asi lo abrira el block de notas
lo que quieres hacer con el apuntador de F es algo raro, yaque primero le das un valor a F y declaras que si cumple con esa condicion, f cambia a ser F = fopen("Alumnos.Sec","wb");
te recomiendo que busques con super google, apuntadores y lo checas para conoser mas de F=
otra si usas Registro.Cod . es para la estructura
ejemplo
struct Registro{
char cod[50];
char codi[30];
int num[10];
}
eso quiere decir que si nombras
registro.codi, va a abrir lo que guardes alli
en tu codigo no note que usaras struct
espero y eso te ayude con algo
Es que el codigo es muy grande,.. 8)
/**
* NombreProg: Alumnos
* Descripcion: Archivo de registro de alumnos
*
* AUTORES: Yo y Anónimo
* 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 << "\n\n\r 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 << "\n\n\r D E P A R T A M E N T O M E D I C O ";
cout << "\n\n\r ARCHIVO DE ALUMNOS ";
cout << "\n\r";
cout << "\n\n\n\r 1.- INGRESAR REGISTRO DE ALUMNOS";
cout << "\n\r 2.- BUSCAR ALUMNOS POR CODIGO";
cout << "\n\r 3.- ACTUALIZAR DATOS DE ALUMNOS";
cout << "\n\r 4.- ElIMINACION DE REGISTRO DE ALUMNOS ";
cout << "\n\r 5.- LIMPIAR REGISTROS ";
cout << "\n\r 6.- MOSTRAR REGISTROS";
cout << "\n\r 0.- TERMINAR";
cout << "\n\n\n\r 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 << "\n\r INGRESAR REGISTROS DE ALUMNOS ";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL)
{
F = fopen("Alumnos.Sec","wb");
}
cout << "\n\n\n\rCodigo ---> ";
Leercod(Codigo,14,5);
//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 << "\n\n\n\rRegistro 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<< "\n\rNombre ----> ";
//strcpy(Registro.Nombre," ");
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<< "\n\rPeso ------> ";
Registro.Peso=0;
cin>> Registro.Peso;
cout<< "\n\rEscuela ---> ";
strcpy(Registro.Escuela,"");
cin>> Registro.Escuela;
do
{
system("cls");
cout << "\n\r AUTOSEGURO DE ALUMNOS ";
cout << "\n\r";
cout << "\n\r Ingrese 1 Si Cancelo Autoseguro.-";
cout << "\n\r Ingrese 2 Si No Cancelo Autoseguro.-" ;
cout << "\n\r";
cout << "\n\r 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 << "\n\n\n\rALUMNO registrado !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void MostrarRegAlumno()
{
int i=0;
system("cls");
cout << "\n\r\t\t\tLISTADO DE REGISTROS DE ALUMNOS";
F = fopen("Alumnos.Sec","rb");
if(F == NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "\n\r===============================================================================";
cout << "\n\r 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("\n\r%9i\t%-30s\t%8s\t%-6.1f\%6i\t",Registro.Cod,Registro.Nombre,Registro.Escuela,Registro.Peso,Registro.Cond);
fread(&Registro,sizeof(Registro),1,F);
}
fclose(F);
cout << "\n\n\r------------------------------------------------------------------------------";
cout << "\n\rFin del listado !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void BuscarxCodAlumno()
{
char Codigo[9];
system("cls");
cout << "\n\rBUSCAR REGISTROS POR CODIGO DE ALUMNOS";
F = fopen("Alumnos.Sec","rb");
if(F == NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "\n\n\n\r 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 << "\n\r===============================================================================";
cout << "\n\r CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "\n\r------------------------------------------------------------------------------- ";
printf("\n\r%9s\t%-30s\t%8s\t%-6.1f\%6i\t",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
cout << "\n\r-------------------------------------------------------------------------------";
getch();
return;
}
fread(&Registro, sizeof(Registro), 1, F);
}
cout << "\n\rNo se encuentra ese registro !!!\n";
fclose(F);
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void ActualizacionxCodAlumno()
{
char Codigo[9];
system("cls");
cout << "\n\rACTUALIZAR REGISTROS POR CODIGO DE ALUMNOS";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL)
{
cout << "\n\n\n\rNo existe el archivo !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rCodigo ----> ";
//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 << "\n\r===============================================================================";
cout << "\n\r CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "\n\r------------------------------------------------------------------------------- ";
printf("\n\r%9s\t%-30s\t%8s\t%-6.1f\%6i\t",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
cout << "\n\r-------------------------------------------------------------------------------";
cout << "\n\n\n\rIngrese los nuevos datos ...";
cout << "\n\rEscuela ---> "; cin >> Registro.Escuela;
cout << "\n\rNombre ----> "; gets(Registro.Nombre);
cout << "\n\rPeso ------> "; cin >> Registro.Peso;
cout << "\n\rCondicion -> ";
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 << "\n\n\n\rRegistro modificado !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
fread(&Registro, sizeof(Registro), 1, F);
}
cout << "\n\rNo se encuentra ese registro !!!\n";
fclose(F);
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
void EliminacionxCodAlumno()
{
char Codigo[9];
char op;
system("cls");
cout << "\n\rELIMINACION LOGICA DE REGISTROS DE ALUMNOS";
F = fopen("Alumnos.Sec","rb+");
if(F == NULL) // Checa la existencia del archivo
{
cout << "\n\n\n\rNo existe el archivo !!!\n";
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
cout << "\n\n\n\rCodigo ----> ";
//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 << "\n\r===============================================================================";
cout << "\n\r CODIGO NOMBRES Y APELLIDOS ESCUELA PESO CONDICION ";
cout << "\n\r------------------------------------------------------------------------------- ";
printf("\n\r%9s\t%-30s\t%8s\t%-6.1f\%6i\t",Registro.Cod,Registro.Nombre, Registro.Escuela, Registro.Peso,Registro.Cond);
cout << "\n\r-------------------------------------------------------------------------------";
strcpy(Registro.Cod,"");
strcpy(Registro.Nombre, "");
strcpy(Registro.Escuela, "");
Registro.Peso = 0.0;
Registro.Cond = 0.0;
do {
cout << "\n\n\r¿... 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 << "\n\n\n\rRegistro eliminado !!!\n";
}
fclose(F);
cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>";
getch();
return;
}
fread(&Registro, sizeof(Registro), 1, F);
}
cout << "\n\rNo se encuentra ese registro !!!\n";
fclose(F); // Cierra el archivo
cout << "\n\r<<< ... RESIONE ENTER para continuar >>>";
getch();
return;
}
void EliminacionFisicaxCodAlumno()
{
//Variable para controlar el archivo temporal
FILE *Temporal;
system("cls");
cout << "\n\rELIMINACION 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 << "\n\n\n\rNo existe el archivo !!!\n";
cout << "\n\r<<< ... 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 << "\n\n\n\rArchivo DEFRAGMENTADO ... !!!\n";
cout << "\n\r<<< ... 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]!='\0')
{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]='\0';
}else
i--;
c='\0';cout<<'\b'<<esp;
}
else
{ if(opc!='\r'&&opc!='\t')
{
c=opc;
cprintf("%c",opc);
i++;
}else
c='\0';
if(i==tam) //TAM min 1 TAM Max 9
{opc=getch();
if(opc=='\b')
{ i--;c='\0';cout<<'\b'<<esp;
}
else
{c='\0';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[9],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=car;
}
//Test del código
cout<<"\tEste es el nombre: "<<c;
return 0;
}
int Leercod(char c[50],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=car;
}
//Test del código
//cout<<"\nEste es el codigo: "<<c;
return 0;
}
ahorita no tengo mucho tiempo, para checar el codigo.
pero probablemente se debe a que se usan apuntadores.
y ha de haber un error ejemplo
nom=& x nombre del niño
nom=& x codigo
entonces lo 1 se borra para darle paso a lo siguiente
El compilador ninguno, pero como ya dije parte del nombre se pega al codigo, y nada de nada(ya intenté todo) 8)
Modificado:
Está bién, cuando puedas a ver si me ayudas, gracias..
Gracias, pero ya encontré el error, se debía a que reemplazaba el último caracter de una cadena(el /0 ) con otro caracter y por ello la cadena no tenía fin..Por ello se unían los campos nombre y código :D 8)