SHARE
TWEET

Untitled

a guest Nov 19th, 2019 85 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  *  Oblig_4
  3.  *
  4.  *  vektlegger:
  5.  *      - struct
  6.  *      - array
  7.  *      - funksjoner
  8.  *      - pekere
  9.  *      - memory
  10.  *
  11.  *  programmet
  12.  *      - holde orden på et arrangement
  13.  *      - ulike oppgaver/gjøremål og bestemt antall personer tildelt til oppgaven
  14.  *      - max 6 personer per oppgave
  15.  *      - max 20 oppgaver
  16.  *      - legge til nye og fjerne gamle oppgaver
  17.  *      - rense memory
  18.  *
  19.  *  @file   Oblig_4.C
  20.  *  @author Chi Hou Fung
  21.  */
  22.  
  23. #include <stdio.h>
  24. #include <stdbool.h>
  25. #include <string.h>
  26. #include <stdlib.h>
  27. #include "LesData.h"
  28.  
  29. #define MAXPERS 6           ///< universal variabel for max personer
  30. #define MAXOPPG 20          ///< universal variabel for max oppgaver
  31.  
  32. /**
  33.  * Oppgave (med navn, totalt antall personer, midlertiodig antall personer
  34.  * og array med personers ID)
  35.  */
  36.  struct Oppgave {
  37.      char* navn;
  38.      int   antallTotalt,
  39.            antallNaa;
  40.      int hvem[MAXPERS];
  41.  };
  42.  
  43.  void fjernOppgave();
  44.  void ledigeOppgaver();
  45.  void nyOppgave();
  46.  void oppgaveLesData(struct Oppgave* oppgave);
  47.  bool oppgaveLedigPlass(const struct Oppgave* oppgave);
  48.  void oppgaveSkrivData(const struct Oppgave* oppgave);
  49.  void oppgaveTilknyttPersoner(struct Oppgave* oppgave);
  50.  void personerTilknyttesOppgave();
  51.  void oppgaveSlettData(struct Oppgave* oppgave);
  52.  void skrivMeny();
  53.  void skrivOppgaver();
  54.  
  55.  struct Oppgave* gOppgavene[MAXOPPG];       //oppgavene i oversikten
  56.  int gSisteOppgave = 0;                     //antall oppgaver hittil
  57.  
  58.  /**
  59.   * Hovedprogrammet
  60.   */
  61. int main() {
  62.     char kommando;
  63.  
  64.     skrivMeny();
  65.     kommando = lesChar("Kommando");
  66.  
  67.     while (kommando != 'Q') {
  68.         switch (kommando) {
  69.             case 'N': nyOppgave();                  break;
  70.             case 'A': skrivOppgaver();              break;
  71.             case 'L': ledigeOppgaver();             break;
  72.             case 'T': personerTilknyttesOppgave();  break;
  73.             case 'F': fjernOppgave();               break;
  74.             default:  skrivMeny();                  break;
  75.         }
  76.         kommando = lesChar("\nKommando");
  77.     }
  78.     return 0;
  79. }
  80.  
  81. /**
  82.  * legger inn (om mulig) ny oppgave)
  83.  *
  84.  * @see OppgaveLesData(struct Oppgave* oppgave)
  85.  */
  86. void nyOppgave() {
  87.     if (gSisteOppgave < MAXOPPG) {
  88.         printf("\nOppgave nr. %i\n", gSisteOppgave+1);
  89.         gOppgavene[gSisteOppgave] = (struct Oppgave*) malloc(sizeof(struct Oppgave));
  90.         oppgaveLesData(gOppgavene[gSisteOppgave]);
  91.         gSisteOppgave++;
  92.     } else {
  93.         printf("Du har n�dd max. antall oppgaver: %i\n", MAXOPPG);
  94.     }
  95. }
  96.  
  97. /**
  98.  * leser inn dataene til structen
  99.  *
  100.  * @param oppgave - structen som får innlest data
  101.  */
  102. void oppgaveLesData(struct Oppgave* oppgave) {
  103.     oppgave->navn = lagOgLesText("Navn");
  104.     oppgave->antallTotalt = lesInt("Antall personer", 0, MAXPERS);
  105.     oppgave->antallNaa = 0;
  106. }
  107.  /**
  108.   * skriver ut masse printf'er som emny for koden
  109.   */
  110.  
  111. void skrivMeny() {
  112.     printf("Tilgjengelig kommandoer:\n");
  113.     printf("\tN - Ny Oppgave\n");
  114.     printf("\tA - Skriv ut alle eksisterende oppgaver\n");
  115.     printf("\tL - Sjekke ledige oppgaver\n");
  116.     printf("\tT - Tilfoye personer til oppgave(r)\n");
  117.     printf("\tF - Fjern en oppgave\n");
  118.     printf("\tQ - Avslutt\n\n");
  119. }
  120.  
  121. /**
  122.  * får gjennom alle nåværende oppgaver, og sørger for
  123.  * at alle data om hver av dem blir skrevet ut
  124.  *
  125.  * @param oppgaveskrivdata (const struct Oppgave* oppgave)
  126.  */
  127. void skrivOppgaver()  {
  128.     printf("Informasjon om eksisterende oppgaver:\n\n");
  129.     for (int i = 0;  i < gSisteOppgave;  i++) {
  130.         oppgaveSkrivData(gOppgavene[i]);
  131.     }
  132. }
  133.  
  134. /**
  135.  * skriver alle data om en struct
  136.  *
  137.  * @param oppgave - structen som får skrevet ut alle sine data
  138.  */
  139. void oppgaveSkrivData(const struct Oppgave* oppgave) {
  140.     printf("\tNavn: %s\n\tAntall personer: %i\n\tAntall nu: %i\n",
  141.            oppgave->navn, oppgave->antallTotalt, oppgave->antallNaa);
  142. }
  143.  
  144. /**
  145.  * går gjennom alle nåværende oppgaver, og sørger
  146.  * for at alle data om hver av dem som ikke er oppfylt med nokk personer blir skrevet ut
  147.  *
  148.  * @param oppgaveLedigPlass(const struct Oppgave* oppgave)
  149.  */
  150. void ledigeOppgaver() {
  151.     for (int i = 0; i < gSisteOppgave; i++) {
  152.         if (oppgaveLedigPlass(gOppgavene[i])) {
  153.             printf("Ledige oppgave(r):\n");
  154.             oppgaveSkrivData(gOppgavene[i]);
  155.         } else {
  156.             printf("Ingen ledige oppgave(r)");
  157.         }
  158.     }
  159. }
  160.  
  161. /**
  162.  * returnerer true/false til om oppgaven ikke er oppfylt med nok personer
  163.  *
  164.  * @param oppgave - structen som skal skjekkes
  165.  */
  166. bool oppgaveLedigPlass(const struct Oppgave* oppgave) {
  167.     if ((oppgave->antallNaa) < (oppgave->antallTotalt)) {
  168.         return true;
  169.     } else {
  170.         return false;
  171.     }
  172. }
  173.  
  174. /**
  175.  * tilknytter personer til en valgt oppgave
  176.  *
  177.  * @param oppgaveTilknyttPersoner (struct Oppgave* oppgave)
  178.  * @param oppgaveSkrivData (const struct Oppgave* oppgave)
  179.  */
  180. void personerTilknyttesOppgave() {
  181.     int tall;
  182.  
  183.     if (gSisteOppgave == 0)
  184.         printf("Det er ingen oppgaver tilgjengelig.\n");
  185.     else
  186.     {
  187.         tall = lesInt("Skriv et oppgavenummer: ", 0, gSisteOppgave);
  188.             if (tall == 0)
  189.                 printf("Du angrer.\n");
  190.             else
  191.                 oppgaveSkrivData(gOppgavene[tall - 1]);
  192.                 oppgaveTilknyttPersoner(gOppgavene[tall - 1]);
  193.                 oppgaveSkrivData(gOppgavene[tall - 1]);
  194.     }
  195.  
  196.  
  197. }
  198.  
  199. /**
  200.  * leser inn antall personer som tilknyttes til valgt oppgave
  201.  * og gir ID til personene
  202.  *
  203.  * @param oppgave - struct som skal bli knyttet til personer
  204.  */
  205. void oppgaveTilknyttPersoner(struct Oppgave* oppgave)
  206. {
  207.     int lestInn;
  208.  
  209.     if (oppgave->antallNaa == oppgave->antallTotalt)
  210.         printf("Det er fullt med personer.\n");
  211.     else
  212.         lestInn = lesInt("\nAntall personer tilknyttes oppgaven: ", 0, oppgave->antallTotalt - oppgave->antallNaa);
  213.  
  214.         for (int i = 0; i < lestInn; i++)
  215.         {
  216.             lesInt("Ditt nummer ", 1, 1000);
  217.         }
  218.  
  219.     oppgave->antallNaa += lestInn;
  220. }
  221.  
  222. /**
  223.  * fjerner om mulig en oppgave fra lista med oppgaver
  224.  *
  225.  * @param oppgaveSlettData (struct Oppgave* oppgave)
  226.  */
  227. void fjernOppgave()
  228. {
  229.     int slett;
  230.     char kommando;
  231.  
  232.  
  233.     if (gSisteOppgave > 0)
  234.     {                                           //spør bruker om oppgave nr som skal slettes
  235.         slett = lesInt("Nummer for oppgave som skal slettes: ", 0, gSisteOppgave);
  236.  
  237.  
  238.         if (slett != 0)
  239.         {                                       //dobbelskjekker om bruker virkelig vil slette
  240.             kommando = lesChar("Virkelig slette (j/N)?");
  241.  
  242.             if (kommando == 'J')
  243.             {
  244.                 if (slett != gSisteOppgave)
  245.             {                                   //kopierer siste vare til der slettede vare lå
  246.                 gOppgavene[slett-1] = gOppgavene[gSisteOppgave-1];
  247.                 gSisteOppgave--;                //"fjerner" siste vare
  248.                 oppgaveSlettData(gOppgavene[slett-1]);
  249.                 printf("Oppgave nr. %i er fjernet.\n", slett);
  250.             }                                   //spesiell print dersom bruker ikke sletter siste
  251.                 else
  252.                 {
  253.                     gSisteOppgave--;            //fjerner siste vare
  254.                     oppgaveSlettData(gOppgavene[slett-1]);
  255.                     printf("\nSlettet siste.\n");
  256.                 }                               //spesiell print dersom bruker sletter siste
  257.             } else if (kommando != 'J')
  258.                 printf("Ingen slettes.\n");     //angre med å ikke skrive J
  259.         }
  260.         else
  261.             printf("Ingen slettes.\n");         //angre med å skrive 0 som oppgave nr
  262.     } else
  263.         printf("Ingen oppgaver tilgjengelig.\n");
  264.                                                
  265.  
  266.  
  267. }
  268.  
  269. /**
  270.  * sletter alle allokerte data inni en oppgave struct
  271.  *
  272.  * @param oppgave structen som får alle sine data frigitt
  273.  */
  274. void oppgaveSlettData(struct Oppgave* oppgave)
  275. {
  276.     free(oppgave->navn);
  277.     free(oppgave);
  278. }
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
 
Top