diff --git a/.gitignore b/.gitignore
index 4ce6fdd..c086b59 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,340 +1,26 @@
-## Ignore Visual Studio temporary files, build results, and
-## files generated by popular Visual Studio add-ons.
-##
-## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
-
-# User-specific files
-*.rsuser
-*.suo
-*.user
-*.userosscache
-*.sln.docstates
-
-# User-specific files (MonoDevelop/Xamarin Studio)
+```
+# Compiled and build artifacts
+*.sln
+*.csproj
+obj/
+bin/
+Debug/
+Release/
+*.exe
+*.dll
+*.pdb
*.userprefs
-# Build results
-[Dd]ebug/
-[Dd]ebugPublic/
-[Rr]elease/
-[Rr]eleases/
-x64/
-x86/
-[Aa][Rr][Mm]/
-[Aa][Rr][Mm]64/
-bld/
-[Bb]in/
-[Oo]bj/
-[Ll]og/
-
-# Visual Studio 2015/2017 cache/options directory
-.vs/
-# Uncomment if you have tasks that create the project's static files in wwwroot
-#wwwroot/
-
-# Visual Studio 2017 auto generated files
-Generated\ Files/
-
-# MSTest test Results
-[Tt]est[Rr]esult*/
-[Bb]uild[Ll]og.*
-
-# NUNIT
-*.VisualState.xml
-TestResult.xml
-
-# Build Results of an ATL Project
-[Dd]ebugPS/
-[Rr]eleasePS/
-dlldata.c
+# Dependencies
+packages/
-# Benchmark Results
-BenchmarkDotNet.Artifacts/
-
-# .NET Core
-project.lock.json
-project.fragment.lock.json
-artifacts/
-
-# StyleCop
-StyleCopReport.xml
-
-# Files built by Visual Studio
-*_i.c
-*_p.c
-*_h.h
-*.ilk
-*.meta
-*.obj
-*.iobj
-*.pch
-*.pdb
-*.ipdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*_wpftmp.csproj
+# Logs and temp files
*.log
-*.vspscc
-*.vssscc
-.builds
-*.pidb
-*.svclog
-*.scc
-
-# Chutzpah Test files
-_Chutzpah*
-
-# Visual C++ cache files
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.VC.db
-*.VC.VC.opendb
-
-# Visual Studio profiler
-*.psess
-*.vsp
-*.vspx
-*.sap
-
-# Visual Studio Trace Files
-*.e2e
-
-# TFS 2012 Local Workspace
-$tf/
-
-# Guidance Automation Toolkit
-*.gpState
-
-# ReSharper is a .NET coding add-in
-_ReSharper*/
-*.[Rr]e[Ss]harper
-*.DotSettings.user
-
-# JustCode is a .NET coding add-in
-.JustCode
-
-# TeamCity is a build add-in
-_TeamCity*
-
-# DotCover is a Code Coverage Tool
-*.dotCover
-
-# AxoCover is a Code Coverage Tool
-.axoCover/*
-!.axoCover/settings.json
-
-# Visual Studio code coverage results
-*.coverage
-*.coveragexml
-
-# NCrunch
-_NCrunch_*
-.*crunch*.local.xml
-nCrunchTemp_*
-
-# MightyMoose
-*.mm.*
-AutoTest.Net/
-
-# Web workbench (sass)
-.sass-cache/
-
-# Installshield output folder
-[Ee]xpress/
-
-# DocProject is a documentation generator add-in
-DocProject/buildhelp/
-DocProject/Help/*.HxT
-DocProject/Help/*.HxC
-DocProject/Help/*.hhc
-DocProject/Help/*.hhk
-DocProject/Help/*.hhp
-DocProject/Help/Html2
-DocProject/Help/html
-
-# Click-Once directory
-publish/
-
-# Publish Web Output
-*.[Pp]ublish.xml
-*.azurePubxml
-# Note: Comment the next line if you want to checkin your web deploy settings,
-# but database connection strings (with potential passwords) will be unencrypted
-*.pubxml
-*.publishproj
-
-# Microsoft Azure Web App publish settings. Comment the next line if you want to
-# checkin your Azure Web App publish settings, but sensitive information contained
-# in these scripts will be unencrypted
-PublishScripts/
-
-# NuGet Packages
-*.nupkg
-# The packages folder can be ignored because of Package Restore
-**/[Pp]ackages/*
-# except build/, which is used as an MSBuild target.
-!**/[Pp]ackages/build/
-# Uncomment if necessary however generally it will be regenerated when needed
-#!**/[Pp]ackages/repositories.config
-# NuGet v3's project.json files produces more ignorable files
-*.nuget.props
-*.nuget.targets
-
-# Microsoft Azure Build Output
-csx/
-*.build.csdef
-
-# Microsoft Azure Emulator
-ecf/
-rcf/
-
-# Windows Store app package directories and files
-AppPackages/
-BundleArtifacts/
-Package.StoreAssociation.xml
-_pkginfo.txt
-*.appx
-
-# Visual Studio cache files
-# files ending in .cache can be ignored
-*.[Cc]ache
-# but keep track of directories ending in .cache
-!?*.[Cc]ache/
-
-# Others
-ClientBin/
-~$*
-*~
-*.dbmdl
-*.dbproj.schemaview
-*.jfm
-*.pfx
-*.publishsettings
-orleans.codegen.cs
-
-# Including strong name files can present a security risk
-# (https://github.com/github/gitignore/pull/2483#issue-259490424)
-#*.snk
-
-# Since there are multiple workflows, uncomment next line to ignore bower_components
-# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
-#bower_components/
-
-# RIA/Silverlight projects
-Generated_Code/
+*.tmp
+*.swp
-# Backup & report files from converting an old project file
-# to a newer Visual Studio version. Backup files are not needed,
-# because we have git ;-)
+# Editors
+.vs/
+.ReSharper*/
_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-ServiceFabricBackup/
-*.rptproj.bak
-
-# SQL Server files
-*.mdf
-*.ldf
-*.ndf
-
-# Business Intelligence projects
-*.rdl.data
-*.bim.layout
-*.bim_*.settings
-*.rptproj.rsuser
-*- Backup*.rdl
-
-# Microsoft Fakes
-FakesAssemblies/
-
-# GhostDoc plugin setting file
-*.GhostDoc.xml
-
-# Node.js Tools for Visual Studio
-.ntvs_analysis.dat
-node_modules/
-
-# Visual Studio 6 build log
-*.plg
-
-# Visual Studio 6 workspace options file
-*.opt
-
-# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
-*.vbw
-
-# Visual Studio LightSwitch build output
-**/*.HTMLClient/GeneratedArtifacts
-**/*.DesktopClient/GeneratedArtifacts
-**/*.DesktopClient/ModelManifest.xml
-**/*.Server/GeneratedArtifacts
-**/*.Server/ModelManifest.xml
-_Pvt_Extensions
-
-# Paket dependency manager
-.paket/paket.exe
-paket-files/
-
-# FAKE - F# Make
-.fake/
-
-# JetBrains Rider
-.idea/
-*.sln.iml
-
-# CodeRush personal settings
-.cr/personal
-
-# Python Tools for Visual Studio (PTVS)
-__pycache__/
-*.pyc
-
-# Cake - Uncomment if you are using it
-# tools/**
-# !tools/packages.config
-
-# Tabs Studio
-*.tss
-
-# Telerik's JustMock configuration file
-*.jmconfig
-
-# BizTalk build output
-*.btp.cs
-*.btm.cs
-*.odx.cs
-*.xsd.cs
-
-# OpenCover UI analysis results
-OpenCover/
-
-# Azure Stream Analytics local run output
-ASALocalRun/
-
-# MSBuild Binary and Structured Log
-*.binlog
-
-# NVidia Nsight GPU debugger configuration file
-*.nvuser
-
-# MFractors (Xamarin productivity tool) working folder
-.mfractor/
-
-# Local History for Visual Studio
-.localhistory/
-
-# BeatPulse healthcheck temp database
-healthchecksdb
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..80aa275
--- /dev/null
+++ b/index.html
@@ -0,0 +1,61 @@
+
+
+
+
+
+ Запись на стрижку
+
+
+
+
+
Запись на стрижку
+
+
+
+
+
Бронирование успешно!
+
Мастер:
+
Дата:
+
Время:
+
Услуга:
+
Стоимость: руб.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..d17d470
--- /dev/null
+++ b/script.js
@@ -0,0 +1,129 @@
+// Данные о мастерах и услугах
+const masters = [
+ { id: 1, name: "Анна", coefficient: 1.2 },
+ { id: 2, name: "Иван", coefficient: 1.0 },
+ { id: 3, name: "Мария", coefficient: 1.5 },
+ { id: 4, name: "Олег", coefficient: 1.3 }
+];
+
+const services = [
+ { id: 1, name: "Стрижка мужская", basePrice: 500 },
+ { id: 2, name: "Стрижка женская", basePrice: 700 },
+ { id: 3, name: "Стрижка детская", basePrice: 400 },
+ { id: 4, name: "Укладка", basePrice: 600 },
+ { id: 5, name: "Окрашивание", basePrice: 1200 }
+];
+
+// Временные слоты (с 9:00 до 18:00 с интервалом 30 минут)
+const timeSlots = [];
+for (let hour = 9; hour <= 17; hour++) {
+ for (let minute = 0; minute < 60; minute += 30) {
+ const timeString = `${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}`;
+ timeSlots.push(timeString);
+ }
+}
+
+// Загрузка данных при загрузке страницы
+document.addEventListener('DOMContentLoaded', function() {
+ // Заполнение списка мастеров
+ const masterSelect = document.getElementById('master');
+ masters.forEach(master => {
+ const option = document.createElement('option');
+ option.value = master.id;
+ option.textContent = `${master.name} (коэфф. ${master.coefficient})`;
+ masterSelect.appendChild(option);
+ });
+
+ // Заполнение списка услуг
+ const serviceSelect = document.getElementById('service');
+ services.forEach(service => {
+ const option = document.createElement('option');
+ option.value = service.id;
+ option.textContent = `${service.name} (${service.basePrice} руб.)`;
+ serviceSelect.appendChild(option);
+ });
+
+ // Заполнение временных слотов
+ const timeSelect = document.getElementById('time');
+ timeSlots.forEach(time => {
+ const option = document.createElement('option');
+ option.value = time;
+ option.textContent = time;
+ timeSelect.appendChild(option);
+ });
+
+ // Установка минимальной даты как сегодня
+ const today = new Date().toISOString().split('T')[0];
+ document.getElementById('date').min = today;
+
+ // Обработчик изменения выбора мастера или услуги для пересчета цены
+ document.getElementById('master').addEventListener('change', calculateTotalPrice);
+ document.getElementById('service').addEventListener('change', calculateTotalPrice);
+
+ // Обработчик формы
+ document.getElementById('bookingForm').addEventListener('submit', function(e) {
+ e.preventDefault();
+ confirmBooking();
+ });
+});
+
+// Функция расчета общей стоимости
+function calculateTotalPrice() {
+ const masterId = parseInt(document.getElementById('master').value);
+ const serviceId = parseInt(document.getElementById('service').value);
+
+ if (masterId && serviceId) {
+ const master = masters.find(m => m.id === masterId);
+ const service = services.find(s => s.id === serviceId);
+
+ if (master && service) {
+ const basePrice = service.basePrice;
+ const totalPrice = Math.round(basePrice * master.coefficient);
+
+ document.getElementById('basePrice').textContent = basePrice;
+ document.getElementById('coefficient').textContent = master.coefficient.toFixed(1);
+ document.getElementById('totalPrice').textContent = totalPrice;
+ }
+ } else {
+ document.getElementById('basePrice').textContent = '0';
+ document.getElementById('coefficient').textContent = '1.0';
+ document.getElementById('totalPrice').textContent = '0';
+ }
+}
+
+// Функция подтверждения бронирования
+function confirmBooking() {
+ const masterId = parseInt(document.getElementById('master').value);
+ const serviceId = parseInt(document.getElementById('service').value);
+ const date = document.getElementById('date').value;
+ const time = document.getElementById('time').value;
+
+ if (!masterId || !serviceId || !date || !time) {
+ alert('Пожалуйста, заполните все поля');
+ return;
+ }
+
+ const master = masters.find(m => m.id === masterId);
+ const service = services.find(s => s.id === serviceId);
+ const totalPrice = Math.round(service.basePrice * master.coefficient);
+
+ // Показываем информацию о бронировании
+ document.getElementById('confirmMaster').textContent = master.name;
+ document.getElementById('confirmDate').textContent = formatDate(date);
+ document.getElementById('confirmTime').textContent = time;
+ document.getElementById('confirmService').textContent = service.name;
+ document.getElementById('confirmPrice').textContent = totalPrice;
+
+ // Скрываем форму и показываем подтверждение
+ document.querySelector('#bookingForm').classList.add('hidden');
+ document.querySelector('#confirmation').classList.remove('hidden');
+}
+
+// Функция форматирования даты
+function formatDate(dateString) {
+ const date = new Date(dateString);
+ const day = date.getDate().toString().padStart(2, '0');
+ const month = (date.getMonth() + 1).toString().padStart(2, '0');
+ const year = date.getFullYear();
+ return `${day}.${month}.${year}`;
+}
\ No newline at end of file
diff --git a/styles.css b/styles.css
new file mode 100644
index 0000000..f727717
--- /dev/null
+++ b/styles.css
@@ -0,0 +1,89 @@
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ font-family: Arial, sans-serif;
+ background-color: #f5f5f5;
+ padding: 20px;
+}
+
+.container {
+ max-width: 600px;
+ margin: 0 auto;
+ background-color: white;
+ padding: 30px;
+ border-radius: 10px;
+ box-shadow: 0 0 10px rgba(0,0,0,0.1);
+}
+
+h1 {
+ text-align: center;
+ margin-bottom: 30px;
+ color: #333;
+}
+
+.form-group {
+ margin-bottom: 20px;
+}
+
+label {
+ display: block;
+ margin-bottom: 5px;
+ font-weight: bold;
+ color: #555;
+}
+
+select, input {
+ width: 100%;
+ padding: 10px;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ font-size: 16px;
+}
+
+.price-info {
+ background-color: #f9f9f9;
+ padding: 15px;
+ border-radius: 5px;
+ margin: 20px 0;
+}
+
+.price-info p {
+ margin: 5px 0;
+ font-size: 16px;
+}
+
+button {
+ width: 100%;
+ padding: 15px;
+ background-color: #4CAF50;
+ color: white;
+ border: none;
+ border-radius: 5px;
+ font-size: 18px;
+ cursor: pointer;
+}
+
+button:hover {
+ background-color: #45a049;
+}
+
+.confirmation {
+ margin-top: 30px;
+ padding: 20px;
+ background-color: #dff0d8;
+ border: 1px solid #d6e9c6;
+ border-radius: 5px;
+}
+
+.confirmation h2 {
+ color: #3c763d;
+ text-align: center;
+}
+
+.hidden {
+ display: none;
+}
\ No newline at end of file
diff --git "a/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217.sln" "b/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217.sln"
deleted file mode 100644
index ce2e9ba..0000000
--- "a/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217.sln"
+++ /dev/null
@@ -1,25 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29613.14
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Эволюция", "Эволюция\Эволюция.csproj", "{1BF28965-06F6-44AB-94E9-DA3AE265598A}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {1BF28965-06F6-44AB-94E9-DA3AE265598A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1BF28965-06F6-44AB-94E9-DA3AE265598A}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1BF28965-06F6-44AB-94E9-DA3AE265598A}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1BF28965-06F6-44AB-94E9-DA3AE265598A}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {9FAAD6A5-F2C1-44A4-A40B-AEA4AED173F7}
- EndGlobalSection
-EndGlobal
diff --git "a/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217/\320\230\320\263\321\200\320\260.cs" "b/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217/\320\230\320\263\321\200\320\260.cs"
deleted file mode 100644
index c61ed78..0000000
--- "a/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217/\320\230\320\263\321\200\320\260.cs"
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-
-namespace Эволюция
-{
- class Игра
- {
- static void Main(string[] args)
- {
- Console.WriteLine("Игра!");
- }
- }
-}
diff --git "a/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217.csproj" "b/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217.csproj"
deleted file mode 100644
index c73e0d1..0000000
--- "a/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217/\320\255\320\262\320\276\320\273\321\216\321\206\320\270\321\217.csproj"
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
- Exe
- netcoreapp3.1
-
-
-