🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

Gestione Rubrica con MySQL

Codegrind Team•Jul 12 2024

Descrizione del Progetto

In questo progetto, realizzerai un sistema di gestione di una rubrica utilizzando C++ e MySQL. Il programma supporterà l’aggiunta, la visualizzazione, la modifica e la cancellazione di contatti nel database.

Requisiti

  1. Librerie C++: Utilizzare le librerie standard di C++ e la libreria MySQL Connector/C++.
  2. Interfaccia Utente: Creare una semplice interfaccia utente a riga di comando che permetta all’utente di interagire con il sistema.

FunzionalitĂ 

  1. Aggiungere un Contatto: Chiedere all’utente di inserire i dettagli di un contatto e aggiungerlo al database.
  2. Visualizzare i Contatti: Visualizzare l’elenco di tutti i contatti nel database.
  3. Modificare un Contatto: Chiedere all’utente di inserire l’ID di un contatto e i nuovi dettagli per modificare il contatto nel database.
  4. Cancellare un Contatto: Chiedere all’utente di inserire l’ID di un contatto per cancellarlo dal database.

Esempio di Codice

#include <iostream>
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>
#include <cppconn/resultset.h>
#include <cppconn/exception.h>

void aggiungi_contatto(sql::Connection* con) {
    std::string nome, cognome, telefono, email;

    std::cout << "Inserisci il nome del contatto: ";
    std::getline(std::cin, nome);
    std::cout << "Inserisci il cognome del contatto: ";
    std::getline(std::cin, cognome);
    std::cout << "Inserisci il numero di telefono: ";
    std::getline(std::cin, telefono);
    std::cout << "Inserisci l'email: ";
    std::getline(std::cin, email);

    std::unique_ptr<sql::PreparedStatement> pstmt(con->prepareStatement("INSERT INTO rubrica (nome, cognome, telefono, email) VALUES (?, ?, ?, ?)"));
    pstmt->setString(1, nome);
    pstmt->setString(2, cognome);
    pstmt->setString(3, telefono);
    pstmt->setString(4, email);
    pstmt->execute();

    std::cout << "Contatto aggiunto con successo!" << std::endl;
}

void visualizza_contatti(sql::Connection* con) {
    std::unique_ptr<sql::Statement> stmt(con->createStatement());
    std::unique_ptr<sql::ResultSet> res(stmt->executeQuery("SELECT * FROM rubrica"));

    while (res->next()) {
        std::cout << "ID: " << res->getInt("id") << ", Nome: " << res->getString("nome") << ", Cognome: " << res->getString("cognome") << ", Telefono: " << res->getString("telefono") << ", Email: " << res->getString("email") << std::endl;
    }
}

void modifica_contatto(sql::Connection* con) {
    int id;
    std::string nuovo_nome, nuovo_cognome, nuovo_telefono, nuova_email;

    std::cout << "Inserisci l'ID del contatto da modificare: ";
    std::cin >> id;
    std::cin.ignore();  // Ignores the newline character left in the input buffer

    std::cout << "Inserisci il nuovo nome del contatto: ";
    std::getline(std::cin, nuovo_nome);
    std::cout << "Inserisci il nuovo cognome del contatto: ";
    std::getline(std::cin, nuovo_cognome);
    std::cout << "Inserisci il nuovo numero di telefono: ";
    std::getline(std::cin, nuovo_telefono);
    std::cout << "Inserisci la nuova email: ";
    std::getline(std::cin, nuova_email);

    std::unique_ptr<sql::PreparedStatement> pstmt(con->prepareStatement("UPDATE rubrica SET nome = ?, cognome = ?, telefono = ?, email = ? WHERE id = ?"));
    pstmt->setString(1, nuovo_nome);
    pstmt->setString(2, nuovo_cognome);
    pstmt->setString(3, nuovo_telefono);
    pstmt->setString(4, nuova_email);
    pstmt->setInt(5, id);
    pstmt->execute();

    std::cout << "Contatto modificato con successo!" << std::endl;
}

void cancella_contatto(sql::Connection* con) {
    int id;
    std::cout << "Inserisci l'ID del contatto da cancellare: ";
    std::cin >> id;
    std::cin.ignore();  // Ignores the newline character left in the input buffer

    std::unique_ptr<sql::PreparedStatement> pstmt(con->prepareStatement("DELETE FROM rubrica WHERE id = ?"));
    pstmt->setInt(1, id);
    pstmt->execute();

    std::cout << "Contatto cancellato con successo!" << std::endl;
}

int main() {
    try {
        sql::mysql::MySQL_Driver* driver = sql::mysql::get_mysql_driver_instance();
        std::unique_ptr<sql::Connection> con(driver->connect("tcp://127.0.0.1:3306", "root", "password"));
        con->setSchema("gestione_rubrica");

        int scelta;

        do {
            std::cout << "\nGestione Rubrica\n";
            std::cout << "1. Aggiungi Contatto\n";
            std::cout << "2. Visualizza Contatti\n";
            std::cout << "3. Modifica Contatto\n";
            std::cout << "4. Cancella Contatto\n";
            std::cout << "5. Esci\n";
            std::cout << "Scegli un'opzione: ";
            std::cin >> scelta;
            std::cin.ignore();  // Ignores the newline character left in the input buffer

            switch (scelta) {
                case 1:
                    aggiungi_contatto(con.get());
                    break;
                case 2:
                    visualizza_contatti(con.get());
                    break;
                case 3:
                    modifica_contatto(con.get());
                    break;
                case 4:
                    cancella_contatto(con.get());
                    break;
                case 5:
                    std::cout << "Uscita..." << std::endl;
                    break;
                default:
                    std::cout << "Opzione non valida." << std::endl;
            }
        } while (scelta != 5);

    } catch (sql::SQLException& e) {
        std::cerr << "Errore SQL: " << e.what() << std::endl;
    }

    return 0;
}

Istruzioni per l’Esecuzione

  1. Installa MySQL Connector/C++: Segui le istruzioni ufficiali per installare MySQL Connector/C++: MySQL Connector/C++ Installation

  2. Crea il Database e la Tabella: Connettiti al tuo server MySQL e crea il database e la tabella necessari:

    CREATE DATABASE gestione_rubrica;
    USE gestione_rubrica;
    
    CREATE TABLE rubrica (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nome VARCHAR(50),
        cognome VARCHAR(50),
        telefono VARCHAR(15),
        email VARCHAR(50)
    );
    
  3. Salva il codice in un file: Ad esempio gestione_rubrica.cpp.

  4. Compila il programma: Assicurati di includere le librerie necessarie durante la compilazione.

    g++ -o gestione_rubrica gestione_rubrica.cpp -lmysqlcppconn
    
  5. Esegui il programma:

    ./gestione_rubrica
    
  6. Interazione con l’utente:

    • Segui le opzioni nel menu per aggiungere, visualizzare, modificare o cancellare contatti nel database.

Estensioni Possibili

  1. Interfaccia Grafica: Utilizzare una libreria come Qt per creare un’interfaccia grafica per la gestione della rubrica.
  2. Validazione degli Input: Aggiungere funzionalità per validare gli input dell’utente.
  3. Ricerca di Contatti: Implementare una funzione per cercare contatti per nome, cognome, telefono o email.
  4. Storico delle Operazioni: Mantenere uno storico delle operazioni eseguite durante la sessione.
  5. Gestione Utenti: Aggiungere funzionalitĂ  per la gestione degli utenti, con autenticazione e autorizzazione.