Autor
|
Tema: Agenda telefonica (Leído 3,376 veces)
|
Marsi
Desconectado
Mensajes: 4
|
Hola, ayudenme por favor, tengo que modificar un numero de contacto en el case 2 aportando el numero telefonico (contactos[count].tel) en el case 1 ya lo tengo pero no se como poder modificarlo en el case 2, como lo pido y lo edito si esta guarado en contactos[count].tel, he tartado pero no me sale llego asta ahí, suponiendo que tengo muchos numeros y el programa lo tiene que buscar luego modificar, en el case 1 tambien tengo que agregar si deseo poner otro contacto mas, soy nueva programando y no entiendo muy bien int main() { int count; int i = 0; int opc, telefono; do { 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: { printf("Escriba '0' si no quiere escribir algo.\n"); scanf("%d", &contactos [count ]. tel); scanf("%[^\n]", &contactos [count ]. AP); scanf("%[^\n]", &contactos [count ]. AM); printf("Nombre (usa '_' para separar nombres): "); scanf("%[^\n]", &contactos [count ]. Nombre); 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); pf = fopen("Archivo.BIN", "at"); if(pf == NULL) { printf("\nNo se pudo abrir el archivo."); return -1; } fprintf(pf , "%s ", contactos [count ]. Nombre); fprintf(pf , "%s ", contactos [count ]. AP); fprintf(pf , "%s ", contactos [count ]. AM); fprintf(pf , "%ld ", contactos [count ]. tel); fprintf(pf , "%s ", contactos [count ]. email); fprintf(pf , "%s ", contactos [count ]. sitio_web); fprintf(pf , "%s ", contactos [count ]. Notas); fprintf(pf , "%s ", contactos [count ]. Empresa); fprintf(pf , "%s\n", contactos [count ]. Cargo); printf("\nContacto agregado correctamente.\n"); printf("Este es el numero de contacto guardado %d.", contactos [count ]. tel); break; } case 2: { printf("Inserte el numero del contacto a modificar: ");
MOD: Utiliza etiquetas de Código GeSHi para colocar fragmentos de código
|
|
« Última modificación: 1 Junio 2020, 11:42 am por YreX-DwX »
|
En línea
|
|
|
|
K-YreX
|
Visto que todas mis recomendaciones anteriores fueron ignoradas, me limitaré a decirte el procedimiento que tienes que seguir: PEDIR telefono indice := 0 MIENTRAS indice < contactosTotales && telefono != contactos[indice].telefono HACER indice := indice + 1 FIN MIENTRAS // Si indice = contactosTotales, el numero buscado no existe SI telefono = contactos[indice].telefono ENTONCES PEDIR nuevoTelefono contactos[indice].telefono = nuevoTelefono FIN SI Ahora tienes que adaptar este psedocódigo a tu problema mirando a ver cómo puedes representar las variables que aparecen. Suerte.
|
|
|
En línea
|
cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
|
|
|
Marsi
Desconectado
Mensajes: 4
|
depsues de mucho intentos tuve que modificar y empezar de nuevo el codigo para tenerlo mas claro, pero ahora el problema es que no se guardan los contactos, solo guarda el ultimo y en la opción dos de modificar en el listado de numeros guardados solo aparece el ultimo ingresado no los demás include<stdio.h> #include<conio.h> struct contacto { int Numero_registrado, activo; long int tel; char nom[10],AP[10],AM[10],correo[20], empresa[30],puesto[15],sito_web[30],notas[30]; }contact[30]; int no_reg=0; int main() { } menu() { int opc; printf("Elija una opcion.\n"); printf("1. Crear Contacto\n"); printf("2. Actualizar Contacto\n"); printf("3. Eliminar Contacto\n"); while(opc<1||opc>4) { printf("Elija una opcion.\n"); printf("1. Crear Contacto\n"); printf("2. Actualizar Contacto\n"); printf("3. Eliminar Contacto\n"); } switch(opc) { case 1: CrearContacto(); break; case 2: ActualizarContacto(); break; case 3: EliminarContacto(); break; case 4: return 0; break; } } CrearContacto() { int crear; printf("AGREGAR CLIENTE\n\n"); contact[no_reg].activo=1; contact[no_reg].Numero_registrado= no_reg+1; printf("Ingrese el telefono (a 8 digitos): "); scanf("%ld",&contact [no_reg ]. tel); printf("\n\t\t*EL NUMERO DE TELEFONO HA SIDO REGISTRADO CORRECTAMENTE*\n"); printf("\nIngrese el apellido paterno: "); gets(contact [no_reg ]. AP); strupr(contact[no_reg].AP); printf("Ingrese el appelido materno: "); gets(contact [no_reg ]. AM); strupr(contact[no_reg].AM); printf("Ingrese el nombre: "); gets(contact [no_reg ]. nom); strupr(contact[no_reg].nom); printf("Ingrese el E-mail: "); gets(contact [no_reg ]. correo); strupr(contact[no_reg].correo); printf("Ingrese su sitio web: "); gets(contact [no_reg ]. sito_web); strupr(contact[no_reg].sito_web); printf("Ingrese su puesto: "); gets(contact [no_reg ]. puesto); strupr(contact[no_reg].puesto); printf("Ingrese el nombre de la empresa: "); gets(contact [no_reg ]. empresa); strupr(contact[no_reg].empresa); printf("Ingrese alguna nota: "); gets(contact [no_reg ]. notas); strupr(contact[no_reg].notas); printf("Los Datos Registrados son: \n"); printf("%ld",contact [no_reg ]. tel); printf("\nNumero de registo del cliente: %d\n",contact [no_reg ]. Numero_registrado); puts(contact [no_reg ]. AP); puts(contact [no_reg ]. AM); printf("Nombre del cliente:"); puts(contact [no_reg ]. nom); puts(contact [no_reg ]. correo); puts(contact [no_reg ]. sito_web); puts(contact [no_reg ]. notas); puts(contact [no_reg ]. empresa); puts(contact [no_reg ]. puesto); printf("\n\n¿Desea agregar otro contacto?: "); while(crear<1||crear>2) { printf("%ld",contact [no_reg ]. tel); printf("El El numero de registro del cliente es: %d\n",contact [no_reg ]. Numero_registrado); printf("El apellido paterno es:\n"); puts(contact [no_reg ]. AP); printf("El apellido materno es:\n"); puts(contact [no_reg ]. AM); printf("El nombre del cliente es:\n"); puts(contact [no_reg ]. nom); puts(contact [no_reg ]. correo); puts(contact [no_reg ]. sito_web); puts(contact [no_reg ]. notas); puts(contact [no_reg ]. empresa); puts(contact [no_reg ]. puesto); printf("\n\n¿Desea agregar otro contacto?: "); } if(crear==1) { printf("\nLOS DATOS HAN SIDO REGISTRADOS CORRECTAMENTE"); no_reg++; menu(); } else { CrearContacto(); } } ActualizarContacto() { int m,i; long int telefono; printf("\nACTUALIZAR CONTACTO\n"); printf("\n\n\t\t\tCONTACTOS EXISTENTES\n\t"); printf("\tTELEFONO\t\tNOMBRE\n\t\t"); for(i=0;i<50;i++) { if(contact[i].activo==1) { printf("%lld",contact [i ]. tel); printf("\t\t%s",contact [i ]. nom); } } printf("\n\nIngrese el telefono del contacto a actualizar\n"); for(i=0;i<50;i++) { m=0; if(telefono==contact[i].tel) { printf("\n\n\t\t\tCONTACTO ENCONTRADO\n\n\n\n\n\n\n"); printf("%lld",contact [i ]. tel); printf("\n\nEl Id del cliente es: %d\n",contact [no_reg ]. Numero_registrado); printf("\n\nEl apellido paterno es:\n"); printf("\n\nEl apellido materno es:\n"); printf("\n\nEl nombre del cliente es:\n"); printf("\n\nEl correo es:\n"); printf("\n\nEl sitio web es:\n"); puts(contact [i ]. sito_web); printf("\n\nLa empresa es:\n"); puts(contact [i ]. empresa); printf("\n\nEl puesto es:\n"); ActualizarC(i); break; } else { m=1; } } if(m==1) { printf("\n\n\t\t\tTELEFONO NO ENCONTRADO\n\n\n\n\n\n\n"); menu(); } } ActualizarC(int i) { int x,y; printf("\n\n\t\t\tACTUALIZAR CLIENTE\n\n\n\n\n\n\n"); printf("Ingrese el telefono (celular de 10 digitos o local + lada): "); scanf("%lld",&contact [i ]. tel); printf("\t\t\t\n\n\n\nCONTACTO REGISTRADO\n\n\n"); //apellido paterno printf("Ingrese el apellido paterno: "); strupr(contact[i].AP); //apellido materno printf("Ingrese el appelido materno: "); strupr(contact[i].AM); //nombre printf("Ingrese el nombre: "); strupr(contact[i].nom); //correo printf("Ingrese el correo: "); strupr(contact[i].correo); //sitio web printf("Ingrese su sitio web: "); gets(contact [i ]. sito_web); strupr(contact[i].sito_web); //puesto printf("Ingrese su puesto: "); strupr(contact[i].puesto); //empresa printf("Ingrese el nombre de la empresa: "); gets(contact [i ]. empresa); strupr(contact[i].empresa); //notas printf("Ingrese alguna nota: "); strupr(contact[no_reg].notas); //Imprimir datos printf("%lld",contact [i ]. tel); printf("\n\nEl Id del cliente es: %d\n",contact [i ]. Numero_registrado); printf("\n\nEl apellido paterno es:\n"); printf("\n\nEl apellido materno es:\n"); printf("\n\nEl nombre del cliente es:\n"); printf("\n\nEl correo es:\n"); printf("\n\nEl sitio web es:\n"); puts(contact [i ]. sito_web); printf("\n\nLa empresa es:\n"); puts(contact [i ]. empresa); printf("\n\nEl puesto es:\n"); //verificar datos printf("\n\n\t\tIngrese:\n\n\t1)Si los datos son correctos.\n\t2)Si los datos son incorrectos."); while(x<1||x>2) { printf("%lld",contact [i ]. tel); printf("\n\nEl Id del cliente es: %d\n",contact [i ]. Numero_registrado); printf("\n\nEl apellido paterno es:\n"); printf("\n\nEl apellido materno es:\n"); printf("\n\nEl nombre del cliente es:\n"); printf("\n\nEl correo es:\n"); printf("\n\nEl sitio web es:\n"); puts(contact [i ]. sito_web); printf("\n\nLa empresa es:\n"); puts(contact [i ]. empresa); printf("\n\nEl puesto es:\n"); //verificar datos printf("\n\n\t\tIngrese:\n\n\t1)Si los datos son correctos.\n\t2)Si los datos son incorrectos."); } if(x==1) { printf("\n\t\t\tCONTACTO ACTUALIZADO"); menu(); } else { ActualizarC(i); } } EliminarContacto() { int x,i,m,y; long long int telefono; printf("\n\n\t\t\tELIMINAR CONTACTO\n\n\n\n\n\n\n"); printf("\n\n\t\t\tCONTACTOS EXISTENTES\n\t"); printf("\tTELEFONO\t\tNOMBRE\n\t\t"); for(i=0;i<50;i++) { if(contact[i].activo==1) { printf("%lld",contact [i ]. tel); printf("\t\t%s",contact [i ]. nom); } } printf("\t\nINGRESE EL TELEFONO DEL CONTACTO A ELIMINAR\n\n"); for(i=0;i<50;i++) { m=0; if(telefono==contact[i].tel) { printf("\n\n\t\t\tCONTACTO ENCONTRADO\n\n\n\n\n\n\n"); printf("%lld",contact [i ]. tel); printf("\n\nEl Id del cliente es: %d\n",contact [i ]. Numero_registrado); printf("\n\nEl apellido paterno es:\n"); printf("\n\nEl apellido materno es:\n"); printf("\n\nEl nombre del cliente es:\n"); printf("\n\nEl correo es:\n"); printf("\n\nEl sitio web es:\n"); puts(contact [i ]. sito_web); printf("\n\nLa empresa es:\n"); puts(contact [i ]. empresa); printf("\n\nEl puesto es:\n"); printf("\nSeguro que desea eliminar este contacto?\n1)Seguro.\n2)No estoy seguro\n"); if(y=1) { BorrarC(i); break; } else { menu(); } } else { m=1; } } if(m==1) { printf("\n\n\t\t\tTELEFONO NO ENCONTRADO\n\n\n\n\n\n\n"); menu(); } } BorrarC(int i) { printf("\n\n\t\t\tELIMINAR CLIENTE\n\n\n\n\n\n\n"); contact[i].activo=0; printf("\n\n\t\t\tCLIENTE ELIMINADO\n\n\n\n\n\n\n"); menu(); }
|
|
« Última modificación: 1 Junio 2020, 23:40 pm por Marsi »
|
En línea
|
|
|
|
K-YreX
|
Sigue siendo un poco lío ese código... Las funciones tienen que tener un valor de retorno aunque este sea void, la función main() está vacía, es difícil seguir con precisión la ejecución si se va pasando de función en función, algunas funciones hacen demasiadas cosas... Te pongo una estructura alternativa para que la rellenes: #include <stdio.h> #include <string.h> #include <stdbool.h> // Declara constantes para los numeros que vayas a usar luego. Si siguen algun patron que poner de nombre para recordarlos mejor, usalo. // Si las longitudes que utilizas estan fundamentadas en algo no dire nada pero si son aleatorias te recomiendo que utilices una para todo. O las minimas necesarias, por ejemplo: LONG_NOMBRE y LONG_OTRAS_CADENAS o lo que mas te convenza #define LONG_NOMBRE 20 #define LONG_OTRAS_CADENAS 15 #define MAX_CONTACTOS 30 // Crea un tipo de dato Contacto que consta de un struct. Los campos es mejor poner uno por linea. // Si no quieres usar typedef cambialo por struct Contacto {...} pero tendras que usar "struct Contacto" cada vez que quieras hacer referencia a "Contacto" typedef struct { int numeroRegistrado; // Este campo no podras relacionarlo con el numero de contactos porque al borrar uno se produciran saltos y se repetiran valores. //int activo; // Por lo que veo lo usas para determinar si el numero esta borrado o no. Para este codigo es prescindible, ya lo veras. int telefono; // Dudo que realmente necesites un long para un telefono asi que usare int durante todo el codigo char nombre[LONG_NOMBRE]; char apellidoPaterno[LONG_NOMBRE]; // Que no te de miedo poner nombres un poco largos. Cuanto mejor se entienda, mejor char apellidoMaterno[LONG_NOMBRE]; //... } Contacto; // No declares el array global int main(){ Contacto contactos[MAX_CONTACTOS]; // Declara el array local int contactosRegistrados = 0; int telefonoBuscado; int indiceBuscado; int opcion; do { opcion = mostrarMenu(); // Muestra el menu y devuelve la opcion. En mostrarMenu() puedes controlar que la opcion este en el rango switch(opcion){ case 1: if(contactosRegistrados < MAX_CONTACTOS){ contactos[contactosRegistrados] = crearContacto(); // Crea un contacto en el array contactos en la posicion contactosRegistrados ++contactosRegistrados; } else printf("Limite de contactos alcanzado\n"); break; case 2: // Cuando actualizas es como si creases un contacto nuevo en la posicion del existente printf("Introduce el numero de telefono del contacto a modificar: "); scanf("%d", &telefonoBuscado ); indiceBuscado = buscarPorTelefono(contactos, contactosRegistrados, telefonoBuscado); // Que devuelva el indice del contacto con ese numero o -1 si no lo encuentra if(indiceBuscado != -1){ contactos[indiceBuscado] = crearContacto(); } else printf("No existe ningun contacto con ese numero\n"); break; case 3: // Para borrar de un array lo que se hace es mover todos los elementos a la derecha del eliminado una posicion hacia la izquierda para no dejar huecos printf("Introduce el numero de telefono del contacto a eliminar: "); scanf("%d", &telefonoBuscado ); indiceBuscado = buscarPorTelefono(contactos, contactosRegistrados, telefonoBuscado); // Que devuelva el indice del contacto con ese numero o -1 si no lo encuentra if(indiceBuscado != -1){ eliminarContacto(contactos, contactosRegistrados, indiceBuscado); // Que empiece en indiceBuscado y hasta el final mueva cada contactos a su izquierda --contactosRegistrados; } else printf("No existe ningun contacto con ese numero\n"); break; } mostrarContactos(contactos, contactosRegistrados); } while(opcion != 4); // La opcion 4 solo sale. No es necesario hacer un case para ella. // Para hacer una pausa olvidate de getch() y de system("pause"). La mejor opcion SIEMPRE es getchar() que pertenece a <stdio.h> asi que olvidate de <conio.h> return 0; }
Como ves, la función main() tiene que dar una idea general del funcionamiento del programa. Que al mirar el main() puedas saber lo que hace el programa aunque no sepas cómo (esto corresponde a las funciones adicionales). Crea funciones estructuradas, no que se llamen unas a otras haciendo bucles o que tengan varios return (hay casos excepcionales pero son pocos). Ahora te queda a ti implementar las funciones que he ido llamando por ahí. Créalas de forma que cumplan las restricciones que te pongo y todo funcionará correctamente. Observa también los parámetros que tienen que tener y sus valores de retorno. Y limítate a que cada función realice su labor, no quieras mezclar. Cuanto más precisa sea una función más independiente será y más la podrás reutilizar (fíjate en buscarPorTelefono() o crearContacto() como las hemos podido usar varias veces). Casi lo olvido: para solucionar el tema del numeroRegistro de cada contacto, puedes crear dentro de la función crearContacto() una variable static. Las variables static mantienen su existencia y su valor durante las diferentes llamadas a la función. Así cada vez que llames a la función puedes incrementar en 1 esa variable y en la siguiente llamada, se mantendrá ese valor para volver a incrementarle 1. Ya tienes bastante trabajo. Y te aseguro si te sirve de inspiración que vas a aprender/reforzar bastantes cosas de hacer este programa. Dos consejos más para que por favor apliques y te quede ya un programa de 10, te lo aseguro: - Leer cadenas de texto: Para esto la función recomendada es fgets(). Por ejemplo, para guardar el nombre (que te hará falta):
Contacto contacto; printf("Introduce el nombre: "); fgets(contacto. nombre, LONG_NOMBRE , stdin );
Una vez guardado el nombre es importante hacer dos cosas más: eliminar el salto de línea que se habrá almacenado al pulsar ENTER y limpiar el buffer para el siguiente dato que pidamos. Para hacer ambas cosas utiliza el siguiente código justo después del fgets(): if(contacto. nombre[strlen(contacto. nombre)-1] == '\n') // Si antes del final de cadena hay un salto de linea... contacto. nombre[strlen(contacto. nombre)-1] = '\0'; //... lo sustituimos por el final de cadena para eliminarloelse // sino, el salto de linea se ha quedado en el buffer ademas de que puede haber otros caracteres antes... while(getchar() != '\n'); // ...entonces con esto limpiamos el buffer en caso de que quede algo
Como puedes ver en las funciones scanf() de más arriba también he utilizado la misma sentencia para limpiar el buffer pero en ese caso sin la comprobación del if pues el scanf() siempre deja el ENTER en el buffer. Esta es una manera más correcta de limpiar el buffer que con fflush(stdin). Utilízalo. Cualquier duda, problema o lo que sea que tengas, no dudes en preguntar. El objetivo es que entiendas lo que se hace y por qué. 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 |
|
|
Agenda bat V1 by my
Scripting
|
J3FFR3Y .4 C3D3Ñ0
|
0
|
3,960
|
17 Diciembre 2006, 21:46 pm
por J3FFR3Y .4 C3D3Ñ0
|
|
|
Agenda Telefónica en la Web ...???
Dudas Generales
|
4971231
|
1
|
2,692
|
28 Octubre 2010, 21:13 pm
por [u]nsigned
|
|
|
Problema al hacer una Agenda Telefonica en C++
« 1 2 »
Programación C/C++
|
Y2J
|
10
|
17,909
|
19 Agosto 2011, 18:21 pm
por Y2J
|
|
|
Agenda telefónica en vbs...!!!
Programación Visual Basic
|
user_foro
|
0
|
1,828
|
16 Agosto 2015, 20:27 pm
por user_foro
|
|
|
Agenda telefonica
Programación C/C++
|
roma7776
|
1
|
2,266
|
1 Septiembre 2023, 01:50 am
por Locura_23
|
|