Título: OPERACIONES BASICAS CON FILES
Publicado por: ANTÓN RAMIREZ en 13 Diciembre 2010, 04:17 am
hola a todos gracias por tu consejo Sagrini en realidad quisiera pedirte si me puedes brindar material de como empezar en linux , estoy muy implementado en dev y quiero tocar otras opciones , bueno en esta oportunidad te dejo un code sobre operaciones con files , compilalo con el dev-c++ y presiona F9 si gusta para compilar rapido . AQUI podras apreciar aparte de las operaciones basicas como insertar registros , eliminar registros , mostrar registros , un actualizar con punteros , metodos de ordenamiento por codigo y por nombre es novedoso estos metodos , tambien hay varias decoraciones implemente algoritmos para capturar cuadros y hora -fecha del sistema este proyecto me costo muxo , quiero compartirlo con ustedes , haber Sagrini si das tu visto bueno a mi proyecto y como dices apoyame para comenzar con Linux , eh echo de todo un poco de todos los temas en dev++ pero ya quiero variar , ok espero tu respuesta y seguir en contacto si gustas seria bueno obtener tu ms para intercambiar informacion bueno me despido espero que puedan apreciar mi proyecto : ATTE : ANTON RAMIREZ , LEONARDO VLADIMIR (ALUMNO UNI) #include <windows.h>//para los message box #include <iostream> #include <stdio.h> // Operaciones de archivos #include <stdlib.h> #include <string.h> #include <conio.h> #include <ctype.h> // Operaciones toupper/tolower using namespace std; struct CLIENTE { char Cod[5]; char Nombre[25]; char Direccion[28]; char Tipo; char tel[10]; }; // Declaracion global de la variable "Registro" de tipo struct CLIENTE struct CLIENTE Registro; // Declaracion global de la variable "*F" (apuntador de tipo archivo) FILE *F; int MenuCLIENTE(); void IngresarRegCLIENTE(); // Denominado tambien rutina de Altas void BuscarxCodCLIENTE(); // Denominado tambien rutina de Consultas void ActualizacionxCodCLIENTE(); // Denominado tambien rutina de Modificaciones void EliminacionLogicaxCodCLIENTE(); // Denominado tambien rutina de Baja Logica void EliminacionFisicaxCodCLIENTE(); // Denominado tambien rutina de Baja Fisica void MostrarRegCLIENTE(); void Encabezado1(); void Raya58(); void Raya60(); int Menu(); void ordenarxcod(); void ordenarxnom(); void cuadro(int i,int j,int k,int l); int main() { int Opcion; do { Opcion = MenuCLIENTE(); switch(Opcion) { case 1 : IngresarRegCLIENTE(); break; case 2 : BuscarxCodCLIENTE(); break; case 3 : ActualizacionxCodCLIENTE(); break; case 4 : EliminacionLogicaxCodCLIENTE(); break; case 5 : EliminacionFisicaxCodCLIENTE(); break; case 6 : MostrarRegCLIENTE(); break; case 7 : ordenarxcod(); break; case 8 : ordenarxnom(); break; } }while(Opcion != 0); MessageBox(NULL, "Adios Gracias Por Usar Este Programa", "Adios =(", MB_ICONINFORMATION | MB_OK | MB_SYSTEMMODAL); return(0); } int MenuCLIENTE() { int i; textbackground(BLUE); do { cuadro(1,1,80,25); cuadro(28,2,50,4); textcolor(LIGHTGREEN); /*cout << "\n\n\r A R C H I V O D E C L I E N T E S"; cout << "\n\n\r Archivos SECUENCIALES en Lenguaje C "; textcolor(WHITE); cout << "\n\n\n\r 1.- INGRESAR Registros"; cout << "\n\r 2.- BUSCAR por CODIGO"; cout << "\n\r 3.- ACTUALIZAR Datos por CODIGO"; cout << "\n\r 4.- Eliminacion LOGICA por CODIGO"; cout << "\n\r 5.- Eliminacion FISICA por CODIGO (defragmentar)"; cout << "\n\r 6.- MOSTRAR Registros"; cout << "\n\r 7.- ORDENAR Registro por CODIGO"; cout << "\n\r 8.- ORDENAR Registro por NOMBRE"; textcolor(LIGHTRED); cout << "\n\r 0.- TERMINAR";*/ textcolor(WHITE); gotoxy(30,3); textcolor(LIGHTRED); printf("ARCHIVO DE CLIENTES"); gotoxy(15,5);printf("0.- TERMINAR"); textcolor(LIGHTGREEN); gotoxy(15,7);printf("1.- INGRESAR Registros"); gotoxy(15,9);printf("2.- BUSCAR Regsitros por CODIGO"); gotoxy(15,11);printf("3.- ACTUALIZAR Datos por CODIGO"); gotoxy(15,13);printf("4.- ELIMINACION LOGICA por CODIGO"); gotoxy(15,15);printf("5.- ELIMINACION FISICA (Defragmentar)"); gotoxy(15,17);printf("6.- MOSTRAR Registros"); gotoxy(15,19);printf("7.- ORDENAR Registros por CODIGO"); gotoxy(15,21);printf("8.- ORDENAR Registros por NOMBRE"); textcolor(LIGHTRED); gotoxy(15,23);printf(" Escojer su Opcion---------------------> "); textcolor(WHITE); cin >> i; }while(i<0 || i>8); return(i); } void IngresarRegCLIENTE() { char Codigo[15]; cout << "\n\r INGRESAR REGISTROS DE CLIENTES"; // Intenta abrir el archivo CLIENTES.SEC en modo de lectura/escritura F = fopen("Cliente.Sec","rb+"); if(F == NULL) { // Crea el archivo en caso de no existir F = fopen("Cliente.Sec","wb"); } cout << "\n\n\n\rCodigo ---------> ";getchar(); //gets(Codigo); cin>>Codigo; fread(&Registro ,sizeof(Registro ),1,F ); // Lee el Registro, de tamano=sizeof(Registro) del archivo "F" // Ciclo mientras no se encuentre el final del archivo { if(strcmp(Registro. Cod, Codigo )== 0) { cout << "\n\n\n\rRegistro DUPLICADO ...!!!"; return; } fread(&Registro ,sizeof(Registro ),1,F ); } cout << "\n\rNombre ----------> ";getchar(); cout << "\n\rDireccion ---------> "; gets(Registro. Direccion); cout << "\n\rTelefono/celular ---> "; cout << "\n\rTipo--> "; cin >> Registro.Tipo; // Grabar el Registro completo fwrite(&Registro , sizeof(Registro ), 1, F ); fclose(F ); // Cierra el archivo cout << "\n\n\n\rCLIENTE registrado !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } void BuscarxCodCLIENTE() { //Numero de producto que desea consultar char Codigo[15]; cout << "\n\rBUSCAR REGISTROS POR CODIGO DE CLIENTES"; // Intenta abrir el archivo CLIENTES.SEC, en modo de solo lectura F = fopen("Cliente.Sec","rb"); if(F == NULL) { cout << "\n\n\n\rNo existe el archivo !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } cout << "\n\n\n\r Codigo ---------> "; getchar(); gets(Codigo ); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "F" fread(&Registro , sizeof(Registro ), 1, F ); { if(strcmp(Registro. Cod, Codigo )==0) { Encabezado1(); printf("\n%-8s%-25s%-25s%12s %-5c",Registro. Cod,Registro. Nombre,Registro. Direccion, Registro. tel,Registro. Tipo); Raya60(); return; } fread(&Registro , sizeof(Registro ), 1, F ); } cout << "\n\rNo se encuentra ese registro !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } void ActualizacionxCodCLIENTE() { // Codigo de CLIENTE que desea modificar char Codigo[15]; int op; cout << "\n\rACTUALIZAR REGISTROS POR CODIGO DE CLIENTES"; // Intenta abrir el archivo CLIENTES.dat en modo de lectura/escritura F = fopen("Cliente.Sec","rb+"); if(F == NULL) // Valida la existencia del archivo { cout << "\n\n\n\rNo existe el archivo !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } cout << "\n\n\n\rCodigo ---------> "; getchar(); gets(Codigo ); // Lee el "Registro", de tamano=sizeof(Registro) del archivo "F" fread(&Registro , sizeof(Registro ), 1, F ); { if(strcmp(Registro. Cod, Codigo )==0) { Encabezado1(); printf("\n%-8s%-25s%-25s%12s %-5c",Registro. Cod,Registro. Nombre,Registro. Direccion, Registro. tel,Registro. Tipo); Raya60(); cout << "\n\n\n\r"; do { op = Menu(); switch(op) { textcolor(LIGHTGREEN); cout << "\n\n\r Actualizacion de Clientes"; textcolor(WHITE); cout << "\n\n\n\rIngrese nuevo dato"; cout << "\n\rNombre ---------> "; getchar(); gets(Registro. Nombre); break; textcolor(LIGHTGREEN); cout << "\n\n\r Actualizacion de Clientes"; textcolor(WHITE); cout << "\n\n\n\rIngrese nuevo dato"; cout << "\n\rDireccion --------> ";getchar (); gets(Registro. Direccion); break; textcolor(LIGHTGREEN); cout << "\n\n\r Actualizacion de Clientes"; textcolor(WHITE); cout << "\n\n\n\rIngrese nuevo dato"; cout << "\n\rTipo--> "; cin >> Registro.Tipo; break; } }while(op != 0); /**Es necesario reposicionar el apuntador del archivo al principio del * registro que desea modificar, ya que al leer un registro, el * apuntador se posiciona en el registro siguiente * La funcion ftell(F) devuelve la posicion donde se encuentra el * apuntador */ // Graba el registro con los nuevos campos fwrite(&Registro , sizeof(Registro ), 1, F ); cout << "\n\n\n\rRegistro modificado !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } fread(&Registro , sizeof(Registro ), 1, F ); } cout << "\n\rNo se encuentra ese registro !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } void EliminacionLogicaxCodCLIENTE() { //numero de codigo que desea eliminar char Codigo[15], op; cout << "\n\rELIMINACION LOGICA DE REGISTROS DE CLIENTES"; F = fopen("Cliente.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 >>>"; return; } cout << "\n\n\n\rCodigo --------> "; getchar(); gets(Codigo ); fread(&Registro , sizeof(Registro ), 1, F ); { if(strcmp(Registro. Cod, Codigo )==0) { Encabezado1(); printf("\n%-8s%-25s%-25s%12s %-5c",Registro. Cod,Registro. Nombre,Registro. Direccion, Registro. tel,Registro. Tipo); Raya60(); strcpy(Registro. Nombre, "----"); strcpy(Registro. Direccion, "----"); Registro.Tipo = '0'; do { cout << "\n\n\r¿... SEGURO que desea BORRARLO ...? [S/N] ---> "; cin>>op; }while(op!='S' && op!='N'); if(op == 'S') { /** Es necesario reposicionar el apuntador del archivo al principio del * registro que desea modificar, ya que al leer un registro, el * apuntador se posiciona en el registro siguiente * La funcion ftell(F) devuelve la posicion donde se encuentra el * apuntador */ fwrite(&Registro , sizeof(Registro ), 1, F ); cout << "\n\n\n\rRegistro eliminado !!!\n"; } cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } fread(&Registro , sizeof(Registro ), 1, F ); } cout << "\n\rNo se encuentra ese registro !!!\n"; fclose(F ); // Cierra el archivo cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } void EliminacionFisicaxCodCLIENTE() { //Variable para controlar el archivo temporal FILE *Temporal; cout << "\n\rELIMINACION FISICA DE REGISTROS DE CLIENTES"; // Intenta abrir el archivo CLIENTES.SEC en modo de solo lectura F = fopen("Cliente.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 >>>"; return; } // Crea el archivo Temporal.Sec Temporal = fopen("Temporal.Sec","wb"); fread(&Registro , sizeof(Registro ), 1, F ); { if(strcmp(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 remove("Clientes.Sec"); //Elimina el archivo original rename("Temporal.Sec", "Clientes.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 >>>"; return; } void MostrarRegCLIENTE() { cout << "\n\r\t\t\tLISTADO DE REGISTROS DE CLIENTES\n\n"; F = fopen("Cliente.Sec","rb"); if(F == NULL) { cout << "\n\n\n\rNo existe el archivo !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } Encabezado1(); fread(&Registro , sizeof(Registro ), 1, F ); { printf("\n%-8s%-25s%-25s%12s %-5c",Registro. Cod,Registro. Nombre,Registro. Direccion, Registro. tel,Registro. Tipo); fread(&Registro ,sizeof(Registro ),1,F ); } fclose(F ); // Cierra el archivo Raya60(); cout << "\n\rFin del listado !!!\n"; cout << "\n\r<<< ... PRESIONE ENTER para continuar >>>"; return; } void Encabezado1() { Raya58(); cout << "\nCODIGO N O M B R E D I R E C C I O N TELEFONO TIPO"; Raya60(); } void Raya58() { cout << "\n\r=============================================================================="; } void Raya60() { cout << "\n\r------------------------------------------------------------------------------"; } int Menu() { int i; do { textcolor(LIGHTGREEN); cout << "\n\n\r Actualizacion de Clientes"; textcolor(WHITE); cout << "\n\n\n\r 1.- ACTUALIZAR Nombre"; cout << "\n\r 2.- ACTUALIZAR Direccion"; cout << "\n\r 3.- ACTUALIZAR Tipo"; textcolor(LIGHTRED); cout << "\n\r 0.- TERMINAR"; textcolor(WHITE); cout << "\n\n\n\r Seleccione su opcion ---> "; cin >> i; }while(i<0 || i>3); return(i); } void ordenarxcod(){ FILE *F; CLIENTE A,B,aux; int i,j,n; F =fopen("Cliente.Sec","rb+"); if(F==NULL){ printf("No se puede abrir el archivo.\n"); } for(i=0;i<=n-1;i++){ for(j=i+1;j<=n;j++){ fseek(F ,i *sizeof(A ),SEEK_SET ); fseek(F ,j *sizeof(B ),SEEK_SET ); aux=A; A=B; B=aux; fseek(F ,i *sizeof(A ),SEEK_SET ); fseek(F ,j *sizeof(B ),SEEK_SET ); } } } MostrarRegCLIENTE(); } void ordenarxnom(){ FILE *F; CLIENTE A,B,aux; int i,j,n; F =fopen("Cliente.Sec","rb+"); if(F==NULL){ printf("No se puede abrir el archivo.\n"); } for(i=0;i<=n-1;i++){ for(j=i+1;j<=n;j++){ fseek(F ,i *sizeof(A ),SEEK_SET ); fseek(F ,j *sizeof(B ),SEEK_SET ); if(strcmp(A. Nombre,B. Nombre)==1){ aux=A; A=B; B=aux; fseek(F ,i *sizeof(A ),SEEK_SET ); fseek(F ,j *sizeof(B ),SEEK_SET ); } } } MostrarRegCLIENTE(); } void cuadro(int i,int j,int k,int l){ register int a; for(a=j+1;a<l;a++){ gotoxy(i,a); gotoxy(k,a); } for(a=i+1;a<k;a++){ gotoxy(a,j); gotoxy(a,l); } gotoxy(i,j);printf("%c",201); gotoxy(k,j);printf("%c",187); gotoxy(i,l);printf("%c",200); gotoxy(k,l);printf("%c",188); gotoxy(1,1); }
Título: Re: OPERACIONES BASICAS CON FILES
Publicado por: Garfield07 en 13 Diciembre 2010, 19:55 pm
Bueno, primero de nada, aunque creo que es de verdad por nada... Luego, ese codigo para mi esta mucho mejor...
y aparte. El codigo C en linux es muy sencillo. Simplemente creo que de lo que sabes, quita las APIs que olvides, algunas librerias ya no existen en esta orilla, y los sockets son mucho mas faciles. Usas Ubuntu? Recomiendo 9.04. Sencillo. Lo mejor de Linux es su complicada sencillez. Olvida Dev-Cpp. Es el peor compilador (opinion personal) del mundo. Si sigues programando en windows, Code-Brocks. Luego, si no en linux hay un programa llamado "gedit". Aplicaciones>1º menu>Editor de textos gedit. Escribes y guardas como "code.c". Terminal (Aplicaciones>1º menu>Terminal. ), vas a la carpeta "cd Es*", y compilas (gcc -o code code.c). Para probarlo, terminal, "./code" [el punto es la carpeta en la que estas. Es un metodo rapido de linux]
Creo que es excesivamente explicado... Pregunta lo que quieras. De nada otra vez (nada da mas alegria que alguien agradecido xD)
|