Files
2024-05-23 17:54:39 +03:00

305 lines
12 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import sys
sys.path.append('tables')
from project_config import *
from dbconnection import *
from cathegory_table import *
from dish_table import *
class Main:
config = ProjectConfig()
connection = DbConnection(config)
def __init__(self):
DbTable.dbconn = self.connection
return
def db_init(self):
ct = CathegoryTable()
dt = DishTable()
ct.create()
dt.create()
return
def db_insert_somethings(self):
ct = CathegoryTable()
dt = DishTable()
ct.insert_one(["Салат"])
ct.insert_one(["Второе"])
ct.insert_one(["Суп"])
dt.insert_one(["Борщ", "120", "Сварить супчик", 3])
dt.insert_one(["Домашний салат", "15", "Настругать салатик", 1])
dt.insert_one(["Жаркое", "60", "Нажарить на славу", 2])
dt.insert_one(["Цезарь", "40", "Настругать салатик с курицей", 1])
def db_drop(self):
ct = CathegoryTable()
dt = DishTable()
ct.drop()
dt.drop()
return
def show_main_menu(self):
menu = """Добро пожаловать!
Основное меню (выберите цифру в соответствии с необходимым действием):
1 - просмотр всех категорий;
2 - сброс и инициализация таблиц;
3 - просмотр всех блюд;
9 - выход."""
print(menu)
return
def read_next_step(self):
return input("=> ").strip()
def after_main_menu(self, next_step):
if next_step == "2":
self.db_drop()
self.db_init()
self.db_insert_somethings()
print("Таблицы созданы заново!")
return "0"
if not next_step.isdigit():
print("Неверный тип данных! Введите число!")
return "0"
elif next_step != "1" and next_step != "9" and next_step != "3":
print("Выбрано неверное число! Повторите ввод!")
return "0"
else:
return next_step
def show_cathegory(self):
menu = """Просмотр категорий!
\tНазвание"""
print(menu)
allCathegory = CathegoryTable().all()
self.max_cath_index = len(allCathegory)
for i in allCathegory:
print(str(i[0]) + "\t" + str(i[1]))
menu = """Дальнейшие операции:
0 - возврат в главное меню;
4 - добавление новой категории;
5 - удаление категории;
6 - изменить название категории;
9 - выход."""
print(menu)
return
def show_dish(self):
menu = """Просмотр блюд!
Формат: № ; Название ; Время приготовления ; Мануал ; Номер категории"""
print(menu)
allDish = DishTable().all()
for i in allDish:
print(str(i[0]) + " ; " + str(i[1]) + " ; " + str(i[2]) + " ; " + str(i[3]) + " ; " + str(i[4]))
menu = """Дальнейшие операции:
0 - возврат в главное меню;
1 - просмотр блюд по номеру категории;
2 - удаление блюда;
3 - добавление блюда;
9 - выход."""
print(menu)
return
def after_show_dish(self, next_step):
while True:
if next_step == "1":
self.all_dish_by_cathegory()
return "0"
elif next_step == "2":
self.del_dish()
return "3"
elif next_step == "3":
self.insert_dish()
return "3"
elif next_step != "0" and next_step != "9":
print("Выбрано неверное число! Повторите ввод!")
next_step = self.read_next_step()
else:
return next_step
def all_dish_by_cathegory(self):
cathegory_number = input("Введите номер категории(enter - отмена): ").strip()
if cathegory_number == "":
return
try:
cathegory_number = int(cathegory_number)
except ValueError:
print("Неверный тип. Ожидается число")
return
txt = """"Просмотр блюд!
Формат: № ; Название ; Время приготовления ; Мануал ; Номер категории"""
print(txt)
allDish = DishTable().get_all_by_cathegory_number(cathegory_number)
for i in allDish:
print(str(i[0]) + " ; " + str(i[1]) + " ; " + str(i[2]) + " ; " + str(i[3]) + " ; " + str(i[4]))
def del_dish(self):
dish_id = input("Введите № блюда для удаления: ").strip()
try:
dish_id = int(dish_id)
if dish_id > 0:
DishTable().delete_one(dish_id)
else:
print("Неверное значение. Ожидается целое положительное число")
return
except ValueError:
print("Неверный тип. Ожидается число")
return
dish_table = DishTable()
if not dish_table.exist_by_number(dish_id):
print("Указанный номер блюда не найден. Попробуйте заново")
return
dish_table.delete_one(dish_id)
print("Блюдо успешно удалено")
def insert_dish(self):
data = []
data.append(input("Введите имя блюда(enter - отмена): ").strip())
while len(data[0].strip()) > 64:
data[0] = input("Неверная длина! Имя должно быть не пустым и не больше 64 символов. Введите имя заново (1 - отмена):").strip()
if data[0] == "":
print("Отмена действия")
return
data.append(input("Введите время приготовления в минутах(0 - отмена): ").strip())
flag = True
while flag:
try:
data[1] = int(data[1])
except ValueError:
data[1] = input("Неверный тип. Ожидается число. Введите число заново (0 - отмена):").strip()
continue
flag = False
if data[1] == 0:
return
if data[1] < 0:
print("Время не может быть отрицательным")
return
data.append(input("Введите мануал(enter - отмена): ").strip())
#while len(data[2].strip()) == 0:
# data[2] = input("Неверная длина! Мануал должно быть не пустым. Введите мануал заново (enter - отмена):").strip()
if data[2] == "":
print("Отмена действия")
return
data.append(input("Введите номер категории(enter - отмена): ").strip())
if data[3] == "":
return
flag = True
while flag:
try:
data[3] = int(data[3])
except ValueError:
data[3] = input("Неверный тип. Ожидается число. Введите число заново (enter - отмена):").strip()
if data[3] == "":
return
continue
flag = False
if not (CathegoryTable().exist_by_number(data[3])):
print("Указанный номер категории не найдем. Попробуйте заново")
return
DishTable().insert_one(data)
def after_show_cathegory(self, next_step):
while True:
if next_step == "4":
self.insert_cathegory()
return "1"
elif next_step == "5":
self.del_cathegory()
return "1"
elif next_step == "6" :
self.update_cathegory()
return "1"
elif next_step != "0" and next_step != "9":
print("Выбрано неверное число! Повторите ввод!")
next_step = self.read_next_step()
else:
return next_step
def insert_cathegory(self):
data = []
data.append(input("Введите имя категории(1 - отмена): ").strip())
while len(data[0].strip()) == 0 or len(data[0].strip())>20:
data[0] = input("Неверная длина! Имя должно быть не пустым и не больше 20 символов. Введите имя заново (1 - отмена):").strip()
if data[0] == "1":
return
CathegoryTable().insert_one(data)
def del_cathegory(self):
while True:
cathegory_id = input("Введите № категории для удаления: ").strip()
try:
cathegory_id = int(cathegory_id)
except ValueError:
print("Неверный тип. Ожидается число")
# return
if (cathegory_id <= 0)or(cathegory_id > self.max_cath_index):
print(f'Число должно лежать в диапазоне от 1 до {self.max_cath_index}.')
elif not (CathegoryTable().exist_by_number(cathegory_id)):
print("Указанный номер категории не найдем. Попробуйте заново")
# return
else:
break
DishTable().delete_all_with_cathegory_id(cathegory_id)
CathegoryTable().delete_one(cathegory_id)
return
def update_cathegory(self):
data = []
cathegory_id = input("Введите № категории для изменения: ").strip()
try:
cathegory_id = int(cathegory_id)
except ValueError:
print("Неверный тип. Ожидается число")
return
if not (CathegoryTable().exist_by_number(cathegory_id)):
print("Указанный номер категории не найдем. Попробуйте заново")
return
data.append(input("Введите имя категории(1 - отмена): ").strip())
while len(data[0].strip()) == 0 or len(data[0].strip()) > 20:
data[0] = input("Неверная длина! Имя должно быть не пустым и не больше 20 символов. Введите имя заново (1 - отмена):").strip()
if data[0] == "1":
return
CathegoryTable().update(cathegory_id, data)
def main_cycle(self):
current_menu = "0"
next_step = None
while (current_menu != "9"):
if current_menu == "0":
self.show_main_menu()
next_step = self.read_next_step()
current_menu = self.after_main_menu(next_step)
elif current_menu == "1":
self.show_cathegory()
next_step = self.read_next_step()
current_menu = self.after_show_cathegory(next_step)
elif current_menu == "3":
self.show_dish()
next_step = self.read_next_step()
current_menu = self.after_show_dish(next_step)
print("До свидания!")
return
def test(self):
DbTable.dbconn.test()
m = Main()
# Откоментируйте эту строку и закоментируйте следующую для теста
# соединения с БД
# m.test()
m.main_cycle()