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++ - rubrica con puntatori!!
Forum - C/C++ - rubrica con puntatori!!

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


Messaggi: 4
Iscritto: 19/03/2007

Segnala al moderatore
Postato alle 16:57
Martedì, 01/05/2007
Questo topic è stato chiuso dal moderatore

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.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.cognome);
            printf("\nNome: ");
            printf(rubrica.nome);
            printf("\nNumero: ");
            printf(rubrica.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.cognome,rubrica.cognome)>0)
           {
               scambio(i);
           }
           else if (strcmpi(rubrica.cognome,rubrica[i+1].cognome)==0)
           {
               if (strcmpi(rubrica.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.cognome);
    strcpy(rubrica.cognome,rubrica[i+1].cognome);
    strcpy(rubrica[i+1].cognome,temp);
    strcpy(temp,rubrica.nome);
    strcpy(rubrica.nome,rubrica[i+1].nome);
    strcpy(rubrica[i+1].nome,temp);
    strcpy(temp,rubrica.numero);
    strcpy(rubrica.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.cognome<<endl;
        cout<<"Nome: "<<rubrica.nome<<endl;
        cout<<"Numero: "<<rubrica.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.cognome,strin)==0)
        {
            return i; //elemento trovato
        }
        else if (strcmpi(rubrica.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.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.cognome,strin);
            } while (strlen(strin)>15);
            break;
        case 50:
            printf("Nome precedente: ");
            printf(rubrica.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.nome,strin);
            } while (strlen(strin)>15);
            break;
        case 51:
            printf("Numero precedente: ");
            printf(rubrica.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.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.cognome,rubrica[i+1].cognome);
            strcpy(rubrica.nome,rubrica[i+1].nome);
            strcpy(rubrica.numero,rubrica[i+1].numero);
        }
    }
}


PM
Avatar
cH!cus (Ex-Member)
Pro


Messaggi: 149
Iscritto: 03/04/2006

Segnala al moderatore
Postato alle 20:14
Martedì, 01/05/2007
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++.

PM
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 20:17
Martedì, 01/05/2007
Cmq quando devi creare le strutture dinamiche si usano le liste]

Codice sorgente - presumibilmente C/C++

  1. struct persona {
  2. char cognome[15],nome[15],numero[15];
  3. persona* next;
  4. persona* prev;
  5. } persona;
  6.  
  7. struct rubruca {
  8. persona* first;
  9. persona* last;
  10. } 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.

PM
Avatar
AngeloDevastato (Normal User)
Newbie


Messaggi: 2
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 14:52
Mercoledì, 02/05/2007
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-|

PM
Avatar
Dj andrew (Normal User)
Newbie


Messaggi: 4
Iscritto: 19/03/2007

Segnala al moderatore
Postato alle 15:21
Mercoledì, 02/05/2007
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..

PM
Avatar
cH!cus (Ex-Member)
Pro


Messaggi: 149
Iscritto: 03/04/2006

Segnala al moderatore
Postato alle 16:05
Mercoledì, 02/05/2007
finito? :D

PS: piero dovremmo aprire un forum per "flames":-|

PM
Avatar
AngeloDevastato (Normal User)
Newbie


Messaggi: 2
Iscritto: 02/05/2007

Segnala al moderatore
Postato alle 20:40
Giovedì, 03/05/2007
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...

PM
Avatar
cH!cus (Ex-Member)
Pro


Messaggi: 149
Iscritto: 03/04/2006

Segnala al moderatore
Postato alle 1:22
Venerdì, 04/05/2007
Finitela per favore, se fossi mod avrai chiuso il topic.

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 4:02
Venerdì, 04/05/2007
Ed è infatti quello che succederà se questo flame continua. Ma voglio vedere se i nostri due utenti sono abbastanza maturi da smetterla di azzuffarsi autonomamente senza ulteriori richiami, quindi il topic resta aperto...

Dj andrew, il primo passo è identificare cosa c'è che non va nel codice. Il programma viene compilato? Se si, dov'è che nella fase di esecuzione il programma si blocca o restituisce risultati inattesi? Dov'è la parte di codice responsabile per tali risultati? Come è possibile modificare tale codice in maniera da avere il risultato atteso?

Prova a rispondere a queste domande, a perderci qualche ora, se poi ancora non hai risolto, prova a chiederci più nello specifico cosa è che non riesci a fare. Copiare e incollare il codice chiedendo semplicemente a noi di risolverlo è un po' come dar via tutto il divertimento di risolvere il problema ad altre persone...


Il mio blog: https://piero.dev
PM
Pagine: [ 1 2 ] Precedente | Prossimo