mirror of
https://github.com/ada-dmitry/lab6.git
synced 2026-09-24 01:10:15 +00:00
Реализована защита от развлечений в вводе номера строки
This commit is contained in:
Vendored
+14
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
// Используйте IntelliSense, чтобы узнать о возможных атрибутах.
|
||||||
|
// Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
|
||||||
|
// Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "Отладчик Python: Подключить с помощью идентификатора процесса",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "attach",
|
||||||
|
"processId": "${command:pickProcess}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,46 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
|
def validate_time_format(input_str):
|
||||||
|
"""Функция проверки подходящего формата для ввода времени в interval
|
||||||
|
|
||||||
|
Args:
|
||||||
|
input_str (str): входная строка для проверки
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: Булевое значение, которое характеризует валидность вводимых строк
|
||||||
|
"""
|
||||||
|
# Регулярное выражение для проверки формата
|
||||||
|
pattern = r'^(\d+\s*hours?\s*)?(\d+\s*minutes?)$'
|
||||||
|
|
||||||
|
# Проверка соответствия регулярному выражению
|
||||||
|
match = re.match(pattern, input_str)
|
||||||
|
|
||||||
|
if match:
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Если формат некорректный, возвращаем False
|
||||||
|
return False
|
||||||
|
|
||||||
|
def validate_input(prompt, min_value, max_value):
|
||||||
|
"""Проверка ввода для выбора номера строки
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prompt (string): "Промт" или запрос пользователю
|
||||||
|
min_value (int): Нижняя граница, по умолчанию 0
|
||||||
|
max_value (int): Верхняя граница
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: Либо число, введенное пользователем, либо -1 для выхода
|
||||||
|
"""
|
||||||
|
while True:
|
||||||
|
user_input = input(prompt)
|
||||||
|
try:
|
||||||
|
value = int(user_input)
|
||||||
|
if min_value <= value <= max_value and value != 0:
|
||||||
|
return value
|
||||||
|
elif value == 0:
|
||||||
|
return -1
|
||||||
|
else:
|
||||||
|
print(f"Введенное значение должно быть в диапазоне от {min_value} до {max_value}")
|
||||||
|
except ValueError:
|
||||||
|
print("Введенное значение должно быть числом.")
|
||||||
@@ -67,6 +67,13 @@ class DbTable:
|
|||||||
self.dbconn.conn.rollback()
|
self.dbconn.conn.rollback()
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def update(self, column, values, wh):
|
||||||
|
sql = f"UPDATE {self.table_name()} SET {column} = {values} WHERE id = {wh};"
|
||||||
|
cur = self.dbconn.conn.cursor()
|
||||||
|
cur.execute(sql)
|
||||||
|
self.dbconn.conn.commit()
|
||||||
|
return
|
||||||
|
|
||||||
def first(self):
|
def first(self):
|
||||||
sql = "SELECT * FROM " + self.table_name()
|
sql = "SELECT * FROM " + self.table_name()
|
||||||
sql += " ORDER BY "
|
sql += " ORDER BY "
|
||||||
|
|||||||
+25
-23
@@ -82,7 +82,7 @@ class Main:
|
|||||||
menu = texts.show_cath_1txt
|
menu = texts.show_cath_1txt
|
||||||
print(menu)
|
print(menu)
|
||||||
lst = CathTable().all()
|
lst = CathTable().all()
|
||||||
self.max_index = (len(lst)+1)
|
self.max_cath_index = (len(lst)+1)
|
||||||
for i in lst:
|
for i in lst:
|
||||||
self.cath_arr.append(str(i[0]))
|
self.cath_arr.append(str(i[0]))
|
||||||
|
|
||||||
@@ -97,14 +97,10 @@ class Main:
|
|||||||
"""Выбор действий после вывода категорий
|
"""Выбор действий после вывода категорий
|
||||||
"""
|
"""
|
||||||
while True:
|
while True:
|
||||||
if next_step == "4":
|
if next_step == "4": # Удаление категории
|
||||||
x = int(input('Введите номер удаляемой категории(0 - для отмены): '))
|
x = add_func.validate_input('Введите номер удаляемой категории (0 - для отмены): ', 0, self.max_cath_index)
|
||||||
while (x==0)or(x<1 or x>self.max_index):
|
if(x!=0):
|
||||||
if (x == 0):
|
CathTable().delete(self.cath_arr[int(x)-1])
|
||||||
return "1"
|
|
||||||
elif(x<1 or x>self.max_index):
|
|
||||||
x = int(input('Вы вышли за пределы таблицы, повторите ввод (0 - для отмены):'))
|
|
||||||
CathTable().delete(self.cath_arr[x-1])
|
|
||||||
return "1"
|
return "1"
|
||||||
|
|
||||||
elif next_step == "6": #Добавление блюда в категорию
|
elif next_step == "6": #Добавление блюда в категорию
|
||||||
@@ -112,24 +108,30 @@ class Main:
|
|||||||
next_step = "5"
|
next_step = "5"
|
||||||
|
|
||||||
elif next_step == "7":#Удаление блюда из категории
|
elif next_step == "7":#Удаление блюда из категории
|
||||||
x = int(input('Введите номер удаляемого блюда (0 - для отмены): '))
|
x = add_func.validate_input('Введите номер удаляемого блюда (0 - для отмены): ', 0, self.max_index)
|
||||||
if(x==0):
|
if(x!=0):
|
||||||
pass
|
DishTable().delete(self.dish_arr[int(x)-1][0])
|
||||||
else:
|
else:
|
||||||
DishTable().delete(self.dish_arr[x-1][0])
|
return "1"
|
||||||
next_step = "5"
|
next_step = "5"
|
||||||
|
|
||||||
elif next_step == "5":
|
elif next_step == "5":
|
||||||
next_step = self.show_dish_in_cath()
|
next_step = self.show_dish_in_cath()
|
||||||
|
|
||||||
elif next_step == "8":
|
elif next_step == "8": # Обновление названия категории
|
||||||
x = int(input('Выберите номер категории для изменения (0 - для отмены): '))
|
x = add_func.validate_input('Введите номер обновляемой категории (0 - для отмены): ', 0, self.max_cath_index)
|
||||||
if(x==0):
|
if(x!=0):
|
||||||
pass
|
CathTable().cath_update(self.cath_arr[int(x)-1])
|
||||||
else:
|
|
||||||
CathTable().cath_update(self.cath_arr[x-1])
|
|
||||||
return "1"
|
return "1"
|
||||||
|
|
||||||
|
elif next_step == "u":
|
||||||
|
x = add_func.validate_input('Введите номер изменяемого блюда (0 - для отмены): ', 0, self.max_index)
|
||||||
|
if(x!=0):
|
||||||
|
DishTable().update_dish(self.dish_arr[int(x)-1][0])
|
||||||
|
else:
|
||||||
|
return "1"
|
||||||
|
|
||||||
|
|
||||||
elif next_step != "0" and next_step != "9" and next_step != "3":
|
elif next_step != "0" and next_step != "9" and next_step != "3":
|
||||||
print("Выбрано неверное число! Повторите ввод!")
|
print("Выбрано неверное число! Повторите ввод!")
|
||||||
return "1"
|
return "1"
|
||||||
@@ -162,12 +164,12 @@ class Main:
|
|||||||
self.dish_arr = []
|
self.dish_arr = []
|
||||||
if self.cath_id == -1:
|
if self.cath_id == -1:
|
||||||
while True:
|
while True:
|
||||||
x = int(input('Выберите номер интересуемой категории (0 - отмена): '))
|
x = add_func.validate_input('Выберите номер интересуемой категории (0 - отмена): ', 0, self.max_cath_index)
|
||||||
if(x==0):
|
if(x!=0):
|
||||||
return
|
|
||||||
else:
|
|
||||||
self.cath_id = CathTable().find_by_name(self.cath_arr[x-1])
|
self.cath_id = CathTable().find_by_name(self.cath_arr[x-1])
|
||||||
self.cath_obj = self.cath_arr[x-1]
|
self.cath_obj = self.cath_arr[x-1]
|
||||||
|
else:
|
||||||
|
return "1"
|
||||||
|
|
||||||
print("Выбрана категория: " + self.cath_obj)
|
print("Выбрана категория: " + self.cath_obj)
|
||||||
print("Блюда:")
|
print("Блюда:")
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -26,8 +26,8 @@ class CathTable(DbTable):
|
|||||||
# sql_sel = "SELECT id FROM " + self.table_name()
|
# sql_sel = "SELECT id FROM " + self.table_name()
|
||||||
# sql_sel += " WHERE cath_name = " + "'" + name + "'" + ";"
|
# sql_sel += " WHERE cath_name = " + "'" + name + "'" + ";"
|
||||||
cur.execute(param_query, (name,))
|
cur.execute(param_query, (name,))
|
||||||
ret = cur.fetchone()
|
ret = list(cur.fetchone())[0]
|
||||||
return list(ret)[0]
|
return ret
|
||||||
|
|
||||||
def cath_update(self, old):
|
def cath_update(self, old):
|
||||||
"""Функция для обновления категории
|
"""Функция для обновления категории
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# Таблица с блюдами и действия с ними
|
# Таблица с блюдами и действия с ними
|
||||||
|
|
||||||
from dbtable import *
|
from dbtable import *
|
||||||
|
import add_func
|
||||||
|
|
||||||
class DishTable(DbTable):
|
class DishTable(DbTable):
|
||||||
def table_name(self):
|
def table_name(self):
|
||||||
@@ -55,6 +56,14 @@ class DishTable(DbTable):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def name_by_id(self, id):
|
||||||
|
sql = f'SELECT dish_name FROM dish WHERE id = {id}'
|
||||||
|
cur = self.dbconn.conn.cursor()
|
||||||
|
cur.execute(sql)
|
||||||
|
result = cur.fetchone()
|
||||||
|
cur.close()
|
||||||
|
return str(result)
|
||||||
|
|
||||||
def insert_dishone(self, cath_id):
|
def insert_dishone(self, cath_id):
|
||||||
|
|
||||||
ins_name = input('Введите название добавляемого блюда (1 - для отмены): ')
|
ins_name = input('Введите название добавляемого блюда (1 - для отмены): ')
|
||||||
@@ -80,17 +89,67 @@ class DishTable(DbTable):
|
|||||||
|
|
||||||
ins_time = input(f'Процесс добавления блюда: {ins_name}\
|
ins_time = input(f'Процесс добавления блюда: {ins_name}\
|
||||||
\nВведите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ')
|
\nВведите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ')
|
||||||
if ins_time == "0":
|
while(ins_time==0)or(add_func.validate_time_format(ins_time)):
|
||||||
return "1"
|
if ins_time == "0":
|
||||||
|
return "1"
|
||||||
|
else:
|
||||||
|
ins_time = input('Введите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ')
|
||||||
|
|
||||||
ins_manual = input(f'Процесс добавления блюда: {ins_name}\
|
ins_manual = input(f'Процесс добавления блюда: {ins_name}\
|
||||||
\nВведите краткую инструкцию приготовления блюда (1 - для отмены): ')
|
\nВведите краткую инструкцию приготовления блюда (1 - для отмены): ')
|
||||||
if ins_time == "0":
|
if ins_manual == "0":
|
||||||
return "1"
|
return "1"
|
||||||
|
|
||||||
insert = [cath_id, ins_time, ins_name, ins_manual]
|
insert = [cath_id, ins_time, ins_name, ins_manual]
|
||||||
|
|
||||||
self.insert_one(insert)
|
self.insert_one(insert)
|
||||||
|
|
||||||
|
def update_dish(self, dish_id):
|
||||||
|
print('После изменения выберите другой пункт для изменения или введите -1 для выхода')
|
||||||
|
x = int(input('Что вы хотите изменить в рецепте?\n\
|
||||||
|
1 - Название\n2 - Время приготовления\n3 - Инструкция\n=> '))
|
||||||
|
while(x!=-1):
|
||||||
|
if(x!=1 or x!=2 or x!=3):
|
||||||
|
x = int(input('Введите корректное число из списка (-1 - для выхода)\n\
|
||||||
|
1 - Название\n2 - Время приготовления\n3 - Инструкция\n=> '))
|
||||||
|
elif(x==1):
|
||||||
|
new_name = input(f"Текущее название {self.name_by_id(dish_id)}")
|
||||||
|
while (new_name.strip() == '')or(len(new_name.strip()) > 32)\
|
||||||
|
or(DishTable().check_by_name(new_name)):
|
||||||
|
if(new_name.strip() == ''):
|
||||||
|
new_name = input("Пустая строка. Повторите ввод! Укажите название блюда (0 - отмена): ")
|
||||||
|
if new_name == "0":
|
||||||
|
return "1"
|
||||||
|
|
||||||
|
elif(len(new_name.strip()) > 32):
|
||||||
|
new_name = input("Слишком длинная строка. Повторите ввод!\
|
||||||
|
Укажите название блюда (0 - отмена): ")
|
||||||
|
if new_name == "0":
|
||||||
|
return "1"
|
||||||
|
else:
|
||||||
|
print('Такое блюдо уже существует')
|
||||||
|
new_name = input("Повторите ввод! Укажите название блюда (0 - отмена): ")
|
||||||
|
if new_name == "0":
|
||||||
|
return "1"
|
||||||
|
self.update('dish_name', new_name, dish_id)
|
||||||
|
|
||||||
|
elif(x==2):
|
||||||
|
new_time = input(f'Введите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ')
|
||||||
|
while(new_time==0)or(add_func.validate_time_format(new_time)):
|
||||||
|
if new_time == "0":
|
||||||
|
return "1"
|
||||||
|
else:
|
||||||
|
new_time = input('Введите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ')
|
||||||
|
self.update('cook_time', new_time, dish_id)
|
||||||
|
|
||||||
|
elif(x==3):
|
||||||
|
new_manual = input(f'Введите краткую инструкцию приготовления блюда (1 - для отмены): ')
|
||||||
|
if new_manual == "0":
|
||||||
|
return "1"
|
||||||
|
self.update('manual', new_manual, dish_id)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def example_insert(self):
|
def example_insert(self):
|
||||||
self.insert_one([1, "10 minutes", "Яичница", "Взбить яйца, нарезать помидоры, обжарить их вместе."])
|
self.insert_one([1, "10 minutes", "Яичница", "Взбить яйца, нарезать помидоры, обжарить их вместе."])
|
||||||
|
|||||||
Reference in New Issue
Block a user