forked from micaeltoscano/projeto_PE
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcadastrar_barco.c
172 lines (134 loc) · 5.78 KB
/
cadastrar_barco.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include "minhas_funcoes.h"
#include <stdio.h>
#include "regatas_barcos.h"
#include "constantes.h"
//verificar se o barco esta no sistema
int verificar_numero(Barco barco[], int num){
for(int i=0; i<TOTAL_BARCOS; i++){
if(barco[i].numero_barco == num){
return 1;
}
}
return 0;
}
void cadastro(Barco barco[]){
for(int i = 0; i < TOTAL_BARCOS; i++) {
int num;
int retorno_scanf;
//uso do do-while para verificar se o codigo digitado é um inteiro e verificar se já existe um barco com aquele numero
do {
printf("Digite o codigo do barco %d: ", i + 1);
//verificar se a entrada é válida
retorno_scanf = scanf("%d", &num);
//se a entrada não for um número inteiro
if (retorno_scanf != 1) {
printf("Entrada inválida. Por favor, insira um número.\n");
while (getchar() != '\n');
}
} while (retorno_scanf != 1 || verificar_numero(barco, num));
//caso seja, o barco é adicionado no sistema:
barco[i].numero_barco = num;
printf("Digite o nome do barco: ");
scanf(" %[^\n]%*c", barco[i].nome_barco);
printf("Digite o ano de fabricação do barco: ");
scanf("%d", &barco[i].ano_fabricacao);
}
}
//funcao que loopa entre os structs e exibe todos os barcos cadastrados:
void listar_barcos(Barco barco[]){
for(int i=0; i<TOTAL_BARCOS; i++){
printf("\nExibindo informações do barco %d:\n", i + 1);
printf("Número do barco: %d\n", barco[i].numero_barco);
printf("Nome do barco: %s\n", barco[i].nome_barco);
printf("Ano de fabricação: %d\n", barco[i].ano_fabricacao);
printf("------------------------------------------\n");
}
}
//funcao para buscar um barco pelo numero dele
void buscar_barco(Barco barco[]){
int num_barco;
puts("Digite o número do barco que deseja acessar:");
scanf("%d", &num_barco);
//se o barco existir no sistema, ele procura por ele e exibe as informacoes dele atraves do indice
if (verificar_numero(barco, num_barco)) {
for (int i = 0; i < TOTAL_BARCOS; i++) {
if (barco[i].numero_barco == num_barco) {
printf("Número do barco: %d\n", barco[i].numero_barco);
printf("Nome do barco: %s\n", barco[i].nome_barco);
printf("Ano de fabricação do barco: %d\n", barco[i].ano_fabricacao);
return;
}
}
}
//caso contrario exibe uma mensagem de erro
else{
printf("Barco não foi encontrado!");
}
}
//funcao para editar informações de um barco
void editar_barco(Barco barco[]) {
int num_barco, novo_num;
puts("Digite o número do barco a ser editado (considere 1 para o primeiro barco): "); //nesse caso, o usuario procura o barco pelo seu indice
scanf("%d", &num_barco);
num_barco--; // Subtrai 1 para mapear para o índice correto no array
// Verifica se o índice é válido
if (num_barco >= 0 && num_barco < TOTAL_BARCOS) {
printf("Barco selecionado: %d\n", barco[num_barco].numero_barco);
//validacao para garantir que o novo número do barco nao seja duplicado
do {
printf("Digite o novo número do barco %d (atualmente %d): ", num_barco + 1, barco[num_barco].numero_barco);
scanf("%d", &novo_num);
// Verifica apenas se o novo número é diferente do atual
if (novo_num != barco[num_barco].numero_barco && verificar_numero(barco, novo_num)) {
printf("Número já cadastrado. Por favor, insira outro.\n");
}
} while (novo_num != barco[num_barco].numero_barco && verificar_numero(barco, novo_num));
barco[num_barco].numero_barco = novo_num;
// Limpa o buffer após a leitura de número
while (getchar() != '\n');
// Solicita o novo nome do barco
printf("Digite o novo nome do barco %d (atualmente %s): ", num_barco + 1, barco[num_barco].nome_barco);
scanf("%[^\n]%*c", barco[num_barco].nome_barco);
// Solicita o novo ano de fabricação do barco
printf("Digite o novo ano de fabricação do barco %d (atualmente %d): ", num_barco + 1, barco[num_barco].ano_fabricacao);
scanf("%d", &barco[num_barco].ano_fabricacao);
printf("Barco %d atualizado com sucesso!\n", num_barco + 1);
}
else {
printf("Barco não encontrado. Por favor, insira um número válido.\n");
}
}
//funcao que cadastra o barco e exibe a quantidade de opcoes que o usuario tem dentro do sistema de cadastrar barcos.
void cadastrar_barco(Barco barco[]){
int opcao_cadastrar_barco, continuar_cadastrar_barco = 0;
cadastro(barco);
puts("Todos os barcos foram cadastrados!");
while(continuar_cadastrar_barco == 0){
do {
printf("O que deseja fazer?\n");
printf("1 - Listar barcos cadastrados\n");
printf("2 - Buscar barco especifico \n");
printf("3 - Editar informações de um barco em especifico \n");
printf("4 - Sair \n");
printf("Escolha uma opção: ");
scanf("%d", &opcao_cadastrar_barco);
if (opcao_cadastrar_barco < 1 || opcao_cadastrar_barco > 4) {
puts("Opção inválida. Tente novamente.");
}
}while (opcao_cadastrar_barco < 1 || opcao_cadastrar_barco > 4);
switch(opcao_cadastrar_barco) {
case 1:
listar_barcos(barco);
break;
case 2:
buscar_barco(barco);
break;
case 3:
editar_barco(barco);
break;
case 4:
continuar_cadastrar_barco = 1;
break;
}
}
}