Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
01/05/07 14:57
Dj andrew
ciao ragazzi,avrei bisogno di un aiuto...
devo rifare la rubrica con i puntatori,solo che sono nel panico + totale nn ci capisco una mazza...vi posto il codice,cosi ci date un okkiata....grazie mille spero in un vostro aiuto..



#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <windows.h>

struct rubrica
{
char cognome[15],nome[15],numero[15];
} rubrica[50];

//^^struttura contenente la rubrica

void menu (char &scelta);
void aggiunta (int elementi);
void visualizza (int elementi);
void ordinamento (int elementi);
void scambio (int i);
int ricerca (int elementi);
void ricerca (int &i, int elementi);
void modifica (int i);
void cancella (int num, int elementi);

//^^prototipi delle funzioni

int main () //funzione main
{
int elementi=0,i;
char scelta;
do
{
menu(scelta); //carica il menu iniziale
system("cls";);//pulisce lo schermo
switch (scelta)
{
case 49:
if (elementi<50)
{
aggiunta(elementi);
ordinamento(elementi); //scelta di aggiungere
elementi++; //un contatto
}
else
{
cout<<"Rubrica piena."<<endl;
}
break;
case 50:
visualizza(elementi);
break; //visualizzare la rubrica
case 51:
if (elementi==0)
{
cout<<"la rubrica e' vuota"<<endl;
}
else
{
ricerca(i,elementi); //ricercare un contatto
}
break;
case 52:
if (elementi==0)
{
cout<<"la rubrica e' vuota"<<endl;
}
else
{
ricerca(i,elementi); //cercare...
modifica(i); //...e modificare un contatto
ordinamento(elementi);
}
break;
case 53:
if (elementi==0)
{
cout<<"la rubrica e' vuota"<<endl;
}
else
{
ricerca(i,elementi); //cercare...
cancella(i, elementi); //...e cancellare un contatto
elementi--;
}
break;
case 54:
scelta=10; //uscire dal programma
break;

}
system("pause";); //aspetta che l'utente prema un tasto...
system("cls";); //...e poi pulisce lo schermo
} while (scelta!=10); //fine del programma
}

void menu (char &scelta)
//questa funzione mostra all'utente le operazioni possibili
{
cout<<"___---RUBRICA---___\n\n";
do
{
cout<<"Cosa desideri fare?\n";
cout<<"1 Aggiungere un contatto\n";
cout<<"2 Visualizzare rubrica intera\n";
cout<<"3 Ricercare contatto\n";
cout<<"4 Modificare contatto\n";
cout<<"5 Cancellare contatto\n";
cout<<"6 Uscire dalla rubrica\n";
cin>>scelta;
if (scelta<49||scelta>54)
{
cout<<"scelta non valida\n\n";
}
} while (scelta<49||scelta>54);
}

void aggiunta (int elementi)
//funzione che serve ad aggiungere un contatto alla rubrica
{
int flag=0;
char strin[15]; //variabil d'appoggio
printf("Aggiunta di un elemento alla rubrica\n\n";);
do
{
flag=0;
printf("inserire cognome (lunghezza max 15)\n";);
gets (strin);
for (int i=0;i<elementi&&flag!=1;i++)
{
if (strcmpi(rubrica[i].cognome,strin)==0)
{
flag=1;
printf("il cognome inserito esiste già per un altro contatto\n";);
}
}
if (strlen(strin)>15) //controllo lunghezza
{
flag=1;
printf("cognome troppo lungo, inserire di nuovo\n";);
}
else
{
strcpy(rubrica[elementi].cognome,strin);
}
} while (flag==1);
do
{
printf("inserire nome (lunghezza max 15)\n";);
gets (strin);
if (strlen(strin)>15)
{
printf("nome troppo lungo, inserire di nuovo\n";);
}
else
{
strcpy(rubrica[elementi].nome,strin); //copia
}
} while (strlen(strin)>15);
do
{
printf("inserire numero (lunghezza max 15)\n";);
gets (strin);
if (strlen(strin)>15)
{
printf("numero troppo lungo, inserire di nuovo\n";);
}
else
{
strcpy(rubrica[elementi].numero,strin);
}
} while (strlen(strin)>15);
cout<<endl;
}

void visualizza (int elementi)
//funzione per visualizzare la rubrica intera
{
printf("Rubrica\n\n";);
if (elementi==0)
{
printf("la rubrica e' vuota\n";);
//caso che la rubrica sia vuota (0 elementi)
}
else
{
for(int i=0;i<elementi;i++)
{
printf("Elemento %i\n",i+1);
printf("Cognome:";);
printf(rubrica[i].cognome);
printf("\nNome: ";);
printf(rubrica[i].nome);
printf("\nNumero: ";);
printf(rubrica[i].numero);
printf("\n\n";);
//con questo ciclo stampiamo tutti gli elementi
}
}
cout<<endl;
}

void ordinamento(int elementi)
//funzione per l'ordinamento per cognome (bubble sort)
{
while (elementi>0)
{
for (int i=0;i<elementi-1;i++)
{
if (strcmpi(rubrica[i].cognome,rubrica[i].cognome)>0)
{
scambio(i);
}
else if (strcmpi(rubrica[i].cognome,rubrica[i+1].cognome)==0)
{
if (strcmpi(rubrica[i].nome,rubrica[i+1].nome)>0)
{
scambio(i);
}
}
}
elementi--;
}
}

void scambio (int i)
//funzione che si aggancia all'ordinamento per lo scambio
{
char temp[15];
strcpy(temp,rubrica[i].cognome);
strcpy(rubrica[i].cognome,rubrica[i+1].cognome);
strcpy(rubrica[i+1].cognome,temp);
strcpy(temp,rubrica[i].nome);
strcpy(rubrica[i].nome,rubrica[i+1].nome);
strcpy(rubrica[i+1].nome,temp);
strcpy(temp,rubrica[i].numero);
strcpy(rubrica[i].numero,rubrica[i+1].numero);
strcpy(rubrica[i+1].numero,temp);
}

void ricerca (int &i, int elementi)
//questa funzione stampa a video il contatto cercato dall'utente
{
i=ricerca(elementi);
if (i==-1)
{
cout<<"elemento non trovato"<<endl;
}
else
{
cout<<"Elemento "<<i+1<<endl;
cout<<"Cognome: "<<rubrica[i].cognome<<endl;
cout<<"Nome: "<<rubrica[i].nome<<endl;
cout<<"Numero: "<<rubrica[i].numero<<endl;
}
}

int ricerca (int elementi)
//Ricerca binaria del contatto
{
int primo=0,ultimo=elementi-1,i;
char strin[15];
printf("Inserire il cognome da cercare\n";);
gets(strin);
while (primo<=ultimo)
{
i=(primo+ultimo)/2;
if (strcmpi(rubrica[i].cognome,strin)==0)
{
return i; //elemento trovato
}
else if (strcmpi(rubrica[i].cognome,strin)<0)
{
primo=i+1;
}
else
{
ultimo=i-1;
}
}
return -1; //nessun elemento trovato
printf("\n";);
}

void modifica (int i)
//funzione che serve per modificare i contatti
{
char scelta, strin[15];
do
{
cout<<"Cosa si desidera modificare?\n";
cout<<"1 Cognome\n";
cout<<"2 Nome\n";
cout<<"3 Numero\n";
cin>>scelta;
if (scelta<49||scelta>51)
{
cout<<"Scelta non valida\n\n";
}
} while (scelta<49||scelta>51);
switch (scelta)
{
case 49:
printf("Cognome precedente: ";);
printf(rubrica[i].cognome);
printf("\n";);
do
{
printf("Inserire nuovo cognome\n";);
gets (strin);
if (strlen(strin)>15)
printf("cognome troppo lungo, inserire di nuovo";);
else
strcpy(rubrica[i].cognome,strin);
} while (strlen(strin)>15);
break;
case 50:
printf("Nome precedente: ";);
printf(rubrica[i].nome);
printf("\n";);
do
{
printf("Inserire nuovo nome\n";);
gets (strin);
if (strlen(strin)>15)
printf("nome troppo lungo, inserire di nuovo";);
else
strcpy(rubrica[i].nome,strin);
} while (strlen(strin)>15);
break;
case 51:
printf("Numero precedente: ";);
printf(rubrica[i].numero);
printf("\n";);
do
{
printf("Inserire nuovo numero\n";);
gets (strin);
if (strlen(strin)>15)
printf("numero troppo lungo, inserire di nuovo";);
else
strcpy(rubrica[i].numero,strin);
} while (strlen(strin)>15);
break;
}
}

void cancella (int num, int elementi)
//funzione che serve a cancellare i contatti
{
char scelta;
do
{
cout<<"E' sicuro di voler eliminare definitivamente questo contatto?"<<endl;
cout<<"1 Si'"<<endl;
cout<<"2 No"<<endl;
cin>>scelta;
if (scelta!=49&&scelta!=50)
cout<<"Scelta non valida"<<endl<<endl;
} while (scelta!=49&&scelta!=50);
if (scelta==49)
{
for(int i=num;i<elementi;i++)
{
strcpy(rubrica[i].cognome,rubrica[i+1].cognome);
strcpy(rubrica[i].nome,rubrica[i+1].nome);
strcpy(rubrica[i].numero,rubrica[i+1].numero);
}
}
}

aaa
01/05/07 18:14
cH!cus
Beh prima forse dovresti dirci quali problemi e/o errori ti da, qui di solito non diamo pappa pronta. Cmq nel sito ci sono alcuni sorgenti di rubriche, prova a cercare nei sorgenti c/c++.
aaa
01/05/07 18:17
netarrow
Cmq quando devi creare le strutture dinamiche si usano le liste]

struct persona {
char cognome[15],nome[15],numero[15];
persona* next;
persona* prev;
} persona; 

struct rubruca {
persona* first;
persona* last;
} rubrica


Cercando su internet trovi spiegazioni teoriche ed esempi su queste strutture, anche su questo sito trovi programmi che le implementano come dice cH!cus.
aaa
02/05/07 12:52
AngeloDevastato
Oh lander....ma c'è qualcosa di questa rubrica che hai fatto da te?? riesce a tutti farla così...ma te vai avanti postando il tuo listato e facendotela modificare...bellino sì...8-|
aaa
02/05/07 13:21
Dj andrew
Caro Gemoli,ti ricordo ke anke te hai messo 1 post su un forum,dove chiedevi aiuto...non dire a me certe cose se poi le fai anke te...ps poi nn ci vedo nulla di male a chiedere 1 aiuto se si è in difficolta....bellino si anke te..
aaa
02/05/07 14:05
cH!cus
finito? :D

PS: piero dovremmo aprire un forum per "flames":-|
aaa
03/05/07 18:40
AngeloDevastato
carissimo lander, sappi k io avrò kiesto anke aiuto...ma innanzitutto io c'ho provato da me, poi non ho kiesto alla gente di farmi quello che mi è stato chiesto di fare e inoltre io sono arrivato a quel punto da solo...te invece hai fatto due righe e il resto te lo sei fatto fare su questo forum..non è la stessa cosa se permetti...
aaa
03/05/07 23:22
cH!cus
Finitela per favore, se fossi mod avrai chiuso il topic.
aaa