Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *
- *
- * @file bt.oblig4.c
- * @date 2019-11-19
- * @version 1.0
- * @author Bjørn-Tore Semb
- */
- #include <stdio.h>
- #include <stdbool.h>
- #include "LesData.h"
- #define MAXPERS 6 ///< max antall personer per oppgaave
- #define MAXOPPG 20 ///< max antall oppgaver det er plass til
- struct Oppgave *gOppgavene[MAXOPPG]; ///< Array med oppgavepointere
- //dette navnet ga mye mer mening enn den oppgava spurte om
- int gAntallOppgaver = 0; ///< Antall oppgaver lagt inn
- /**
- * Oppgave (med navn, antallTotalt, antallNaa og hvem).
- *
- * navn = navnet på oppgaven
- * antallTotalt = totalt antall som kan arbeide med oppgaven
- * antallnaa = hvor mange som er satt opp på oppgaven nå
- * hvem = hvem som er satt opp på oppgaven
- */
- struct Oppgave {
- char *navn;
- int antallTotalt,
- antallNaa;
- int hvem[MAXPERS];
- };
- void skrivMeny();
- void nyOppgave();
- void oppgaveLesData(struct Oppgave *oppgave);
- void skrivOppgaver();
- void oppgaveSkrivData(const struct Oppgave *oppgave);
- void ledigeOppgaver();
- bool oppgaveLedigPlass(const struct Oppgave *oppgave);
- void personerTilknyttesOppgave();
- void oppgaveTilknyttPersoner(struct Oppgave *oppgave);
- void fjernOppgave();
- void oppgaveSlettData(struct Oppgave *oppgave);
- /**
- * Hovedprogrammet:
- */
- int main() {
- char kommando = ' '; //tom vaiabel til å lagre en kommando i
- printf("Oppgaveplanleggern 1.0\n");
- skrivMeny(); // skriver ut en meny med mulige valg
- while(kommando != 'Q'){ // looper igjennom
- kommando = lesChar("\n\nVelg en kommando ");
- switch(kommando){
- case 'O':skrivOppgaver();break;
- case 'N':nyOppgave();break;
- case 'L':ledigeOppgaver();break;
- case 'K':personerTilknyttesOppgave();break;
- case 'F':fjernOppgave();break;
- case 'M':skrivMeny();break;
- case 'Q':printf("Avslutter program\n");break;
- default: printf("Ugyldig kommando\n");
- }
- }
- return 0;
- }
- /**
- * Skriver leser inn data til en oppgave og setter.
- *
- * @param oppgave
- */
- void oppgaveLesData(struct Oppgave *oppgave) {
- oppgave->navn = lagOgLesText("Navn: ");
- oppgave->antallTotalt = lesInt("Antall ansvarlige", 1, 6);
- oppgave->antallNaa = 0;
- }
- /**
- * Legger til ny oppgave og fyller inn noe data.
- *
- * legger til en ny oppgave og bruker kan gi den et navn.
- *
- * @see oppgaveLesData(...)
- */
- void nyOppgave() {
- if (gAntallOppgaver < MAXOPPG) {
- printf("\tNy oppgave nr: %i\n", gAntallOppgaver + 1);
- gOppgavene[gAntallOppgaver] = (struct Oppgave *)
- malloc(sizeof(struct Oppgave));
- oppgaveLesData(gOppgavene[gAntallOppgaver]);
- gAntallOppgaver++;
- printf("Ny oppgave lagt til\n");
- } else {
- printf("\aBeklager, ikke plass til flere oppgaver (%i/%i).\n",
- gAntallOppgaver, MAXOPPG);
- }
- }
- /**
- * Skriver ut all ifo em en oppgave.
- *
- * @param oppgave
- */
- void oppgaveSkrivData(const struct Oppgave *oppgave) {
- printf("Navn \t: %s\n"
- "Ansvarliges id(%i/%i):\n\t",
- oppgave->navn,
- oppgave->antallNaa,
- oppgave->antallTotalt);
- for (int i = 0; i < oppgave->antallNaa; i++) {
- printf("%i ", oppgave->hvem[i]);
- }
- printf("\n");
- }
- /**
- * Skriver ut alle oppgavene og data om de.
- *
- * Går igjennom hver oppgave og skriver den ut med all data.
- *
- * @see oppgaveSkrivData(...)
- */
- void skrivOppgaver() {
- printf("Skriver ut alle oppgavene:\n");
- if(gAntallOppgaver != 0){
- for (int i = 0; i < gAntallOppgaver; i++) {
- oppgaveSkrivData(gOppgavene[i]);
- }
- }else{
- printf("Ingen oppgaver lagt inn\n");
- }
- }
- /**
- * Skriver ut oversik over alle ledige oppgaver.
- *
- * Går igjennom hver opppgave og hvis den har ledige plasser, så skriver den ut
- * den oppgaven.
- *
- * @see oppgaveLedigPlass(...)
- */
- void ledigeOppgaver() {
- printf("Oppgaver med ledige plasser:\n");
- for (int i = 0; i < gAntallOppgaver; i++) {
- if (oppgaveLedigPlass(gOppgavene[i])) {
- oppgaveSkrivData(gOppgavene[i]);
- }
- }
- }
- /**
- * Sjekker om det er ledige plasser på oppgaven
- *
- * @param oppgave
- * @return true/false om det er ledige plasser på oppgaven
- */
- bool oppgaveLedigPlass(const struct Oppgave *oppgave) {
- return oppgave->antallNaa < oppgave->antallTotalt;
- }
- /**
- * Knyter personer til oppgaver.
- *
- * @param oppgave
- * @see oppgaveSkrivData(...)
- * @see oppgaveLedigPlass(...)
- */
- void oppgaveTilknyttPersoner(struct Oppgave *oppgave) {
- int antall; // antall personer å legge til
- oppgaveSkrivData(oppgave);
- if (oppgaveLedigPlass(oppgave)) {
- printf("Hvor mange vil du sette av til denne oppgaven?\n");
- antall = lesInt("Velg et antall mellom 0",
- 0, (oppgave->antallTotalt - oppgave->antallNaa));
- for (int i = 0; i < antall; i++) {
- oppgave->hvem[oppgave->antallNaa] = lesInt("Person id",
- 1, 1000);
- oppgave->antallNaa++;
- }
- printf("\nOppgaven er oppdatert til følgende:\n");
- oppgaveSkrivData(oppgave);
- } else {
- printf("Beklager, oppgaven er allerede tatt hånd om av ønsket antall "
- "personer.\n");
- }
- }
- /**
- * Knytter personer til valgt oppgave.
- *
- * Bruker velger en oppgave og hvor mange personer som skal knyttes til denne.
- *
- * @see oppgaveTilknyttPersoner
- */
- void personerTilknyttesOppgave() {
- int valg;
- if (gAntallOppgaver != 0) {
- printf("Velg en oppgave du vil knyte personer til:\n");
- for (int i = 0; i < gAntallOppgaver; i++) {
- printf("\t%i. %s \n", i + 1, gOppgavene[i]->navn);
- }
- printf("\t0. Avbryt\n");
- valg = lesInt("Velg en oppgave:", 0, gAntallOppgaver);
- if (valg != 0) {
- oppgaveTilknyttPersoner(gOppgavene[valg - 1]);
- } else {
- printf("Inntasting avbrytes...\n");
- }
- } else {
- printf("\aIngen oppgaver lagt til enda.\n");
- }
- }
- /**
- * Frigir minne allokert til oppgave.
- *
- * @param oppgave
- */
- void oppgaveSlettData(struct Oppgave *oppgave){
- free(oppgave->navn);
- free(oppgave);
- }
- /**
- * Sletter ønsket Oppgave.
- *
- * Bruker skriver inn hvilken oppgave de vill slette, og så skjer det.
- *
- * @see oppgaveSlettData(...)
- */
- void fjernOppgave(){
- int valg;
- if(gAntallOppgaver != 0){
- printf("Velg en oppgave å fjerne:\n");
- for (int i = 0; i < gAntallOppgaver; i++) {
- printf("\t%i. %s \n", i + 1, gOppgavene[i]->navn);
- }
- printf("\t0. Avbryt\n");
- valg = lesInt("Velg en oppgave:", 0, gAntallOppgaver);
- if (valg != 0) {
- if(lesChar("Vil du virkelig fjerne denne "
- "oppgaven (svar: 'J')? : ") =='J'){
- if(valg-1 != gAntallOppgaver-1){
- printf("Fjerner oppgaven og rydder i oppgavelista.\n");
- oppgaveSlettData(gOppgavene[valg-1]);
- gOppgavene[valg-1] = gOppgavene[gAntallOppgaver - 1];
- gOppgavene[gAntallOppgaver-1]=NULL;
- }else{
- printf("fjerner oppgaven\n");
- oppgaveSlettData(gOppgavene[valg-1]);
- }
- gAntallOppgaver--;
- }else{
- printf("Fjerning avbrytes...\n");
- }
- } else {
- printf("Fjerning avbrytes...\n");
- }
- }else{
- printf("Ingen oppgaver lagt inn.\n");
- }
- }
- /**
- * Skriver programmets menyvalg/muligheter på skjermen.
- */
- void skrivMeny() {
- printf("\nFølgende kommandoer er tilgjengelig:\n");
- printf("\tO = Oversikt over oppgavene\n");
- printf("\tN = Registrer ny oppgave\n");
- printf("\tL = Finn ledige oppgaver\n");
- printf("\tK = Knyt personer til oppgaver\n");
- printf("\tF = Fjern en oppgave\n");
- printf("\tM = Se denne menyen\n");
- printf("\tQ - Quit / avslutt\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement