1
resposta

Desafio: Verificação de desconto

Você está desenvolvendo o sistema de bilheteria para um cinema.
Os clientes podem ter direito a meia-entrada em duas situações:

  • Se tiverem menos de 18 anos
  • Se forem estudantes

Sua tarefa é criar um algoritmo em linguagem natural ou gráfica (usando fluxogramas, por exemplo) que avalie as informações do cliente e exiba uma mensagem indicando se ele tem ou não direito ao desconto.

Acabei fazendo em php.

<?php

class User {
    public $name;
    public $age;
    public $email;
    public $isStudent = false;

    public function __construct($name, $age, $email, $isStudent = false) {
        $this->name = $name;
        $this->age = $age;
        $this->email = $email;
        $this->isStudent = $isStudent;
    }
}

class TicketService {
    const SPECIAL_DISCOUNT = 0.50;
    const TICKET_PRICE = 15.00;

    public function calculatePrice(User $user) {
        if ($user->isStudent || $user->age < 18) {
            return self::TICKET_PRICE * self::SPECIAL_DISCOUNT;
        }
        
        return self::TICKET_PRICE;
    }
}

echo "Bem vindo ao Cinema Kimura!\nHoje nossos ingressos estão com desconto especial para estudantes e crianças.\n";
echo "Você já possui um cadastro? (s/n): ";
$resposta = trim(fgets(STDIN));

$users = [
    'teste@teste.com' => new User('Teste', 25, 'teste@teste.com', true)
];

if (strtolower($resposta) == 's') {
    echo "Digite seu email: ";
    $email = trim(fgets(STDIN));

    if (isset($users[$email])) {
        $currentUser = $users[$email];
        echo "Bem-vindo de volta, {$currentUser->name}!\n";
    } else {
        echo "Email não encontrado. Por favor, cadastre-se.\n";
        
        echo "Digite seu nome: ";
        $name = trim(fgets(STDIN));

        echo "Digite sua idade: ";
        $age = trim(fgets(STDIN));

        echo "Digite seu email: ";
        $email = trim(fgets(STDIN));

        echo "Você é estudante? (s/n): ";
        $isStudent = trim(fgets(STDIN)) === 's';

        $newUser = new User($name, $age, $email, $isStudent);
        $users[$email] = $currentUser = $newUser;
        echo "Cadastro realizado com sucesso! Bem-vindo, {$newUser->name}!\n";
    }
}

$movies = ["Vingadores", "O Rei Leão", "Matrix", "Interestelar"];
echo "Qual filme você gostaria de assistir? \nNo momento, temos os seguintes filmes disponíveis:\n";

foreach ($movies as $index => $movie) {
    echo ($index + 1) . ". " . $movie . "\n";
}

echo "Digite o número do filme que você deseja assistir: ";
$choice = (int)trim(fgets(STDIN)) - 1;

if (!isset($movies[$choice])) {
    echo "Opção inválida. Por favor, tente novamente.\n";
    exit;
}

$selectedMovie = $movies[$choice];

$ticketService = new TicketService();

$price = $ticketService->calculatePrice($currentUser);

$message = "Parabéns! Você tem direito a um ingresso gratuito!\n";

if ($price > 0) {   
    $message = "O preço do seu ingresso é: R$ " . number_format($price, 2) . "\n";
}

echo $message;
1 resposta

Olá, Julia! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o condicional para aplicar corretamente as regras de meia-entrada, utilizou muito bem a orientação a objetos em PHP para estruturar usuários e serviços de bilhete e ainda compreendeu a importância da entrada de dados para personalizar a experiência do cliente.

Uma sugestão para o futuro seria considerar a implementação de validações adicionais, como impedir que a idade seja informada com valores inválidos ou negativos, garantindo maior robustez no sistema.

Ah, uma pergunta: Você acha que seria mais interessante aprimorar o algoritmo adicionando novas categorias de desconto para diferentes perfis de clientes ou manter apenas as regras básicas de estudante e menor de idade?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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