Gestor de tarefas pessoais em C

Enunciado

Gestor de tarefas pessoais

(http://disciplinas.ist.utl.pt/~leic-so.daemon/2012-2013/laboratorios/lab01%20-%20ambiente/guia/)

Construa uma aplicação de organização pessoal que permite gerir as tarefas pendentes de uma pessoa.
Cada tarefa:

  • é identificada por uma sequência de caracteres única que, por simplicidade, não pode conter espaços;
  • tem uma prioridade, definida por um inteiro entre 0 e 2 (0 é mais prioritária, 2 é menos prioritária).

A aplicação tem os seguintes comandos:

  • > nova

    que insere a nova tarefa;

  • > lista

    que lista todas as tarefas com tarefa da prioridade indicada ou superior; a listagem deve estar ordenada por prioridade (mais prioritárias primeiro) e, entre tarefas igualmente prioritárias, por data de criação (mais recentes primeiro);

  • > completa

    que retira a tarefa indicada; caso a tarefa não exista, deve ser apresentada a mensagem de erro “TAREFA INEXISTENTE”.

Sugestão: usar tantas listas quanto níveis de prioridade.

 

Resolução

list.h

/*
* list.h - definitions and declarations of the integer list
*/
#include <stdlib.h>
#include <stdio.h>

/* lst_iitem - each element of the list points to the next element */
typedef struct lst_iitem {
    char* value;
    struct lst_iitem *next;
} lst_iitem_t;

/* list_t */
typedef struct {
    lst_iitem_t * first;
} list_t;

/* lst_new - allocates memory for list_t and initializes it */
list_t* lst_new();

/* lst_destroy - free memory of list_t and all its items */
void lst_destroy(list_t *);

/* lst_insert - insert a new item with value 'value' in list 'list' */
void lst_insert(list_t *list, char* value);

/* lst_remove - remove first item of value 'value' from list 'list' */
int lst_remove(list_t *list, char* value);

/* lst_print - print the content of list 'list' to standard output */
void lst_print(list_t *list);

 

list.c

/*
* list.c - implementation of the integer list functions
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "list.h"

list_t* lst_new() {
    list_t *list;
    list = (list_t*) malloc(sizeof(list_t));
    list->first = NULL;
    return list;
}

void lst_destroy(list_t *list) {
    lst_iitem_t *head, *temp;
    head = list->first;
    
    while(head != NULL) {
        temp = head;
        head = head->next;
        free(temp);
    }
    free(list);
}

void lst_insert(list_t *list, char* value) {
    lst_iitem_t *temp,*right;
    temp = (lst_iitem_t*)malloc(sizeof(lst_iitem_t));
    temp->value = (char*) malloc(strlen(value) * sizeof(char));
    strcpy(temp->value, value);
    temp->next = list->first;
    list->first = temp;
}

int lst_remove(list_t *list, char* value) {
    lst_iitem_t *temp, *prev;
    temp = list->first;
    while(temp != NULL) {
        if(!strcmp(temp->value,value)) {
            if(temp == list->first) {
                list->first = temp->next;
                free(temp);
                return 1;
            } else {
                prev->next = temp->next;
                free(temp);
                return 1;
            }
        } else {
            prev = temp;
            temp = temp->next;
        }
    }
    return 0;
}

void lst_print(list_t *list) {
    lst_iitem_t *temp = list->first;
    while(temp) {
        printf("%sn", temp->value);
        temp = temp->next;
    }
}

 

main.c

/*
* Gestor de Tarefas Pessoais
* 2013 Ricardo Sequeira
*/
#include <stdio.h>
#include <string.h>
#include "list.h"

#define N_LISTS 6
#define MAX_NAME 100

int main(int argc, char *argv[]) {
    char cmd[10];
    list_t *tasklists[N_LISTS];
    int i;
    
    for(i=0; i<N_LISTS; i++) tasklists[i] = lst_new();
    
    while(1) {
        scanf(" %s", cmd);
        if(!strcmp(cmd, "new")) {
            int prio;
            char taskName[MAX_NAME];
            
            scanf(" %d %s", &prio, taskName);
            if(prio < 0 || prio > N_LISTS-1) {
                printf("ERROR: Invalid priority!n");
                continue;
            }
            lst_insert(tasklists[prio], taskName);
        } else if(!strcmp(cmd, "list")) {
            int prio;
            scanf(" %d", &prio);
            if(prio < 0 || prio > N_LISTS-1) {
                printf("ERROR: Invalid priority!n");
                continue;
            }
            
            int j;
            for(j=N_LISTS-1; j>=prio; j--) {
                printf("=====Priority %d=====n", j);
                lst_print(tasklists[j]);
            }
        } else if(!strcmp(cmd, "complete")) {
            char taskName[MAX_NAME];
            scanf(" %s", taskName);
            
            int j;
            int found = 0;
            for(j=0; j<N_LISTS; j++)
                if(lst_remove(tasklists[j], taskName) > 0) {
                    found = 1;
                    break;
                }
                
            if(!found) printf("TAREFA INEXISTENTEn");
        } else {
            printf("ERROR: Invalid option!n");
        }
    }
    
    return 0;
}

 

Download

You may also like...

Deixar uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *