Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef enum {Disponivel = 0, Alugado} status;
- typedef struct {
- char* modelo;
- float Diaria;
- status status;
- } carro;
- typedef struct{
- carro* carro;
- int dias;
- } itemlocacao;
- struct listacarro {
- carro* carros;
- struct listacarro* prox;
- };
- typedef struct listacarro lc;
- // 2
- void imprimeLinha(char caractere, int qtdx) {
- for (int i = 0; i <= qtdx; i++) {
- printf("%c", caractere);
- }
- }
- // 3 RENEGADE . 30
- void imprimeAEsquerda(char str[],char caractere, int qtdx) {
- int qt = strlen(str);
- printf("%s", str);
- for(int i = 0; i<qtdx-qt;i++)
- printf("%c", caractere);
- }
- void imprimeADireita(char str[],char caractere,int qtdx) {
- int qt = qtdx-strlen(str);
- char x[qt];
- printf("%s", str);
- for(int i = qt; i<qtdx;i++)
- printf("%c", caractere);
- }
- void imprimeItemLocacao(char str[] , int qtdx){
- itemlocacao* item;
- imprimeAEsquerda(item->carro->modelo , ' ', 25);
- float valor = item->carro->Diaria;
- int subt = valor*item->dias;
- for(int i = 0; i < 10-sizeof(valor); i--)
- printf(" ");
- printf("%.2f", valor);
- printf(" x");
- for(int i = 0;i < 3-sizeof(qtdx);i--)
- printf(" ");
- printf("%d", qtdx);
- printf(" =");
- for(int i = 0;i<8-sizeof(subt);i--)
- printf(" ");
- printf("%.2f", subt);
- printf("\n");
- }
- carro* CadastrarCarro() {
- carro *c = (carro*) malloc(sizeof(carro));
- c->modelo = (char*) malloc(sizeof(char) * 30);
- printf("\nINFORME O MODELO DO CARRO: ");
- gets(c->modelo);
- fflush(stdin);
- printf("INFORME O VALOR DA DIARIA DO CARRO: ");
- scanf("%f", &c->Diaria);
- fflush(stdin);
- c->status = 0;
- return c;
- }
- int qtdCarros(lc* carros){
- int qtd = 0;
- lc* atual = carros;
- while(atual != NULL){
- qtd++;
- atual = atual->prox;
- }
- return qtd;
- }
- lc* adicionarCarro(lc* carros, carro* c){
- lc* listac = (lc*) malloc(sizeof(lc));
- listac->carros = c;
- listac->prox = carros;
- carros = listac;
- return carros;
- }
- void gravarCarros(lc* carros){
- lc* atual = carros;
- FILE* arq = fopen("carros.txt", "w");
- while(atual != NULL){
- fprintf(arq, "%s %d %f\n",atual->carros->modelo, atual->carros->status, atual->carros->Diaria);
- atual = atual->prox;
- }
- fclose(arq);
- }
- /*void gravarStatus(lc* carros){
- lc* atual = carros;
- FILE* arq = fopen("carros.txt", "r+");
- fscanf(arq, "Modelo: %s\nDiaria: %f\nStatus: ", atual->carros->modelo, atual->carros->Diaria);
- if(atual->carros->status == 0)
- fprintf(arq, "%d\n\n", atual->carros->status = 1);
- if(atual->carros->status == 1)
- fprintf(arq, "%d\n\n", atual->carros->status = 0);
- fclose(arq);
- }*/
- lc* carregarCarros(){
- FILE* arq = fopen("carros.txt", "r");
- carro* c;
- lc* carros = NULL;
- char* strg = (char*) malloc(sizeof(char) * 10);
- while(!feof(arq)){
- c = (carro*) malloc(sizeof(carro));
- c->modelo = (char*) malloc(sizeof(char));
- fscanf(arq, "%s ", strg, c->modelo);
- fscanf(arq, "%d ", strg, &c->status);
- fscanf(arq, "%f\n", strg, &c->Diaria);
- carros = adicionarCarro(carros, c);
- }
- free(strg);
- fclose(arq);
- return carros;
- }
- int showMenu(){
- int op;
- imprimeLinha('*', 50);
- printf("\n MENU DE OPCOES\n");
- imprimeLinha('*', 50);
- printf("\n0 - SAIR");
- printf("\n1 - CADASTRAR NOVO CARRO");
- printf("\n2 - REALIZAR LOCACAO");
- printf("\n3 - DEVOLVER CARRO\n");
- imprimeLinha('*', 50);
- printf("\nINFORME A OPCAO: ");
- scanf("%d", &op);
- fflush(stdin);
- return op;
- }
- /*
- Questão 07 [1,0]. Crie uma função recursiva chamada calcularTotal que recebe como entrada um vetor de ItemLocacao e um
- inteiro que indica a quantidade de itens nessa lista e calcula o valor total de todos os ItemLocacao armazenados no vetor.
- O valor total é igual à soma de dor valor de cada carro multiplicado pela quantidade de dias que estará alugado.
- */
- float calculartotal(itemlocacao item[], int qtdd){
- float total = 0;
- if(qtdd == 0) {
- total += item->carro->Diaria;
- return total;
- }
- total += item->carro->Diaria;
- return calculartotal(item, qtdd-1);
- }
- /*
- 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
- imprime a nota fiscal contendo os itens da locação armazenadosnovetor.
- */
- void notaFiscal(itemlocacao* item, int itens){
- imprimeLinha('*', 50);
- printf("\n NOTA FISCAL\n");
- imprimeLinha('*', 50);
- printf("\n");
- for(int i = 0; i < itens; i++){
- // 100.00 x 10 = 1000.00
- // 90.00 x 5 = 450.00
- imprimeItemLocacao(item, itens);
- }
- imprimeLinha('*', 50);
- imprimeAEsquerda('TOTAL:', ' ', 30);
- float total = calculartotal(item, itens);
- imprimeLinha('*', 50);
- }
- /*
- Questão 10 [1,0]. Crie uma função buscarCarro que recebe uma lista de carros
- (ponteiro para o tipo ListaCarro) e o nome de um carro e retorna o carro (ponteiro do tipo Carro) que está presente na lista,
- 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.
- */
- void imprimirCarros(lc* carros){
- lc* atual = carros;
- printf("\nCARROS DISPONIVEIS:");
- while(atual != NULL){
- printf(" %s, %.2f;", atual->carros->modelo, atual->carros->Diaria);
- atual = atual->prox;
- }
- }
- lc* buscarCarro(lc* carros, itemlocacao* item){
- lc* atual = carros;
- carro* c;
- while(atual != NULL){
- if(strcmp(atual->carros->modelo, item->carro->modelo) == 0){
- if(atual->carros->status == 0){
- // gravarStatus(atual);
- return atual->carros->modelo;
- } else {
- return NULL;
- }
- } else {
- atual = atual->prox;
- }
- }
- return NULL;
- }
- /*
- Questão 11 [1,0]. Crie uma função sem retorno chamada realizarLocacao que recebe uma lista de
- carros (ponteiro do tipo ListaCarro). Essa função deve solicitar o modelo do carro e encontrá-lo na lista
- de carros. Após encontrar o carro na lista de carros, a função armazena em um vetor de ItemLocacao o
- carro selecionado e a quantidade de dias. Quando o usuário apenas apertar ENTER na hora de digitar o
- modelo do carro, significa que a locação deve ser encerrada e a função deve calcular o total e imprimir a
- nota fiscal.
- */
- void realizarLocacao(lc* listac){
- int qtdi = 0;
- itemlocacao* item = (itemlocacao*)malloc(sizeof(itemlocacao));
- while(1){
- if(qtdi == 50){
- printf("\n\nERRO: NUMERO MAXIMO DE PEDIDOS, IMPRIMINDO NOTA FISCAL!");
- notaFiscal(item, qtdi);
- break;
- }
- printf("\n\nINFORME O NOME DO CARRO OU TECLE ENTER PARA FINALIZAR A LOCACAO: ");
- gets(item->carro->modelo);
- fflush(stdin);
- if(strlen(item->carro->modelo)==NULL){
- if(qtdi == 0){
- break;
- } else if (qtdi != 0){
- notaFiscal(item, qtdi);
- break;
- }
- } else {
- if(buscarCarro(listac, item) == NULL){
- printf("ERRO: ESTE CARRO JA FOI ALUGADO, OU NAO EXISTE!");
- } else {
- printf("INFORME A QUANTIDADE DE DIAS: ");
- scanf("%d", item->dias);
- fflush(stdin);
- qtdi++;
- }
- }
- }
- }
- /*
- Crie uma função sem retorno chamada devolverCarro que recebe uma lista de
- carros (ponteiro do tipo ListaCarro). Essa função deve solicitar o modelo de um carro e procurar um
- carro desse modelo na lista que esteja com status alugado. Então, a lista deve atualizar o status desse carro
- para disponível.
- */
- void devolverCarro(lc* lista) {
- char modelo[30];
- int qtd = qtdCarros(lista);// usa isso aqui pro for
- printf("\nDEVOLVENDO UM CARRO\n");
- printf("\ndigite o modelo do carro: ");
- gets(modelo);
- fflush(stdin);
- if (strcmp (modelo, lista->carros->modelo) == 0){
- if (lista->carros->status == 1 )
- lista->carros->status == 0;
- }
- }
- void main(){
- lc* estoque = carregarCarros();
- int qtdcarros = qtdCarros(estoque);
- int op;
- carro* c;
- lc* listac;
- while(1){
- int op = showMenu();
- if(op == 0){
- gravarCarros(estoque);
- return;
- }
- else if(op == 1){
- c = CadastrarCarro();
- estoque = adicionarCarro(estoque, c);
- gravarCarros(estoque);
- }
- else if(op == 2){
- imprimirCarros(estoque);
- realizarLocacao(estoque);
- gravarCarros(estoque);
- }
- else if(op == 5){
- imprimirCarros(estoque);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement