📢 Nuovo Corso Bootstrap Completo disponibile!

Progetto: Calcolatore di Codice Fiscale in C

Descrizione del Progetto

In questo progetto, realizzerai un calcolatore di codice fiscale in C. Il programma richiederà all’utente di inserire informazioni personali (nome, cognome, data di nascita, sesso e comune di nascita) e calcolerà il codice fiscale italiano basato su queste informazioni.

Requisiti

  1. Linguaggio di Programmazione: C
  2. Interfaccia Utente: Interfaccia a riga di comando
  3. Funzionalità:
    • Inserimento di nome, cognome, data di nascita, sesso e comune di nascita
    • Calcolo del codice fiscale basato sugli algoritmi ufficiali

Struttura del Progetto

  1. main.c: Contiene il main del programma e la logica per il calcolo del codice fiscale.
  2. calcolatore_cf.h: Definisce le funzioni e le strutture necessarie per il calcolo del codice fiscale.
  3. calcolatore_cf.c: Implementa le funzioni definite in calcolatore_cf.h.

Passaggi

  1. Creare il file calcolatore_cf.h:

    • Definire le funzioni e le strutture per il calcolo del codice fiscale.
  2. Creare il file calcolatore_cf.c:

    • Implementare le funzioni definite in calcolatore_cf.h.
  3. Creare il file main.c:

    • Gestire l’interazione con l’utente e chiamare le funzioni per il calcolo del codice fiscale.

Codice del Progetto

calcolatore_cf.h

#ifndef CALCOLATORE_CF_H
#define CALCOLATORE_CF_H
void calcola_codice_fiscale(char *nome, char *cognome, char *data_nascita, char sesso, char *comune, char *codice_fiscale);
#endif

calcolatore_cf.c

#include "calcolatore_cf.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// Dizionario dei comuni e codici catastali (solo esempi, da completare)
typedef struct {
char nome[50];
char codice[5];
} Comune;
Comune comuni[] = {
{"ROMA", "H501"},
{"MILANO", "F205"},
{"NAPOLI", "F839"},
// Aggiungi altri comuni qui
};
char get_mese_codice(char mese) {
switch (mese) {
case '1': return 'A';
case '2': return 'B';
case '3': return 'C';
case '4': return 'D';
case '5': return 'E';
case '6': return 'H';
case '7': return 'L';
case '8': return 'M';
case '9': return 'P';
case '10': return 'R';
case '11': return 'S';
case '12': return 'T';
default: return ' ';
}
}
void estrai_consonanti(char *input, char *output) {
int j = 0;
for (int i = 0; i < strlen(input); i++) {
if (!strchr("AEIOUaeiou", input[i])) {
output[j++] = toupper(input[i]);
}
}
output[j] = '\0';
}
void estrai_vocali(char *input, char *output) {
int j = 0;
for (int i = 0; i < strlen(input); i++) {
if (strchr("AEIOUaeiou", input[i])) {
output[j++] = toupper(input[i]);
}
}
output[j] = '\0';
}
void compila_nome_cognome(char *input, char *output, int is_nome) {
char consonanti[50], vocali[50];
estrai_consonanti(input, consonanti);
estrai_vocali(input, vocali);
if (is_nome && strlen(consonanti) > 3) {
output[0] = consonanti[0];
output[1] = consonanti[2];
output[2] = consonanti[3];
} else {
snprintf(output, 4, "%-3.3s", strcat(consonanti, vocali));
}
}
void calcola_codice_fiscale(char *nome, char *cognome, char *data_nascita, char sesso, char *comune, char *codice_fiscale) {
char parte_cognome[4] = {0}, parte_nome[4] = {0}, parte_data[6] = {0}, parte_comune[5] = {0};
int giorno, mese, anno;
// Calcolo parte del cognome
compila_nome_cognome(cognome, parte_cognome, 0);
// Calcolo parte del nome
compila_nome_cognome(nome, parte_nome, 1);
// Calcolo parte della data di nascita e sesso
sscanf(data_nascita, "%2d/%2d/%4d", &giorno, &mese, &anno);
parte_data[0] = (anno / 10 % 10) + '0';
parte_data[1] = (anno % 10) + '0';
parte_data[2] = get_mese_codice(mese + '0');
if (sesso == 'F') {
giorno += 40;
}
snprintf(parte_data + 3, 3, "%02d", giorno);
// Calcolo parte del comune
for (int i = 0; i < sizeof(comuni) / sizeof(comuni[0]); i++) {
if (strcmp(comune, comuni[i].nome) == 0) {
strcpy(parte_comune, comuni[i].codice);
break;
}
}
// Concatenazione delle parti
snprintf(codice_fiscale, 17, "%s%s%s%s", parte_cognome, parte_nome, parte_data, parte_comune);
}

main.c

#include <stdio.h>
#include <stdlib.h>
#include "calcolatore_cf.h"
int main() {
char nome[50], cognome[50], data_nascita[11], sesso, comune[50], codice_fiscale[17];
printf("Inserisci il nome: ");
scanf("%s", nome);
printf("Inserisci il cognome: ");
scanf("%s", cognome);
printf("Inserisci la data di nascita (gg/mm/aaaa): ");
scanf("%s", data_nascita);
printf("Inserisci il sesso (M/F): ");
scanf(" %c", &sesso);
printf("Inserisci il comune di nascita: ");
scanf("%s", comune);
calcola_codice_fiscale(nome, cognome, data_nascita, sesso, comune, codice_fiscale);
printf("Il codice fiscale calcolato è: %s\n", codice_fiscale);
return 0;
}

Istruzioni per l’Esecuzione

  1. Compilare il programma:

    Terminal window
    gcc -o calcolatore_cf main.c calcolatore_cf.c
  2. Eseguire il programma:

    Terminal window
    ./calcolatore_cf
  3. Interazione con l’utente:

    • Inserisci il nome.
    • Inserisci il cognome.
    • Inserisci la data di nascita (formato gg/mm/aaaa).
    • Inserisci il sesso (M/F).
    • Inserisci il comune di nascita.
    • Il programma calcolerà e mostrerà il codice fiscale.

Estensioni Possibili

  1. Validazione avanzata: Aggiungere controlli per validare l’input dell’utente.
  2. Database dei comuni: Utilizzare un database completo dei codici catastali per i comuni italiani.
  3. Interfaccia grafica: Creare una semplice interfaccia grafica per il calcolatore di codice fiscale utilizzando librerie grafiche come GTK o Qt.