Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.01 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement