Raga ho fatto un piccolo esercizio ma ho delle difficolta al momento della stampa dei dati inseriti.. potete darmi qualche consiglio?
posto codice...
#include <iostream>
#include <cstdlib>
#include <string.h>
#include <conio.h>
#include <stdio.h>
using namespace std;
typedef struct {
int anno;
int mese;
int giorno;
} dataNascita_t;
typedef struct {
char* via;
int nCivico;
char* citta;
char* provincia;
int cap;
} indirizzo_t;
struct dipendente {
char* nome;
char* cognome;
int matricola;
char* mansione;
dataNascita_t data;
indirizzo_t indirizzo;
dipendente* succ;
};
////allocaStringa
//char *allocaStringa(string s){
// char *c = (char *) malloc(s.length() * sizeof(char)+1);
// return strcpy(c, s.c_str());
//}
void controllaData(int aa, int mm, int &gg) {
int max_gg = 0;
if (mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12) {
max_gg = 31;
while (gg < 1 || gg > max_gg) {
cout << "Inserisci il giorno corretto, max " << max_gg << " giorni: ";
cin >> gg;
}
} else if (mm == 2) {
if ((aa - 1968) % 4 == 0)
max_gg = 29;
else
max_gg = 28;
while (gg < 1 || gg > max_gg) {
cout << "Inserisci il giorno corretto, max " << max_gg << " giorni: ";
cin >> gg;
}
} else {
max_gg == 30;
cout << "Inserisci il giorno corretto, max " << max_gg << " giorni: ";
cin >> gg;
}
}
//inserire in testa
void ins_testa(dipendente* &il, string nome, string cognome,
int matricola, string mansione, int aa, int mm, int gg, string via,
int n_civ, string citta, string prov, int cap) {
dipendente* dp2 = NULL;
dp2 = (dipendente *) malloc(sizeof (dipendente));
controllaData(aa, mm, gg);
dp2->nome = (char *) malloc(nome.length() * sizeof (char) + 1);
strcpy(dp2->nome, nome.c_str());
dp2->cognome = (char *) malloc(cognome.length() * sizeof (char) + 1);
strcpy(dp2->cognome, cognome.c_str());
dp2->matricola = matricola;
dp2->mansione = (char *) malloc(mansione.length() * sizeof (char) + 1);
strcpy(dp2->mansione, mansione.c_str());
dp2->indirizzo.via = (char *) malloc(via.length() * sizeof (char) + 1);
strcpy(dp2->indirizzo.via, via.c_str());
dp2->indirizzo.nCivico = n_civ;
dp2->indirizzo.citta = (char *) malloc(citta.length() * sizeof (char) + 1);
strcpy(dp2->indirizzo.citta, citta.c_str());
dp2->indirizzo.provincia = (char *) malloc(prov.length() * sizeof (char) + 1);
strcpy(dp2->indirizzo.provincia, prov.c_str());
dp2->indirizzo.cap = cap;
dp2->data.anno = aa;
dp2->data.mese = mm;
dp2->data.giorno = gg;
dp2->succ = il;
il = dp2;
}
//stampa la lista
void stampaLista(dipendente* il) {
while (il != NULL) {
cout << "NOME: " << il->nome << endl;
cout << "COGNOME: " << il->cognome << endl;
cout << "MATRICOLA: " << il->matricola << endl;
cout << "MANSIONE: " << il->mansione << endl;
cout << "ANAGRAFICA: \n";
cout << "NATO IL: " << il->data.giorno << "-" << il->data.mese << " - "
<< il->data.anno << endl;
cout << "RESIDENTE IN: \n";
cout << il->indirizzo.via << ", N. " << il->indirizzo.nCivico << endl;
cout << il->indirizzo.citta << endl;
cout << il->indirizzo.cap << endl;
cout << il->indirizzo.provincia << endl;
il = il->succ;
}
cout << "Premi un tasto per continuare...";
while (!kbhit());
}
int main(int argc, char** argv) {
dipendente* il = NULL;
il = (dipendente *) malloc(sizeof (dipendente));
il->succ = NULL;
string nome = "", cognome = "", mansione = "", via = "", citta = "",
prov = "";
int matricola = 0, scelta = -1, aa = 0, mm = 0, gg = 0, nCiv, cap;
//se nn inizializzo almeno un elemento in manuale ottengo stampe
// sballate?? xke nn stampa correttamente in pgni caso?
// il->nome = "Mad";
// il->cognome = "Ground";
// il->matricola = 0001;
// il->mansione = "Direttore";
// il->data.anno = 2005;
// il->data.mese = 5;
// il->data.giorno = 26;
// il->indirizzo.via = "G. Verdi";
// il->indirizzo.nCivico = 65;
// il->indirizzo.citta = "Milano";
// il->indirizzo.cap = 57100;
// il->indirizzo.provincia = "MI";
do {
system("cls");
cout << "PROGRAMMA GESTIONE DIPENDENTI\n";
cout << "1. - PER INSERIRE UN NUOVO DIPENDENTE\n";
cout << "2. - PER STAMPARE LA LISTA DIPENDENTI\n\n";
cout << "0. - PER USCIRE\n\n\n";
cout << "SCEGLIERE -> ";
cin >> scelta;
switch (scelta) {
case 1:
{
cout << "INSERISCI NUOVO DIPENDENTE\n";
cout << "NOME: ";
cin >> nome;
cout << "COGNOME: ";
cin >> cognome;
cout << "MATRICOLA: ";
cin >> matricola;
cout << "MANSIONE: ";
cin >> mansione;
cout << "\nANAGRAFICA DIPENDENTE: \nDATA DI NASCITA:\n";
cout << "ANNO: ";
cin >> aa;
cout << "MESE: ";
cin >> mm;
while(mm < 1 || mm > 12){
cout << "Errore inserire mese corretto, tra 1 e 12: ";
cin >> mm;
}
cout << "GIORNO: ";
cin >> gg;
cout << "INDIRIZZO: ";
cin >> via; //come fargli prendere piu nomi separati?
cout << "NUMERO CIVICO: ";
cin >> nCiv;
cout << "CITTA': ";
cin >> citta; // come sopra...
cout << "PROVINCIA (sigla): ";
cin >> prov;
cout << "CAP: ";
cin >> cap;
ins_testa(il, nome, cognome, matricola, mansione, aa, mm, gg,
via, nCiv, citta, prov, cap);
}
break;
case 2:
stampaLista(il);
break;
}
} while (scelta > 0);
return 0;
}