Progetto: Calcolatore di Codice Fiscale in C
Codegrind Team•Jul 12 2024
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:
gcc -o calcolatore_cf main.c calcolatore_cf.c
-
Eseguire il programma:
./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.