Buscar

RELATORIOO PD2

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.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais