Sebilio89
29-10-2010, 13:15
Salve ragazzi, mi sn appena iscritto a questo sito, e sn un programmatore alle primissime armi, quindi mi scuso fin d'ora x tutti gli errori ke potrò commettere, e sn naturalmente disponibile ad accettare suggerimenti e critiche purché siano costruttive. Sto trovando alcuni problemi nella gestione di un database e x qst chiedo il vostro aiuto:
- il primo è la ricerca ke nn va(il prof vuole x forza la ricerca dicotomica, e la devo effettuare su almeno 2 campi )
struct volontario
{
char nome[30];
char cognome[30];
char indirizzo[40];
int eta;
char numero_cellulare[20];
};
class listavolontari
{
public:
listavolontari(void);
int addvolontario (volontario v);
int rimuovivolontario (volontario* v);
int modificavolontario (volontario* v);
void scegli_visualizza(void);
void scegli_cerca(void);
void ordina_cognome(void);
void ordina_eta(void);
void visualizzalista (void);
void ricerca_dicotomica_cognome(void);
void ricerca_dicotomica_eta(void);
void modifica();
char NomeComponente[30];
private:
int numerodeivolontari;
volontario lista[Num_massimo_volontari];
};
void listavolontari:: scegli_visualizza(void)
{
while (scelta != 3)
{
system ("CLS");
cout << " Se desideri visualizzare l'elenco ordinato per cognome premi 1: \n ";
cout << " Se desideri visualizzare l'elenco ordinato per età premi 2: \n";
cout << " Se desideri tornare al menu di componente premi 3: \n";
scelta = ReadNumber();
switch (scelta)
{
case 1:
ordina_componente_cognome();
visualizzalista ();
system ("PAUSE");
break;
case 2:
ordina_componente_eta();
visualizzalista ();
system ("PAUSE");
break;
}
}
}
void listavolontari :: ordina_cognome(void)
{
int i,j;
if(numerodeivolontari ==0){"Non ci sono volontari da ordinare \n";}
else
{
for(i=0; i< numerodeivolontari-1; i++)
{
for(j=i+1; j< numerodeivolontari; j++)
{
if (strcmp(lista[i].cognome,lista[j].cognome)>= 1)
{
strcpy(buffer,lista[j].nome);
strcpy(lista[j].nome,lista[i].nome);
strcpy(lista[i].nome,buffer);
strcpy(buffer,lista[j].cognome);
strcpy(lista[j].cognome,lista[i].cognome);
strcpy(lista[i].cognome,buffer);
strcpy(buffer,lista[j].indirizzo);
strcpy(lista[j].indirizzo,lista[i].indirizzo);
strcpy(lista[i].indirizzo,buffer);
buffer_eta = lista[j].eta;
lista[j].eta = lista[i].eta;
lista[i].eta = buffer_eta;
strcpy(buffer,lista[j].numero_cellulare);
strcpy(lista[j].numero_cellulare,lista[i].numero_cellulare);
strcpy(lista[i].numero_cellulare,buffer);
}
}
}
cout << " Ordinamento per cognome completato con successo \n";
}
}
void listavolontari :: ordina_eta(void)
{
int i,j;
if(numerodeivolontari ==0){"Non ci sono volontari da ordinare \n";}
else
{
for(i=0; i< numerodeivolontari-1; i++)
{
for(j=i+1; j< numerodeivolontari; j++)
{
if (lista[i].eta>lista[j].eta)
{
strcpy(buffer,lista[j].nome);
strcpy(lista[j].nome,lista[i].nome);
strcpy(lista[i].nome,buffer);
strcpy(buffer,lista[j].cognome);
strcpy(lista[j].cognome,lista[i].cognome);
strcpy(lista[i].cognome,buffer);
strcpy(buffer,lista[j].indirizzo);
strcpy(lista[j].indirizzo,lista[i].indirizzo);
strcpy(lista[i].indirizzo,buffer);
buffer_eta = lista[j].eta;
lista[j].eta = lista[i].eta;
lista[i].eta = buffer_eta;
strcpy(buffer,lista[j].numero_cellulare);
strcpy(lista[j].numero_cellulare,lista[i].numero_cellulare);
strcpy(lista[i].numero_cellulare,buffer);
}
}
}
cout << " Ordinamento per età completato con successo \n";
}
}
void listavolontari:: scegli_cerca(void)
{
while (scelta != 3)
{
system ("CLS");
cout << " Se si desidera cercare un volontario inserendo il suo cognome premi 1: \n ";
cout << " Se si desidera cercare un volontario inserendendo la sua età premi 2: \n ";
cout << " Se desideri tornare al menu di componente premi 3: \n";
scelta = ReadNumber();
switch (scelta)
{
case 1:
ordina_componente_cognome();
ricerca_dicotomica_cognome();
system ("PAUSE");
break;
case 2:
ordina_componente_eta();
ricerca_dicotomica_eta();
system ("PAUSE");
break;
}
}
}
void listavolontari :: ricerca_dicotmica_cognome(void)
{
int basso=0, alto=numerodeivolontari-1, medio;
char cognome_trovare[30];
system ("CLS");
cout << " Scirivi il Cognome del volontario che stai cercando: \n";
cin.getline(cognome_trovare, sizeof(cognome_trovare));
while (basso <= alto)
{
medio = (basso + alto)/2;
if(strcmp(lista[medio].cognome, cognome_trovare) == 0)
{
cout << lista[medio].nome << "\n";
cout << lista[medio].cognome << "\n";
cout << lista[medio].indirizzo << "\n";
cout << lista[medio].eta << "\n";
cout << lista[medio].numero_cellulare << "\n";
}
if (strcmp(lista[medio].cognome, cognome_trovare) < 0) basso = medio +1;
else
{
alto = medio -1;
break;
}
}
cout << "Attualmente non c'è nessun volontario nella componente dei:" << NomeComponente << "\n";
cout << "con il cognome " << cognome_trovare << "\n";
}
void listavolontari :: ricerca_dicotmica_eta(void)
{
int basso=0, alto=numerodeivolontari-1, medio=0;
system ("CLS");
cout << " Scirivi l'eta del volontario che stai cercando: \n";
buffer_eta= ReadNumber();
while (basso <= alto)
{
medio = (basso + alto)/2;
if(lista[medio].eta == buffer_eta)
{
cout << lista[medio].nome << "\n";
cout << lista[medio].cognome << "\n";
cout << lista[medio].indirizzo << "\n";
cout << lista[medio].eta << "\n";
cout << lista[medio].numero_cellulare << "\n";
}
if (buffer_eta > lista[medio].eta) basso = medio+1;
else
{
alto = medio -1;
break;
}
cout << "Attualmente non c'è nessun volontario nella componente dei:" << NomeComponente << "\n";
cout << "che abbia " << buffer_eta << " anni \n";
}
}
- il primo è la ricerca ke nn va(il prof vuole x forza la ricerca dicotomica, e la devo effettuare su almeno 2 campi )
struct volontario
{
char nome[30];
char cognome[30];
char indirizzo[40];
int eta;
char numero_cellulare[20];
};
class listavolontari
{
public:
listavolontari(void);
int addvolontario (volontario v);
int rimuovivolontario (volontario* v);
int modificavolontario (volontario* v);
void scegli_visualizza(void);
void scegli_cerca(void);
void ordina_cognome(void);
void ordina_eta(void);
void visualizzalista (void);
void ricerca_dicotomica_cognome(void);
void ricerca_dicotomica_eta(void);
void modifica();
char NomeComponente[30];
private:
int numerodeivolontari;
volontario lista[Num_massimo_volontari];
};
void listavolontari:: scegli_visualizza(void)
{
while (scelta != 3)
{
system ("CLS");
cout << " Se desideri visualizzare l'elenco ordinato per cognome premi 1: \n ";
cout << " Se desideri visualizzare l'elenco ordinato per età premi 2: \n";
cout << " Se desideri tornare al menu di componente premi 3: \n";
scelta = ReadNumber();
switch (scelta)
{
case 1:
ordina_componente_cognome();
visualizzalista ();
system ("PAUSE");
break;
case 2:
ordina_componente_eta();
visualizzalista ();
system ("PAUSE");
break;
}
}
}
void listavolontari :: ordina_cognome(void)
{
int i,j;
if(numerodeivolontari ==0){"Non ci sono volontari da ordinare \n";}
else
{
for(i=0; i< numerodeivolontari-1; i++)
{
for(j=i+1; j< numerodeivolontari; j++)
{
if (strcmp(lista[i].cognome,lista[j].cognome)>= 1)
{
strcpy(buffer,lista[j].nome);
strcpy(lista[j].nome,lista[i].nome);
strcpy(lista[i].nome,buffer);
strcpy(buffer,lista[j].cognome);
strcpy(lista[j].cognome,lista[i].cognome);
strcpy(lista[i].cognome,buffer);
strcpy(buffer,lista[j].indirizzo);
strcpy(lista[j].indirizzo,lista[i].indirizzo);
strcpy(lista[i].indirizzo,buffer);
buffer_eta = lista[j].eta;
lista[j].eta = lista[i].eta;
lista[i].eta = buffer_eta;
strcpy(buffer,lista[j].numero_cellulare);
strcpy(lista[j].numero_cellulare,lista[i].numero_cellulare);
strcpy(lista[i].numero_cellulare,buffer);
}
}
}
cout << " Ordinamento per cognome completato con successo \n";
}
}
void listavolontari :: ordina_eta(void)
{
int i,j;
if(numerodeivolontari ==0){"Non ci sono volontari da ordinare \n";}
else
{
for(i=0; i< numerodeivolontari-1; i++)
{
for(j=i+1; j< numerodeivolontari; j++)
{
if (lista[i].eta>lista[j].eta)
{
strcpy(buffer,lista[j].nome);
strcpy(lista[j].nome,lista[i].nome);
strcpy(lista[i].nome,buffer);
strcpy(buffer,lista[j].cognome);
strcpy(lista[j].cognome,lista[i].cognome);
strcpy(lista[i].cognome,buffer);
strcpy(buffer,lista[j].indirizzo);
strcpy(lista[j].indirizzo,lista[i].indirizzo);
strcpy(lista[i].indirizzo,buffer);
buffer_eta = lista[j].eta;
lista[j].eta = lista[i].eta;
lista[i].eta = buffer_eta;
strcpy(buffer,lista[j].numero_cellulare);
strcpy(lista[j].numero_cellulare,lista[i].numero_cellulare);
strcpy(lista[i].numero_cellulare,buffer);
}
}
}
cout << " Ordinamento per età completato con successo \n";
}
}
void listavolontari:: scegli_cerca(void)
{
while (scelta != 3)
{
system ("CLS");
cout << " Se si desidera cercare un volontario inserendo il suo cognome premi 1: \n ";
cout << " Se si desidera cercare un volontario inserendendo la sua età premi 2: \n ";
cout << " Se desideri tornare al menu di componente premi 3: \n";
scelta = ReadNumber();
switch (scelta)
{
case 1:
ordina_componente_cognome();
ricerca_dicotomica_cognome();
system ("PAUSE");
break;
case 2:
ordina_componente_eta();
ricerca_dicotomica_eta();
system ("PAUSE");
break;
}
}
}
void listavolontari :: ricerca_dicotmica_cognome(void)
{
int basso=0, alto=numerodeivolontari-1, medio;
char cognome_trovare[30];
system ("CLS");
cout << " Scirivi il Cognome del volontario che stai cercando: \n";
cin.getline(cognome_trovare, sizeof(cognome_trovare));
while (basso <= alto)
{
medio = (basso + alto)/2;
if(strcmp(lista[medio].cognome, cognome_trovare) == 0)
{
cout << lista[medio].nome << "\n";
cout << lista[medio].cognome << "\n";
cout << lista[medio].indirizzo << "\n";
cout << lista[medio].eta << "\n";
cout << lista[medio].numero_cellulare << "\n";
}
if (strcmp(lista[medio].cognome, cognome_trovare) < 0) basso = medio +1;
else
{
alto = medio -1;
break;
}
}
cout << "Attualmente non c'è nessun volontario nella componente dei:" << NomeComponente << "\n";
cout << "con il cognome " << cognome_trovare << "\n";
}
void listavolontari :: ricerca_dicotmica_eta(void)
{
int basso=0, alto=numerodeivolontari-1, medio=0;
system ("CLS");
cout << " Scirivi l'eta del volontario che stai cercando: \n";
buffer_eta= ReadNumber();
while (basso <= alto)
{
medio = (basso + alto)/2;
if(lista[medio].eta == buffer_eta)
{
cout << lista[medio].nome << "\n";
cout << lista[medio].cognome << "\n";
cout << lista[medio].indirizzo << "\n";
cout << lista[medio].eta << "\n";
cout << lista[medio].numero_cellulare << "\n";
}
if (buffer_eta > lista[medio].eta) basso = medio+1;
else
{
alto = medio -1;
break;
}
cout << "Attualmente non c'è nessun volontario nella componente dei:" << NomeComponente << "\n";
cout << "che abbia " << buffer_eta << " anni \n";
}
}