One seat inventory, many sales channels
The hard part of ticketing is not the booking screen. It is making sure a seat sold on the app cannot also be sold at a counter or kiosk a second later. Every channel has to read and lock the same inventory, and a seat held during checkout has to be released cleanly if payment fails or the passenger walks away.
That inventory model is designed first. Fares, seat classes, quotas for agents and cancellation rules sit on top of it.
The same model works whether the inventory is a train seat, a bus seat, a ferry place or a numbered seat at a venue. What changes is the shape of the journey: a train has many stops, so one seat can be sold several times on different legs of the same trip, while an event seat is sold once.