Загрузка данных
def load_menu_txt():
try:
with open('menu.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
except FileNotFoundError:
print("Ошибка! Файл menu.txt не найден!")
exit()
menu_data = []
current_category = None
current_dishes = []
for line in lines:
line = line.strip()
if not line:
continue
if '|' in line:
name, weight, price = line.split('|')
current_dishes.append({name: [int(weight), float(price)]})
else:
if current_category:
menu_data.append({current_category: current_dishes})
current_dishes = []
current_category = line
if current_category:
menu_data.append({current_category: current_dishes})
return menu_data
def save_menu_txt(pervoe, vtoroe, salati, deserti):
with open('menu.txt', 'w', encoding='utf-8') as f:
f.write("ПЕРВЫЕ БЛЮДА\n")
for dish in pervoe:
for name, props in dish.items():
f.write(f"{name}|{props[0]}|{props[1]}\n")
f.write("\nВТОРЫЕ БЛЮДА\n")
for dish in vtoroe:
for name, props in dish.items():
f.write(f"{name}|{props[0]}|{props[1]}\n")
f.write("\nСАЛАТЫ\n")
for dish in salati:
for name, props in dish.items():
f.write(f"{name}|{props[0]}|{props[1]}\n")
f.write("\nДЕСЕРТЫ\n")
for dish in deserti:
for name, props in dish.items():
f.write(f"{name}|{props[0]}|{props[1]}\n")
for kategoriya in menu:
for nazvanie_kategorii, blyuda in kategoriya.items():
if nazvanie_kategorii not in ['ПЕРВЫЕ БЛЮДА', 'ВТОРЫЕ БЛЮДА', 'САЛАТЫ', 'ДЕСЕРТЫ']:
if blyuda:
f.write(f"\n{nazvanie_kategorii}\n")
for blyudo in blyuda:
for imya_blyuda, harakteristiki in blyudo.items():
f.write(f"{imya_blyuda}|{harakteristiki[0]}|{harakteristiki[1]}\n")
def poisk():
try:
with open('menu.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
except FileNotFoundError:
print("Ошибка! Файл menu.txt не найден!")
return
print("\nПоиск:")
print("1. По названию")
print("2. По категории")
print("3. По цене")
try:
choice = int(input("Выберите способ поиска: "))
except ValueError:
print("Ошибка! Введите число")
return
menu_data = {}
current_category = None
for line in lines:
line = line.strip()
if not line:
continue
if '|' not in line and line.isupper():
current_category = line
menu_data[current_category] = []
elif '|' in line and current_category:
parts = line.split('|')
if len(parts) == 3:
name, weight, price = parts
menu_data[current_category].append({'Название': name,'Вес': int(weight),'Цена': float(price) })
if choice == 1:
search_name = input("Введите название блюда (или его часть): ").lower()
found = False
print("\nРезультаты поиска:")
for category, dishes in menu_data.items():
for dish in dishes:
if search_name in dish['Название'].lower():
print(f"{category}: {dish['Название']} - {dish['Вес']}г, {dish['Цена']}руб")
found = True
if not found:
print("Блюда с таким названием не найдены!")
elif choice == 2:
print("\nДоступные категории:")
categories = list(menu_data.keys())
for idx, cat in enumerate(categories, 1):
print(f"{idx}. {cat}")
try:
cat_choice = int(input("Выберите номер категории: "))
if 1 <= cat_choice <= len(categories):
cat_name = categories[cat_choice - 1]
if len(menu_data[cat_name]) > 0:
print(f"\nБлюда в категории '{cat_name}':")
for dish in menu_data[cat_name]:
print(f"{dish['Название']} - {dish['Вес']}г, {dish['Цена']}руб")
else:
print(f"В категории '{cat_name}' нет блюд!")
else:
print("Неверная категория!")
except ValueError:
print("Ошибка! Введите число")
elif choice == 3:
try:
price = float(input("Введите цену для поиска: "))
found = False
print(f"\nБлюда с ценой {price}руб:")
for category, dishes in menu_data.items():
for dish in dishes:
if dish['Цена'] == price:
print(f"{category}: {dish['Название']} - {dish['Вес']}г, {dish['Цена']}руб")
found = True
if not found:
print(f"Блюд с ценой {price}руб не найдено!")
except ValueError:
print("Ошибка! Введите корректную цену")
else:
print("Неверный выбор!")
def oplata(obshaya_summa):
while True:
try:
print("Выберите способ оплаты:\n1. Наличными\n2. По карте\n3. По QR-коду")
sposob = int(input("Ваш выбор:"))
if sposob == 1:
while True:
try:
nalichnie = float(input("Укажите какую сумму внесёте наличными:"))
if nalichnie <= 0:
print("Ошибка! Внесённая сумма должна быть положительной")
elif nalichnie > 0:
if nalichnie == obshaya_summa:
print("Оплата прошла успешно! Ждём Вас снова.")
return
elif nalichnie < obshaya_summa:
print(
f"Не хватает {obshaya_summa - nalichnie} для оплаты. Попробуйте изменить способ оплаты.")
break
elif nalichnie > obshaya_summa:
print(
f"Оплата прошла успешно! Ваша сдача: {nalichnie - obshaya_summa}. Ждём Вас снова.")
return
except ValueError:
print("Ошибка ввода суммы!")
elif sposob == 2:
print("Для оплаты поднесите карту к терминалу.")
print("Производится оплата")
print("Оплата прошла успешно! Ждём Вас снова.")
return
elif sposob == 3:
print("Для оплаты отсканируйте QR-код на терминале.")
print("Производится оплата")
print("Оплата прошла успешно! Ждём Вас снова.")
return
except ValueError:
print("Ошибка выбора оплаты! Попробуйте снова.")
menu = load_menu_txt()
pervoe = []
vtoroe = []
salati = []
deserti = []
for category in menu:
for category_name, dishes in category.items():
if category_name == 'ПЕРВЫЕ БЛЮДА':
pervoe = dishes
elif category_name == 'ВТОРЫЕ БЛЮДА':
vtoroe = dishes
elif category_name == 'САЛАТЫ':
salati = dishes
elif category_name == 'ДЕСЕРТЫ':
deserti = dishes
def udalenie():
global pervoe, vtoroe, salati, deserti, menu
n = 1
for i in menu:
for key in i:
print(f"{n}.{key}", end=" ")
n += 1
print()
try:
answer = int(input("\nВыберите категорию, из которой хотите удалить блюдо: "))
except ValueError:
print("Ошибка! Введите число")
return
if 1 <= answer <= len(menu):
n = 0
for i in menu:
for key in i:
n += 1
if n == answer:
spisok = i[key]
nazvanie = key
break
if n == answer:
break
else:
print("Неверная категория!")
return
n = 1
for dish in spisok:
for key in dish:
print(f"{n}.{key}", end=" ")
n += 1
print()
try:
num = int(input("\nВыберите номер блюда для удаления: "))
if 1 <= num <= len(spisok):
del spisok[num - 1]
if nazvanie == 'ПЕРВЫЕ БЛЮДА':
pervoe = spisok
elif nazvanie == 'ВТОРЫЕ БЛЮДА':
vtoroe = spisok
elif nazvanie == 'САЛАТЫ':
salati = spisok
elif nazvanie == 'ДЕСЕРТЫ':
deserti = spisok
save_menu_txt(pervoe, vtoroe, salati, deserti)
print("Блюдо удалено!")
else:
print("Неверный номер!")
except ValueError:
print("Ошибка! Введите число")
def pokazat_menu():
print("\nМеню")
for category in menu:
for category_name, dishes in category.items():
print(f"{category_name}:")
if dishes:
for dish in dishes:
for name, details in dish.items():
print(f" {name}: {details[0]}г, {details[1]}руб")
else:
print(" (пусто)")
print()
def pokazat_kategorii():
n = 1
for i in menu:
for key in i:
print(f"{n}.{key}", end=" ")
n += 1
print()
def izmenit_blyudo():
global pervoe, vtoroe, salati, deserti, menu
pokazat_kategorii()
try:
vibor = int(input("\nВыберите номер категории: "))
except ValueError:
print("Ошибка! Введите число")
return
if 1 <= vibor <= len(menu):
selected_category = list(menu[vibor - 1].keys())[0]
dishes_list = menu[vibor - 1][selected_category]
if len(dishes_list) == 0:
print(f"В категории '{selected_category}' нет блюд!")
return
print(f"\nДоступные блюда в категории '{selected_category}':")
for idx, dish in enumerate(dishes_list, 1):
for name, details in dish.items():
print(f"{idx}. {name} - {details[0]}г, {details[1]}руб")
try:
num = int(input("Выберите номер блюда для изменения: "))
if 1 <= num <= len(dishes_list):
dish = dishes_list[num - 1]
old_name = list(dish.keys())[0]
print(f"Изменение блюда '{old_name}'")
new_name = input("Введите новое название (оставьте пустым для сохранения): ").strip()
if new_name:
dish[new_name] = dish.pop(old_name)
old_name = new_name
try:
new_weight = input("Введите новый вес (грамм, оставьте пустым для сохранения): ").strip()
if new_weight:
new_weight = int(new_weight)
if new_weight < 1:
raise ValueError()
dish[old_name][0] = new_weight
new_price = input("Введите новую цену (руб, оставьте пустым для сохранения): ").strip()
if new_price:
new_price = float(new_price)
if new_price < 0:
raise ValueError()
dish[old_name][1] = new_price
except ValueError:
print("Ошибка! Вес и цена должны быть положительными числами")
return
if selected_category == 'ПЕРВЫЕ БЛЮДА':
pervoe = dishes_list
elif selected_category == 'ВТОРЫЕ БЛЮДА':
vtoroe = dishes_list
elif selected_category == 'САЛАТЫ':
salati = dishes_list
elif selected_category == 'ДЕСЕРТЫ':
deserti = dishes_list
save_menu_txt(pervoe, vtoroe, salati, deserti)
print(f"Блюдо '{old_name}' изменено!")
else:
print("Неверный номер!")
except ValueError:
print("Ошибка! Введите число")
else:
print("Неверная категория!")
def main():
global pervoe, vtoroe, salati, deserti, menu
while True:
print("\nРесторан 'ИДИ Кушать'")
try:
vibor = int(input("Кто вы?\n1. Гость\n2. Администратор\n3. Выйти из программы\nВыберите: "))
except ValueError:
print("Ошибка! Введите число 1, 2 или 3")
continue
if vibor == 1:
zakaz = []
obshaya_summa = 0
while True:
print("\nОформление заказа")
print("1. Показать меню")
print("2. Добавить блюдо в заказ")
print("3. Поиск блюда")
print("4. Показать текущий заказ")
print("5. Оформить заказ и перейти к оплате")
print("6. Отменить заказ и выйти")
try:
choice = int(input("Выберите действие: "))
except ValueError:
print("Ошибка! Введите число от 1 до 5")
continue
if choice == 1:
pokazat_menu()
elif choice == 2:
print("\nВыберите категорию:")
pokazat_kategorii()
try:
kat = int(input("Выберите номер категории: "))
except ValueError:
print("Ошибка! Введите число")
continue
if 1 <= kat <= len(menu):
selected_category = list(menu[kat - 1].keys())[0]
dishes_list = menu[kat - 1][selected_category]
if len(dishes_list) == 0:
print(f"В категории '{selected_category}' нет блюд!")
continue
print(f"\nДоступные блюда в категории '{selected_category}':")
for idx, dish in enumerate(dishes_list, 1):
for name, details in dish.items():
print(f"{idx}. {name} - {details[0]}г, {details[1]}руб")
try:
num = int(input("Выберите номер блюда: "))
if 1 <= num <= len(dishes_list):
dish_name = list(dishes_list[num - 1].keys())[0]
dish_price = dishes_list[num - 1][dish_name][1]
zakaz.append(dishes_list[num - 1])
obshaya_summa += dish_price
print(f"Добавлено: {dish_name} (цена: {dish_price}руб)")
else:
print("Неверный номер!")
except ValueError:
print("Ошибка! Введите число")
else:
print("Неверная категория!")
elif choice == 3:
poisk()
elif choice == 4:
if len(zakaz) == 0:
print("Заказ пуст!")
else:
print("\nВаш заказ")
for dish in zakaz:
for key, value in dish.items():
print(f"{key}: {value[0]}г, {value[1]}руб")
print(f"Итого к оплате: {obshaya_summa}руб")
elif choice == 5:
if len(zakaz) == 0:
print("Заказ пуст! Добавьте блюда.")
else:
print("\nЧек")
for dish in zakaz:
for key, value in dish.items():
print(f"{key}: {value[0]}г, {value[1]}руб")
print(f"Итого к оплате: {obshaya_summa}руб")
oplata(obshaya_summa)
break
elif choice == 6:
print("Заказ отменен. До свидания!")
break
else:
print("Неверный выбор! Введите число от 1 до 5")
elif vibor == 2:
try:
parol = input("Введите пароль администратора: ")
if parol != "admin":
print("Неверный пароль! Доступ запрещен.")
continue
except ValueError:
print("Ошибка ввода пароля!")
continue
print("Добро пожаловать, администратор!")
while True:
print("\nМеню администратора")
print("1. Вывести меню")
print("2. Записать блюдо в меню")
print("3. Добавить новую категорию")
print("4. Удалить блюдо")
print("5. Изменить блюдо")
print("6. Выйти")
try:
vibor1 = int(input("Выберите действие: "))
except ValueError:
print("Ошибка! Введите число 1-5")
continue
if vibor1 == 1:
pokazat_menu()
elif vibor1 == 2:
pokazat_kategorii()
try:
vibor = int(input("\nВыберите номер категории: "))
except ValueError:
print("Ошибка! Введите число")
continue
if 1 <= vibor <= len(menu):
selected_category = list(menu[vibor - 1].keys())[0]
dishes_list = menu[vibor - 1][selected_category]
name = input("Введите название блюда: ")
while True:
try:
ves = int(input("Введите вес блюда (грамм): "))
if ves < 1:
raise ValueError()
cena = float(input("Введите стоимость блюда (руб): "))
if cena<0:
raise ValueError()
dishes_list.append({name: [ves, cena]})
break
except ValueError:
print("Ошибка! Значения веса блюда и его цены должны быть положительными числами")
continue
if selected_category == 'ПЕРВЫЕ БЛЮДА':
pervoe = dishes_list
elif selected_category == 'ВТОРЫЕ БЛЮДА':
vtoroe = dishes_list
elif selected_category == 'САЛАТЫ':
salati = dishes_list
elif selected_category == 'ДЕСЕРТЫ':
deserti = dishes_list
save_menu_txt(pervoe, vtoroe, salati, deserti)
print(f"Блюдо добавлено в '{selected_category}'!")
else:
print("Неверная категория!")
elif vibor1 == 3:
name_category = input("Введите название новой категории: ").strip()
not_new = False
for cat in menu:
if name_category in cat:
not_new = True
break
if not_new:
print("Такая категория уже существует!")
else:
menu.append({name_category.upper(): []})
print(f"Категория '{name_category}' добавлена!")
save_menu_txt(pervoe, vtoroe, salati, deserti)
elif vibor1 == 4:
udalenie()
elif vibor1 == 5:
izmenit_blyudo()
elif vibor1 == 6:
break
else:
print("Неверный выбор! Введите число 1-5")
elif vibor == 3:
print("До свидания!")
break
else:
print("Неверный выбор! Введите 1, 2 или 3")
if __name__ == "__main__":
main()