Advertisement
Guest User

lyftadmin

a guest
Nov 13th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <signal.h>
  6. #include <sys/types.h>
  7. #include <sys/wait.h>
  8.  
  9. typedef struct {
  10.     int numero;
  11.     char nome[50];
  12.     char turma[10];
  13.     char telemovel[15];
  14.     char email[40];
  15.     char tipo[20];
  16.     char marca[20];
  17.     char matricula[15];
  18.     int viagens;
  19.     int pontos;
  20.     float saldo;
  21.     int activo;
  22.     long disponivel_desde;
  23.     int PID;
  24. } Condutor;
  25.  
  26. typedef struct {
  27.     int numero;
  28.     char nome[50];
  29.     char turma[10];
  30.     char telemovel[15];
  31.     char email[40];
  32.     char c_credito[20];
  33. } Passageiro;
  34.  
  35. int counter_condutores = 0;
  36. int counter_passageiros = 0;
  37.  
  38. Condutor condutores[1024];
  39. Passageiro passageiros[4096];
  40.  
  41.  
  42. void ler_condutores() {
  43.     FILE * f = fopen("condutores.txt", "r");
  44.     char l[256];
  45.     char converte2[50];
  46.     while(fgets(l, 256, f) != NULL) {
  47.         Condutor c;
  48.         split(l, converte2, 0);
  49.         c.numero = atoi(converte2);
  50.         split(l, converte2, 1);
  51.         strcpy(c.nome, converte2);
  52.         split(l, converte2, 2);
  53.         strcpy(c.turma, converte2);
  54.         split(l, converte2, 3);
  55.         strcpy(c.telemovel, converte2);
  56.         split(l, converte2, 4);
  57.         strcpy(c.email, converte2);
  58.         split(l, converte2, 5);
  59.         strcpy(c.tipo, converte2);
  60.         split(l, converte2, 6);
  61.         strcpy(c.marca, converte2);
  62.         split(l, converte2, 7);
  63.         strcpy(c.matricula, converte2);
  64.         split(l, converte2, 8);
  65.         c.viagens = atoi(converte2);
  66.         split(l, tmp, 9);
  67.         c.pontos = atoi(converte2);
  68.         split(l, tmp, 10);
  69.         c.saldo = atof(converte2);
  70.         condutores[i] = c;
  71.         i++;
  72.     }
  73.     fclose(f);
  74.  
  75.     void ler_passageiros() {
  76.         FILE * f = fopen("passageiros.txt", "r");
  77.         while(fgets(l, 256, f) != NULL) {
  78.             Passageiro p;
  79.             split(l, tmp, 0);
  80.             p.numero = atoi(tmp);
  81.             split(l, tmp, 1);
  82.             strcpy(p.nome, tmp);
  83.             split(l, tmp, 2);
  84.             strcpy(p.turma, tmp);
  85.             split(l, tmp, 3);
  86.             strcpy(p.telemovel, tmp);
  87.             split(l, tmp, 4);
  88.             strcpy(p.email, tmp);
  89.             split(l, tmp, 5);
  90.             strcpy(p.c_credito, tmp);
  91.             passageiros[counter_passageiros++] = p;
  92.         }
  93.         fclose(f);
  94.     }
  95.  
  96.     void updateCondutores() {
  97.         FILE * f = fopen("condutores.txt", "r");
  98.         char l[256];
  99.         char tmp[50];
  100.         while(fgets(l, 256, f) != NULL) {
  101.             split(l, tmp, 0);
  102.             int numero = atoi(tmp);
  103.             split(l, tmp, 8);
  104.             int viagens = atoi(tmp);
  105.             for (int i = 0; i < counter_condutores; ++i) {
  106.                 if(condutores[i].numero == numero && condutores[i].viagens != viagens) {
  107.                     condutores[i].viagens = viagens;
  108.                     split(l, tmp, 9); condutores[i].pontos = atoi(tmp);
  109.                     split(l, tmp, 10); condutores[i].saldo = atof(tmp);
  110.                 }
  111.             }
  112.         }
  113.         fclose(f);
  114.     }
  115.  
  116.     void rewriteFicheiros() {
  117.         FILE * f = fopen("condutores.txt", "w");
  118.         for (int i = 0; i < counter_condutores; i++) {
  119.             Condutor c = condutores[i];
  120.             fprintf(f, "%d:%s:%s:%s:%s:%s:%s:%s:%d:%d:%.1f\n", c.numero, c.nome, c.turma, c.telemovel, c.email, c.tipo, c.marca, c.matricula, c.viagens, c.pontos, c.saldo);
  121.         }
  122.         fclose(f);
  123.  
  124.         f = fopen("passageiros.txt", "w");
  125.         for (int i = 0; i < counter_passageiros; i++) {
  126.             Passageiro p = passageiros[i];
  127.             fprintf(f, "%d:%s:%s:%s:%s:%s\n", p.numero, p.nome, p.turma, p.telemovel, p.email, p.c_credito);
  128.         }
  129.         fclose(f);
  130.     }
  131.  
  132.     void printMemory() {
  133.         printf("\nCondutores:\n");
  134.         for (int i = 0; i < counter_condutores; i++) {
  135.             Condutor c = condutores[i];
  136.             printf("%d:%s:%s:%s:%s:%s:%s:%s:%d:%d:%.1f\n", c.numero, c.nome, c.turma, c.telemovel, c.email, c.tipo, c.marca, c.matricula, c.viagens, c.pontos, c.saldo);
  137.         }
  138.         printf("\nPassageiros:\n");
  139.         for (int i = 0; i < counter_passageiros; i++) {
  140.             Passageiro p = passageiros[i];
  141.             printf("%d:%s:%s:%s:%s:%s", p.numero, p.nome, p.turma, p.telemovel, p.email, p.c_credito);
  142.         }
  143.     }
  144.  
  145.     void updatePassageiro() {
  146.         char tmp[50];
  147.         printf("\nInsira o número de aluno do passageiro que quer alterar\n");
  148.         fgets(tmp, 50, stdin);
  149.         int exists = 0;
  150.         for (int i = 0; i < counter_passageiros; ++i) {
  151.             if(passageiros[i].numero == atoi(tmp)) {
  152.                 exists = 1;
  153.                 char tmp[50];
  154.                 while (atoi(tmp) != 6) {
  155.                     printf("\nSelecione uma opção:\n1 - Alterar nome\n2 - Alterar turma\n3 - Alterar número de telemóvel\n4 - Alterar email\n5 - Alterar cartão de crédito\n6 - Sair\n");
  156.                     fgets(tmp, 50, stdin);
  157.                     switch (atoi(tmp)){
  158.                         case 1:
  159.                         printf("\nInsira o novo nome\n");
  160.                         fgets(tmp, 50, stdin);
  161.                         if(!invalid(tmp)) {
  162.                             strtok(tmp, "\n");
  163.                             strcpy(passageiros[i].nome, tmp);
  164.                             printf("\nNome alterado com sucesso!\n");  
  165.                         } else {
  166.                             printf("Erro, tente outra vez...\n");
  167.                         }
  168.                         break;
  169.                         case 2:
  170.                         printf("\nInsira a nova turma\n");
  171.                         fgets(tmp, 50, stdin);
  172.                         if(!invalid(tmp)) {
  173.                             strtok(tmp, "\n");
  174.                             strcpy(passageiros[i].turma, tmp);
  175.                             printf("\nTurma alterada com sucesso!\n");
  176.                         } else {
  177.                             printf("Erro, tente outra vez...\n");
  178.                         }
  179.                         break;
  180.                         case 3:
  181.                         printf("\nInsira o novo telemóvel\n");
  182.                         fgets(tmp, 50, stdin);
  183.                         if(!invalid(tmp)) {
  184.                             strtok(tmp, "\n");
  185.                             strcpy(passageiros[i].telemovel, tmp);
  186.                             printf("\nNúmero de telemóvel alterado com sucesso!\n");
  187.                         } else {
  188.                             printf("Erro, tente outra vez...\n");
  189.                         }
  190.                         break;
  191.                         case 4:
  192.                         printf("\nInsira o novo email\n");
  193.                         fgets(tmp, 50, stdin);
  194.                         if(!invalid(tmp)) {
  195.                             strtok(tmp, "\n");
  196.                             strcpy(passageiros[i].email, tmp);
  197.                             printf("\nEmail alterado com sucesso!\n");
  198.                         } else {
  199.                             printf("Erro, tente outra vez...\n");
  200.                         }
  201.                         break;
  202.                         case 5:
  203.                         printf("\nInsira o novo cartão de crédito\n");
  204.                         fgets(tmp, 50, stdin);
  205.                         if(!invalid(tmp)) {
  206.                             strtok(tmp, "\n");
  207.                             strcpy(passageiros[i].c_credito, tmp);
  208.                             printf("\nCartão de crédito alterado com sucesso!\n");
  209.                         } else {
  210.                             printf("Erro, tente outra vez...\n");
  211.                         }
  212.                         break;
  213.                         case 6:
  214.                         menu();
  215.                         break;
  216.                         default:
  217.                         printf("\nSelecione uma opção válida.\n");
  218.                         break;
  219.                     }
  220.                 }
  221.             }
  222.         }
  223.         if (!exists) {
  224.             printf("\nNão existe nenhum passageiro com esse número de aluno.\n");
  225.         }
  226.     }
  227.  
  228.     void updateCondutor() {
  229.         char tmp[50];
  230.         printf("\nInsira o número de aluno do condutor que quer alterar\n");
  231.         fgets(tmp, 50, stdin);
  232.         int exists = 0;
  233.         for (int i = 0; i < counter_condutores; i++) {
  234.             if(condutores[i].numero == atoi(tmp)) {
  235.                 exists = 1;
  236.                 char tmp[50];
  237.                 while (atoi(tmp) != 8) {
  238.                     printf("\nSelecione uma opção:\n1 - Alterar nome\n2 - Alterar turma\n3 - Alterar número de telemóvel\n4 - Alterar email\n5 - Alterar tipo da viatura\n6 - Alterar marca da viatura\n7 - Alterar matricula\n8 - Sair\n");
  239.                     fgets(tmp, 50, stdin);
  240.                     switch (atoi(tmp)){
  241.                         case 1:
  242.                         printf("\nInsira o novo nome\n");
  243.                         fgets(tmp, 50, stdin);
  244.                         if(!invalid(tmp)) {
  245.                             strtok(tmp, "\n");
  246.                             strcpy(condutores[i].nome, tmp);
  247.                             printf("\nNome alterado com sucesso!\n");
  248.                         } else {
  249.                             printf("Erro, tente outra vez...\n");
  250.                         }break;
  251.                         case 2:
  252.                         printf("\nInsira a nova turma\n");
  253.                         fgets(tmp, 50, stdin);
  254.                         if(!invalid(tmp)) {
  255.                             strtok(tmp, "\n");
  256.                             strcpy(condutores[i].turma, tmp);
  257.                             printf("\nTurma alterada com sucesso!\n");
  258.                         } else {
  259.                             printf("Erro, tente outra vez...\n");
  260.                         }break;
  261.                         case 3:
  262.                         printf("\nInsira o novo telemóvel\n");
  263.                         fgets(tmp, 50, stdin);
  264.                         if(!invalid(tmp)) {
  265.                             strtok(tmp, "\n");
  266.                             strcpy(condutores[i].telemovel, tmp);
  267.                             printf("\nNúmero de telemóvel alterado com sucesso!\n");
  268.                         } else {
  269.                             printf("Erro, tente outra vez...\n");
  270.                         }break;
  271.                         case 4:
  272.                         printf("\nInsira o novo email\n");
  273.                         fgets(tmp, 50, stdin);
  274.                         if(!invalid(tmp)) {
  275.                             strtok(tmp, "\n");
  276.                             strcpy(condutores[i].email, tmp);
  277.                             printf("\nEmail alterado com sucesso!\n");
  278.                         } else {
  279.                             printf("Erro, tente outra vez...\n");
  280.                         }break;
  281.                         case 5:
  282.                         printf("\nInsira o novo tipo de viatura\n");
  283.                         fgets(tmp, 50, stdin);
  284.                         if(!invalid(tmp)) {
  285.                             strtok(tmp, "\n");
  286.                             strcpy(condutores[i].tipo, tmp);
  287.                             printf("\nTipo de viatura alterado com sucesso!\n");
  288.                         } else {
  289.                             printf("Erro, tente outra vez...\n");
  290.                         }break;
  291.                         case 6:
  292.                         printf("\nInsira a nova marca da viatura\n");
  293.                         fgets(tmp, 50, stdin);
  294.                         if(!invalid(tmp)) {
  295.                             strtok(tmp, "\n");
  296.                             strcpy(condutores[i].marca, tmp);
  297.                             printf("\nMarca da viatura alterada com sucesso!\n");
  298.                         } else {
  299.                             printf("Erro, tente outra vez...\n");
  300.                         }break;
  301.                         case 7:
  302.                         printf("\nInsira a nova matrícula\n");
  303.                         fgets(tmp, 50, stdin);
  304.                         if(!invalid(tmp)) {
  305.                             strtok(tmp, "\n");
  306.                             strcpy(condutores[i].matricula, tmp);
  307.                             printf("\nMatrícula alterada com sucesso!\n");
  308.                         } else {
  309.                             printf("Erro, tente outra vez...\n");
  310.                         }break;
  311.                         case 8:
  312.                         menu();
  313.                         break;
  314.                         default:
  315.                         printf("\nSelecione uma opção válida.\n");
  316.                         break;
  317.                     }
  318.                 }
  319.             }
  320.         }
  321.         if (!exists) {
  322.             printf("\nNão existe nenhum condutor com esse número de aluno.\n");
  323.         }
  324.     }
  325.  
  326.     void menu(){
  327.         char tmp[10];
  328.         while (atoi(tmp) != 4) {
  329.             printf("\nSelecione uma opção:\n1 - Imprimir memória\n2 - Alterar passageiro\n3 - Alterar condutor\n4 - Sair\n");
  330.             fgets(tmp, 10, stdin);
  331.             switch (atoi(tmp)){
  332.                 case 1: printMemory();
  333.                 break;
  334.                 case 2: updatePassageiro();
  335.                 break;
  336.                 case 3: updateCondutor();
  337.                 break;
  338.                 case 4: exit(0);
  339.                 default:
  340.                 printf("\nSelecione uma opção válida.\n");
  341.                 break;
  342.             }
  343.         }
  344.     }
  345.  
  346.     void dealWithSignal(int signal) {
  347.         if ( signal == SIGUSR1 )
  348.             updateCondutores();
  349.         else if ( signal == SIGTERM ) {
  350.             rewriteFicheiros();
  351.             exit(0);
  352.         } else if (signal == SIGALRM ) {
  353.             int id = fork();
  354.             if (id == 0) {
  355.                 execl("/home/a82897/trabalho/LyftTask", "LyftTask", NULL);
  356.                 exit(0);
  357.             }
  358.             wait(NULL);
  359.         }
  360.     }
  361.  
  362.     void main() {
  363.         FILE * f = fopen("lyftadmin.pid","w");
  364.         fprintf(f, "%d", getpid());
  365.         fclose(f);
  366.         writeToMemory();
  367.         signal(SIGUSR1, dealWithSignal);
  368.         signal(SIGTERM, dealWithSignal);
  369.         signal(SIGALRM, dealWithSignal);
  370.         while(1){
  371.             alarm (60);
  372.             menu();
  373.         }
  374.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement