Advertisement
Guest User

a

a guest
Dec 8th, 2019
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.94 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef enum {Disponivel = 0, Alugado} status;
  6. typedef struct {
  7.     char* modelo;
  8.     float Diaria;
  9.     status status;
  10. } carro;
  11. typedef struct{
  12.     carro* carro;
  13.     int dias;
  14. } itemlocacao;
  15.  
  16. struct listacarro {
  17.     carro* carros;
  18.     struct listacarro* prox;
  19. };
  20. typedef struct listacarro lc;
  21.  
  22. // 2
  23. void imprimeLinha(char caractere, int qtdx) {
  24.     for (int i = 0; i <= qtdx; i++) {
  25.         printf("%c", caractere);
  26.     }
  27. }
  28. // 3                        RENEGADE    .           30
  29. void imprimeAEsquerda(char str[],char caractere, int qtdx) {
  30.   int qt = strlen(str);
  31.     printf("%s", str);
  32.     for(int i = 0; i<qtdx-qt;i++)
  33.         printf("%c", caractere);
  34. }
  35. void imprimeADireita(char str[],char caractere,int qtdx) {
  36.   int qt = qtdx-strlen(str);
  37.     char x[qt];
  38.     printf("%s", str);
  39.     for(int i = qt; i<qtdx;i++)
  40.         printf("%c", caractere);
  41. }
  42. void imprimeItemLocacao(char str[] , int qtdx){
  43.     itemlocacao* item;
  44.     imprimeAEsquerda(item->carro->modelo , ' ', 25);
  45.     float valor = item->carro->Diaria;
  46.     int subt = valor*item->dias;
  47.     for(int i = 0; i < 10-sizeof(valor); i--)
  48.         printf(" ");
  49.     printf("%.2f", valor);
  50.     printf(" x");
  51.     for(int i = 0;i < 3-sizeof(qtdx);i--)
  52.         printf(" ");
  53.     printf("%d", qtdx);
  54.     printf(" =");
  55.     for(int i = 0;i<8-sizeof(subt);i--)
  56.         printf(" ");
  57.     printf("%.2f", subt);
  58.     printf("\n");
  59. }
  60. carro* CadastrarCarro() {
  61.     carro *c = (carro*) malloc(sizeof(carro));
  62.     c->modelo = (char*) malloc(sizeof(char) * 30);
  63.     printf("\nINFORME O MODELO DO CARRO: ");
  64.     gets(c->modelo);
  65.     fflush(stdin);
  66.     printf("INFORME O VALOR DA DIARIA DO CARRO: ");
  67.     scanf("%f", &c->Diaria);
  68.     fflush(stdin);
  69.     c->status = 0;
  70.     return c;
  71. }
  72. int qtdCarros(lc* carros){
  73.     int qtd = 0;
  74.     lc* atual = carros;
  75.     while(atual != NULL){
  76.         qtd++;
  77.         atual = atual->prox;
  78.     }
  79.     return qtd;
  80. }
  81. lc* adicionarCarro(lc* carros, carro* c){
  82.     lc* listac = (lc*) malloc(sizeof(lc));
  83.     listac->carros = c;
  84.     listac->prox = carros;
  85.     carros = listac;
  86.     return carros;
  87. }
  88. void gravarCarros(lc* carros){
  89.     lc* atual = carros;
  90.     FILE* arq = fopen("carros.txt", "w");
  91.     while(atual != NULL){
  92.         fprintf(arq, "%s %d %f\n",atual->carros->modelo, atual->carros->status, atual->carros->Diaria);
  93.         atual = atual->prox;
  94.     }
  95.     fclose(arq);
  96. }
  97. /*void gravarStatus(lc* carros){
  98.     lc* atual = carros;
  99.     FILE* arq = fopen("carros.txt", "r+");
  100.     fscanf(arq, "Modelo: %s\nDiaria: %f\nStatus: ", atual->carros->modelo, atual->carros->Diaria);
  101.     if(atual->carros->status == 0)
  102.         fprintf(arq, "%d\n\n", atual->carros->status = 1);
  103.     if(atual->carros->status == 1)
  104.         fprintf(arq, "%d\n\n", atual->carros->status = 0);
  105.     fclose(arq);
  106. }*/
  107. lc* carregarCarros(){
  108.     FILE* arq = fopen("carros.txt", "r");
  109.     carro* c;
  110.     lc* carros = NULL;
  111.     char* strg = (char*) malloc(sizeof(char) * 10);
  112.     while(!feof(arq)){
  113.         c = (carro*) malloc(sizeof(carro));
  114.         c->modelo = (char*) malloc(sizeof(char));
  115.         fscanf(arq, "%s ", strg, c->modelo);
  116.         fscanf(arq, "%d ", strg, &c->status);
  117.         fscanf(arq, "%f\n", strg, &c->Diaria);
  118.         carros = adicionarCarro(carros, c);
  119.     }
  120.     free(strg);
  121.     fclose(arq);
  122.     return carros;
  123. }
  124.  
  125. int showMenu(){
  126.     int op;
  127.     imprimeLinha('*', 50);
  128.     printf("\n                  MENU DE OPCOES\n");
  129.     imprimeLinha('*', 50);
  130.     printf("\n0 - SAIR");
  131.     printf("\n1 - CADASTRAR NOVO CARRO");
  132.     printf("\n2 - REALIZAR LOCACAO");
  133.     printf("\n3 - DEVOLVER CARRO\n");
  134.     imprimeLinha('*', 50);
  135.     printf("\nINFORME A OPCAO: ");
  136.     scanf("%d", &op);
  137.     fflush(stdin);
  138.     return op;
  139. }
  140. /*
  141. Questão 07 [1,0]. Crie uma função recursiva chamada calcularTotal que recebe como entrada um vetor de ItemLocacao e um
  142. inteiro que indica a quantidade de itens nessa lista e calcula o valor total de todos os ItemLocacao armazenados no vetor.
  143. O valor total é igual à soma de dor valor de cada carro multiplicado pela quantidade de dias que estará alugado.
  144. */
  145. float calculartotal(itemlocacao item[], int qtdd){
  146.     float total = 0;
  147.     if(qtdd == 0) {
  148.         total += item->carro->Diaria;
  149.         return total;
  150.     }
  151.     total += item->carro->Diaria;
  152.     return calculartotal(item, qtdd-1);
  153. }
  154. /*
  155. Questão 08 [1,0]. Crie uma função sem retorno chamada notaFiscal que recebe como entrada um vetor de ItemLocacao e o número de itens e
  156. imprime a nota fiscal contendo os itens da locação armazenadosnovetor.
  157. */
  158. void notaFiscal(itemlocacao* item, int itens){
  159.   imprimeLinha('*', 50);
  160.   printf("\n                   NOTA  FISCAL\n");
  161.   imprimeLinha('*', 50);
  162.   printf("\n");
  163.   for(int i = 0; i < itens; i++){
  164.     // 100.00 x 10 = 1000.00
  165.     //  90.00 x  5 =  450.00
  166.     imprimeItemLocacao(item, itens);
  167.   }
  168.   imprimeLinha('*', 50);
  169.   imprimeAEsquerda('TOTAL:', ' ', 30);
  170.   float total = calculartotal(item, itens);
  171.   imprimeLinha('*', 50);
  172. }
  173. /*
  174. Questão 10 [1,0]. Crie uma função buscarCarro que recebe uma lista de carros
  175. (ponteiro para o tipo ListaCarro) e o nome de um carro e retorna o carro (ponteiro do tipo Carro) que está presente na lista,
  176. possui o nome indicado e está disponível. Caso não seja encontrado um carro com o nome indicado ou disponível,a função retorna NULL.
  177. */
  178. void imprimirCarros(lc* carros){
  179.     lc* atual = carros;
  180.     printf("\nCARROS DISPONIVEIS:");
  181.     while(atual != NULL){
  182.         printf(" %s, %.2f;", atual->carros->modelo, atual->carros->Diaria);
  183.         atual = atual->prox;
  184.     }
  185. }
  186. lc* buscarCarro(lc* carros, itemlocacao* item){
  187.     lc* atual = carros;
  188.     carro* c;
  189.     while(atual != NULL){
  190.         if(strcmp(atual->carros->modelo, item->carro->modelo) == 0){
  191.             if(atual->carros->status == 0){
  192.                // gravarStatus(atual);
  193.                 return atual->carros->modelo;
  194.             } else {
  195.                 return NULL;
  196.             }
  197.         } else {
  198.             atual = atual->prox;
  199.         }
  200.     }
  201.     return NULL;
  202. }
  203.  
  204. /*
  205. Questão 11 [1,0]. Crie uma função sem retorno chamada realizarLocacao que recebe uma lista de
  206. carros (ponteiro do tipo ListaCarro). Essa função deve solicitar o modelo do carro e encontrá-lo na lista
  207. de carros. Após encontrar o carro na lista de carros, a função armazena em um vetor de ItemLocacao o
  208. carro selecionado e a quantidade de dias. Quando o usuário apenas apertar ENTER na hora de digitar o
  209. modelo do carro, significa que a locação deve ser encerrada e a função deve calcular o total e imprimir a
  210. nota fiscal.
  211. */
  212. void realizarLocacao(lc* listac){
  213.     int qtdi = 0;
  214.     itemlocacao* item = (itemlocacao*)malloc(sizeof(itemlocacao));
  215.     while(1){
  216.         if(qtdi == 50){
  217.             printf("\n\nERRO: NUMERO MAXIMO DE PEDIDOS, IMPRIMINDO NOTA FISCAL!");
  218.             notaFiscal(item, qtdi);
  219.             break;
  220.         }
  221.         printf("\n\nINFORME O NOME DO CARRO OU TECLE ENTER PARA FINALIZAR A LOCACAO: ");
  222.         gets(item->carro->modelo);
  223.         fflush(stdin);
  224.         if(strlen(item->carro->modelo)==NULL){
  225.             if(qtdi == 0){
  226.                 break;
  227.             } else if (qtdi != 0){
  228.                 notaFiscal(item, qtdi);
  229.                 break;
  230.             }
  231.         } else {
  232.             if(buscarCarro(listac, item) == NULL){
  233.                 printf("ERRO: ESTE CARRO JA FOI ALUGADO, OU NAO EXISTE!");
  234.             } else {
  235.                 printf("INFORME A QUANTIDADE DE DIAS: ");
  236.                 scanf("%d", item->dias);
  237.                 fflush(stdin);
  238.                 qtdi++;
  239.             }
  240.         }
  241.     }
  242. }
  243. /*
  244. Crie uma função sem retorno chamada devolverCarro que recebe uma lista de
  245. carros (ponteiro do tipo ListaCarro). Essa função deve solicitar o modelo de um carro e procurar um
  246. carro desse modelo na lista que esteja com status alugado. Então, a lista deve atualizar o status desse carro
  247. para disponível.
  248. */
  249. void devolverCarro(lc* lista) {
  250.   char modelo[30];
  251.   int qtd = qtdCarros(lista);// usa isso aqui pro for
  252.   printf("\nDEVOLVENDO UM CARRO\n");
  253.   printf("\ndigite o modelo do carro: ");
  254.   gets(modelo);
  255.   fflush(stdin);
  256.   if (strcmp (modelo, lista->carros->modelo) == 0){
  257.     if (lista->carros->status == 1 )
  258.         lista->carros->status == 0;
  259.   }
  260. }
  261. void main(){
  262.     lc* estoque = carregarCarros();
  263.     int qtdcarros = qtdCarros(estoque);
  264.     int op;
  265.     carro* c;
  266.     lc* listac;
  267.     while(1){
  268.         int op = showMenu();
  269.         if(op == 0){
  270.             gravarCarros(estoque);
  271.             return;
  272.         }
  273.         else if(op == 1){
  274.             c = CadastrarCarro();
  275.             estoque = adicionarCarro(estoque, c);
  276.             gravarCarros(estoque);
  277.         }
  278.         else if(op == 2){
  279.             imprimirCarros(estoque);
  280.             realizarLocacao(estoque);
  281.             gravarCarros(estoque);
  282.         }
  283.         else if(op == 5){
  284.           imprimirCarros(estoque);
  285.         }
  286.  
  287.        
  288.     }
  289.  
  290. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement