Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di mica81
    Registrato dal
    Nov 2003
    Messaggi
    87

    [c++] non mi riesce una funzione

    salve a tutti!
    per l'università devo fare un progetto che consiste nell'implementare un database di citazioni con mysql e poi devo implementare un programma in c++ che interagisca con il database stesso.
    sono riuscito a fare molto ma mi manca una funzione che viene usata nelle seguenti richieste:
    1)ricercare la citazione più acceduta di un autore X
    2)fornire una citazione scelta a caso tra quelle disponibili nel database
    questa funzione deve essere in grado di trasformare gli interi in stringa per passarli direttamente nella query SQL. Per farla devo fare in modo di prendere un carattere alla volta dallo stream e convertire carattere per carattere in tipo stringa
    non so come si faccia tutto ciò ed è tanto che ci penso senza arrivare a nulla.
    vi prego sono disperato! non so più dove


  2. #2
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614

    Re: [c++] non mi riesce una funzione

    Originariamente inviato da mica81
    1)ricercare la citazione più acceduta di un autore X
    codice:
    char SQL[512] = {NULL};
    char* nomeautore = "nome_autore";
    
    sprintf(SQL, "SELECT * FROM tabella WHERE autore LIKE '%s'", nomeautore);
    Originariamente inviato da mica81
    2)fornire una citazione scelta a caso tra quelle disponibili nel database
    questa funzione deve essere in grado di trasformare gli interi in stringa per passarli direttamente nella query SQL. Per farla devo fare in modo di prendere un carattere alla volta dallo stream e convertire carattere per carattere in tipo stringa
    non so come si faccia tutto ciò ed è tanto che ci penso senza arrivare a nulla.
    vi prego sono disperato! non so più dove

    gli interi possono essere convertiti in stringa tramite la funzione sprintf

    es.

    codice:
    int a = 100;
    char b[256] = {NULL};
    sprintf(b, "Il valore di a è: %d", a);
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  3. #3
    Utente di HTML.it L'avatar di mica81
    Registrato dal
    Nov 2003
    Messaggi
    87
    ah grazie! però guarda una parte del mio sorgente:

    void comandi::rice7(connessione* conn)
    {
    double max;
    Query query=conn->conness.query();
    stringacom="SELECT max(contatore) FROM citazioni";
    query<<SQLString(stringacom);
    Result res=query.store();
    if(res.size()==0)
    {
    system("cls");
    cout<<"Impossibile fornire la citazione più acceduta\n"<<endl;
    system("pause");
    return;
    }
    Result::iterator i;
    Row row;
    i=res.begin();
    row= *i;
    max=double(row[0]);
    stringacom="SELECT C.testo, C.id FROM citazioni C WHERE C. contatore="+perversa(max);
    query<<SQLString(stringacom);
    res=query.store();
    if(res.size()==1)
    {
    system("cls");
    cout << " Testo Citazione | ID " << endl;
    cout << "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°" << endl;
    for (i = res.begin(); i != res.end(); i++) {
    row = *i;
    cout << setw(26) << string(row[0])<< " |";
    cout << setw(4) << string(row[1]) << " |" << endl;
    }
    cout << "|________________________________________________ ____|" <<endl<<endl;
    string id = string(row[1]);
    system("pause");
    stringacom="SELECT C.testo, C.lingua, A.nome, A.nazionalità, O.titolo, O.data_pubblicazione, C.id FROM citazioni C, cutori A, scritto S, opera O WHERE C.ID ="+id+" and S.ID_autore=A.ID and S.ID_opera=C.ID_opera and O.ID=C.ID_opera";
    query<<SQLString(stringacom);
    res=query.store();
    system("cls");
    cout << " INFORMAZIONI RELATIVE ALLA CITAZIONE PIU' ACCEDUTA: "<< endl;
    for (i = res.begin(); i != res.end(); i++)
    {
    row = *i;
    cout << "Testo Citazione: "<< string(row[0]) << endl;
    cout << "Lingua: " << string(row[1]) << endl;
    cout << "Nome dell'autore: "<< string(row[2]) << endl;
    cout << "Nazionalita': "<< string(row[3]) << endl;
    cout << "Opera da cui e' tratta: "<< string(row[4]) << endl;
    cout << "Pubblicata il: "<< string(row[5]) << endl;
    }
    stringacom="UPDATE citazioni SET contatore=contatore+1 WHERE ID="+int(row[6]);
    query<<SQLString(stringacom);
    res=query.store();
    system("pause");
    return;
    }
    else system("cls");
    cout << " Testo Citazione | ID " << endl;
    cout << "°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° °°°°°" << endl;
    for (i = res.begin(); i != res.end(); i++)
    {
    row = *i;
    cout << setw(26) << string(row[0])<< " |";
    cout << setw(4) << string(row[1]) << " |" << endl;
    }
    cout << "|________________________________________________ _____|" <<endl<<endl;

    system("pause");
    }

    void comandi::rice8(connessione* conn)
    {
    double caso;
    int idmax;
    Query query=conn->conness.query();
    stringacom="SELECT max(ID) FROM citazioni";
    query<<SQLString(stringacom);
    Result res=query.store();
    if(res.size()==0)
    {
    system("cls");
    cout<<"Impossibile fornire una citazione casuale.\n"<<endl;
    system("pause");
    return;
    }
    else system("cls");
    cout << "Record trovato:\n" << res.size()<<endl<<endl;
    Result::iterator i;
    Row row;
    i=res.begin();
    row=*i;
    idmax=int(row[0]);
    caso=double(1+rand()%idmax);
    stringacom="SELECT C.testo, C.lingua, A.nome, A.nazionalità, O.titolo, O.data_pubblicazione, C.id FROM citazioni C, autori A, scritto S, opera O WHERE C.ID="+ perversa(caso)+" and S.ID_autore=A.ID and S.ID_opera=C.ID_opera and O.ID=C.ID_opera";
    query<<SQLString(stringacom);
    res=query.store();
    cout << " INFORMAZIONI RELATIVE ALL'OPERA RICERCATA CASUALMENTE:"<< endl;
    for (i = res.begin(); i != res.end(); i++)
    {
    row = *i;
    cout << "Testo Citazione: "<< string(row[0]) << endl;
    cout << "Lingua: " << string(row[1]) << endl;
    cout << "Nome dell'autore: "<< string(row[2]) << endl;
    cout << "Nazionalita': "<< string(row[3]) << endl;
    cout << "Opera da cui e' tratta: "<< string(row[4]) << endl;
    cout << "Pubblicata il: "<< string(row[5]) << endl;
    }
    system("pause");
    }

    come vedi la funzione rice7 si occupa di fornire la citazione più acceduta mentre la funzione rice8 si occupa di fornire una citazione a caso. la funzione che compare nel sorgente che un mio amico ha chiamata "perversa" è quello di cui ho bisogno. se hai bisogno di chiarimenti sulla struttura che ho usato dillo!

  4. #4
    Utente di HTML.it L'avatar di mica81
    Registrato dal
    Nov 2003
    Messaggi
    87
    ancora non sono arrivato a nulla...aiuto! :master:

  5. #5
    Utente di HTML.it L'avatar di mica81
    Registrato dal
    Nov 2003
    Messaggi
    87
    eccola qui! finalmente grazie anche all'aiuto di un mio amico ci sono riuscito!

    string perversa (double n)
    {
    string stringa="";
    int i=0,m=int(n);
    double s;
    while (m=m/10) i++;
    for (double h=double(i);h>=0;h--)
    {
    s=n/pow(10.,h);
    stringa=stringa+char(48+s);
    n=n-s*pow(10.,h);
    }
    return stringa;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.