Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Exercícios

  1. Validação de categorias de produtos em um sistema de estoque
import 'dart:io';
void main(){
  List<String> categoria = <String>["eletronicos", "alimentos", "vestuario", "livros"];
  String? entrada = "";

  void categoriaValida(){
    print("Digite a categoria do produto ${categoria.toString()}");
      entrada = stdin.readLineSync();
        if (entrada != null && categoria.contains(entrada)){
          print("Categoria valida: $entrada");
        } else {
          print("Categoria invalida");
          categoriaValida();
          }
  }
  categoriaValida();
}
  1. Validação de tipos de arquivos em um sistema de upload
import 'dart:io';
void main(){
  List<String> tiposPermitidos = <String>["pdf", "jpeg", "png", "docx"];
  
  void extensaoValida(){
    print("Faça o upload do seu arquivo");
    String? arquivo = stdin.readLineSync()!;
    String extensao = arquivo.split('.').last;
      if (tiposPermitidos.contains(extensao)){
          print("Upload feito");
      } else {
          print("Arquivo inválido, por favor faça upload com as seguintes extensões ${tiposPermitidos.toString()}");
          extensaoValida();
        }
    }

    extensaoValida();
  }
  1. Dando uma nova chance no retorno de mês
import 'dart:io';
void main(){
  int numero = solicitarNumero();
  String mes = acharMes (numero); 
  print(mes);
}

int solicitarNumero(){ //função que verifica se a entrada é valida e não está vazia
  print("Digite um numero de 1 a 12");
   String? entrada = stdin.readLineSync();
   int? numero;

    if(entrada != null && entrada != ""){
       numero = int.tryParse(entrada);
      } if (numero != null && numero >=1 && numero <=12){
         return numero;
    } else {
        print("Numero invalido. Digite um numero valido");
        return solicitarNumero();
      }
    }
    
  String acharMes (int numero){
    switch (numero){
      case 1:
      return ("Janeiro");
      case 2:
      return ("Fevereiro");
      case 3:
      return ("Março");
      case 4:
      return ("Abril");
      case 5:
      return ("Maio");
      case 6:
      return ("Junho");
      case 7:
      return ("Julho");
      case 8:
      return ("Agosto");
      case 9:
      return ("Setembro");
      case 10:
      return ("Outubro");
      case 11:
      return ("Novembro");
      case 12:
      return ("Dezembro");
      default: 
      return ("Não é um mes valido");
    }
  }
  1. Criando a função de depósito e fazendo sua validação
import 'dart:io';
void main() {
double saldo = 1000.0; // Saldo inicial em reais

  print('Boas-vindas ao seu banco digital!');
  print('Seu saldo atual é de: R\$ ${saldo.toStringAsFixed(2)}');

  String operacao = escolhaOperacao(); // a variavel operacao recebe o retorno da função escolhaOperacao - deposito, retirada, transferencia, pagamento 
  double valor = escolheValor(operacao, saldo); // a variavel valor recebe o valor escolhido para a operação, levando em conta se é credito ou debito
  double saldoFinal = operacoes(operacao, saldo, valor); // saldo final traz o retorno da conta feita em operacoes, que pega a operação escolhida, o saldo inicial e o valor escolhido
  
  print("Operação realizada.");
  print("Seu saldo final é R\$ ${saldoFinal.toStringAsFixed(2)}");

}

double soma(double saldo, double valor){
  return (saldo + valor);
}

double subtracao(double saldo, double valor){
  return (saldo - valor);
}

double operacoes(String operacao, double saldo, double valor){
  switch (operacao) {
  case "deposito": 
  return soma (saldo, valor);
  case "retirada":
  case "transferencia":
  case "pagamento":
  return subtracao (saldo, valor);
  default:
    print("Operação desconhecida");
    return saldo;
  }
}

String escolhaOperacao(){
  List<String> operacoes = <String>["deposito", "retirada", "transferencia", "pagamento"];
  
  print("Digite a operação que deseja realizar: deposito, retirada, transferencia, pagamento");
  String? operacao = stdin.readLineSync();
  if (operacao != null && operacoes.contains(operacao)){
    return operacao;
  } else {
    print("Operação inválida. Por favor tente de novo");
    return escolhaOperacao();
  }
}

double escolheValor(String operacao, double saldo) {
  print("Digite o valor da operação:");
  String? entrada = stdin.readLineSync();

  if (entrada != null && entrada.isNotEmpty) {
    double? valor = double.tryParse(entrada);

    if (valor == null || valor <= 0) {
      print("Valor inválido.");
      return escolheValor(operacao, saldo);
    }

    if (operacao != "deposito" && valor > saldo) {
      print("Saldo insuficiente.");
      return escolheValor(operacao, saldo);
    }

    return valor;
  } else {
    print("Entrada inválida.");
    return escolheValor(operacao, saldo);
  }
}
1 resposta
solução!

Oii, Manuela!

Obrigada por compartilhar seu código com a comunidade Alura.

Gostei bastante da forma como você estruturou os exemplos, principalmente a lógica de repetição para validar entradas do usuário. Sua abordagem usando chamadas recursivas ficou clara e bem funcional.

Uma dica interessante para o futuro é o uso da função toLowerCase() para facilitar comparações sem depender da capitalização.Veja este exemplo:


String entrada = stdin.readLineSync()!;
if (categoria.contains(entrada.toLowerCase())) {
  print("Categoria valida");
}

Esse código converte a entrada para minúsculas antes da verificação, tornando a validação mais flexível.

Conteúdos relacionados
Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!