Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
2. Gestione archivio telefonico
Si vuole simulare l’archivio telefonico di un cellulare. Ogni nominativo è
identificato dal Cognome, Nome, numero telefonico. Provvedere
all’implementazione dell’algoritmo per la simulazione dell’archivio telefonico
(massimo 30 nominativi).
Permettere, inoltre, all’utente di
• Inserire un nominativo
• Dato il Cognome e il Nome di un utente visualizzare il numero
telefonico corrispondente
• Dato un numero telefonico vedere il numero totale di chiamate da e
verso quel numero
L’archivio può anche essere inizializzato con informazioni casuali. Effettuare
almeno due test per ognuna delle opzioni dell’utente.
Io ho iniziato il programma in questo modo ma non so continuare..
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
struct rubrica {
char nome [30];
char cognome [30];
int numero;
};
int main()
{
int i,inseriti,trovato;
typedef struct rubrica ok;
ok utente;
printf("inserisci cognome:");
gets(utente.cognome);
printf("Inserisci numero:");
scanf("%d",&utente.numero);
/* ricerca */
printf("Inserisci il dati della persona da ricercare: \n");
printf("Nome: ");
gets(utente.nome);
printf("Cognome:");
gets(utente.cognome);
quello che ho fatto è stato costruire una struttura di massimo 30 nominativi,e colui che inizializzava il programma era ingrando di inserire il nominativo (nome,cognome,numero di cellulare)..fatto ciò l'utente deve essere anche in grado di scrivere il nome e cognome e gli deve venir fuori il corrispettivo numero di telefono..e poi ci sarebbe anche il problema di quante chiamate ha fatto un telefono.
Devi usare un array di 30 elementi, il tipo dell'array è quello della struttura rubrica che hai scritto (non ha un nome proprio adatto).
Mostra all'utente un menu con la scelta dell'operazione.
Per fare quelle cose hai bisogno dei cicli for, studia bene gli esempi e basati su quelli.
A scanso di equivoci, nessuno ti darà una riga di codice qui, però se riesci ad essere preciso nelle difficoltà che hai ti aiutiamo.
Postato originariamente da redi: quello che ho fatto è stato costruire una struttura di massimo 30 nominativi
No, falso: ciò che hai fatto è creare un singolo nominativo che può avere al massimo 60 caratteri (30 caratteri per il nome e 30 per il cognome).
Inoltre chiamare un tipo ok è una scelta detestabile.... Ti immagini cosa succederebbe se tutti cominciassimo a chiamare i tipi con "no", "si", "ok", "forse", "dubbio" ecc....? La leggibilità dei programmi calerebbe di molto (e suppongo anche il tuo voto......)!
Usa nome più consoni a ciò che quel tipo rappresenta, per esempio, in questo caso "persona", "contatto", "pagina_rubrica" ecc....
P.S. Riguardo al codice.....
Codice sorgente - presumibilmente Plain Text
printf("inserisci cognome:");
gets(utente.cognome);
printf("Inserisci numero:");
scanf("%d",&utente.numero);
printf("Dati utente:");
printf("\n");
printf("Nome: %s\n",utente.nome);
printf("Cognome: %s\n",utente.cognome);
printf("Numero di cell: %d\n",utente.numero);
/* ricerca */
printf("Inserisci il dati della persona da ricercare: \n");
printf("Nome: ");
gets(utente.nome);
printf("Cognome:");
gets(utente.cognome);
Non so se ti sei accorto, ma questo codice risulta TOTALMENTE equivalente a:
Codice sorgente - presumibilmente Plain Text
/* ricerca */
printf("Inserisci il dati della persona da ricercare: \n");
printf("Nome: ");
gets(utente.nome);
printf("Cognome:");
gets(utente.cognome);
Perchè ogni volta continui a sovrascrivere i valori della struct utente senza fare nulla.
Ultima modifica effettuata da TheDarkJuster il 23/02/2016 alle 19:29
Ma come faccio a inserire un nome e cognome e a dimostrare che effettivamente questo nome e cognome corrisponde proprio all'utente inserito e poi dimostrato ciò far uscire il numero di cellullare a esso corrispondente?
//qui cicli da 0 fino a X, e continui a cercare un contatto che abbia nome e cognome dati (usando la funzione standard del C strcmp)
//se all'interno del ciclo trovi il contatto allora ritorni il suo numero, altrimenti ritorni (char*)NULL;
//in questo modo, all'interno del main puoi controllare se il contatto è stato trovato.
}
Visto che ti ho già aiutato nel pensarti gli algoritmi da utilizzare l'ultima consegna la lascio a te, visto che è praticamente uguale all'algoritmo di trova_contatto.
Ricordati di controllare prima di chiamare inserisci_contatto, perché nel tuo programma c'è memoria per massimo X contatti!
Se ti scaccia ogni volta inserire a mano i contatti puoi sempre salvarli in un file molto, molto semplicemente con due chiamate a fprintf e ricostruire la rubrica con due chiamate a fscanf (se il file esiste).
La prima cosa da salvare è il numero di contatti, la seconda i contatti stessi.
Siccome questo è fuori dalla consegna consideralo un plus per renderti più agevole il test del programma.
Ricordati inoltre di ciclare all'infinito il menu nel main, e di inserire la possibilità di chiudere il programma.
Vedi tu in che modo (sappi che esiste la funzione exit(), ma che è poco elegante).
case(2):
/* ricerca */
printf("Inserisci il dati della persona da ricercare: \n");
printf("Nome:");
gets(nome);
printf("Cognome:");
gets(cognome);
i=0;
trovato=false;
while
(i<inseriti && !trovato){
if
(strcmp(UTENTI.nome,nome)==0 && strcmp(UTENTI.cognome,cognome)==0){
trovato=true;
printf("Il numero di telefono e‘: (%s) %d\n",UTENTI.telefono.numero);
}
i++;
}
if
(!trovato)
printf("L’utente ricercato non appartiene all’archivio!\n");
break;
case(1):
/* inserimento */
if
(inseriti<MAXUTENTI){
printf("Inserisci i dati della persona da inserire: \n");
printf("Nome:");
gets(UTENTI[inseriti].nome);
printf("Cognome:");
gets(UTENTI[inseriti].cognome);
printf("Numero di telefono:\n");
scanf("%d",&UTENTI[inseriti].telefono.numero);
inseriti++;
}
else
printf("Non c’e‘ piu‘ spazio nell’archivio!\n");
break;
case
(3):
/* uscita */
fine=true;
break;
default: printf("Errore!");
}
}
while(!fine);
}