Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Gestione archivio telefonico [C]
Forum - C/C++ - Gestione archivio telefonico [C]

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
redi (Normal User)
Newbie


Messaggi: 6
Iscritto: 23/02/2016

Segnala al moderatore
Postato alle 18:44
Martedì, 23/02/2016
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);

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);



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.

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 19:13
Martedì, 23/02/2016
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.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:25
Martedì, 23/02/2016
Testo quotato

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

  1. printf("inserisci cognome:");
  2. gets(utente.cognome);
  3. printf("Inserisci numero:");
  4. scanf("%d",&utente.numero);
  5.  
  6. printf("Dati utente:");
  7. printf("\n");
  8. printf("Nome: %s\n",utente.nome);
  9. printf("Cognome: %s\n",utente.cognome);
  10. printf("Numero di cell: %d\n",utente.numero);
  11.  
  12. /* ricerca */
  13. printf("Inserisci il dati della persona da ricercare: \n");
  14. printf("Nome: ");
  15. gets(utente.nome);
  16. printf("Cognome:");
  17. gets(utente.cognome);



Non so se ti sei accorto, ma questo codice risulta TOTALMENTE equivalente a:
Codice sorgente - presumibilmente Plain Text

  1. /* ricerca */
  2. printf("Inserisci il dati della persona da ricercare: \n");
  3. printf("Nome: ");
  4. gets(utente.nome);
  5. printf("Cognome:");
  6. 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
PM Quote
Avatar
redi (Normal User)
Newbie


Messaggi: 6
Iscritto: 23/02/2016

Segnala al moderatore
Postato alle 20:02
Martedì, 23/02/2016
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?

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:37
Martedì, 23/02/2016
Primo punto: crei un array di X contatti e lo riempi.

Per il momento X è una costante intera non-nulla e positiva. (Numeri naturali escluso lo zero)

Quindi diciamo:
Codice sorgente - presumibilmente C++

  1. #define X 5
  2.  
  3. typedef struct rubrica {
  4. char nome [30];
  5. char cognome [30];
  6.  
  7. //il numero come intero NON va bene.
  8. //int numero;
  9. //un numero telefonico si gestisce come una stringa
  10. char numero[20];
  11.  
  12. //ti ricordo che devi tenere in memoria le chiamate ricevute ed effettuate
  13. unsigned ricevute;
  14. unsigned effettuate;
  15. } contatto;
  16.  
  17. int main()
  18. {  
  19.  
  20. unsigned contatti_riempiti = 0;
  21. contatto contatti[X];
  22.  
  23. //qui stampi un menu, e a seconda della scelta dell'utente salti a inserisci_contatto(....) trova_contatto(....) o visualizza_info_numero(.....);
  24.  
  25. }
  26.  
  27. inserisci_contatto(contatto* contatti, unsigned& contatti_riempiti ) {
  28.     //qui chiedi nome, cognome, numero, effettuate, ricevute e salvi il contatto.
  29.  
  30.     //ricordati che per accedere in lettura e/o scrittura a un singolo contatto devi riferirti ad esso con contatti[contatti_riempiti]
  31.  
  32.     //esempio:
  33.     printf("Nome del contatto: ");
  34.     gets(contatti[contatti_riempiti].nome);
  35.  
  36.     //abbiamo appena aggiunto un contatto!
  37.     contatti_riempiti++; //incrementiamo il contatore (da notare che contatti_riempiti viene passato per reference, non per valore)
  38. }
  39.  
  40. char* trova_contatto(contatto* contatti, char* nome, char* cognome) {
  41.      //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)
  42.  
  43.     //se all'interno del ciclo trovi il contatto allora ritorni il suo numero, altrimenti ritorni (char*)NULL;
  44.     //in questo modo, all'interno del main puoi controllare se il contatto è stato trovato.
  45. }



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!

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:53
Martedì, 23/02/2016
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).

PM Quote
Avatar
redi (Normal User)
Newbie


Messaggi: 6
Iscritto: 23/02/2016

Segnala al moderatore
Postato alle 19:17
Mercoledì, 24/02/2016
Codice sorgente - presumibilmente Plain Text

  1.  

#include <stdio.h>
#define MAXUTENTI 10
typedef struct
{
char prefisso[5];
int numero;
}phone;
typedef struct
{
char nome[20];
char cognome[20];
phone telefono;
}utente;
typedef enum
{false,true} Boolean;
main()
{
utente UTENTI[MAXUTENTI];
char nome[20],cognome[20],prefisso[5];
int inseriti,op,i,j,numero;
Boolean fine,trovato;
char scelta,c;
inseriti=0;
fine=false;
while
(inseriti<MAXUTENTI && !fine){
printf("Vuoi inserire un utente?");
scelta=getchar();
c=getchar();
if (scelta==10 || scelta==20){
printf("Inserisci il nome:");
gets(UTENTI[inseriti].nome);
printf("Inserisci il cognome:");
gets(UTENTI[inseriti].cognome);


printf("Inserisci il prefisso:");
scanf("%s",UTENTI[inseriti].telefono.prefisso);
inseriti++;
c=getchar();
}
else
fine=true;
}
fine=false;
do
{
printf("\n");
printf("QUALE SCELTA VUOI EFFETTUARE NELLA RUBRICA?\n");
printf("1: inserisci nominativo\n");
printf("2: ricerca\n");
printf("3: uscita\n");
scanf("%d",&op);
c=getchar();
switch
(op){

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);
}

PM Quote
Avatar
redi (Normal User)
Newbie


Messaggi: 6
Iscritto: 23/02/2016

Segnala al moderatore
Postato alle 19:18
Mercoledì, 24/02/2016
Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #define MAXUTENTI 10
  3. typedef struct
  4. {
  5. char prefisso[5];
  6. int numero;
  7. }phone;
  8. typedef struct
  9. {
  10. char nome[20];
  11. char cognome[20];
  12. phone telefono;
  13. }utente;
  14. typedef enum
  15. {false,true} Boolean;
  16. main()
  17. {
  18. utente UTENTI[MAXUTENTI];
  19. char nome[20],cognome[20],prefisso[5];
  20. int inseriti,op,i,j,numero;
  21. Boolean fine,trovato;
  22. char scelta,c;
  23. inseriti=0;
  24. fine=false;
  25. while
  26. (inseriti<MAXUTENTI && !fine){
  27. printf("Vuoi inserire un utente?");
  28. scelta=getchar();
  29. c=getchar();
  30. if (scelta==10 || scelta==20){
  31. printf("Inserisci il nome:");
  32. gets(UTENTI[inseriti].nome);
  33. printf("Inserisci il cognome:");
  34. gets(UTENTI[inseriti].cognome);
  35.  
  36.  
  37. printf("Inserisci il prefisso:");
  38. scanf("%s",UTENTI[inseriti].telefono.prefisso);
  39. inseriti++;
  40. c=getchar();
  41. }
  42. else
  43.  fine=true;
  44. }
  45. fine=false;
  46. do
  47. {
  48. printf("\n");
  49. printf("QUALE SCELTA VUOI EFFETTUARE NELLA RUBRICA?\n");
  50. printf("1: inserisci nominativo\n");
  51. printf("2: ricerca\n");
  52. printf("3: uscita\n");
  53. scanf("%d",&op);
  54. c=getchar();
  55. switch
  56. (op){
  57.  
  58. case(2):
  59. /* ricerca */
  60. printf("Inserisci il dati della persona da ricercare: \n");
  61. printf("Nome:");
  62. gets(nome);
  63. printf("Cognome:");
  64. gets(cognome);
  65. i=0;
  66. trovato=false;
  67. while
  68. (i<inseriti && !trovato){
  69. if
  70. (strcmp(UTENTI[i].nome,nome)==0 && strcmp(UTENTI[i].cognome,cognome)==0){
  71. trovato=true;
  72. printf("Il numero di telefono e‘: (%s) %d\n",UTENTI[i].telefono.numero);
  73. }
  74. i++;
  75. }
  76. if
  77. (!trovato)
  78. printf("L’utente ricercato non appartiene all’archivio!\n");
  79. break;
  80. case(1):
  81. /* inserimento */
  82. if
  83. (inseriti<MAXUTENTI){
  84. printf("Inserisci i dati della persona da inserire: \n");
  85. printf("Nome:");
  86. gets(UTENTI[inseriti].nome);
  87. printf("Cognome:");
  88. gets(UTENTI[inseriti].cognome);
  89. printf("Numero di telefono:\n");
  90. scanf("%d",&UTENTI[inseriti].telefono.numero);
  91. inseriti++;
  92. }
  93. else
  94.  printf("Non c’e‘ piu‘ spazio nell’archivio!\n");
  95. break;
  96. case
  97. (3):
  98. /* uscita */
  99. fine=true;
  100. break;
  101. default: printf("Errore!");
  102. }
  103. }
  104. while(!fine);
  105. }


cosa ne pensate?

PM Quote
Avatar
redi (Normal User)
Newbie


Messaggi: 6
Iscritto: 23/02/2016

Segnala al moderatore
Postato alle 19:21
Mercoledì, 24/02/2016


Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #define MAXUTENTI 10
  3. typedef struct
  4. {
  5. char prefisso[5];
  6. int numero;
  7. }phone;
  8. typedef struct
  9. {
  10. char nome[20];
  11. char cognome[20];
  12. phone telefono;
  13. }utente;
  14. typedef enum
  15. {false,true} Boolean;
  16. main()
  17. {
  18. utente UTENTI[MAXUTENTI];
  19. char nome[20],cognome[20],prefisso[5];
  20. int inseriti,a,i,j,numero;
  21. Boolean fine,trovato;
  22. char scelta,c;
  23. inseriti=0;
  24. fine=false;
  25. while
  26. (inseriti<MAXUTENTI && !fine){
  27. printf("Vuoi inserire un utente?");
  28. scelta=getchar();
  29. c=getchar();
  30. if (scelta==10 || scelta==20){
  31. printf("Inserisci il nome:");
  32. gets(UTENTI[inseriti].nome);
  33. printf("Inserisci il cognome:");
  34. gets(UTENTI[inseriti].cognome);
  35.  
  36.  
  37. printf("Inserisci il numero:");
  38. scanf("%s",UTENTI[inseriti].telefono.numero);
  39. inseriti++;
  40. c=getchar();
  41. }
  42. else
  43.  fine=true;
  44. }
  45. fine=false;
  46. do
  47. {
  48. printf("\n");
  49. printf("QUALE SCELTA VUOI EFFETTUARE NELLA RUBRICA?\n");
  50. printf("1: inserisci nominativo\n");
  51. printf("2: ricerca\n");
  52. printf("3: uscita\n");
  53. scanf("%d",&a);
  54. c=getchar();
  55. switch
  56. (op){
  57.  
  58. case(2):
  59. /* ricerca */
  60. printf("Inserisci il dati della persona da ricercare: \n");
  61. printf("Nome:");
  62. gets(nome);
  63. printf("Cognome:");
  64. gets(cognome);
  65. i=0;
  66. trovato=false;
  67. while
  68. (i<inseriti && !trovato){
  69. if
  70. (strcmp(UTENTI[i].nome,nome)==0 && strcmp(UTENTI[i].cognome,cognome)==0){
  71. trovato=true;
  72. printf("Il numero di telefono e‘: (%s) %d\n",UTENTI[i].telefono.numero);
  73. }
  74. i++;
  75. }
  76. if
  77. (!trovato)
  78. printf("L’utente ricercato non appartiene all’archivio!\n");
  79. break;
  80. case(1):
  81. /* inserimento */
  82. if
  83. (inseriti<MAXUTENTI){
  84. printf("Inserisci il nominativo dell'utente: \n");
  85. printf("Nome:");
  86. gets(UTENTI[inseriti].nome);
  87. printf("Cognome:");
  88. gets(UTENTI[inseriti].cognome);
  89. printf("Numero di telefono:\n");
  90. scanf("%d",&UTENTI[inseriti].telefono.numero);
  91. inseriti++;
  92. }
  93. else
  94.  printf("Non e' presente piu' spazio per inserire nuovi nominativi.\n");
  95. break;
  96. case
  97. (3):
  98. /* uscita */
  99. fine=true;
  100. break;
  101. default: printf("ESCI!");
  102. }
  103. }
  104. while(!fine);
  105. }


cosa ne pensate?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo