Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni

Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni

Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni: Dopo aver inserito gli elementi di base del form Prenotazioni, andiamo a creare il database ad esso associato.

Il database per le prenotazioni degli utenti è molto semplice, ed è composto per la maggior parte da campi di tipo NVARCHAR.

Abbiamo già visto come creare la tabella per le camere e per sconti e costi extra, quello che dovremo fare non è molto diverso.

L’unico problema potrebbe essere rappresentato dal documento d’identità.

Per il documento, che dovrebbe contenere un file (ad esempio jpg o pdf) abbiamo 2 scelte:

  • Creare un tipo di BLOB ed inserire il file all’interno del database
  • Creare una colonna NVARCHAR ed inserire solo il link al file che invece sarà copiato in una cartella

Non c’è un metodo giusto ed uno sbagliato, sono 2 scelte diverse.

Il primo metodo ha a suo vantaggio che il file sarà più protetto, essendo inserito direttamente nel database ed associato all’id della prenotazione.

Tenendolo invece in una cartella è possibile che l’utente possa sbagliare e cancellarlo o sovrascriverlo.

Di contro invece, spesso capita (soprattutto quando il database è online), che ci sia un limite alle dimensioni dello stesso.

Quindi inserire tanti file al suo interno potrebbe portare facilmente a raggiungere la quota limite.

Per questo progetto (anche se il database è locale e quindi non ci sarebbero limiti alle sue dimensioni), ho scelto comunque di creare un campo NVARCHAR e di inserire il file del documento all’esterno del database (cosa che aiuta a tenerlo di piccole dimensioni).

Creare un gestionale per strutture ricettive in C# – 17 – Database Prenotazioni

Andiamo quindi nel database del nostro programma e creiamo una nuova tabella, il codice da usare è:

CREATE TABLE [dbo].[Prenotazioni] (
    [Id]              NVARCHAR (200)  NOT NULL,
    [Nome]            NVARCHAR (200)  NULL,
    [Cognome]         NVARCHAR (200)  NULL,
    [Indirizzo]       NVARCHAR (300)  NULL,
    [Citta]           NVARCHAR (300)  NULL,
    [CAP]             NVARCHAR (10)   NULL,
    [Nazione]         NVARCHAR (200)  NULL,
    [DataNascita]     DATE            NULL,
    [Nazionalita]     NVARCHAR (200)  NULL,
    [Telefono]        NVARCHAR (80)   NULL,
    [Email]           NVARCHAR (300)  NULL,
    [TipoDocumento]   NVARCHAR (100)  NULL,
    [CodiceDocumento] NVARCHAR (50)   NULL,
    [Documento]       NVARCHAR (600)  NULL,
    [DataArrivo]      DATE            NULL,
    [DataPartenza]    DATE            NULL,
    [NumeroNotti]     INT             NULL,
    [NumeroOspiti]    INT             NULL,
    [Camera]          NVARCHAR (200)  NULL,
    [Note]            NVARCHAR (2000) NULL,
    [CostiExtra]      NVARCHAR (2000) NULL,
    [Sconti]          NVARCHAR (2000) NULL,
    [TasseSoggiorno]  INT             NULL,
    [MotivoEsenzione] NVARCHAR (1000) NULL,
    [MetodoPagamento] NVARCHAR (300)  NULL,
    [Totale]          FLOAT (53)      NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

Dopo aver creato la nuova tabella per le prenotazioni, possiamo tornare al nostro form, e preparare il pannello per l’aggiunta di una nuova prenotazione.

In questo caso quello che faremo è controllare che i campi inseriti non siano vuoti e i valori al loro interno siano corretti.

// CONTROLLO PRESENZA NOME E COGNOME
            if (txtNome.Text.Length < 2 || txtCognome.Text.Length < 2)
            {
                MessageBox.Show("I campi Nome e Cognome non possono contenere meno di 2 caratteri!");
                return;
            }
            // CONTROLLO DATA ARRIVO E DATA PARTENZA
            if (DateTime.Compare(dateArrivo.Value, DateTime.Now) < 0)
            {
                MessageBox.Show("La data di arrivo non può essere antecedente al giorno stesso.");
                return;
            }
            if (DateTime.Compare(datePartenza.Value, dateArrivo.Value) < 0)
            {
                MessageBox.Show("La data di partenza non può essere antecedente alla data di arrivo.");
                return;
            }
            // CONTROLLO NUMERO NOTTI E NUMERO OSPITI
            if (numNotti.Value < 1 || numOspiti.Value < 1)
            {
                MessageBox.Show("I campi Notti ed Ospiti non possono essere inferiori ad 1!");
                return;
            }
            // CONTROLLO CAMERA SCELTA
            if (cmbCamera.Text.Length < 1)
            {
                MessageBox.Show("Non è stata selezionata la camera dell'ospite.");
                return;
            }
            // CONTROLLO TOTALE
            if (txtTotale.Text.Length < 1)
            {
                MessageBox.Show("Non è stato inserito il costo totale della prenotazione.");
                return;
            }
            // CREA ID
            // DATA ARRIVO + NOME + COGNOME (20210423MarioRossi)
            // CONTROLLARE NOME E COGNOME PER EVENTUALE PRESENZA CARATTERI NON CONSENTITI
            string IDCliente = dateArrivo.Value.Year + dateArrivo.Value.Month + dateArrivo.Value.Day + txtNome.Text + txtCognome.Text;
            MessageBox.Show(IDCliente);

Come prima cosa controlliamo che i campi Nome e Cognome abbiano almeno 2 caratteri.

Passando alla data confrontiamo la data di arrivo con il giorno di inserimento, per evitare che possano essere inserite prenotazioni antecedenti.

Poi confrontiamo data di arrivo e data di partenza per assicurarci che la data di partenza sia lo stesso giorno o successiva alla data di arrivo.

Continuiamo verificando che il numero degli ospiti e delle notti sia almeno 1, poi controlliamo che sia stata inserita una camera e che sia presente il prezzo.

Alla fine andiamo a creare l’ID prendendo la data di arrivo ed aggiungendo nome e cognome, in modo da ottenere un ID Del tipo:

  • Data Arrivo: 23/04/2021
  • Nome: Mario
  • Cognome: Rossi
  • ID: 20210424MarioRossi
Claudio Masci

Sono innanzitutto un appassionato di informatica e tecnologia in generale. Lavoro in ambito informatico da circa 16 anni, spaziando in diversi campi, andando dalla programmazione web, allo sviluppo di software, dalla grafica alla modellazione 3d ed al video editing, ho sempre voluto approfondire ogni aspetto e questo mi ha permesso di lavorare in diversi ambiti informatici.

Rispondi