SHARE
TWEET

Untitled

a guest Nov 19th, 2019 77 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  *
  3.  *
  4.  * @file    bt.oblig4.c
  5.  * @date    2019-11-19
  6.  * @version 1.0
  7.  * @author  Bjørn-Tore Semb
  8.  */
  9. #include <stdio.h>
  10. #include <stdbool.h>
  11. #include "LesData.h"
  12.  
  13. #define MAXPERS 6 ///< max antall personer per oppgaave
  14. #define MAXOPPG 20 ///< max antall oppgaver det er plass til
  15.  
  16. struct Oppgave *gOppgavene[MAXOPPG]; ///< Array med oppgavepointere
  17.  
  18. //dette navnet ga mye mer mening enn den oppgava spurte om
  19. int gAntallOppgaver = 0; ///< Antall oppgaver lagt inn
  20.  
  21.  
  22. /**
  23.  * Oppgave (med navn, antallTotalt, antallNaa og hvem).
  24.  *
  25.  * navn = navnet på oppgaven
  26.  * antallTotalt = totalt antall som kan arbeide med oppgaven
  27.  * antallnaa = hvor mange som er satt opp på oppgaven nå
  28.  * hvem = hvem som er satt opp på oppgaven
  29.  */
  30. struct Oppgave {
  31.     char *navn;
  32.     int antallTotalt,
  33.             antallNaa;
  34.     int hvem[MAXPERS];
  35. };
  36.  
  37.  
  38. void skrivMeny();
  39. void nyOppgave();
  40. void oppgaveLesData(struct Oppgave *oppgave);
  41. void skrivOppgaver();
  42. void oppgaveSkrivData(const struct Oppgave *oppgave);
  43. void ledigeOppgaver();
  44. bool oppgaveLedigPlass(const struct Oppgave *oppgave);
  45. void personerTilknyttesOppgave();
  46. void oppgaveTilknyttPersoner(struct Oppgave *oppgave);
  47. void fjernOppgave();
  48. void oppgaveSlettData(struct Oppgave *oppgave);
  49.  
  50. /**
  51.  * Hovedprogrammet:
  52.  */
  53. int main() {
  54.     char kommando = ' ';            //tom vaiabel til å lagre en kommando i
  55.  
  56.     printf("Oppgaveplanleggern 1.0\n");
  57.     skrivMeny();                    // skriver ut en meny med mulige valg
  58.  
  59.     while(kommando != 'Q'){         // looper igjennom
  60.  
  61.         kommando = lesChar("\n\nVelg en kommando ");
  62.  
  63.         switch(kommando){
  64.             case 'O':skrivOppgaver();break;
  65.             case 'N':nyOppgave();break;
  66.             case 'L':ledigeOppgaver();break;
  67.             case 'K':personerTilknyttesOppgave();break;
  68.             case 'F':fjernOppgave();break;
  69.             case 'M':skrivMeny();break;
  70.             case 'Q':printf("Avslutter program\n");break;
  71.             default: printf("Ugyldig kommando\n");
  72.         }
  73.     }
  74.     return 0;
  75. }
  76.  
  77. /**
  78.  * Skriver leser inn data til en oppgave og setter.
  79.  *
  80.  * @param oppgave
  81.  */
  82. void oppgaveLesData(struct Oppgave *oppgave) {
  83.     oppgave->navn = lagOgLesText("Navn:   ");
  84.     oppgave->antallTotalt = lesInt("Antall ansvarlige", 1, 6);
  85.     oppgave->antallNaa = 0;
  86. }
  87.  
  88. /**
  89.  * Legger til ny oppgave og fyller inn noe data.
  90.  *
  91.  * legger til en ny oppgave og bruker kan gi den et navn.
  92.  *
  93.  * @see oppgaveLesData(...)
  94.  */
  95. void nyOppgave() {
  96.     if (gAntallOppgaver < MAXOPPG) {
  97.         printf("\tNy oppgave nr:  %i\n", gAntallOppgaver + 1);
  98.         gOppgavene[gAntallOppgaver] = (struct Oppgave *)
  99.                 malloc(sizeof(struct Oppgave));
  100.         oppgaveLesData(gOppgavene[gAntallOppgaver]);
  101.         gAntallOppgaver++;
  102.         printf("Ny oppgave lagt til\n");
  103.     } else {
  104.         printf("\aBeklager, ikke plass til flere oppgaver (%i/%i).\n",
  105.                 gAntallOppgaver, MAXOPPG);
  106.     }
  107. }
  108.  
  109. /**
  110.  * Skriver ut all ifo em en oppgave.
  111.  *
  112.  * @param oppgave
  113.  */
  114. void oppgaveSkrivData(const struct Oppgave *oppgave) {
  115.     printf("Navn  \t: %s\n"
  116.            "Ansvarliges id(%i/%i):\n\t",
  117.            oppgave->navn,
  118.            oppgave->antallNaa,
  119.            oppgave->antallTotalt);
  120.     for (int i = 0; i < oppgave->antallNaa; i++) {
  121.         printf("%i  ", oppgave->hvem[i]);
  122.     }
  123.     printf("\n");
  124. }
  125.  
  126. /**
  127.  * Skriver ut alle oppgavene og data om de.
  128.  *
  129.  * Går igjennom hver oppgave og skriver den ut med all data.
  130.  *
  131.  * @see     oppgaveSkrivData(...)
  132.  */
  133. void skrivOppgaver() {
  134.     printf("Skriver ut alle oppgavene:\n");
  135.     if(gAntallOppgaver != 0){
  136.         for (int i = 0; i < gAntallOppgaver; i++) {
  137.             oppgaveSkrivData(gOppgavene[i]);
  138.         }
  139.     }else{
  140.         printf("Ingen oppgaver lagt inn\n");
  141.     }
  142. }
  143.  
  144. /**
  145.  * Skriver ut oversik over alle ledige oppgaver.
  146.  *
  147.  * Går igjennom hver opppgave og hvis den har ledige plasser, så skriver den ut
  148.  *  den oppgaven.
  149.  *
  150.  *  @see    oppgaveLedigPlass(...)
  151.  */
  152. void ledigeOppgaver() {
  153.     printf("Oppgaver med ledige plasser:\n");
  154.     for (int i = 0; i < gAntallOppgaver; i++) {
  155.         if (oppgaveLedigPlass(gOppgavene[i])) {
  156.             oppgaveSkrivData(gOppgavene[i]);
  157.         }
  158.     }
  159. }
  160.  
  161.  
  162. /**
  163.  * Sjekker om det er ledige plasser på oppgaven
  164.  *
  165.  * @param oppgave
  166.  * @return true/false om det er ledige plasser på oppgaven
  167.  */
  168. bool oppgaveLedigPlass(const struct Oppgave *oppgave) {
  169.     return oppgave->antallNaa < oppgave->antallTotalt;
  170. }
  171.  
  172. /**
  173.  * Knyter personer til oppgaver.
  174.  *
  175.  * @param   oppgave
  176.  * @see     oppgaveSkrivData(...)
  177.  * @see     oppgaveLedigPlass(...)
  178.  */
  179. void oppgaveTilknyttPersoner(struct Oppgave *oppgave) {
  180.     int antall; // antall personer å legge til
  181.     oppgaveSkrivData(oppgave);
  182.     if (oppgaveLedigPlass(oppgave)) {
  183.         printf("Hvor mange vil du sette av til denne oppgaven?\n");
  184.         antall = lesInt("Velg et antall mellom 0",
  185.                 0, (oppgave->antallTotalt - oppgave->antallNaa));
  186.         for (int i = 0; i < antall; i++) {
  187.             oppgave->hvem[oppgave->antallNaa] = lesInt("Person id",
  188.                     1, 1000);
  189.             oppgave->antallNaa++;
  190.         }
  191.         printf("\nOppgaven er oppdatert til følgende:\n");
  192.         oppgaveSkrivData(oppgave);
  193.     } else {
  194.         printf("Beklager, oppgaven er allerede tatt hånd om av ønsket antall "
  195.                "personer.\n");
  196.     }
  197. }
  198.  
  199.  
  200. /**
  201.  * Knytter personer til valgt oppgave.
  202.  *
  203.  * Bruker velger en oppgave og hvor mange personer som skal knyttes til denne.
  204.  *
  205.  * @see oppgaveTilknyttPersoner
  206.  */
  207. void personerTilknyttesOppgave() {
  208.     int valg;
  209.     if (gAntallOppgaver != 0) {
  210.         printf("Velg en oppgave du vil knyte personer til:\n");
  211.         for (int i = 0; i < gAntallOppgaver; i++) {
  212.             printf("\t%i. %s \n", i + 1, gOppgavene[i]->navn);
  213.         }
  214.         printf("\t0. Avbryt\n");
  215.         valg = lesInt("Velg en oppgave:", 0, gAntallOppgaver);
  216.  
  217.         if (valg != 0) {
  218.             oppgaveTilknyttPersoner(gOppgavene[valg - 1]);
  219.         } else {
  220.             printf("Inntasting avbrytes...\n");
  221.         }
  222.     } else {
  223.         printf("\aIngen oppgaver lagt til enda.\n");
  224.     }
  225.  
  226. }
  227.  
  228.  
  229. /**
  230.  * Frigir minne allokert til oppgave.
  231.  *
  232.  * @param oppgave
  233.  */
  234. void oppgaveSlettData(struct Oppgave *oppgave){
  235.     free(oppgave->navn);
  236.     free(oppgave);
  237. }
  238.  
  239.  
  240. /**
  241.  * Sletter ønsket Oppgave.
  242.  *
  243.  * Bruker skriver inn hvilken oppgave de vill slette, og så skjer det.
  244.  *
  245.  * @see oppgaveSlettData(...)
  246.  */
  247. void fjernOppgave(){
  248.     int valg;
  249.     if(gAntallOppgaver != 0){
  250.         printf("Velg en oppgave å fjerne:\n");
  251.         for (int i = 0; i < gAntallOppgaver; i++) {
  252.             printf("\t%i. %s \n", i + 1, gOppgavene[i]->navn);
  253.         }
  254.         printf("\t0. Avbryt\n");
  255.         valg = lesInt("Velg en oppgave:", 0, gAntallOppgaver);
  256.  
  257.         if (valg != 0) {
  258.             if(lesChar("Vil du virkelig fjerne denne "
  259.                        "oppgaven (svar: 'J')? : ") =='J'){
  260.                 if(valg-1 != gAntallOppgaver-1){
  261.                     printf("Fjerner oppgaven og rydder i oppgavelista.\n");
  262.                     oppgaveSlettData(gOppgavene[valg-1]);
  263.                     gOppgavene[valg-1] = gOppgavene[gAntallOppgaver - 1];
  264.                     gOppgavene[gAntallOppgaver-1]=NULL;
  265.                 }else{
  266.                     printf("fjerner oppgaven\n");
  267.                     oppgaveSlettData(gOppgavene[valg-1]);
  268.                 }
  269.                 gAntallOppgaver--;
  270.             }else{
  271.                 printf("Fjerning avbrytes...\n");
  272.             }
  273.         } else {
  274.             printf("Fjerning avbrytes...\n");
  275.         }
  276.     }else{
  277.         printf("Ingen oppgaver lagt inn.\n");
  278.     }
  279. }
  280.  
  281.  
  282. /**
  283.  *  Skriver programmets menyvalg/muligheter på skjermen.
  284.  */
  285. void skrivMeny()  {
  286.     printf("\nFølgende kommandoer er tilgjengelig:\n");
  287.     printf("\tO = Oversikt over oppgavene\n");
  288.     printf("\tN = Registrer ny oppgave\n");
  289.     printf("\tL = Finn ledige oppgaver\n");
  290.     printf("\tK = Knyt personer til oppgaver\n");
  291.     printf("\tF = Fjern en oppgave\n");
  292.     printf("\tM = Se denne menyen\n");
  293.     printf("\tQ - Quit / avslutt\n");
  294. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top