Autor
|
Tema: Archivos: altas,bajas y modificaciones en c (consulta) (Leído 14,144 veces)
|
mauropereyra
Desconectado
Mensajes: 3
|
Buenas gente, estoy haciendo un programa muy simple para hacer altas bajas y modificaciones en un archivo en c usando registros. Mi problema es que no me funciona la parte en que tendria que dar de baja y la de modificar, les dejo mi programa y espero me puedan ayudar. Desde ya muchas gracias! #include <stdio.h> #include <stdlib.h> #include <string.h> void darbaja(); typedef struct{ int dni; char nombre[30]; char apellido[30]; }Empleados; int main() { int opcion=0; while(opcion <5){ printf("1_dar de alta\n"); switch (opcion) { case 1:daralta();break; case 2:darbaja();break; case 3:modificar();break; case 4:imprimir();break; } } return 0; } void daralta() { char nombre[30]; FILE* miarchivo=NULL; Empleados e; miarchivo =fopen("Empleados.txt","a+"); if(miarchivo==NULL)return; printf("Ingrese DNi del empleado\n"); printf("Ingrese nombre del empleado\n"); printf("Ingrese apellido del empleado\n"); fseek(miarchivo ,0L,SEEK_END ); fwrite(&e ,sizeof(Empleados ),1,miarchivo ); } void imprimir() { FILE* miarchivo=NULL; Empleados e; miarchivo =fopen("Empleados.txt","r"); fread(&e ,sizeof(Empleados ),1,miarchivo ); if(miarchivo==NULL)return ; while(feof(miarchivo )==0) { printf("DNI:%d Nombre:%s Apellido:%s\n",e. dni,e. nombre,e. apellido); fread(&e ,sizeof(Empleados ),1,miarchivo ); } } void darbaja() { FILE* miarchivo=NULL; FILE* miarchivouxiliar=NULL; int dniaux; Empleados e; miarchivo =fopen("Empleados.txt","a+"); miarchivo =fopen("Empleadosaux.txt","a+"); printf("Ingrese el dni del empleado\n"); fread(&e ,sizeof(Empleados ),1,miarchivo ); printf("dniaux:%i|dni:%i\n",dniaux ,e. dni); { if(e.dni!=dniaux) { fseek(miarchivouxiliar ,0l,SEEK_END ); fwrite(&e ,sizeof(Empleados ),1,miarchivouxiliar ); } fread(&e ,sizeof(Empleados ),1,miarchivo ); printf("dniaux:%d|dni:%d\n",dniaux ,e. dni); } rename("Empleadosaux.txt","Empleados.txt"); } void modificar() { int dniaux; FILE* miarchivo=NULL; FILE* miarchivouxiliar=NULL; Empleados e; miarchivo =fopen("Empleados.txt","a+"); miarchivo =fopen("Empleadosaux.txt","a+"); printf("Ingrese el dni del guachin\n"); fread(&e ,sizeof(Empleados ),1,miarchivo ); printf("dniaux:%d|dni:%d\n",dniaux ,e. dni); while(feof(miarchivo )==0) { if(e.dni!=dniaux) { fseek(miarchivouxiliar ,0l,SEEK_END ); fwrite(&e ,sizeof(Empleados ),1,miarchivouxiliar ); } else { printf("Ingrese DNi del empleado\n"); printf("Ingrese nombre del empleado\n"); printf("Ingrese apellido del empleado\n"); fseek(miarchivouxiliar ,0l,SEEK_END ); fwrite(&e ,sizeof(Empleados ),1,miarchivo ); } fread(&e ,sizeof(Empleados ),1,miarchivo ); } rename("Empleadosaux.txt","Empleados.txt"); }
MOD: Etiquetas de Código GeSHi insertadas
|
|
« Última modificación: 29 Octubre 2020, 01:26 am por K-YreX »
|
En línea
|
|
|
|
Nacko
Desconectado
Mensajes: 1
|
Este post es viejisimo pero si alguien ve esto me gustaria que me consten una pregunta ¿Como hago el mismo ejercicio pero ahora usando como clave una variable del tipo int? Me explico un poco mas si ahora en vez de tener que ingresar un Nombre me pidieran ingresar un codigo y que ese codigo sea la clave para dar de baja o modificar un dato.------------------------------------------------------------------------------------------------------------------ Ya esta, lo resolví. ------------------------------------------------------------------------------------------------------------------ Dejo mi resolución por si a alguien le sirve: ------------------------------------------------------------------------------------------------------------------ #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> typedef struct { int codigo; char descripcion[60]; char fecha[9]; int pagado; } registro; void alta(); int baja(); void modificaciones(); void consultas(); int eliminarRegistro(int); void IngresarRegistro(int); int buscar(char[80]); void ingresarClave(char[80]); void grabar(); void leer(); int cantidad = 0; registro registros[100]; FILE* archivo; int main() { int op; do { switch (op) { case 1: printf("[1] Ingrese los datos del pago de la factura de un Usuario para darlos de alta:\n"); alta(); break; case 2: printf("[2] Ingrese el codigo de la facturacion que quiere dar de baja de la lista junto con todos sus datos:\n"); baja(); break; case 3: printf("[3] Ingrese el codigo de la facturacio al cual le quiere modificar todos sus datos, inclusive el mismo codigo: \n"); modificaciones(); break; case 4: printf("[4] Aca se refleja la lista de codigos facturados con sus respectivos datos: \n"); consultas(); break; case 5: printf("[5] Usted selecciono la opcion de guardar sus datos en una unidad pendrive: \n"); grabar(); break; case 6:printf("[6] Usted selecciono la opcion de leer los datos guardados: \n"); leer(); break; case 0: printf("Gracias por usar el programa! Vuelva pronto.\n"); break; default: printf("Opcion invalida! La opcion [%d] no existe\n", op ); break; } } while (op != 0); } void alta() { if (cantidad <= 100) { IngresarRegistro(cantidad); cantidad++; } else { printf("Se ocuparon todos los espacios disponible.\n"); printf("IMPOSIBLE agregar otro registro."); } } void IngresarRegistro(int posicion) { printf("\nIngrese un codigo de facturacion: "); scanf("%d", ®istros [posicion ]. codigo); printf("\nIngrese la descripcion de la facturacion: "); scanf("%s", registros [posicion ]. descripcion); //NOTA PERSONAL: Solo se usa el "&" cuando es un int printf("\nIngrese la fecha de facturacion: "); scanf("%s", registros [posicion ]. fecha); printf("\nIngrese 1 si se pago la factura y 2 si no: "); scanf("%d", ®istros [posicion ]. pagado); while (registros[posicion].pagado > 2 || registros[posicion].pagado < 1) { printf("\nReingrese el pàgo. 1 si se pago la factura y 2 si no: "); scanf("%d", ®istros [posicion ]. pagado); } } int baja() { int codigo; printf("\nIngrese el codigo: "); int indice = buscar(codigo); if (indice != -1) { eliminarRegistro(indice); } else { printf("%d No se encuentra dado de Alta \n", codigo ); } return indice; } int buscar(int codigo) { int i = cantidad-1; for (; i > -1 && codigo != registros[i].codigo; i--); return i; } int eliminarRegistro(int eliminar) { for (int c = eliminar; c < cantidad; c++) registros[c] = registros[c + 1]; cantidad--; } void modificaciones() { int codigo; printf("\nIngrese el codigo: "); int indice = buscar(codigo); if (indice != -1) { IngresarRegistro(indice); } else { printf("%d --> No se encuentra dado de Alta \n", codigo ); } return indice; } void consultas() { printf(" Codigo || Descripcion || Fecha || .Pagado?)\n"); for (int i = 0; i < cantidad; i++) { printf("%27d %15s %15s %6d\n", registros [i ]. codigo, registros [i ]. descripcion, registros [i ]. fecha, registros [i ]. pagado); } } void grabar() { archivo = fopen("E:\Registros de Facturacion.txt", "wb"); fwrite(registros , sizeof(registro ), cantidad , archivo ); printf("\n Grabacion Finalizada\n"); } void leer() { printf("\nDentro del Archivo se puede ver:\n"); archivo = fopen("E:\Registros de Facturacion.txt", "rb"); cantidad = 0; while (fread(®istros [cantidad ], sizeof(registros [cantidad ]), 1, archivo ) == 1) { cantidad++; } consultas(); }
MOD: Etiquetas de Código GeSHi insertadas
|
|
« Última modificación: 29 Octubre 2020, 01:27 am por K-YreX »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
crear ejecutable que detecte modificaciones de archivos?
Programación General
|
mrzetta
|
5
|
5,704
|
3 Febrero 2013, 05:56 am
por mrzetta
|
|
|
agregar notas altas y bajas en la opcion promedio y gotoxy al imprimir en fila
Programación C/C++
|
baselnick
|
2
|
2,397
|
5 Febrero 2013, 22:28 pm
por baselnick
|
|
|
Fast File Transfer, transfiere archivos a altas velocidades vía WiFi
Noticias
|
wolfbcn
|
0
|
1,910
|
13 Febrero 2013, 22:26 pm
por wolfbcn
|
|
|
Consulta Archivos en C
Programación C/C++
|
fflush
|
2
|
2,083
|
21 Septiembre 2016, 23:32 pm
por fflush
|
|
|
me podrian ayudar a hacer altas y bajas con esta estructura en c
Programación C/C++
|
alancito2345
|
0
|
4,088
|
29 Agosto 2022, 19:40 pm
por alancito2345
|
|