using System;

// Ausnahmeklasse für gescheiterte Flugbuchungen
class ReservationFailedException : ApplicationException
{
    public ReservationFailedException()
    {
    }

    public ReservationFailedException(string message)
        : base(message)
    {
    }

    public ReservationFailedException(string message,
                                     Exception inner)
        : base(message, inner)
    {
    }
}

// Klasse, in deren Methode eine ReservationFailedException-Ausnahme ausgelöst 
// werden kann
class ReservationManager
{
    public int makeReservation(int flightID, int seat)
    {
        bool success;

        // Code, der versucht, den gewünschten Platz im angegebenen Flug zu buchen
        // setzt success auf false oder true
        success = false;

        // Bei Misserfolg Ausnahme auslösen
        if (!success)
            throw new ReservationFailedException(" Buchung fehlgeschlagen");

        // Bei Erfolg Reservierugsnummer zurückliefern
        return (flightID * 10000 + seat);
    }
}

// Anwendung, die Ausnahem abfängt
class Flugbuchung
{
    static void Main(string[] args)
    {
        ReservationManager rm = new ReservationManager();
        int reservation = 0;

        try
        {
            // Aufruf, der Ausnahme auslösen kann
            reservation = rm.makeReservation(3, 43);
            Console.WriteLine(" Ihr Flug wurde unter der Nummer {0} gebucht",
                              reservation);
        }
        catch (ReservationFailedException e)
        {
            Console.WriteLine(e.Message);
        }
    }
}

