Autor
|
Tema: Ayuda (Leído 2,669 veces)
|
Marsi
Desconectado
Mensajes: 4
|
 |
Ayuda
« en: 27 Mayo 2020, 18:55 pm » |
|
Alguien sabe como en el case 2 puede modificar el contacto ingresando el numero telefonico local #include <stdio.h> #include <conio.h> #include <string.h> #define MAX 256 struct agenda { int Num_Contacto; char AP[20]; char AM[20]; char Nombre[20]; double tel[8]; double cel[8]; char email[50]; char sitio_web[50]; char Notas[30]; char Empresa[20]; char Cargo[10]; }; struct agenda contactos[MAX]; int main() { int count; int i = 0; int resp, opc, opc2, opc3; while (opc != 4){ printf("Programa para hacer una agenda usando Archivos\n"); printf("Elija una opcion.\n"); printf("1. Crear Contacto\n"); printf("2. Actualizar Contacto\n"); printf("3. Eliminar Contacto\n"); switch(opc) { case 1: { do{ printf("Escriba '0' si no quiere escribir algo.\n"); scanf("%[^\n]", &contactos [count ]. AP); scanf("%[^\n]", &contactos [count ]. AM); printf("Nombre (usa '_' para separar nombres): "); scanf("%[^\n]", &contactos [count ]. Nombre); printf("Telefono fijo con lada: "); scanf("%llu", &contactos [count ]. tel); scanf("%llu", &contactos [count ]. cel); printf("Correo electronico: "); scanf("%[^\n]", &contactos [count ]. email); scanf("%[^\n]", &contactos [count ]. sitio_web); printf("Notas (usa '_' para separar palabras): "); scanf("%[^\n]", &contactos [count ]. Notas); printf("Empresa (usa '_' para separar palabras): "); scanf("%[^\n]", &contactos [count ]. Empresa); printf("Cargo (usa '_' para separar palabras): "); scanf("%[^\n]", &contactos [count ]. Cargo); contactos[count].Num_Contacto = count; printf( "\nEl numero de contacto guardado es: %d\n ", contactos [count ]. Num_Contacto); printf( "Nombre(s): %s\n ", contactos [count ]. Nombre); printf( "Apellido Paterno: %s\n ", contactos [count ]. AP); printf( "Apellido Materno: %s\n", contactos [count ]. AM); printf("Numero de telefono local: %llu\n ", contactos [count ]. tel); printf( "Numero de telefono celular: %llu\n ", contactos [count ]. cel); printf( "E-mail: %s\n ", contactos [count ]. email); printf( "Sitio web: %s\n ", contactos [count ]. sitio_web); printf( "Notas: %s\n ", contactos [count ]. Notas); printf( "Empresa: %s\n ", contactos [count ]. Empresa); printf( "Cargo: %s\n", contactos [count ]. Cargo); printf("\nContacto agregado correctamente.\n"); printf("Este es el contacto numero: %d.", contactos [count ]. tel); printf("\n¿Desea agregar otro contacto?\n SI=1 NO=0\n"); }while(resp!=0); break; } case 2: { do { printf("Inserte el numero del contacto a modificar: "); }while(opc2 < 1 || opc2 > 255); for(i = 1; i <= count; i++) { if(contactos[i].Num_Contacto == opc2) { printf("\nNombre: %s %s %s", contactos [opc2 ]. Nombre, contactos [opc2 ]. AP, contactos [opc2 ]. AM); printf("\nTelefono fijo: %d", contactos [opc2 ]. tel); printf("\nTelefono celular: %d", contactos [opc2 ]. cel); printf("\nE-mail: %s", contactos [opc2 ]. email); printf("\nSitio Web: %s", contactos [opc2 ]. sitio_web); printf("\nNotas: %s", contactos [opc2 ]. Notas); printf("\nEmpresa: %s", contactos [opc2 ]. Empresa); printf("\nCargo: %s", contactos [opc2 ]. Cargo); do { printf("\n\nEsta seguro de que quiere modificar este contacto? (1. Si, 2. No): "); }while(opc3 < 1 || opc3 > 2); if(opc3 == 1) { printf("Escriba '0' si no quiere escribir algo.\n"); scanf("%[^\n]", &contactos [opc2 ]. AP); scanf("%[^\n]", &contactos [opc2 ]. AM); printf("Nombre (usa '_' para separar nombres): "); scanf("%[^\n]", &contactos [opc2 ]. Nombre); scanf("%d", &contactos [opc2 ]. tel); scanf("%d", &contactos [opc2 ]. cel); printf("Correo electronico: "); scanf("%[^\n]", &contactos [opc2 ]. email); scanf("%[^\n]", &contactos [opc2 ]. sitio_web); printf("Notas (usa '_' para separar palabras): "); scanf("%[^\n]", &contactos [opc2 ]. Notas); printf("Empresa (usa '_' para separar palabras): "); scanf("%[^\n]", &contactos [opc2 ]. Empresa); printf("Cargo (usa '_' para separar palabras): "); scanf("%[^\n]", &contactos [opc2 ]. Cargo); pf = fopen("Archivo.BIN", "wt"); if(pf == NULL) { printf("\nError al abrir el archivo."); return -1; } for(i = 1; i <= count; i++) { fprintf(pf , "%d ", contactos [i ]. Num_Contacto); fprintf(pf , "%s ", contactos [i ]. Nombre); fprintf(pf , "%s ", contactos [i ]. AP); fprintf(pf , "%s ", contactos [i ]. AM); fprintf(pf , "%d ", contactos [i ]. tel); fprintf(pf , "%d ", contactos [i ]. cel); fprintf(pf , "%s ", contactos [i ]. email); fprintf(pf , "%s ", contactos [i ]. sitio_web); fprintf(pf , "%s ", contactos [i ]. Notas); fprintf(pf , "%s ", contactos [i ]. Empresa); fprintf(pf , "%s\n", contactos [i ]. Cargo); } printf("\nContacto modificado correctamente."); } break; } else { if(i == count) { printf("\nNo se encontro el contacto."); break; } } } break; } case 3: { do { printf("Inserte el numero del contacto a eliminar: "); }while(opc2 < 1 || opc2 > 255); for(i = 1; i <= count; i++) { if(contactos[i].Num_Contacto == opc2) { printf("\nNombre: %s %s %s", contactos [opc2 ]. Nombre, contactos [opc2 ]. AP, contactos [opc2 ]. AM); printf("\nTelefono fijo: %d", contactos [opc2 ]. tel); printf("\nTelefono celular: %d", contactos [opc2 ]. cel); printf("\nE-mail: %s", contactos [opc2 ]. email); printf("\nSitio Web: %s", contactos [opc2 ]. sitio_web); printf("\nNotas: %s", contactos [opc2 ]. Notas); printf("\nEmpresa: %s", contactos [opc2 ]. Empresa); printf("\nCargo: %s", contactos [opc2 ]. Cargo); do { printf("\n\nEsta seguro de que quiere eliminar este contacto? (1. Si, 2. No): "); }while(opc3 < 1 || opc3 > 2); if(opc3 == 1) { for(i = opc2; i <= count; i++) { contactos[i].Num_Contacto = contactos[i+1].Num_Contacto; contactos[i].Num_Contacto = contactos[i].Num_Contacto - 1; strcpy(contactos [i ]. Nombre, contactos [i +1]. Nombre); strcpy(contactos [i ]. AP, contactos [i +1]. AP); strcpy(contactos [i ]. AM, contactos [i +1]. AM); contactos[i].tel = contactos[i+1].tel; contactos[i].cel = contactos[i+1].cel; strcpy(contactos [i ]. email, contactos [i +1]. email); strcpy(contactos [i ]. sitio_web, contactos [i +1]. sitio_web); strcpy(contactos [i ]. Notas, contactos [i +1]. Notas); strcpy(contactos [i ]. Empresa, contactos [i +1]. Empresa); strcpy(contactos [i ]. Cargo, contactos [i +1]. Cargo); } count = count - 1; pf = fopen("Archivo.BIN", "wt"); if(pf == NULL) { printf("\nError al abrir el archivo."); return -1; } for(i = 1; i <= count; i++) { fprintf(pf , "%d ", contactos [i ]. Num_Contacto); fprintf(pf , "%s ", contactos [i ]. Nombre); fprintf(pf , "%s ", contactos [i ]. AP); fprintf(pf , "%s ", contactos [i ]. AM); fprintf(pf , "%d ", contactos [i ]. tel); fprintf(pf , "%d ", contactos [i ]. cel); fprintf(pf , "%s ", contactos [i ]. email); fprintf(pf , "%s ", contactos [i ]. sitio_web); fprintf(pf , "%s ", contactos [i ]. Notas); fprintf(pf , "%s ", contactos [i ]. Empresa); fprintf(pf , "%s\n", contactos [i ]. Cargo); } printf("\nContacto eliminado correctamente."); break; } } else { if(i == count) { printf("\nNo se encontro el contacto."); break; } } } break; } case 4: { printf("Gracias por usar esta agenda."); break; } default: { printf("Inserte otra opcion."); break; } } }while (opc != 4); return 0; }
MOD: Código adaptado al uso de etiquetas de Código GeSHi
|
|
« Última modificación: 28 Mayo 2020, 00:15 am por YreX-DwX »
|
En línea
|
|
|
|
K-YreX
|
 |
Re: Ayuda
« Respuesta #1 en: 28 Mayo 2020, 03:38 am » |
|
Si lo que quieres es buscar en tu array de Agenda, el que tenga el número telefónico igual al que introduces: Pedir telefono i := 0 encontrado := -1 MIENTRAS i < longitud(contactos) and encontrado = -1 HACER SI contactos[i].telefono = telefono ENTONCES encontrado = i FIN SI FIN MIENTRAS Con este pseudocódigo puedes localizar el índice del contacto que tiene el número de teléfono que buscas. Luego solo es modificar sus campos accediendo a él. El problema que tienes es que estás mezclando los índices de los contactos con sus números de teléfono.
PD: Unas cuantas mejoras para el programa: - Ya que usas una constante para el tamaño de los contactos, por qué no usas también constantes para los arrays de agenda??
- Algunos nombres de variables no ayudan. opc, opc2, opc12432454... no dice nada. Llámalas opcion_menu, telefono_buscado, indice_buscado... y verás como no tienes el problema que has tenido de confundir un índice con un teléfono.
- La programación utiliza el principio de una única vez, es decir, no repetir fragmentos de código innecesarios. Tienes un bloque de al menos 30 líneas y otro de unas 10 líneas por lo pronto repetidos... Deberías hacer uso de funciones, no solo para esa parte sino para otras también. Saber modularizar un programa también es programar.
- Para leer cadenas de caracteres es recomendable usar la función fgets(), no scanf().
- La biblioteca <conio.h> no pertenece al estándar y no se recomienda su uso. La única función que le das es llamar a getch() y puedes utilizar la función getchar() perteneciente a <stdio.h> en su defecto. Así te ahorras la biblioteca <conio.h>.
- El único uso recomendado de break es para finalizar cada case de un switch. En tu programa veo algún break con otro fin.
- Es más seguro utilizar strncpy() para copiar cadenas que strcpy().
Y el que más me ha dolido de todos: dicen que por cada fflush(stdin) que se utiliza, muere un gatito. No hagas eso a los pobres animalitos inocentes. Con aplicar uno o dos de los consejos de esta lista, ese código pasaría de tener 311 líneas a unas 100 o menos y sería más fácil de leer para ti y para los demás. Aunque lo suyo sería que las aplicases todas o prácticamente todas. Suerte. 
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Ayuda] Necesito ayuda para crear un buen video uso AF y Flash.
Diseño Gráfico
|
XXXXXX
|
1
|
6,050
|
11 Noviembre 2009, 00:17 am
por Sub_Cero
|
|
|
Ayuda por davor ayuda os ruego ayuda XD (SOLUCIONADO)
Hardware
|
XxRekcahlExX
|
6
|
11,610
|
24 Mayo 2010, 00:56 am
por Aprendiz-Oscuro
|
|
|
[PYTHON][AYUDA][ERROR] Necesito ayuda para instalar PyGTK 2 en windows 7
Python
|
Noxware
|
2
|
9,021
|
20 Septiembre 2014, 00:05 am
por Noxware
|
|
|
ayuda urgente en instalacion linux kali ayuda porfavor urgentee
GNU/Linux
|
demon34
|
7
|
8,607
|
29 Julio 2016, 06:02 am
por engel lex
|
|
|
[AYUDA] Ayuda para poner en modo monitor mi tarjeta de red! Kali LInux
GNU/Linux
|
Santi__
|
1
|
10,079
|
12 Noviembre 2016, 18:25 pm
por Will21
|
|