lollofra

CalcolaTurniH24.cpp

May 4th, 2021
511
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

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×