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

Lista de exercícios - 4 e 5

  1. Criando a função de depósito e fazendo sua validação
import 'dart:io';

double saldo = 1000.0; // Saldo inicial em reais

// Função recursiva para ler valor positivo
double lerValorPositivo(String mensagem) {
  print(mensagem);
  String? input = stdin.readLineSync();
  double valor = double.tryParse(input!) ?? -1; //?? -1

  if (valor <= 0) {
    print('\n========================================');
    print('Valor inválido! Digite um número positivo.');
    return lerValorPositivo(mensagem); // Recursão para nova tentativa
  }
  return valor;
}

// Função recursiva para ler opção do menu
int lerOpcaoMenu() {
  print('\nEscolha uma operação:');
  print('1 - PIX (ativo)');
  print('2 - Depósito (ativo)');
  print('3 - Retirada (indisponível)');
  print('4 - Transferência (indisponível)');
  print('5 - Pagamento (indisponível)');
  print('0 - Sair');

  String? input = stdin.readLineSync();
  int opcao = int.tryParse(input!) ?? -1;

  if (opcao < 0 || opcao > 5) {
    print('\n========================================\n');
    print('Opção inválida! Tente novamente.');
    return lerOpcaoMenu(); // Recursão para nova tentativa
  }
  return opcao;
}

void main() {
  DateTime hoje = DateTime.now(); // Chama a função DateTime.now() para pegar a data do dia
  print('====================x====================');
  print('             BANCO DIGITAL');
  print('Data: ${hoje.day}/${hoje.month}/${hoje.year}');
  print('========================================\n');

  while (true) {
    print('Seu saldo atual é de: R\$${saldo.toStringAsFixed(2)}\n');

    int opcao = lerOpcaoMenu();

    if (opcao == 0) { // tratamento de saida do menu
      print('\nSaindo do sistema...');
      break;
    }

    switch (opcao) {
      case 1: // PIX
        print('\n--- Operação de PIX ---');
        double valorPix = lerValorPositivo('Digite o valor do Pix:');
        print('Aguarde, processando...\n');
        sleep(Duration(milliseconds: 2000));

        if (saldo >= valorPix) {
          saldo -= valorPix;
          print('Pix realizado! Saldo atual: R\$${saldo.toStringAsFixed(2)}');
        } else {
          print('\n========================================\n');
          print('Saldo insuficiente para o Pix.');
        }
        break;

      case 2: // Depósito
        print('\n--- Operação de Depósito ---');
        double valorDeposito = lerValorPositivo('Digite o valor do depósito:');
        saldo += valorDeposito;
        print('Depósito realizado! Saldo atual: R\$${saldo.toStringAsFixed(2)}');
        break;

      case 3: // Retirada
        print('\nOperação de Retirada ainda não está disponível.');
        break;

      case 4: // Transferência
        print('\nOperação de Transferência ainda não está disponível.');
        break;

      case 5: // Pagamento
        print('\nOperação de Pagamento ainda não está disponível.');
        break;
    }
    print('\n========================================');
  }

  print('\n========================================');
  print('     Obrigado por usar o programa!');
  print('========================================');
}
  1. Validação de métodos de pagamento em uma plataforma de e-commerce
import 'dart:io';

void main() {
  List<String> formaPagamentos = ['pix', 'boleto', 'cartao', 'paypal', 'bitcoin'];
  String? pagamento;

  pagamento = validaPagamento(pagamento, formaPagamentos);

  print('Pagamento válido: $pagamento');
}

String? validaPagamento(String? pagamento, List<String> pagamentos) {
  print('Digite o tipo de pagamento (pix, boleto, cartao, paypal, bitcoin):');
  pagamento = stdin.readLineSync();
  if (pagamentos.contains(pagamento)) {
    return pagamento;
  } else {
    print('Pagamento inválido. Tente novamente.');
    return validaPagamento(pagamento, pagamentos);
  }
}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Olá, José, como vai?

Seu código está muito bem desenvolvido e demonstra uma boa compreensão da recursão e das estruturas de controle do Dart. A função lerValorPositivo faz uma validação eficiente e o uso do tryParse é uma escolha acertada para evitar exceções em entradas inválidas. Além disso, o menu principal está bem estruturado e o fluxo de operações é claro e funcional.

Continue praticando e compartilhando seus códigos aqui no fórum. É ótimo ver sua evolução e dedicação aos exercícios.

O fórum está à disposição para qualquer dúvida.

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