PDA

Visualizza la versione completa : programma in c rubrica telefonica


stefanomario
02-04-2012, 11:31
vorrei una mano per capire perchè non parte questo programma scritto in c.I
#include<stdio.h>
#include<string.h>
#define N 100
#define MAX 90
main()
{
int riemp=0;
char cod;
char inputOption[255];
personaT persone[MAX],temp;
riemp=leggiPersone(persone, MAX);
printf("RUBRICA TELEFONICA\n");
printf("Inserisci il codice dell'operazione da eseguire\n");
printf("1 - Inserimento di un nuovo numero;\n");
printf("2 - Cancellazione di un numero presente in rubrica;\n");
printf("3 - Ricerca di un numero presente in rubrica;\n");
printf("4 - Visualizza intera rubrica;\n");
printf("5 - Riproponi elenco codici;\n");
printf("6 - Modifica voce presente in rubrica;\n");
printf("7 - Cancellazione intera rubrica;\n");
printf("8 - Ricerca per iniziale del cognome;\n");
printf("9 - Recupero Backup;\n");
printf("0 - Esci dal programma.\n");
printf("\n");
do
{
printf("Inserisci codice operazione:\n");
scanf("%s",&inputOption);
cod=inputOption[0];
switch(cod)
{
case '1': {
printf("\nINSERIMENTO DI UN NUOVO NUMERO IN RUBRICA:\n\n");
Nuovo_Numero(persone,&riemp,MAX);
Memorizza(persone,riemp);
Backup_Rub(persone,riemp);
}; break;
case '2': {
printf("\nCANCELLAZIONE DI UN NUMERO PRESENTE IN RUBRICA\n\n");
Backup_Rub(persone,riemp);
Canc_Numero(persone,&riemp);
Memorizza(persone,riemp);
}; break;
case '3': {
printf("\nRICERCA DI UN NUMERO PRESENTE IN RUBRICA\n\n");
Ricerca_Numero(persone,riemp);
}; break;
case '4': {
printf("\nVISUALIZZAZIONE RUBRICA\n\n");
Ordinamento(persone,riemp,temp);
Visualizza(persone,riemp);
}; break;
case '5': {
printf("\nMENU\n\n");
printf("1 - Inserimento di un nuovo numero;\n");
printf("2 - Cancellazione di un numero presente in rubrica;\n");
printf("3 - Ricerca di un numero presente in rubrica;\n");
printf("4 - Visualizza intera rubrica;\n");
printf("5 - Riproponi elenco codici;\n");
printf("6 - Modifica voce presente in rubrica\n");
printf("7 - Cancellazione intera rubrica\n");
printf("8 - Ricerca per iniziale del cognome\n");
printf("9 - Recupero Backup\n");
printf("0 - Esci dal programma.\n");
printf("\n");
}; break;
case '6': {
printf("\nMODIFICA DI UNA VOCE PRESENTE IN RUBRICA\n\n");
Modifica_Voce(persone,riemp);
Memorizza(persone,riemp);
Backup_Rub(persone,riemp);
}; break;
case '7': {
printf("\nCANCELLAZIONE INTERA RUBRICA\n\n");
Backup_Rub(persone,riemp);
Canc_Rub(persone,&riemp);
printf("NESSUN NUMERO REGISTRATO.\n\n");
printf(“Riavviare il programma.\n\n”);
cod=‟0‟;
}; break;
case '8': {
printf("\nRICERCA PER INIZIALE COGNOME\n\n");23
Ric_Iniziale(persone,riemp);
}; break;
case '9': {
printf("\nRECUPERO BACKUP RUBRICA\n\n");
Rec_Backup();
riemp=leggiPersone(persone,MAX);
Visualizza(persone,riemp);
}; break;
case '0': {
printf("\n");
Backup_Rub(persone,riemp);
}; break;
default: printf("Codice non valido!\n"); break;
}
}
while (cod!='0');
}
- “funzioni.h”
#define N 100
typedef struct
{
char cognome[N];
char nome[N];
char tel[N];
char cel[N];
} personaT;
int leggiPersone(personaT persone[], int cap);
void Nuovo_Numero(personaT persone[], int *riemp, int cap);
void Canc_Numero(personaT persone[], int *riemp);
void Ricerca_Numero(personaT persone[], int riemp);
void Visualizza(personaT persone[], int riemp);
void Memorizza(personaT persone[], int riemp);
void Ordinamento(personaT persone[], int riemp,personaT temp);
void Canc_Rub();
void Modifica_Voce(personaT persone[], int riemp);
void Ric_Iniziale(personaT persone[], int riemp);
void Backup_Rub(personaT persone[], int riemp);
void Rec_Backup ();
- “funzioni.c”
#include<stdio.h>
#include<string.h>
#include"funzioni.h"
#define N 100
#define MAX 90
void Backup_Rub(personaT persone[], int riemp)
{
FILE *f;
int i;
f=fopen("bkp_rub.txt","w");
for(i=0;i<riemp;i++)
{
fprintf(f,"%s %s %s %s\n", persone[i].cognome, persone[i].nome, persone[i].tel, persone[i].cel);
}
fclose(f);
}
int leggiPersone(personaT persone[], int cap)
{
FILE *f;
int fine,i=0;
f=fopen("rub_dati.txt","r");
if (f==NULL)
{
f=fopen("rub_dati.txt","a");
fclose(f);
}
f=fopen("rub_dati.txt","r");
while(i<cap)
{
fine=fscanf(f,"%s %s %s %s",persone[i].cognome, persone[i].nome, persone[i].tel, persone[i].cel);
if (fine==EOF) break;
i++;
}
fclose(f);
return i;
}
void Visualizza(personaT persone[], int riemp)
{
int i;
for(i=0;i<riemp;i++)
{
printf("Voce Numero %d\n",i+1);
printf("%s ", persone[i].cognome);
printf("%s ", persone[i].nome);
printf("%s ", persone[i].tel);
printf("%s\n\n", persone[i].cel);
}
}
void Memorizza(personaT persone[], int riemp)25
{
FILE *f;
int i;
f=fopen("rub_dati.txt","w");
if (f==NULL)
{
return;
}
printf("Memorizzazione\n");
for(i=0;i<riemp;i++)
{
fprintf(f,"%s %s %s %s\n", persone[i].cognome, persone[i].nome, persone[i].tel, persone[i].cel);
}
printf("\n\n");
}
void Nuovo_Numero(personaT persone[], int *riemp, int cap)
{
int i,j;
int res1, res2;
if(*riemp==cap)
printf("Per inserire un nuovo numero, cancellare una voce\n\n");
else
{
for(i=*riemp;i<*riemp+1;i++)
{
printf("Voce numero %d\n", i+1);
printf("COGNOME: ");
scanf("%s",&persone[i].cognome);
printf("NOME: ");
scanf("%s",&persone[i].nome);
printf("NUM.TELEFONICO: ");
scanf("%s",&persone[i].tel);
printf("NUM.CELLULARE: ");
scanf("%s",&persone[i].cel);
printf("\n");
for(j=0;j<*riemp;j++)
{
res1=strcmp(persone[j].cognome, persone[i].cognome);
if(res1==0)
{
res2=strcmp(persone[j].nome, persone[i].nome);
if(res2==0)
{
printf("E' già presente in rubrica una voce con
stesso nome e cognome\n\n");
printf("%s %s: tel %s cel %s\n",
persone[j].cognome, persone[j].nome, persone[j].tel, persone[j].cel);
}
}
}
}
*riemp=*riemp+1;
if(*riemp==cap)
printf("Per inserire nuovi numeri bisogna cancellare qualche voce.\n");
}
printf("\n");
}
void Canc_Numero(personaT persone[], int *riemp) {
char cod, inputOption[255];
char cogn_str[N],nome_str[N];
int i=0,conta=0,j=0;
int res1,res2;
int voce;
printf("Per cancellare un numero selezionando il numero della voce, scrivere: 1\n");
printf("Per cancellare un numero selezionando cognome e nome, scrivere: 2\n");
scanf("%s",&inputOption);
cod=inputOption[0];
switch(cod)
{
case '2': {
printf("Inserisci il cognome della persona che vuoi cancellare dalla rubrica: ");
scanf("%s",&cogn_str);
printf("Inserisci il nome della persona che vuoi cancellare dalla rubrica: ");
scanf("%s",&nome_str);
printf("\n");
for(i=0;i<(*riemp);i++)
{
res1=strcmp(cogn_str, persone[i].cognome);
if(res1==0)
{
res2=strcmp(nome_str, persone[i].nome);
if(res2==0)
conta++;
}
}
if(conta>1)
{
printf("Esistono %d persone registrate con lo stesso nome e cognome\n",conta);
printf("Individuare il numero della voce da cancellare e rieseguire l'operazione\n");
}
else
{
for(i=0;i<(*riemp);i++)
{
res1=strcmp(cogn_str, persone[i].cognome);
if(res1==0)
{
res2=strcmp(nome_str, persone[i].nome);
if(res2==0)
{
for(j=i;j<(*riemp-1);j++)
persone[j]=persone[j+1];
(*riemp)--;
}
}
}
}
if(conta==0)
printf("La persona indicata non e' registrata in rubrica.\n\n");
printf("\n\n");
}; break;
case '1': {
printf("Inserire il numero della voce da cancellare: ");
scanf("%d",&voce);
if(voce>(*riemp))
{
do {
printf("La voce indicata non esiste!\n");
printf("Inserire il numero della voce da cancellare: ");
scanf("%d",&voce);
}
while(voce>(*riemp));
}
for(j=voce;j<(*riemp-1);j++)
persone[j]=persone[j+1];
(*riemp)--;
}; break;
default : printf("Codice non valido!\n\n"); break;
}
}
void Ricerca_Numero(personaT persone[], int riemp) {
char cogn_str[N],nome_str[N],tel_str[N],c,cel_str[N];
int i=0,conta=0,trovato,conta1=0;
int res1,res2,res3;
printf("Ricerca tramite nome e cognome: A\nRicerca tramite numero telefonico: B\nRicerca tramite numero
cellulare: C\n\n");
scanf("\n%c",&c);
switch(c)
{
case 'A':
{
printf("Inserisci il cognome della persona di cui vuoi cercare il numero: ");
scanf("%s",&cogn_str);
printf("Inserisci il nome della persona di cui vuoi cercare il numero: ");
scanf("%s",&nome_str);
printf("\n");
for(i=0;i<riemp;i++)
{
res1=strcmp(cogn_str, persone[i].cognome);
if(res1==0)
{
res2=strcmp(nome_str, persone[i].nome);
if(res2==0)
{
conta++;
printf("%s %s: tel %s cel %s\n",
persone[i].cognome, persone[i].nome, persone[i].tel, persone[i].cel);
}
}
}
if(conta==0)
printf("La persona indicata non e' registrata in rubrica.\n\n");
printf("\n\n");
};break;
case 'B':
{
printf("Inserisci il numero di telefono da cercare: ");
scanf("%s",&tel_str);
printf("\n");
trovato=0;
for(i=0;i<riemp;i++)
{
res3=strcmp(tel_str, persone[i].tel);
if(res3==0)
{
trovato++;
printf("%s %s: tel %s cel %s\n", persone[i].cognome,
persone[i].nome, persone[i].tel, persone[i].cel);
}
}
printf("\n");
if(trovato==0)
printf("Il numero indicato non e' presente in rubrica.\n");
else
{
if(trovato>1)
printf("In rubrica sono registrati %d numeri uguali.\n\n",trovato);
}
printf("\n");
};break;
case 'C':
{
printf("Inserisci il numero di cellulare da cercare: ");
scanf("%s",&cel_str);
printf("\n");
trovato=0;
for(i=0;i<riemp;i++)
{
res3=strcmp(cel_str, persone[i].cel);
if(res3==0)
{
trovato++;
printf("%s %s: tel %s cel %s\n", persone[i].cognome,
persone[i].nome, persone[i].tel, persone[i].cel);
}
}
printf("\n");
if(trovato==0)
printf("Il numero indicato non e' presente in rubrica.\n");
else
{
if(trovato>1)
printf("In rubrica sono registrati %d numeri uguali.\n\n",trovato);
}
printf("\n");
};break;
default : printf("Scelta non valida!\n");break;
}
}
void Ordinamento(personaT persone[], int riemp,personaT temp)
{
int i,j;
int res;
for(i=0;i<riemp-1;i++)
{
for(j=i+1;j<riemp;j++)
{
res=strcmp(persone[i].cognome, persone[j].cognome);
if(res>0)
{
temp=persone[i];
persone[i]=persone[j];
persone[j]=temp;
}
}
}
}
void Canc_Rub() {
char conferma[255];
printf("Hai scelto di eliminare tutte le voci della rubrica.Continuare? (Y per confermare, N per annullare): ");
scanf("\n%c",&conferma[0]);
switch(conferma[0])
{
case 'Y': {
remove("rub_dati.txt");
}; break;
case 'N': break;
default: printf("Scelta non valida.Scrivere Y per confermare o N per annullare.\n");break;
}
}
void Modifica_Voce(personaT persone[], int riemp) {
char cogn_str[N],nome_str[N];
char inputOption[255], cod;
int i=0,conta=0;
int res1,res2;
int voce;
printf("Per modificare una voce inserendo la sua posizione in rubrica, inserire 1.\n");
printf("Per modificare una voce inserenfo nome e cognome, inserire 2: \n");
scanf("%s",&inputOption);
cod=inputOption[0];
switch(cod)
{
case '1': {
printf("Inserire il numero della voce da modificare: ");
scanf("%d",&voce);
if(voce>riemp)
{
do {
printf("La voce indicata non esiste!\n");
printf("Inserire il numero della voce da modificare: ");
scanf("%d",&voce);
}
while(voce>riemp);
}
else
{
printf("Inserisci il\n\n");
printf("COGNOME: ");
scanf("%s",&persone[voce].cognome);
printf("NOME: ");
scanf("%s", &persone[voce].nome);
printf("NUM:TELEFONICO: ");
scanf("%s", &persone[voce].tel);
printf("NUM.CELLULARE: ");
scanf("%s",&persone[voce].cel);
printf("La voce aggiornata e' la seguente:\n\n");
printf("%s %s: tel %s cel %s", persone[voce].cognome,
persone[voce].nome, persone[voce].tel, persone[voce].cel);
}
}; break;
case '2': {
printf("Inserisci il cognome e il nome di cui modificare la voce:\n\n");
printf("COGNOME: ");
scanf("%s", &cogn_str);
printf("NOME: ");
scanf("%s", &nome_str);
printf("\n");
for(i=0;i<riemp;i++){
res1=strcmp(cogn_str, persone[i].cognome);
if(res1==0)
{
res2=strcmp(nome_str, persone[i].nome);
if(res2==0)
{
conta++;
printf("%s %s: tel %s cel %s\n", persone[i].cognome,
persone[i].nome, persone[i].tel, persone[i].cel);
printf("Inserisci il\n\n");
printf("COGNOME: ");
scanf("%s",&persone[i].cognome);
printf("NOME: ");
scanf("%s", &persone[i].nome);
printf("NUM:TELEFONICO: ");
scanf("%s", &persone[i].tel);
printf("NUM.CELLULARE: ");
scanf("%s",&persone[i].cel);
printf("La voce aggiornata e' la seguente:\n\n");
printf("%s %s: tel %s cel %s", persone[i].cognome,
persone[i].nome, persone[i].tel, persone[i].cel);
}
}
}
if(conta==0)
printf("La persona non e' registrata in rubrica.\n\n");
printf("\n\n");
}; break;
default: prinf("Codice non valido!\n"); break;
}
}
void Ric_Iniziale(personaT persone[], int riemp) {
int i;
int conta=0;
char car[255];
printf("Inserisci l'iniziale del cognome: ");
scanf("\n%c", &car[0]);
printf("\n");
for(i=0;i<riemp;i++)
{
if(persone[i].cognome[0]==car[0])
{
conta++;
printf("%s %s: tel:%s cel:%s\n\n", persone[i].cognome, persone[i].nome,
persone[i].tel, persone[i].cel);
}
if(conta==0)
printf("Non c'è nessun cognome che inizi per %c\n", car[0]);
}
}
void Rec_Backup ()
{
rename("bkp_rub.txt","rub_dati.txt");
}

alka
02-04-2012, 11:33
Leggi il Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887) di quest'area del forum.

Innanzitutto, occorre indicare gli errori o i comportamenti anomali riscontrati; inoltre, il codice va formattato per essere comprensibile.

Apri una discussione seguendo le indicazioni fornite, limitando il codice alla parte significativa, se possibile.

Loading