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
- Linguaggio di Programmazione: C
- Interfaccia Utente: Interfaccia a riga di comando
- Funzionalità :
- Inserimento di nome, cognome, data di nascita, sesso e comune di nascita
- Calcolo del codice fiscale basato sugli algoritmi ufficiali
Struttura del Progetto
- main.c: Contiene il main del programma e la logica per il calcolo del codice fiscale.
- calcolatore_cf.h: Definisce le funzioni e le strutture necessarie per il calcolo del codice fiscale.
- calcolatore_cf.c: Implementa le funzioni definite in
calcolatore_cf.h
.
Passaggi
-
Creare il file
calcolatore_cf.h
:- Definire le funzioni e le strutture per il calcolo del codice fiscale.
-
Creare il file
calcolatore_cf.c
:- Implementare le funzioni definite in
calcolatore_cf.h
.
- Implementare le funzioni definite in
-
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
-
Compilare il programma:
Terminal window gcc -o calcolatore_cf main.c calcolatore_cf.c -
Eseguire il programma:
Terminal window ./calcolatore_cf -
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
- Validazione avanzata: Aggiungere controlli per validare l’input dell’utente.
- Database dei comuni: Utilizzare un database completo dei codici catastali per i comuni italiani.
- Interfaccia grafica: Creare una semplice interfaccia grafica per il calcolatore di codice fiscale utilizzando librerie grafiche come GTK o Qt.