'freeSeats'
, выбор формата фильмы (если true то 3D, если false то 2D), можно ли в зал с едой (если true то можно , если false то нельзя)const seats = {
'2023-02-17': {
'09:00': {
'freeSeats': [
'1','4','8','9','10',
'12','13','18','19','21',
'24','25','33','48','50',
],
'format': false,
'food': true
},
'12:00': {
'freeSeats': [
'7','8','13','14','25',
'26','37','48','49','51',
'52','58','61','64','75',
],
'format': true,
'food': false
},
'15:00': {
'freeSeats': [
'11','21','31','41','50'
],
'format': false,
'food': true
},
},
'2023-02-18': {
'09:00': {
'freeSeats': [
'11','14','17','19','25',
'26','27','28','39','40',
'41','52','53','74','75',
],
'format': true,
'food': false
},
'12:00': {
'freeSeats': [
'41','43','48','49','50',
'56','57','58','59','60'
],
'format': false,
'food': true
},
'15:00': {
'freeSeats': [
'1','2','3','4','5',
],
'format': true,
'food': false
},
},
'2023-02-19': {
'09:00': {
'freeSeats': [
'1','2','3','4','5',
'6','7','8','9','10',
'11','12','13','14','15',
],
'format': false,
'food': true
},
'12:00': {
'freeSeats': [
'21','22','23','24','55',
'66','77','78','79','80',
'81','82','83','84','85',
],
'format': true,
'food': false
},
'15:00': {
'freeSeats': [
'11','23'
],
'format': false,
'food': true
},
},
}
function checkTicketsAvailable(date, time, numTicket) {
return new Promise((resolve, reject)=> {
setTimeout(() => {
const setsAvailable = seats[date][time].freeSeats.length;
if(seatsAvailable >= numTicket){
resolve(seatsAvailable);
} else {
reject(`Свободных мест на ${date} в ${time} нет`);
}
}, 1000);
})
}
async function bookTickets(date, time, numTickets){
try{
const availableSeats = await checkTicketsAvailable(date, time, numTickets);
console.log(`${date} вы забронировали ${numTickets} билетов на время: ${time}`);
} catch (error) {
console.error(error);
}
}
bookTickets('2023-02-17', '15:00', 2);
freeSeats
, можно добавить аргумент функции bookTickets
, который будет принимать массив выбранных мест. Затем нужно проверить, что все места из выбранного массива находятся в списке свободных мест freeSeats
. Если все места доступны, то их можно забронировать.bookTickets
. Затем можно добавить проверки на соответствие параметров формата и наличия еды заданным значениям в объекте seats
. Если формат фильма или наличие еды не соответствуют требованиям, можно выкинуть ошибку.async function bookTickets(date, time, numTickets, selectedSeats = [], is3D = false, hasFood = false){
try{
const availableSeats = await checkTicketsAvailable(date, time, numTickets);
// проверка наличия выбранных мест
const unavailableSeats = selectedSeats.filter(seat => !seats[date][time].freeSeats.includes(seat));
if (unavailableSeats.length > 0) {
throw new Error(`Места ${unavailableSeats.join(', ')} недоступны`);
}
// проверка формата и наличия продуктов питания
if ((is3D && !seats[date][time].format) || (hasFood && !seats[date][time].food)) {
throw new Error(`Невозможно забронировать билеты с выбранными параметрами`);
}
console.log(`${date} вы забронировали ${numTickets} билетов на время: ${time}`);
if (selectedSeats.length > 0) {
console.log(`Выбранные места: ${selectedSeats.join(', ')}`);
}
if (is3D) {
console.log(`Формат фильма: 3D`);
} else {
console.log(`Формат фильма: 2D`);
}
if (hasFood) {
console.log(`С едой`);
} else {
console.log(`Без еды`);
}
} catch (error) {
console.error(error);
}
}
bookTickets('2023-02-17', '15:00', 2, ['11', '21'], false, true);
selectedSeats
, is3D
и hasFood
для выбора мест, формата фильма и наличия еды соответственно. Затем в функции bookTickets
проверяется доступность выбранных мест и соответствие параметров формата и наличия еды требованиям. Выводится сообщение о бронировании билетов и выбранных параметрах.