Advertisement
Guest User

Untitled

a guest
May 24th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <assert.h>
  5.  
  6. typedef struct to_do{
  7. int prioridade;
  8. char tarefa[128];
  9. struct to_do* next;
  10. struct to_do* prev;
  11. }to_do;
  12.  
  13. typedef struct doing{
  14. char tarefa[128];
  15. char utilizador[128];
  16. struct doing* next;
  17. struct doing* prev;
  18. struct data*dia;
  19. struct data*mes;
  20. struct data*ano;
  21. }doing;
  22.  
  23. typedef struct done{
  24. char tarefa[128];
  25. char utilizador[128];
  26. struct done* next;
  27. struct done* prev;
  28. struct data*dia;
  29. struct data*mes;
  30. struct data*ano;
  31. }done;
  32.  
  33. typedef struct user{
  34. char utilizador[128];
  35. char email[128];
  36. int id;
  37. struct user *next;
  38. struct done* prev;
  39. }user;
  40.  
  41. int menu(){
  42. int opcao=10;
  43. printf("\nInserir tarefas na lista To Do\t\t\t\t (1)\n");
  44. printf("Mover tarefas de To do para Doing\t\t\t (2)\n");
  45. printf("Mover tarefas de Doing para To do\t\t\t (3)\n");
  46. printf("Mover tarefas de Done para To do\t\t\t (4)\n");
  47. printf("Mover tarefa para Done\t\t\t\t\t (5)\n");
  48. printf("Alterar utilizador de uma tarefa em Doing\t\t (6)\n");
  49. printf("Ver as tarefas atribuidas a um utilizador\t\t (7)\n");
  50. printf("Ver as tarefas por ordem de criaçao\t\t\t (8)\n");
  51. printf("Listar tarefas \t\t\t\t\t\t (9)\n");
  52. printf("Listar utilizadores \t\t\t\t\t (10)\n");
  53. printf("Sair\t\t\t\t\t\t\t (0)\n\n");
  54. printf("Escolha uma opçao 0-9: ");
  55. while (1) {
  56. if (scanf("%d",&opcao) == 1 && opcao<11 && opcao>=0)
  57. break;
  58. printf("Insira uma opção válida entre 0-10: ");
  59. fseek(stdin,0,SEEK_END);
  60. }return opcao;
  61. }
  62.  
  63. to_do* cria_lista_todo(){
  64. to_do*aux = (to_do*) malloc (sizeof (to_do));
  65. assert(aux);
  66. aux -> next = NULL;
  67. return aux;
  68. }
  69.  
  70. doing* cria_lista_doing(){
  71. doing*aux = (doing*) malloc (sizeof (doing));
  72. assert(aux);
  73. aux -> next = NULL;
  74. return aux;
  75. }
  76.  
  77. done* cria_lista_done(){
  78. done*aux = (done*) malloc (sizeof (done));
  79. assert(aux);
  80. aux -> next = NULL;
  81. return aux;
  82. }
  83.  
  84. user* cria_lista_user(){
  85. user*aux = (user*) malloc (sizeof (user));
  86. assert(aux);
  87. aux -> next = NULL;
  88. return aux;
  89. }
  90.  
  91. void listar_doing(doing*b){
  92. if(b->next!=NULL){
  93. printf("\nTarefas em Doing:\n");
  94. for(b=b->next;b;b=b->next){
  95. strtok(b->tarefa, "\n");
  96. printf("Tarefa: '%s'. Utilizador: %s", b->tarefa, b->utilizador);
  97. }
  98. }
  99. }
  100.  
  101. void listar_tarefas(to_do*h){
  102. if(h->next!=NULL){
  103. printf("\nTarefas em To Do:\n");
  104. for(h=h->next;h;h=h->next){
  105. strtok(h->tarefa,"\n");
  106. printf("Tarefa: '%s'. Prioridade: %d \n",h->tarefa,h->prioridade);
  107. }
  108. }
  109. }
  110.  
  111. void listar_user(user*h){
  112. if(h->next!=NULL){
  113. printf("\nUtilizadores:\n");
  114. for(h=h->next;h;h=h->next){
  115. printf("%d - %s - %s\n",h->id,h->utilizador,h->email);
  116. }
  117. }
  118. }
  119.  
  120. /*void listar_done(done*d){
  121. printf("Tarefas em Done:\n");
  122. for(d=d->next;d;d=d->next){
  123. strtok(d->tarefa, "\n");
  124. printf("Tarefa: '%s'. Utilizador: '%s'. Data conclusao:%d/%d/%d", d->tarefa, d->utilizador, d->dia,d->mes,d->ano);
  125. }
  126. }*/
  127.  
  128. void inserir_tarefa(to_do*h){ // está a funcionar!
  129.  
  130. to_do*temp=malloc(sizeof(h));
  131.  
  132. char tarefa_input[128];int prioridade_input;
  133. printf("Tarefa a inserir: ");fgets(tarefa_input,128,stdin);strtok("\n",tarefa_input);
  134. printf("Insira a sua prioridade: ");
  135. while (1) {
  136. if (scanf("%d",&prioridade_input) == 1 && prioridade_input<11 && prioridade_input>0)
  137. break;
  138. printf("Insira uma opção válida entre 0-10: ");
  139. fseek(stdin,0,SEEK_END);
  140. }
  141.  
  142. while(h->next!=NULL && h->next->prioridade>prioridade_input)
  143. h=h->next;
  144.  
  145. temp->next=h->next;
  146. h->next=temp;
  147. strcpy(temp->tarefa,tarefa_input);
  148. temp->prioridade = prioridade_input;
  149.  
  150. }
  151.  
  152. void inserir_tarefa2(to_do*h,char tarefa_input[128],int prioridade_input){
  153. to_do*temp=malloc(sizeof(h));
  154. while(h->next!=NULL && h->next->prioridade>prioridade_input)
  155. h=h->next;
  156.  
  157. temp->next=h->next;
  158. h->next=temp;
  159. strcpy(temp->tarefa,tarefa_input);
  160. temp->prioridade = prioridade_input;
  161.  
  162. }
  163.  
  164. int remover_todo(to_do*h, char*key){
  165. int teste=0;
  166. while(h->next!=NULL){
  167. if((strcmp(h->next->tarefa,key)==0) || h->next==NULL){
  168. teste=1;
  169. break;
  170. }
  171. if((strcmp(h->tarefa,key)==0) || h->next==NULL){
  172. teste=2;
  173. break;
  174. }
  175. h=h->next;
  176. }
  177. if(teste==1){
  178. to_do*aux=h->next;
  179. h->next=h->next->next;
  180. if(h->next!=NULL)
  181. h->next->prev=h;
  182. free(aux);
  183. }
  184. if(teste==2){
  185. to_do*temp;
  186. temp=h;
  187. free(temp);
  188. }
  189. return 0;
  190. }
  191.  
  192. int remover_doing(doing*b, char*key){
  193. int teste=0;
  194. while(b->next!=NULL){
  195. if((strcmp(b->next->tarefa,key)==0) || b->next==NULL){
  196. teste=1;
  197. break;
  198. }
  199. if((strcmp(b->tarefa,key)==0) || b->next==NULL){
  200. teste=2;
  201. break;
  202. }
  203. b=b->next;
  204. }
  205. if(teste==1){
  206. doing*aux=b->next;
  207. b->next=b->next->next;
  208. if(b->next!=NULL)
  209. b->next->prev=b;
  210. free(aux);
  211. }
  212. if(teste==2){
  213. doing*temp;
  214. temp=b;
  215. free(temp);
  216. }
  217. return 0;
  218. }
  219.  
  220. void todo_para_doing(to_do*h , doing*b){
  221. char utilizador_input[128];
  222. int teste=0;
  223. to_do*temporario=h;
  224. doing*temp=malloc(sizeof(b));
  225. listar_tarefas(h);
  226. char tarefa_input[128];
  227. printf("\nIndique a tarefa que deseja passar para Doing: ");
  228. fgets(tarefa_input,100,stdin);strtok(tarefa_input,"\n");
  229.  
  230. todo_para_doing:
  231. for(h=h->next;h;h=h->next){
  232. if (strcmp(h->tarefa, tarefa_input)==0){
  233. printf("Digite o utilizador: ");
  234. fgets(utilizador_input, 128, stdin);strtok("\n",utilizador_input);
  235. temp->next=b->next;
  236. b->next=temp;
  237. strcpy(temp->utilizador, utilizador_input);
  238. strcpy(temp->tarefa, tarefa_input);
  239. teste=1;
  240. break;
  241. }
  242. }
  243. h=temporario;
  244.  
  245. if(teste==0){
  246. printf("Indique uma tarefa válida: ");
  247. fgets(tarefa_input,100,stdin);strtok(tarefa_input,"\n");
  248. goto todo_para_doing;
  249. }
  250. else
  251. remover_todo(h,tarefa_input);
  252. }
  253.  
  254. void doing_para_todo(doing*b, to_do*h){
  255. to_do*temp=malloc(sizeof(h));
  256. int prioridade_input;
  257. int teste=0;
  258. doing*temporario=b;
  259. listar_doing(b);
  260. char tarefa_input[128];
  261. printf("\nIndique a tarefa que deseja passar para To Do:");
  262. fgets(tarefa_input, 100, stdin);strtok(tarefa_input, "\n");
  263. doing_para_todo:
  264. for(b=b->next;b;b=b->next){
  265. if (strcmp(b->tarefa, tarefa_input)==0){
  266. printf("Digite a nova prioridade da tarefa: ");
  267. scanf("%d", &prioridade_input);
  268. temp->next=h->next;
  269. h->next=temp;
  270. strcpy(temp->tarefa, tarefa_input);
  271. temp->prioridade=prioridade_input;
  272. teste=1;
  273. break;
  274. }
  275. }
  276. b=temporario;
  277.  
  278. if(teste==0){
  279. printf("Indique uma tarefa válida: ");
  280. fgets(tarefa_input,100,stdin);strtok(tarefa_input,"\n");
  281. goto doing_para_todo;
  282. }
  283. else
  284. remover_doing(b,tarefa_input);
  285. }
  286.  
  287. void altera_user(doing*b) {
  288. char tarefa_input[128];
  289. char user_input[128];
  290. doing*temp=malloc(sizeof(b));
  291. listar_doing(b);
  292. printf("Indique a tarefa que pretende alterar o utilizador: ");
  293. fgets(tarefa_input, 100, stdin);
  294. strtok(tarefa_input, "\n");
  295. for (b=b->next; b; b=b->next) {
  296. if (strcmp(b->tarefa, tarefa_input)==0) {
  297. printf("Novo utilizador: ");
  298. fgets(user_input, 100, stdin);strtok(user_input, "\n");
  299. temp->next=b->next->next;
  300. b->next=temp;
  301. strcpy(temp->tarefa, tarefa_input);
  302. strcpy(temp->utilizador, user_input);
  303. break;
  304. }
  305.  
  306. }
  307. }
  308.  
  309. int countlines(char*filename) {
  310. FILE *fp;
  311. int count = 1;
  312. char c;
  313. fp = fopen(filename, "r");
  314. for (c = getc(fp); c != EOF; c = getc(fp))
  315. if (c == '\n')
  316. count = count + 1;
  317. fclose(fp);
  318. return count;
  319. }
  320.  
  321. void carregar_todo(to_do*h) {
  322. FILE *fp;
  323. fp = fopen("todo.txt", "r");
  324. char tarefa_input[128];int prioridade_input;
  325. int linhas = countlines("todo.txt");
  326. for (int i = 0; i < (linhas / 2); i++) {
  327. fgets(tarefa_input,sizeof(tarefa_input),fp);strtok(tarefa_input,"\n");
  328. fscanf(fp,"%d",&prioridade_input);
  329. fgetc(fp);
  330. inserir_tarefa2(h,tarefa_input,prioridade_input);
  331. }
  332. fclose(fp);
  333. }
  334.  
  335. void inserir_user(user*h,char utilizador[128],char email[128],int id){
  336. user*temp=malloc(sizeof(h));
  337. while(h->next!=NULL && h->next->id<id)
  338. h=h->next;
  339.  
  340. temp->next=h->next;
  341. h->next=temp;
  342. strcpy(temp->utilizador,utilizador);
  343. strcpy(temp->email,email);
  344. temp->id = id;
  345. }
  346.  
  347. void carregar_utilizadores(user*h) {
  348. FILE *fp;
  349. fp = fopen("user.txt", "r");
  350. char utilizador[128], email[128];int id;
  351. int linhas = countlines("user.txt");
  352. for (int i = 0; i < (linhas / 3); i++) {
  353. fgets(utilizador,sizeof(utilizador),fp);strtok(utilizador,"\n");
  354. fgets(email,sizeof(email),fp);strtok(email,"\n");
  355. fscanf(fp,"%d",&id);
  356. fgetc(fp);
  357. inserir_user(h,utilizador,email,id);
  358. }
  359. fclose(fp);
  360. }
  361.  
  362.  
  363.  
  364.  
  365.  
  366. int main(){
  367. to_do*lista_todo;doing*lista_doing;done*lista_done;user*lista_user;
  368. lista_todo=cria_lista_todo();
  369. lista_doing=cria_lista_doing();
  370. lista_done=cria_lista_done();
  371. lista_user=cria_lista_user();
  372.  
  373. int opcao;
  374.  
  375. carregar_todo(lista_todo);
  376. carregar_utilizadores(lista_user);
  377.  
  378. MENU:
  379. opcao = menu();
  380. char input[128];
  381. fgets(input, 100, stdin);
  382. switch (opcao) {
  383. case 1:
  384. inserir_tarefa(lista_todo);
  385. goto MENU;
  386. case 2:
  387. todo_para_doing(lista_todo, lista_doing);
  388. goto MENU;
  389. case 3:
  390. doing_para_todo(lista_doing, lista_todo);
  391. goto MENU;
  392. case 4:
  393. case 5:
  394. case 6:
  395. altera_user(lista_doing);
  396. goto MENU;
  397. case 7:
  398. case 8:
  399. case 9:
  400. listar_tarefas(lista_todo);
  401. listar_doing(lista_doing);
  402. goto MENU;
  403. case 10:
  404. listar_user(lista_user);
  405. goto MENU;
  406. }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement