You can build this without a custom module, and without a specialty contrib module specifically for "appointments".
I would build this using Entityform but you could also just use a basic content type with custom fields. Modules that would go into your recipe would be Date, Date Restrictions, Email field, Page break field, and perhaps Field Group and Display Suite for nailing that layout.
These modules together should allow you to construct an entity (node or entityform) with all of the functions of your screenshot, without custom modules or custom code. Also, you will want Rules to handle the actions that happen when the form is submitted.
You didn't specify if this is just an "Appointment request form" that is later confirmed by a salon employee, or if it is actually to book an appointment that is confirmed automatically. The latter would be much more complex as it would require that Drupal knows about all of the existing appointments and have the logic/ability to eliminate conflicts. For this, see Appointment Scheduling