Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //CalcolaTurniH24.cpp: Calcola i turni dell'H24 RAI basandosi sull'ultimo turno del mese precedente a quello richiesto
- /* * Copyright © 2021 - 2023 Lorenzo Fiocco <https://lorenzo.fioc.co>
- * This program is free software. It comes without any warranty, to
- * the extent permitted by applicable law. You can redistribute it
- * and/or modify it under the terms of the Do What The F*** You Want
- * To Public License, Version 2, as published by Sam Hocevar. See
- * http://www.wtfpl.net/ for more details. */
- #include <iostream>
- #include <iomanip>
- #include <cstring>
- using namespace std;
- const unsigned short int GiorniMese[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- const string NomeMese[] = {"NULL", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
- const string NomeGiorno[] = {"NULL", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"};
- const string TipoTurno[] = {"NULL", "1° Mattina", "2° Mattina", "Riposo (M)", "1° Pomeriggio", "2° Pomeriggio", "Riposo (P)", "1° Notte", "2° Notte", "1° Riposo (N)", "2° Riposo (N)"};
- const string TipoTurnoLight[] = {"NULL", "M¹", "M²", "R ", "P¹", "P²", "R ", "N¹", "N²", "R ", "R "};
- unsigned short int SelezioneMese();
- unsigned short int SelezioneGiorno(unsigned short int);
- unsigned short int SelezionaTurno(unsigned short int, unsigned short int);
- void CambiaImpostazioni(unsigned short int, unsigned short int, unsigned short int, bool*, bool*, bool*, bool*);
- void StampaTurno(unsigned short int, unsigned short int, unsigned short int, bool, bool, bool, bool);
- int main()
- {
- unsigned short int nMese = SelezioneMese();
- unsigned short int nGiorno = SelezioneGiorno(nMese);
- unsigned short int TurnoPrecedente = SelezionaTurno(nMese, nGiorno);
- bool OpStileCompleto = true, OpStileLight = false, OpGiorno=false, OpFile = false;
- char selezione;
- do {
- cout << endl << "1 - Stampa turno di " << NomeMese[nMese] << endl;
- cout << "2 - Modifica turno da stampare\n3 - Modifica impostazioni\nq - Esci\n: ";
- cin >> setw(1) >> selezione;
- switch (selezione){
- case '1':
- StampaTurno(nMese, nGiorno, TurnoPrecedente, OpStileCompleto, OpStileLight, OpGiorno, OpFile); break;
- case '2':
- nMese = SelezioneMese(); nGiorno = SelezioneGiorno(nMese); TurnoPrecedente = SelezionaTurno(nMese, nGiorno); break;
- case '3':
- CambiaImpostazioni(nMese, nGiorno, TurnoPrecedente, &OpStileCompleto, &OpStileLight, &OpGiorno, &OpFile); break;
- case 'q':
- cout << "\nGrazie e arrivederci!\n\n"; break;
- default:
- cout << "ATTENZIONE: Selezione non conforme!\n\n"; break;
- }
- } while (selezione!='q');
- return 0;
- }
- unsigned short int SelezioneMese(){
- char selezione[2];
- do{
- cout << endl;
- memset(selezione, 0, 2*sizeof(*selezione));
- for (unsigned short int c=1; c<=12; c++)
- cout << setw(2) << c << " - " << NomeMese[c] << endl;
- cout << "Di quale mese vuoi stampare i turni: ";
- cin >> setw(2) >> selezione;
- if ((selezione[0]>='1')&&(selezione[0]<='9')&&(selezione[1]=='\0'))
- return (unsigned short int)selezione[0]-48;
- else if ((selezione[0]=='1')&&(selezione[1]>='0')&&(selezione[1]<='2'))
- return (unsigned short int)selezione[0]+(unsigned short int)selezione[1]-87;
- else
- cout << "ATTENZIONE: Selezione non conforme inserire un numero tra 1 e 12\n";
- } while(true);
- }
- unsigned short int SelezioneGiorno(unsigned short int nMese){
- char selezione;
- nMese = (nMese==1) ? 12 : nMese-1;
- do{
- cout << endl;
- for (unsigned short int c=1; c<=7; c++)
- cout << c << " - " << NomeGiorno[c] << endl;
- cout << "Inserisci il giorno della settimana del " << GiorniMese[nMese] << " " << NomeMese[nMese] << ": ";
- cin >> setw(1) >> selezione;
- if ((selezione>='1')&&(selezione<='7'))
- return (unsigned short int)selezione-48;
- else
- cout << "ATTENZIONE: Selezione non conforme inserire un numero tra 1 e 7\n";
- } while(true);
- }
- unsigned short int SelezionaTurno(unsigned short int nMese, unsigned short int nGiorno){
- char selezione[2];
- nMese = (nMese==1) ? 12 : nMese-1;
- do{
- cout << endl;
- memset(selezione, 0, 2*sizeof(*selezione));
- for (unsigned short int c=1; c<=10; c++)
- cout << setw(2) << c << " - " << TipoTurno[c] << endl;
- cout << "Inserisci il turno di " << NomeGiorno[nGiorno] << " " << GiorniMese[nMese] << " " << NomeMese[nMese] << ": ";
- cin >> setw(2) >> selezione;
- if ((selezione[0]=='1')&&(selezione[1]=='0'))
- return 10;
- else if ((selezione[0]>='1')&&(selezione[0]<='9')&&(selezione[1]=='\0'))
- return (unsigned short int)selezione[0]-48;
- else
- cout << "ATTENZIONE: Selezione non conforme inserire un numero tra 1 e 10\n";
- } while (true);
- }
- void CambiaImpostazioni(unsigned short int nMese, unsigned short int nGiorno, unsigned short int TurnoPrecedente, bool *OpStileCompleto, bool *OpStileLight, bool *OpGiorno, bool *OpFile){
- char selezione;
- bool isOK=true;
- unsigned short int pMese = (nMese==1) ? 12 : nMese-1;
- do{
- cout << endl;
- cout << "Stampo il mese: " << NomeMese[nMese] << endl;
- cout << "Il turno di " << NomeGiorno[nGiorno] << " " << GiorniMese[pMese] << " " << NomeMese[pMese] << " è: " << TipoTurno[TurnoPrecedente] << endl;
- cout << "1 - Turno Completo: " << boolalpha << *OpStileCompleto << endl;
- cout << "2 - Turno Light: " << boolalpha << *OpStileLight << endl;
- cout << "3 - Mostra Giorno: " << boolalpha << *OpGiorno << endl;
- //cout << "4 - Stampa su file: " << boolalpha << *OpFile << endl;
- cout << "Modifica valore (1-3) o esci (q): ";
- cin >> setw(1) >> selezione;
- switch (selezione){
- case '1':
- if ((!*OpStileCompleto==false)&&(*OpStileLight==false))
- cout << "\nATTENZIONE: Almeno una tipologia di output deve essere selezionata\n";
- else *OpStileCompleto=!*OpStileCompleto;
- break;
- case '2':
- if ((*OpStileCompleto==false)&&(!*OpStileLight==false))
- cout << "ATTENZIONE: Almeno una tipologia di output deve essere selezionata\n";
- else *OpStileLight=!*OpStileLight;
- break;
- case '3':
- *OpGiorno=!*OpGiorno; break;
- //case '4':
- //*OpFile = !*OpFile; break;
- case 'q':
- break;
- default:
- cout << "ATTENZIONE: Selezione non conforme!\n"; break;
- }
- } while (selezione!='q');
- }
- void StampaTurno(unsigned short int nMese, unsigned short int nGiorno, unsigned short int TurnoPrecedente, bool OpStileCompleto, bool OpStileLight, bool OpGiorno, bool OpFile){
- unsigned short int pMese = (nMese==12) ? 1 : nMese+1;
- unsigned short int pGiorno = (nGiorno==7) ? 1 : nGiorno+1;
- unsigned short int TurnoAttuale = (TurnoPrecedente==10) ? 1 : TurnoPrecedente+1;
- char selezione;
- bool OpStileAll = ((OpStileCompleto==true)&&(OpStileLight==true)) ? true : false;
- cout << endl << NomeMese[nMese] << ":\n";
- for (unsigned short int c=1; c<=GiorniMese[nMese]; c++){
- if (OpGiorno){
- cout << setw(9) << NomeGiorno[pGiorno] << " ";
- pGiorno = (pGiorno==7) ? 1 : pGiorno+1;
- }
- cout << setw(2) << c << ": ";
- if (OpStileLight)
- cout<< TipoTurnoLight[TurnoAttuale];
- if (OpStileAll)
- cout<<" - ";
- if (OpStileCompleto)
- cout<<TipoTurno[TurnoAttuale];
- cout << endl;
- TurnoAttuale = (TurnoAttuale==10) ? 1 : TurnoAttuale+1;
- }
- do{
- cout << "Vuoi stampare il mese di " << NomeMese[pMese] << " (y/n): ";
- cin >> setw(1) >> selezione;
- if (selezione=='y')
- StampaTurno(pMese, pGiorno-1, TurnoAttuale-1, OpStileCompleto, OpStileLight, OpGiorno, OpFile);
- else if (selezione!='n')
- cout << "ATTENZIONE: Selezione non conforme!\n";
- } while ((selezione!='y')&&(selezione!='n'));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement