lollofra

CalcolaTurniH24.cpp

May 4th, 2021
550
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //CalcolaTurniH24.cpp: Calcola i turni dell'H24 RAI basandosi sull'ultimo turno del mese precedente a quello richiesto
  2. /*   * Copyright © 2021 Lorenzo Fiocco <https://fiocco.io>
  3.      * This program is free software. It comes without any warranty, to
  4.      * the extent permitted by applicable law. You can redistribute it
  5.      * and/or modify it under the terms of the Do What The F*** You Want
  6.      * To Public License, Version 2, as published by Sam Hocevar. See
  7.      * http://www.wtfpl.net/ for more details. */
  8.  
  9. #include <iostream>
  10. #include <iomanip>
  11. #include <cstring>
  12. using namespace std;
  13.  
  14. const unsigned short int GiorniMese[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  15. const string NomeMese[] = {"NULL", "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"};
  16. const string NomeGiorno[] = {"NULL", "Lunedi", "Martedi", "Mercoledi", "Giovedi", "Venerdi", "Sabato", "Domenica"};
  17. 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)"};
  18. const string TipoTurnoLight[] = {"NULL", "M¹", "M²", "R ", "P¹", "P²", "R ", "N¹", "N²", "R ", "R "};
  19.  
  20. unsigned short int SelezioneMese();
  21. unsigned short int SelezioneGiorno(unsigned short int);
  22. unsigned short int SelezionaTurno(unsigned short int, unsigned short int);
  23. void CambiaImpostazioni(unsigned short int, unsigned short int, unsigned short int, bool*, bool*, bool*, bool*);
  24. void StampaTurno(unsigned short int, unsigned short int, unsigned short int, bool, bool, bool, bool);
  25.  
  26. int main()
  27. {
  28.     unsigned short int nMese = SelezioneMese();
  29.     unsigned short int nGiorno = SelezioneGiorno(nMese);
  30.     unsigned short int TurnoPrecedente = SelezionaTurno(nMese, nGiorno);
  31.     bool OpStileCompleto = true, OpStileLight = false, OpGiorno=false, OpFile = false;
  32.     char selezione;
  33.     do {
  34.         cout << endl << "1 - Stampa turno di " << NomeMese[nMese] << endl;
  35.         cout << "2 - Modifica turno da stampare\n3 - Modifica impostazioni\nq - Esci\n: ";
  36.         cin >> setw(1) >> selezione;
  37.         switch (selezione){
  38.             case '1':
  39.                 StampaTurno(nMese, nGiorno, TurnoPrecedente, OpStileCompleto, OpStileLight, OpGiorno, OpFile); break;
  40.             case '2':
  41.                 nMese = SelezioneMese(); nGiorno = SelezioneGiorno(nMese); TurnoPrecedente = SelezionaTurno(nMese, nGiorno); break;
  42.             case '3':
  43.                 CambiaImpostazioni(nMese, nGiorno, TurnoPrecedente, &OpStileCompleto, &OpStileLight, &OpGiorno, &OpFile); break;
  44.             case 'q':
  45.                 cout << "\nGrazie e arrivederci!\n\n"; break;
  46.             default:
  47.                 cout << "ATTENZIONE: Selezione non conforme!\n\n"; break;
  48.         }
  49.     } while (selezione!='q');
  50.     return 0;
  51. }
  52.  
  53. unsigned short int SelezioneMese(){
  54.     char selezione[2];
  55.     do{
  56.         cout << endl;
  57.         memset(selezione, 0, 2*sizeof(*selezione));
  58.         for (unsigned short int c=1; c<=12; c++)
  59.             cout << setw(2) << c << " - " << NomeMese[c] << endl;
  60.         cout << "Di quale mese vuoi stampare i turni: ";
  61.         cin >> setw(2) >> selezione;
  62.         if ((selezione[0]>='1')&&(selezione[0]<='9')&&(selezione[1]=='\0'))
  63.             return (unsigned short int)selezione[0]-48;
  64.         else if ((selezione[0]=='1')&&(selezione[1]>='0')&&(selezione[1]<='2'))
  65.             return (unsigned short int)selezione[0]+(unsigned short int)selezione[1]-87;
  66.         else
  67.             cout << "ATTENZIONE: Selezione non conforme inserire un numero tra 1 e 12\n";
  68.     } while(true);
  69. }
  70.  
  71. unsigned short int SelezioneGiorno(unsigned short int nMese){
  72.     char selezione;
  73.     nMese = (nMese==1) ? 12 : nMese-1;
  74.     do{
  75.         cout << endl;
  76.         for (unsigned short int c=1; c<=7; c++)
  77.             cout << c << " - " << NomeGiorno[c] << endl;
  78.         cout << "Inserisci il giorno della settimana del " << GiorniMese[nMese] << " " << NomeMese[nMese] << ": ";
  79.         cin >> setw(1) >> selezione;
  80.         if ((selezione>='1')&&(selezione<='7'))
  81.             return (unsigned short int)selezione-48;
  82.         else
  83.             cout << "ATTENZIONE: Selezione non conforme inserire un numero tra 1 e 7\n";
  84.     } while(true);
  85. }
  86.  
  87. unsigned short int SelezionaTurno(unsigned short int nMese, unsigned short int nGiorno){
  88.     char selezione[2];
  89.     nMese = (nMese==1) ? 12 : nMese-1;
  90.     do{
  91.         cout << endl;
  92.         memset(selezione, 0, 2*sizeof(*selezione));
  93.         for (unsigned short int c=1; c<=10; c++)
  94.             cout << setw(2) << c << " - " << TipoTurno[c] << endl;
  95.         cout << "Inserisci il turno di " << NomeGiorno[nGiorno] << " " << GiorniMese[nMese] << " " << NomeMese[nMese] << ": ";
  96.         cin >> setw(2) >> selezione;
  97.         if ((selezione[0]=='1')&&(selezione[1]=='0'))
  98.             return 10;
  99.         else if ((selezione[0]>='1')&&(selezione[0]<='9')&&(selezione[1]=='\0'))
  100.             return (unsigned short int)selezione[0]-48;
  101.         else
  102.             cout << "ATTENZIONE: Selezione non conforme inserire un numero tra 1 e 10\n";
  103.     } while (true);
  104. }
  105.  
  106. void CambiaImpostazioni(unsigned short int nMese, unsigned short int nGiorno, unsigned short int TurnoPrecedente, bool *OpStileCompleto, bool *OpStileLight, bool *OpGiorno, bool *OpFile){
  107.     char selezione;
  108.     bool isOK=true;
  109.     unsigned short int pMese = (nMese==1) ? 12 : nMese-1;
  110.     do{
  111.         cout << endl;
  112.         cout << "Stampo il mese: " << NomeMese[nMese] << endl;
  113.         cout << "Il turno di " << NomeGiorno[nGiorno] << " " << GiorniMese[pMese] << " " << NomeMese[pMese] << " è: " << TipoTurno[TurnoPrecedente] << endl;
  114.         cout << "1 - Turno Completo: " << boolalpha << *OpStileCompleto << endl;
  115.         cout << "2 - Turno Light:    " << boolalpha << *OpStileLight << endl;
  116.         cout << "3 - Mostra Giorno:  " << boolalpha << *OpGiorno << endl;
  117.         //cout << "4 - Stampa su file: " << boolalpha << *OpFile << endl;
  118.         cout << "Modifica valore (1-3) o esci (q): ";
  119.         cin >> setw(1) >> selezione;
  120.         switch (selezione){
  121.             case '1':
  122.                 if ((!*OpStileCompleto==false)&&(*OpStileLight==false))
  123.                     cout << "\nATTENZIONE: Almeno una tipologia di output deve essere selezionata\n";
  124.                     else *OpStileCompleto=!*OpStileCompleto;
  125.                 break;
  126.             case '2':
  127.                 if ((*OpStileCompleto==false)&&(!*OpStileLight==false))
  128.                     cout << "ATTENZIONE: Almeno una tipologia di output deve essere selezionata\n";
  129.                     else *OpStileLight=!*OpStileLight;
  130.                 break;
  131.             case '3':
  132.                 *OpGiorno=!*OpGiorno; break;
  133.             //case '4':
  134.                 //*OpFile = !*OpFile; break;
  135.             case 'q':
  136.                 break;
  137.             default:
  138.                 cout << "ATTENZIONE: Selezione non conforme!\n"; break;
  139.         }
  140.     } while (selezione!='q');
  141. }
  142.  
  143. void StampaTurno(unsigned short int nMese, unsigned short int nGiorno, unsigned short int TurnoPrecedente, bool OpStileCompleto, bool OpStileLight, bool OpGiorno, bool OpFile){
  144.     unsigned short int pMese = (nMese==12) ? 1 : nMese+1;
  145.     unsigned short int pGiorno = (nGiorno==7) ? 1 : nGiorno+1;
  146.     unsigned short int TurnoAttuale = (TurnoPrecedente==10) ? 1 : TurnoPrecedente+1;
  147.     char selezione;
  148.     bool OpStileAll = ((OpStileCompleto==true)&&(OpStileLight==true)) ? true : false;
  149.     cout << endl << NomeMese[nMese] << ":\n";
  150.     for (unsigned short int c=1; c<=GiorniMese[nMese]; c++){
  151.         if (OpGiorno){
  152.             cout << setw(9) << NomeGiorno[pGiorno] << " ";
  153.             pGiorno = (pGiorno==7) ? 1 : pGiorno+1;
  154.         }
  155.         cout << setw(2) << c << ": ";
  156.         if (OpStileLight)
  157.             cout<< TipoTurnoLight[TurnoAttuale];
  158.         if (OpStileAll)
  159.             cout<<" - ";
  160.         if (OpStileCompleto)
  161.             cout<<TipoTurno[TurnoAttuale];
  162.         cout << endl;
  163.         TurnoAttuale = (TurnoAttuale==10) ? 1 : TurnoAttuale+1;
  164.     }
  165.     do{
  166.         cout << "Vuoi stampare il mese di " << NomeMese[pMese] << " (y/n): ";
  167.         cin >> setw(1) >> selezione;
  168.         if (selezione=='y')
  169.             StampaTurno(pMese, pGiorno-1, TurnoAttuale-1, OpStileCompleto, OpStileLight, OpGiorno, OpFile);
  170.         else if (selezione!='n')
  171.             cout << "ATTENZIONE: Selezione non conforme!\n";
  172.     } while ((selezione!='y')&&(selezione!='n'));
  173. }
RAW Paste Data