Advertisement
x0Henr1Must47d

Untitled

Nov 5th, 2019
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 16.49 KB | None | 0 0
  1. //MAIN
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <stdbool.h>
  6. #include "To-Do.h"
  7.  
  8. void waitAndClear(){
  9.     resetColor();
  10.     printf("\nPressione qualquer tecla para continuar...");
  11.     getch();
  12.     system("cls");
  13. }
  14.  
  15. int main(){
  16.     initCores();
  17.  
  18.     Atividade activity; //declara  o de uma variavel do tipo Fila
  19.     Fila f; //declara  o de uma variavel do tipo Fila
  20.     Lista l; //declara  o de uma variavel do tipo Lista
  21.     Pilha p; //declara  o de uma variavel do tipo Pilha
  22.  
  23.     int op, pos; //variavel "op" para o switch case, "pos" para receber o retorno da fun  o que encontra a posi  o da atividade na lista
  24.     char ativi[65]; //variavel que recebe o titulo de uma tarefa
  25.  
  26.     create_lista(&l); //inicializa  o da lista
  27.     create_fila(&f); //inicializa  o da fila
  28.     create_pilha(&p); //inicializa  o da pilha
  29.  
  30.     lerArquivo(&l, &f, &p, activity);
  31.  
  32.     do{ //equanto "op" n o for == 0 o menu de op  es volta a aparecer;
  33.         colorYellow(hConsole);
  34.         printf("================================\n~ Hello from To-Do Pendulares! ~\n================================\n\n");
  35.         //menu de op  es
  36.         colorMagenta(hConsole);
  37.         printf("\t1 - Criar uma atividade\n"
  38.                "\t2 - Visualizar uma atividade\n"
  39.                "\t3 - Editar uma atividade\n"
  40.                "\t4 - Excluir uma atividade\n"
  41.                "\t5 - Listar as atividades\n"
  42.                "\t6 - Proxima atividade a ser realizada\n"
  43.                "\t7 - Atividades concluidas\n"
  44.                "\t0 - SAVE & EXIT\n\n");
  45.         resetColor(hConsole);
  46.         printf("Selecione a sua opcao: ");
  47.         colorGreen(hConsole);
  48.         scanf("%d", &op);
  49.  
  50.         switch(op){
  51.             case 1: //cria uma atividade
  52.                 nova_tarefa(&activity); //preeche a struct atividade com os seus dados
  53.                 criar_atividade(&l, &f, &p, activity); //adiciona a nova atividade nas estruturas
  54.                 enqueue_prioridade(&f, activity); //coloca uma atividade como prioritaria caso a prioridade seja 3 - alta
  55.                 resetColor();
  56.                 printf("Tarefa criada.");
  57.                 waitAndClear();
  58.             break;
  59.  
  60.             case 2:
  61.                 colorCyan();
  62.                 printf("\nDigite o titulo da tarefa que deseja visualizar:\n");
  63.                 colorGreen();
  64.                 scanf("%s", ativi);//a variavel recebe o titulo da tarefa a ser visualizada
  65.                 visualizar_atividade(&l, ativi); //chama a fun  o de vizualizar a atividade, passando a lista por referencia e o titulo da tarefa a ser vizualizada
  66.             break;
  67.  
  68.             case 3:
  69.                 colorCyan();
  70.                 printf("\nDigite o titulo da tarefa que deseja editar:\n");
  71.                 colorGreen();
  72.                 scanf("%s", ativi);//a variavel recebe o titulo da tarefa a ser visualizada
  73.                 visualizar_atividade(&l, ativi); //mostra a tarefa que ser  editada
  74.                 printf("\nDigite a modificacoes que deseja fazer:\n");
  75.                 nova_tarefa(&activity); //preeche a struct atividade com os dados
  76.                 editar(&l, ativi, activity); //chama a fun  o de editar, passando a lista por referencia, o titulo e o dado do tipo Atividade
  77.                 enqueue_prioridade(&f, activity); //coloca uma atividade como prioritaria caso a prioridade seja 3 - alta
  78.                 if(activity.status == 0){
  79.                     push(&p, activity); //se uma atividade tem status 0 - concluida ele   colocada em uma pilha
  80.                 }
  81.             break;
  82.  
  83.             case 4:
  84.                 printf("\nDigite o titulo da tarefa que deseja excluir:\n");
  85.                 scanf("%s", ativi); //a variavel recebe o titulo da tarefa a ser visualizada
  86.                 pos = encontrar_pos(&l, ativi); //a variavel pos recebe o retorno da fun  o que encontra a posi  o de um titiulo especifico de uma atividade
  87.                 activity = remove_at(&l, pos); //activity recebe o retorno da atividade que foi removida
  88.                 showAtividade(activity); // imprime a atividade que foi removida
  89.             break;
  90.  
  91.             case 5:
  92.                 print_lista(l); // imprime a lista de todas as atividades
  93.                 waitAndClear();
  94.             break;
  95.  
  96.             case 6:
  97.                 //print_fila(f); // imprime todas as atividades que tem uma maior prioridade primeiro
  98.                 showAtividade(peek(f)); //Imprime o primeiro da fila de prioridades
  99.                 waitAndClear();
  100.             break;
  101.  
  102.             case 7:
  103.                 print_pilha(p); // imprime todas a atividades j  concluidas
  104.                 waitAndClear();
  105.             break;
  106.  
  107.             case 0:
  108.                 resetColor(hConsole);
  109.             break;
  110.  
  111.             default:
  112.                 colorRed(hConsole);
  113.                 printf("A opcao selecionada nao existe.\n");
  114.                 waitAndClear();
  115.             break;
  116.         }
  117.     }while(op != 0);
  118.     saveArquivo(&l);
  119.     destroy_pilha(&p);
  120.     destroy_fila(&f);
  121.     //destroy_lista(&l);
  122.     return 0;
  123. }
  124.  
  125.  
  126. //To-Do
  127. #ifndef TO-DO_H_INCLUDED
  128. #define TO-DO_H_INCLUDED
  129. #include <stdlib.h>
  130. #include <stdio.h>
  131. #include <string.h>
  132. #include <stdbool.h>
  133. #include <windows.h>
  134.  
  135. typedef struct Atividade{
  136.     char titulo [65]; //titulo da tarefa;
  137.     char descricao [257]; //descri  o da tarefa;
  138.     char data [11]; //data limite para realiza  o da tarefa, no formato DDMMAAAA; D-dia, M-m s, A-ano;
  139.     int prioridade; // 1 - baixa, 2 - m dia, 3 - alta;
  140.     int status; //0 - concluida, 1 - em andamento, 2 - pendente, 3 atrasada;
  141. }Atividade;
  142.  
  143. typedef struct Celula{
  144.     Atividade dado; //dado passa a ser do tipo Atividade, contendo todos os seus atribuitos;
  145.     struct Celula *prox; //ponteiro para a proxima celula;
  146. }Celula;
  147.  
  148. typedef struct{
  149.     Celula *topo;
  150.     int tam;
  151. }Pilha;
  152.  
  153. typedef struct{
  154.     Celula *inicio, *fim;
  155.     int tam;
  156. }Fila;
  157.  
  158. typedef struct Lista{
  159.     Celula *inicio, *fim;
  160.     int tam;
  161. }Lista;
  162.  
  163. //===========================================================
  164. //Cores
  165. //===========================================================
  166. HANDLE hConsole;
  167. WORD default_attributes;
  168.  
  169. void initCores(){
  170.     hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  171.     CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
  172.  
  173.     GetConsoleScreenBufferInfo(hConsole, &consoleInfo);
  174.     default_attributes = consoleInfo.wAttributes;
  175. }
  176.  
  177. void resetColor(){
  178.     SetConsoleTextAttribute(hConsole, default_attributes);
  179. }
  180.  
  181. void colorRed(){
  182.     SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_INTENSITY);
  183. }
  184.  
  185. void colorGreen(){
  186.     SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  187. }
  188.  
  189. void colorBlue(){
  190.     SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
  191. }
  192.  
  193. void colorMagenta(){
  194.     SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
  195. }
  196.  
  197. void colorCyan(){
  198.     SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  199. }
  200.  
  201. void colorYellow(){
  202.     SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  203. }
  204.  
  205. //===========================================================
  206. //Show
  207. //===========================================================
  208. void showAtividade(Atividade a){//imprime os dados da struct Atividade
  209.     colorMagenta();
  210.     printf("\t\t[%s]\n", a.titulo);
  211.     colorYellow();
  212.     printf("\t - Descricao: ");
  213.         colorCyan();
  214.         printf("%s\n", a.descricao);
  215.     colorYellow();
  216.     printf("\t - Data: ");
  217.         colorCyan();
  218.         printf("%s\n", a.data);
  219.     colorYellow();
  220.     printf("\t - Prioridade: ");
  221.         colorCyan();
  222.         printf("%d\n", a.prioridade);
  223.     colorYellow();
  224.     printf("\t - Status: ");
  225.         colorCyan();
  226.         printf("%d\n\n", a.status);
  227. }
  228. //===========================================================
  229. //Pilha
  230. //===========================================================
  231. void create_pilha(Pilha *p){
  232.     p->topo = NULL;
  233.     p->tam = 0;
  234. }
  235.  
  236. void push(Pilha *p, Atividade dado){
  237.  
  238.     Celula *temp =  (Celula*)malloc(sizeof(Celula));
  239.  
  240.     temp->prox = p->topo;
  241.     temp->dado = dado;
  242.  
  243.     p->topo = temp;
  244.     p->tam++;
  245. }
  246.  
  247. void print_pilha(Pilha p){
  248.     Celula *temp = p.topo;
  249.  
  250.     printf("\nSize:%d\n", p.tam);
  251.     while(temp!=NULL){
  252.         showAtividade(temp->dado);
  253.         temp = temp->prox;
  254.     }
  255. }
  256.  
  257. bool is_empty_pilha(Pilha p){
  258.     return p.topo == NULL;
  259. }
  260.  
  261. Atividade pop(Pilha *p){
  262.  
  263.     if(is_empty_pilha(*p)){
  264.         Atividade erro;
  265.         erro.status = -1;
  266.         return erro;
  267.     }
  268.  
  269.     Celula *temp = p->topo;
  270.  
  271.     p->topo = p->topo->prox;
  272.  
  273.     Atividade dado = temp->dado;
  274.     free(temp);
  275.  
  276.     p->tam--;
  277.  
  278.     return dado;
  279. }
  280.  
  281. void destroy_pilha(Pilha *p){
  282.  
  283.     while(!is_empty_pilha(*p))
  284.         pop(p);
  285. }
  286.  
  287. //==============================================================
  288. //Fila
  289.  
  290. void create_fila(Fila *f){
  291.     f->inicio = f->fim = (Celula *)malloc(sizeof(Celula));
  292.     f->tam = 0;
  293. }
  294.  
  295. bool is_empty_fila(Fila f){
  296.     return f.inicio == f.fim;
  297. }
  298.  
  299. bool enqueue(Fila *f, Atividade activity){
  300.     Celula *temp = (Celula *)malloc(sizeof(Celula));
  301.  
  302.     if(temp == NULL)
  303.         return false;
  304.  
  305.     temp->prox = NULL;
  306.     temp->dado = activity;
  307.  
  308.     f->fim->prox = temp;
  309.     f->fim =  f->fim->prox;
  310.  
  311.     f->tam++;
  312.  
  313.     return true;
  314. }
  315.  
  316. Atividade dequeue(Fila *f){
  317.  
  318.     if(is_empty_fila(*f)){
  319.         Atividade erro;
  320.         erro.status = -1;
  321.         return erro;
  322.     }
  323.  
  324.     Celula *temp = f->inicio;
  325.  
  326.     f->inicio = f->inicio->prox;
  327.  
  328.     free(temp);
  329.  
  330.     f->tam--;
  331.  
  332.     return f->inicio->dado;
  333. }
  334.  
  335. Atividade peek(Fila f){
  336.     if(is_empty_fila(f)){
  337.         Atividade erro;
  338.         erro.status = -1;
  339.         return erro;
  340.     }
  341.  
  342.     return f.inicio->prox->dado;
  343. }
  344.  
  345. void print_fila(Fila f){
  346.     Celula *temp = f.inicio->prox;
  347.     while(temp!=NULL){
  348.         showAtividade(temp->dado);
  349.         temp = temp->prox;
  350.     }
  351.     printf("\n");
  352. }
  353.  
  354. void destroy_fila(Fila *f){
  355.     while(!is_empty_fila(*f))
  356.         dequeue(f);
  357.     free(f->inicio);
  358. }
  359.  
  360. //==============================================================
  361. //Lista
  362. //==============================================================
  363. void create_lista(Lista *l){
  364.     Celula *temp = (Celula*)malloc(sizeof(Celula));
  365.  
  366.     temp->prox = NULL;
  367.     l->inicio = l->fim = temp;
  368.     l->tam = 0;
  369. }
  370.  
  371. void add(Lista *l, Atividade dado){
  372.     Celula *temp = (Celula*)malloc(sizeof(Celula));
  373.  
  374.     temp->prox = NULL;
  375.     temp->dado = dado;
  376.  
  377.     l->fim->prox = temp;
  378.     l->fim = temp;
  379.     l->tam++;
  380. }
  381.  
  382. Atividade remove_at(Lista *l, int pos){
  383.     if(pos < 0 || pos >= l->tam){
  384.         Atividade erro;
  385.         erro.status = -1;
  386.         return erro;
  387.     }
  388.  
  389.     Celula *ant = l->inicio;
  390.  
  391.     for(int i=0; i < pos;i++)
  392.         ant = ant->prox;
  393.  
  394.     Celula *temp = ant->prox;
  395.     Atividade dado = temp->dado;
  396.  
  397.     ant->prox = temp->prox;
  398.  
  399.     if(ant->prox == NULL)
  400.         l->fim = ant;
  401.  
  402.     free(temp);
  403.  
  404.     l->tam--;
  405.  
  406.     return dado;
  407. }
  408.  
  409. void print_lista(Lista l){
  410.     resetColor();
  411.     printf("Tamanho: %d\n", l.tam);
  412.     Celula *temp = l.inicio->prox;
  413.     int i=0;
  414.     while(temp!=NULL){
  415.         showAtividade(temp->dado);
  416.         temp = temp->prox;
  417.         i++;
  418.     }
  419. }
  420.  
  421. void destroy_lista(Lista *l){//printf("%d",l->tam);
  422.     while(l->inicio != l->fim){
  423.         remove_at(l, 0);
  424.     }
  425.     free(l->inicio);
  426. }
  427.  
  428. //==============================================================
  429. //To-Do!
  430.  
  431. //CRUD
  432. void nova_tarefa(Atividade *activity){ // preeche a struct Atividade com os dados de uma nova tarefa
  433.     colorCyan();
  434.     printf("Titulo da tarefa: ");
  435.     colorGreen();
  436.     scanf("%s", &activity->titulo);
  437.     colorCyan();
  438.     printf("Descricao da Tarefa: ");
  439.     colorGreen();
  440.     scanf("%s", &activity->descricao);
  441.     colorCyan();
  442.     printf("Data da Tarefa: ");
  443.     colorGreen();
  444.     scanf("%s", &activity->data);
  445.     fflush(stdin);
  446.     colorCyan();
  447.     printf("Defina a Prioridade: \n"
  448.            "\t1 - baixa;\n"
  449.            "\t2 - media;\n"
  450.            "\t3 - alta;\n\n");
  451.     colorGreen();
  452.     scanf("%d", &activity->prioridade);
  453.     fflush(stdin);
  454.     colorCyan();
  455.     printf("Defina o Status: \n"
  456.            "\t0 - concluida; \n"
  457.            "\t1 - em andamento; \n"
  458.            "\t2 - pendente; \n"
  459.            "\t3 - atrasada;\n\n");
  460.     colorGreen();
  461.     scanf("%d", &activity->status);
  462.     printf("\n");
  463. }
  464.  
  465. void criar_atividade(Lista *l, Fila *f, Pilha *p, Atividade activity){ //cria uma atividade chamando outra fun  o de adicionar na lista, pasando a lista e o dado a ser inserido
  466.     add(l, activity);//Adiciona na lista
  467.     if(activity.status == 0){//se uma atividade tem status 0 - concluida ela  
  468.         push(p, activity); //colocada em uma pilha para que o usuario possa ver quais atividade foram concluidas
  469.     }
  470. }
  471.  
  472. void visualizar_atividade(Lista *l, char ativi[65]){
  473.     Celula *temp = l->inicio->prox;
  474.     while(temp != NULL){
  475.         if(strcmp(temp->dado.titulo, ativi)==0){//Se o t tulo for igual, exibe os dados da atividde
  476.             showAtividade(temp->dado);
  477.             return;
  478.         }
  479.         temp = temp->prox;
  480.     }
  481.     colorRed();
  482.     printf("Atividade nao encontrada.\n");
  483.     resetColor();
  484. }
  485.  
  486. void editar(Lista *l, char ativi[65], Atividade activity){
  487.     //FIXME edita apenas a lista...
  488.     Celula *temp = l->inicio->prox;
  489.  
  490.     while(strcmp(temp->dado.titulo, ativi)!=0 && temp->prox != NULL){ //ir  comparar o titulo da atividade que o usuarios quer
  491.         temp = temp->prox; //vizualizar e enquanto for diferente ele passa aiante para a proxima celula
  492.     }
  493.     strcpy(temp->dado.titulo, activity.titulo);
  494.     strcpy(temp->dado.descricao, activity.descricao);
  495.     strcpy(temp->dado.data, activity.data);
  496.     temp->dado.prioridade = activity.prioridade;
  497.     temp->dado.status = activity.status;
  498. }
  499.  
  500. int encontrar_pos(Lista *l, char ativi[65]){
  501.     int pos=0;
  502.     Celula *temp = l->inicio->prox;
  503.  
  504.     while(strcmp(temp->dado.titulo, ativi)!=0 && temp->prox != NULL){//ir  comparar o titulo da atividade que o usuarios quer
  505.         temp = temp->prox; //vizualizar e enquanto for diferente ele passa aiante para a proxima celula
  506.         pos++;
  507.     }
  508.     return pos;
  509. }
  510.  
  511. void saveArquivo(Lista *l){//Salva os dados da lista no arquivo, e destr i a lista.
  512.     FILE *arquivo = fopen("atividades.txt","w");
  513.     Atividade save;
  514.     char str[10000] = "";
  515.     char buffer[2]="";
  516.     while(l->inicio != l->fim){
  517.         save = remove_at(l, 0);
  518.         strcat(str, save.titulo);
  519.         strcat(str, "\t");
  520.         strcat(str, save.descricao);
  521.         strcat(str, "\t");
  522.         strcat(str, save.data);
  523.         strcat(str, "\t");
  524.         itoa(save.prioridade,buffer,10);
  525.         strcat(str, buffer);
  526.         strcat(str, "\t");
  527.         itoa(save.status,buffer,10);
  528.         strcat(str, buffer);
  529.         strcat(str, "\n");
  530.     }
  531.     free(l->inicio);
  532.     fprintf(arquivo,"%s", str);
  533.     fclose(arquivo);
  534. }
  535.  
  536. void lerArquivo(Lista *l, Fila *f, Pilha *p, Atividade activity){
  537.     FILE *arquivo = fopen("atividades.txt","r");
  538.     if(arquivo == NULL){
  539.         return;
  540.     }
  541.     while(!feof(arquivo)){
  542.         fscanf(arquivo,"%s\t%s\t%s\t%i\t%i\n",&activity.titulo,&activity.descricao,&activity.data,&activity.prioridade,&activity.status);
  543.         criar_atividade(l,f,p,activity);
  544.     }
  545.     fclose(arquivo);
  546. }
  547.  
  548. //Enfilerar com prioridade
  549. void enqueue_prioridade(Fila *f, Atividade activity){
  550.  
  551.     int prioridade = activity.prioridade;
  552.  
  553.     printf("%d", prioridade);
  554.  
  555.     if(activity.prioridade==0){ //caso a prioridade da atividade n o seja 0 ela sera enfilieirada normalmente, tornando a ultima da fila
  556.         enqueue(f, activity);
  557.         return;
  558.     }
  559.  
  560.     printf("ok1");
  561.  
  562.     Celula *temp = (Celula*)malloc(sizeof(Celula)); //cria uma nova celula
  563.     temp->prox = NULL; // o prox recebe NULL
  564.     temp->dado = activity; // o dado recebe a struct com os detalhes da tarefa
  565.  
  566.     printf("ok2");
  567.  
  568.     Celula *ant = f->inicio;// a celula anterior recebe o inicio da fila
  569.  
  570.     while(ant->prox!=NULL && ant->prox->dado.prioridade >= 3){// enquanto o proximo da fila for diferente de NULL e os dados forem
  571.         ant = ant->prox;// maior ou igual a prioridade da atividade inserida ela ir  avan ar at  encontar alguem menor
  572.     }
  573.  
  574.     printf("ok3");
  575.  
  576.     temp->prox = ant->prox;
  577.     ant->prox = temp;
  578.  
  579.     printf("ok4");
  580.  
  581.     if(temp->prox == NULL){
  582.         f->fim = temp;
  583.     }
  584.     printf("ok5");
  585.     f->tam++;
  586. }
  587.  
  588.  
  589.  
  590. #endif // TO-DO_H_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement