Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
UNIVERSIDADE FEDERAL DO RECÔNCAVO DA BAHIA CETEC – Centro de Ciências Exatas e Tecnológicas Processamento de Dados 2 PROJETO FINAL LOCADORA DE AUTOMOVEIS Alunos: Daniela Santos Garrido Maria Clara Souza Machado Alves Gabriel Paixão CRUZ DAS ALMAS- BA UNIVERSIDADE FEDERAL DO RECÔNCAVO DA BAHIA CETEC – Centro de Ciências Exatas e Tecnológicas PROJETO FINAL LOCADORA DE AUTOMOVEIS Alunos: Daniela Santos Garrido Maria Clara Souza Machado Alves Gabriel Paixão Trabalho solicitado sob orientação do Professor José Valentin como requisito parcial da disciplina Processamento de Dados 2. CRUZ DAS ALMAS- BA SUMÁRIO 1.INTRODUÇÃO 4 2.OBJETIVO 5 3.CÓDIGO 5 4.RESULTADO 20 5.CONCLUSÃO............................................................................................................24 6. REFERENCIAS BIBLIOGRAFICAS.........................................................................25 1. INTRODUÇÃO Estrutura de repetição while executa a repetição de um bloco de instruções enquanto uma condição é verdadeira. Lembrando que chamamos de variável de controle a variável testada na condição. O comando for são as estruturas de repetição, que executam a repetição de um conjunto de instruções enquanto uma determinada condição é verdadeira.. Estrutura de decisão if~else é uma estrutura de decisão examina uma ou mais condições e decide quais instruções serão executadas dependendo se a condição foi ou não foi. A cláusula else é opcional. Se condição for verdadeira, o bloco que forma o destino de if será executado; caso contrário o bloco que forma o destino de else será executado. O vetor é uma estrutura de dados organizados, que armazena uma determinada quantidade de valores do mesmo tipo. Esses dados em um vetor são chamados de itens do vetor. Para localizar a posição de um vetor usamos um número inteiro denominado índice do vetor. A memória RAM de qualquer computador é uma sequência de bytes. A que um byte ocupa na sequência é o endereço do byte. Cada variável de um programa ocupa um certo número de bytes consecutivos na memória do computador. Uma variável do tipo char ocupa 1 byte. Uma variável do tipo int ocupa 4 bytes e um double ocupa 8 bytes em muitos computadores. O número exato de bytes de uma variável é dado pelo operador sizeof. O ponteiro é uma variável que guarda o endereço de memória, contudo, esse endereço de memória é capaz de armazenar o dado. Declarar um ponteiro, requer a definição de um tipo de dado. Assim, pode-se resumir que a diferença do ponteiro para a variável tradicional, é que o ponteiro é capaz de armazenar apenas o endereço de memória. Função é um conjunto de comandos que realiza uma tarefa específica em um código.A função é referenciada pelo programa principal através do nome atribuído a ela.A sua utilização visa modularizar um programa, o que é muito comum em programação estruturada.Desta forma podemos dividir um programa em várias partes, no qual cada função realiza uma tarefa bem definida. 2. OBJETIVO Esse projeto foi criado com o intuito de facilitar a locação de veículos em locadoras de aeroportos, visando o momento de pandemia onde devemos evitar aglomerações, os clientes podem ter acesso virtual a loja para reservar seu automóvel com antecedência, de forma rápida, pratica, remota, e sem transtorno. 3. CÓDIGO · CÓDIGO #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100 typedef struct veiculo { int id; int idCliente; char nome[MAX]; float preco; } t_veiculo; typedef struct cliente { int id; char nome[MAX]; } t_cliente; char menu(); void cadastroCliente(); void cadastroVeiculo(); void listaDeCliente(); t_veiculo *obterVeiculo(FILE *arqVeiculos, int idVeiculo); t_cliente *obterCliente(FILE *arqClientes, int idCliente); void pesquisaVeiculo(); int existeVeiculo(FILE *arqVeiculos, int idVeiculo); int existeCliente(FILE *arqClientes, int idCliente); void atualizarVeiculos(FILE *arqVeiculos, t_veiculo *veiculoAlugado); void alugarVeiculo(); //void cadastroVeiculo(); void entregarVeiculo(); char respMenu(char str[]); char menu(){ char resp[2]; printf(" < BEM VINDO > \n "); printf("<============================ (Tabela de Veiculos e seus ids) ============================>\n"); printf("| Furgao | | Suvs | | Picapes | | Sedans | | Hatchs |\n"); printf("| Fiorino id: 1 | | Jeep compass id: 2| | Hilux id: 7 | | Jetta id: 12 | | Gol id: 16 |\n"); printf("| x | | Renegade id: 3 | | Mit.L200: 8 | | Corolla id: 13| | Onix id: 17|\n"); printf("| x | | Tiguan id: 4 | | Toro id: 9 | | Prisma id: 14 | | Uno id: 18 |\n"); printf("| x | | T-cross id: 5 | | Strada id: 10 | | Cruze id: 15 | | HB20 id: 19|\n"); printf("| x | | Creta id: 6 | | Saveiro id: 11| | x | | x |\n"); printf("<=========================================================================================>\n"); printf("\n<=============================( Locadora Movimente-se )=============================>\n"); printf("\n | (1) para cadastrar um cliente. | | (2) para listar clientes e seus ids. |\n"); printf("\n | (3) para pesquisar veiculos. | | (4) para alugar veiculos. |\n"); printf("\n | (5) para entregar veiculos. | | (0) para encerrar o programa. |\n"); printf("\n<===================================================================================>"); printf("\nO que o senhor(a) deseja?\n"); scanf("%s", resp); return resp[0]; } int main(int argc, char *argv[]){ char resp; while(1){ resp=menu(); if(resp=='1') cadastroCliente(); else if(resp=='2') listaDeCliente(); else if(resp=='3') pesquisaVeiculo(); else if(resp=='4') alugarVeiculo(); else if(resp=='5') entregarVeiculo(); // else if(resp=='6') // cadastroVeiculo(); else if(resp=='0') break; else{ printf("\nOpcao invalida!\n"); } } printf("\nObrigado por usar nossos servicos, volte sempre!\n"); return 0; } void cadastroCliente(){ FILE *arqClientes = fopen("clientes.bin", "a+b"); if(arqClientes == NULL){ printf("\nFalha ao abrir arquivo(s)!\n"); exit(1); } int cont_bytes = 0; fseek(arqClientes, 0, SEEK_END); cont_bytes = ftell(arqClientes); t_cliente cliente; if(cont_bytes == 0){ cliente.id = 1; } else{ t_cliente ultimoCliente; fseek(arqClientes, cont_bytes - sizeof(t_cliente), SEEK_SET); fread(&ultimoCliente, sizeof(t_cliente), 1, arqClientes); cliente.id = ultimoCliente.id + 1; } printf("\nDigite o nome do cliente: "); scanf("%s", cliente.nome); fseek(arqClientes, 0, SEEK_END); fwrite(&cliente, sizeof(t_cliente), 1, arqClientes); fclose(arqClientes); printf("\nCliente \"%s\" cadastrado com sucesso!\n", cliente.nome); } t_cliente *obterCliente(FILE *arqClientes, int idCliente){ rewind(arqClientes); t_cliente *cliente; cliente = (t_cliente *)malloc(sizeof(t_cliente)); while(1){ size_t result = fread(cliente, sizeof(t_cliente), 1, arqClientes); if(result == 0){ free(cliente); return NULL; } if(cliente->id == idCliente) break; } return cliente; } void listaDeCliente(){ FILE *arqClientes = fopen("clientes.bin", "rb"); if(arqClientes == NULL){ printf("\nFalha ao abrir arquivo(s) ou "); printf("Nenhum cliente cadastrado.\n"); return; } int encontrouClientes = 0; t_cliente cliente; printf("\nListando todos os clientes...\n"); while(1){ size_t result = fread(&cliente, sizeof(t_cliente), 1, arqClientes); if(result == 0) break; encontrouClientes = 1; printf("\nID do cliente: %d\n", cliente.id); printf("Nome do cliente: %s\n", cliente.nome); } if(encontrouClientes == 0) printf("\nNenhum cliente cadastrado.\n"); fclose(arqClientes); } void pesquisaVeiculo(){ char nome[MAX]; int encontrouVeiculo = 0; FILE *arqVeiculos = fopen("veiculos.bin", "rb"); FILE *arqClientes = fopen("clientes.bin", "rb"); if(arqVeiculos == NULL){ printf("\nFalha ao abrir arquivo(s)!\n"); exit(1); } printf("\nDigite o nome do veiculo: "); scanf("%s", nome); printf("\nVeiculo com o nome \"%s\":\n\n", nome); t_veiculo veiculo; while(1){ size_t result = fread(&veiculo, sizeof(t_veiculo), 1, arqVeiculos); if(result == 0) break; char nomeAux[MAX]; strcpy(nomeAux, veiculo.nome); if(strcmp(strupr(nomeAux), strupr(nome)) == 0){ printf("ID do veiculo: %d\n", veiculo.id); printf("Preco: %.2lf\n", veiculo.preco); if(veiculo.idCliente != -1){ if(arqClientes == NULL){ printf("\nFalha ao abrir arquivo!\n"); fclose(arqVeiculos); exit(1); } t_cliente *cliente = obterCliente(arqClientes, veiculo.idCliente); printf("Alugado? Sim. Cliente: %s\n", cliente->nome); free(cliente); } else printf("Alugado? Nao\n"); encontrouVeiculo = 1; printf("\n"); } } if(encontrouVeiculo == 0) printf("Nenhum veiculo encontrado.\n\n"); fclose(arqVeiculos); } int existeVeiculo(FILE *arqVeiculos, int idVeiculo){ rewind(arqVeiculos); t_veiculo veiculo; while(1){ size_t result = fread(&veiculo, sizeof(t_veiculo), 1, arqVeiculos); if(result == 0) break; if(veiculo.id == idVeiculo) return 1; } return 0; } int existeCliente(FILE *arqClientes, int idCliente){ rewind(arqClientes); t_cliente cliente; while(1){ size_t result = fread(&cliente, sizeof(t_cliente), 1, arqClientes); if(result == 0) break; if(cliente.id == idCliente) return 1; } return 0; } t_veiculo *obterVeiculo(FILE *arqVeiculos, int idVeiculo){ rewind(arqVeiculos); t_veiculo *veiculo; veiculo = (t_veiculo *)malloc(sizeof(t_veiculo)); while(1){ size_t result = fread(veiculo, sizeof(t_veiculo), 1, arqVeiculos); if(result == 0) break; if(veiculo->id == idVeiculo) return veiculo; } free(veiculo); return NULL; } /* void cadastroVeiculo(){ FILE *arqVeiculos = fopen("veiculos.bin", "a+b"); if(arqVeiculos == NULL){ printf("\nFalha ao abrir arquivo(s)!\n"); exit(1); } t_veiculo veiculo; /* int cont_bytes = 0; fseek(arqVeiculos, 0, SEEK_END); cont_bytes = ftell(arqVeiculos); if(cont_bytes == 0){ veiculo.id = 1; } else{ t_veiculo ultimoVeiculo; fseek(arqVeiculos, cont_bytes - sizeof(t_veiculo), SEEK_SET); fread(&ultimoVeiculo, sizeof(t_veiculo), 1, arqVeiculos); veiculo.id = ultimoVeiculo.id + 1; } printf("\nDigite o nome do veiculo: "); scanf("%s", veiculo.nome); do{ char strPreco[5]; float floatPreco; printf("Digite o preco do veiculo: "); scanf("%s", strPreco); int int_preco; sscanf(strPreco, "%d", &int_preco); floatPreco = int_preco / 100.0; veiculo.preco = floatPreco; break; } while(1); veiculo.idCliente = -1; fseek(arqVeiculos, 0, SEEK_END); fwrite(&veiculo, sizeof(t_veiculo), 1, arqVeiculos); fclose(arqVeiculos); printf("\nVeiculo \"%s\" cadastrado com sucesso!\n", veiculo.nome); } */ void atualizarVeiculos(FILE *arqVeiculos, t_veiculo *veiculoAlugado){ rewind(arqVeiculos); t_veiculo veiculo; while(1){ size_t result = fread(&veiculo, sizeof(t_veiculo), 1, arqVeiculos); if(result == 0) break; if(veiculo.id == veiculoAlugado->id){ fseek(arqVeiculos, - sizeof(t_veiculo), SEEK_CUR); fwrite(veiculoAlugado, sizeof(t_veiculo), 1, arqVeiculos); break; } } } void alugarVeiculo(){ char str_idCliente[10]; int idCliente; FILE *arqVeiculos = fopen("veiculos.bin", "rb+"); FILE *arqClientes = fopen("clientes.bin", "rb+"); if(arqVeiculos == NULL){ arqVeiculos = fopen("veiculos.bin", "wb+"); if(arqVeiculos == NULL){ printf("\nFalha ao criar arquivo(s)!\n"); exit(1); } } if(arqClientes == NULL){ arqClientes = fopen("clientes.bin", "wb+"); if(arqClientes == NULL){ printf("\nFalha ao criar arquivo(s)!\n"); exit(1); } } printf("\nDigite o ID do cliente: "); scanf("%s", str_idCliente); sscanf(str_idCliente, "%d", &idCliente); if(existeCliente(arqClientes, idCliente)){ char str_idVeiculo[10]; int idVeiculo; printf("\nDigite o ID do veiculo: "); scanf("%s", str_idVeiculo); sscanf(str_idVeiculo, "%d", &idVeiculo); t_veiculo *veiculo = obterVeiculo(arqVeiculos, idVeiculo); if(veiculo != NULL){ if(veiculo->idCliente != -1) printf("\nO veiculo \"%s\" ja esta alugado!\n", veiculo->nome); else{ veiculo->idCliente = idCliente; atualizarVeiculos(arqVeiculos, veiculo); printf("\nVeiculo \"%s\" alugado com sucesso!\n", veiculo->nome); } free(veiculo); } else printf("\nNao existe veiculo com o ID \"%d\".\n", idVeiculo); } else printf("\nNao existe cliente com o ID \"%d\".\n", idCliente); fclose(arqClientes); fclose(arqVeiculos); } void entregarVeiculo(){ char str_idVeiculo[10]; int idVeiculo; FILE *arqVeiculos = fopen("veiculos.bin", "rb+"); if(arqVeiculos == NULL){ arqVeiculos = fopen("veiculos.bin", "wb+"); if(arqVeiculos == NULL){ printf("\nFalha ao criar arquivo(s)!\n"); exit(1); } } printf("\nDigite o ID do veiculo: "); scanf("%s", str_idVeiculo); sscanf(str_idVeiculo, "%d", &idVeiculo); t_veiculo *veiculo = obterVeiculo(arqVeiculos, idVeiculo); if(veiculo != NULL){ if(veiculo->idCliente == -1) printf("\nO veiculo \"%s\" ja esta disponivel!\n", veiculo->nome); else{ veiculo->idCliente = -1; atualizarVeiculos(arqVeiculos, veiculo); printf("\nVeiculo \"%s\" entregue com sucesso!\n", veiculo->nome); } free(veiculo); } else printf("\nNao existe veiculo com o ID \"%d\".\n", idVeiculo); fclose(arqVeiculos); } 4. RESULTADO O programa apresenta dois menus, o primeiro menu mostra todos os veículos já cadastrados no programa e seus Ids que serão usados no momento do aluguel de cada veículo, o segundo menu que possui o protótipo de função char menu(); que exibe o menu com todas as opções do programa, e retorna um caractere do número correspondente a opção que o usuário poderá escolher para prosseguir com o programa. No segundo menu o usuário poderá escolher entre cinco números que vão de 0 a 5, o que o programa irá executar. Após o usuário digitar o número 1, o programa executará a função void cadastrar_cliente(); que irá pedir o nome do usuário que deseja ser cadastrado. Caso ele queira pesquisar por algum veículo querendo saber se estar alugado ou não, o usuário deve digitar o número 3, que irá informar se o valor do veículo, se está alugado ou não e se estiver alugado, mostrará o nome do cliente que o alugou. Na opção 4, o usuário poderá alugar o veículo que ele deseja. O programa irá pedir o id do usuário e o do caso que você deseja alugar, caso ele não saiba, a opção 2 executa essa função, onde mostra a lista de clientes e seus ids, já o id do carro está presente no primeiro menu. A opção 5, você poderá entregar o veículo que você alugou. O programa pedirá o id do veiculo que deseja entregar, e aparecerá a mensagem que foi entregue com sucesso. Por fim, a opção 0 finaliza o programa. 5. CONCLUSÃO Desenvolvimento do sistema de locação de automóveis, veio agregar os estabelecimentos, onde as reservas e locações eram feitas de modo presencial e demorada, se tornando mais pratica, remota e fácil, tanto para os clientes, quanto para os atendentes. Com a implantação do sistema, o estabelecimento adquiri maior credibilidade perante seus clientes, maior confiabilidade nos registros de seus clientes, controle de seus ativos e amplitude no mercado na região. No sistema implantado, poderá ser agregado outras funcionalidades caso o proprietário do estabelecimento queira, como por exemplo, acompanhar o fluxo de caixa e movimentação financeira da locadora. 6. REFERÊNCIAS BIBLIOGRÁFICAS: CASTANHO, Carla. Busca e Ordenação, 28 de mai. de 2018. Página inicial. Disponível em: <https://carlacastanho.github.io/Material-de APC/aulas/aula7.html>. Acesso em: 14 de dez. de 2020. CASAVELLA, Eduardo. Alocação Dinâmica em C, [s.d.]. Disponível em: <http://linguagemc.com.br/alocacao-dinamica-de-memoria-em-c/>. Acesso em: 12 de dez. de 2020. PROGRAMAÇÃO DESCOMPLICADA. Linguagem C Descomplicada Portal de Vídeo-Aulas para Estudo de Programação, 10 de dez. de 2012. Página inicial. Disponível em:<https://programacaodescomplicada.wordpress.com/2012/12/10/aula-79-arquivos-pt-14-fseek-e-rewind-programacao-descomplicada/>. Acesso em: 12 de dez. de 2020. UNICAMP. Limitações de C em trabalho com caracteres e strings, [s.d.]. Página inicial. Disponível em: <https://www.unicamp.br/fea/ortega/info/aula09.htm>. Acesso em: 12 de dez. de 2020. SILVA, Allan Diego. Calculando o tamanho de um arquivo em C, 15 de jul. de 2006. Página inicial. Disponível em: <https://allanlima.wordpress.com/2006/07/15/calculando-o-tamanho-de-um-arquivo-em-c-2/>. Acesso em: 12 de dez. de 2020. PINHO, Prof. Márcio Sarroglia. Uso de Arquivos Texto, [s.d.]. Página inicial. Disponível em: <https://www.inf.pucrs.br/~pinho/LaproI/Arquivos/Arquivos.htm#Criacao>. Acesso em: 12 de dez. de 2020.
Compartilhar