/*
AUTORE: Manuel Vichi
(WIP) ticoprof struct 5
*/
#include <iostream>
#include <ctime>
#define SIZE 5
using namespace std;
typedef struct {
	char lettera;
	int numero;
} LivelloLinguistico;

typedef struct {
	int anno;
	char sezione;
} Classe;

typedef struct {
	int codiceStudente;
	Classe classe;
	LivelloLinguistico livelloLinguistico;
} Studente;

void generaStudenti(Studente studenti[], size_t size) {
	srand(time(NULL)); // Inizializza il generatore casuale
	for (size_t i = 0; i < size; i++) {
		studenti[i].codiceStudente = (rand() % 99999) + 10000;
		studenti[i].classe.anno = rand() % 6 + 1;
		studenti[i].classe.sezione = 'A' + rand() % 26;
		studenti[i].livelloLinguistico.lettera = 'A' + rand() % 3;
		studenti[i].classe.anno = rand() % 2 + 1;
	}
}

void stampaStudenti(const Studente studenti[], size_t size) {
	for (size_t i = 0; i < size; i++) {
		cout << "Studente #" << studenti[i].codiceStudente << " : Classe " << studenti[i].classe.anno << studenti[i].classe.sezione << ", Livello Linguistico: " << studenti[i].livelloLinguistico.lettera << studenti[i].classe.anno << endl;
	}
}

void confrontaStudente(const Studente studente[], size_t size) {
	for (size_t i = 0; i < size; i++) {
		for (size_t j = i + 1; j < size; j++) {
			if (studente[i].classe.anno < studente[j].classe.anno) {
				if (studente[i].livelloLinguistico.lettera == studente[j].livelloLinguistico.lettera) {
					if (studente[i].livelloLinguistico.numero < studente[j].livelloLinguistico.numero) {
						cout << "Lo studente #" << studente[i].codiceStudente << " ha un livello linguistico maggiore dello studente #" << studente[j].codiceStudente << " nonostante frequenti una classe inferiore." << endl;
						cout << "Studente #" << studente[i].codiceStudente << " : Classe " << studente[i].classe.anno << studente[i].classe.sezione << ", Livello Linguistico: " << studente[i].livelloLinguistico.lettera << studente[i].classe.anno << endl;
						cout << "Studente #" << studente[j].codiceStudente << " : Classe " << studente[j].classe.anno << studente[j].classe.sezione << ", Livello Linguistico: " << studente[j].livelloLinguistico.lettera << studente[j].classe.anno << endl;
					}
				}
				else if (studente[i].livelloLinguistico.lettera > studente[j].livelloLinguistico.lettera) {
					cout << "Lo studente #" << studente[i].codiceStudente << " ha un livello linguistico maggiore dello studente #" << studente[j].codiceStudente << " nonostante frequenti una classe inferiore." << endl;
					cout << "Studente #" << studente[i].codiceStudente << " : Classe " << studente[i].classe.anno << studente[i].classe.sezione << ", Livello Linguistico: " << studente[i].livelloLinguistico.lettera << studente[i].classe.anno << endl;
					cout << "Studente #" << studente[j].codiceStudente << " : Classe " << studente[j].classe.anno << studente[j].classe.sezione << ", Livello Linguistico: " << studente[j].livelloLinguistico.lettera << studente[j].classe.anno << endl;
				}
			}
			else if (studente[i].classe.anno > studente[j].classe.anno) {
				if (studente[j].livelloLinguistico.lettera == studente[i].livelloLinguistico.lettera) {
					if (studente[j].livelloLinguistico.numero < studente[i].livelloLinguistico.numero) {
						cout << "Lo studente #" << studente[j].codiceStudente << " ha un livello linguistico maggiore dello studente #" << studente[i].codiceStudente << " nonostante frequenti una classe inferiore." << endl;
						cout << "Studente #" << studente[i].codiceStudente << " : Classe " << studente[i].classe.anno << studente[i].classe.sezione << ", Livello Linguistico: " << studente[i].livelloLinguistico.lettera << studente[i].classe.anno << endl;
						cout << "Studente #" << studente[j].codiceStudente << " : Classe " << studente[j].classe.anno << studente[j].classe.sezione << ", Livello Linguistico: " << studente[j].livelloLinguistico.lettera << studente[j].classe.anno << endl;
					}
				}
				else if (studente[j].livelloLinguistico.lettera > studente[i].livelloLinguistico.lettera) {
					cout << "Lo studente #" << studente[j].codiceStudente << " ha un livello linguistico maggiore dello studente #" << studente[i].codiceStudente << " nonostante frequenti una classe inferiore." << endl;
					cout << "Studente #" << studente[i].codiceStudente << " : Classe " << studente[i].classe.anno << studente[i].classe.sezione << ", Livello Linguistico: " << studente[i].livelloLinguistico.lettera << studente[i].classe.anno << endl;
					cout << "Studente #" << studente[j].codiceStudente << " : Classe " << studente[j].classe.anno << studente[j].classe.sezione << ", Livello Linguistico: " << studente[j].livelloLinguistico.lettera << studente[j].classe.anno << endl;
				}
			}
		}
	}
}

int main(void) {
	Studente studenti[SIZE];
	generaStudenti(studenti,SIZE);
//	stampaStudenti(studenti,SIZE);
	confrontaStudente(studenti,SIZE);
	return 0;
}
