diff --git a/0.8_indev/__pycache__/add_func.cpython-311.pyc b/0.8_indev/__pycache__/add_func.cpython-311.pyc index d188ea8..334d0f2 100644 Binary files a/0.8_indev/__pycache__/add_func.cpython-311.pyc and b/0.8_indev/__pycache__/add_func.cpython-311.pyc differ diff --git a/0.8_indev/__pycache__/dbtable.cpython-311.pyc b/0.8_indev/__pycache__/dbtable.cpython-311.pyc index cf5d63c..aa06591 100644 Binary files a/0.8_indev/__pycache__/dbtable.cpython-311.pyc and b/0.8_indev/__pycache__/dbtable.cpython-311.pyc differ diff --git a/0.8_indev/add_func.py b/0.8_indev/add_func.py index f75f7a7..a8548b6 100644 --- a/0.8_indev/add_func.py +++ b/0.8_indev/add_func.py @@ -71,6 +71,6 @@ def add_zero_before(old_index: str, max_len: str) -> str: def cls(): - # Закомментировать строку нижу, если нужно выключить очистку терминала - os.system('cls') + # Закомментировать строку ниже, если нужно выключить очистку терминала + # os.system('cls') return \ No newline at end of file diff --git a/0.8_indev/dbtable.py b/0.8_indev/dbtable.py index 37f4355..dc28016 100644 --- a/0.8_indev/dbtable.py +++ b/0.8_indev/dbtable.py @@ -98,23 +98,12 @@ class DbTable: cur.execute(sql) return cur.fetchall() - def get_page(self, page_num): - """Функция для получения "страницы" из БД по её номеру. - В программе заменяет .all() для вывода информации. - - Args: - page_num (int): номер страницы, определяется пользователем. - - Returns: - lst (list): Список, содержащий в себе все строки для этой страницы. - """ - ROW_PER_PAGE = 10 + def count(self): + sql = f"""SELECT COUNT(*) FROM {self.table_name()};""" cur = self.dbconn.conn.cursor() - offset = (page_num - 1) * ROW_PER_PAGE - sql = (f"SELECT * FROM {self.table_name()} LIMIT {ROW_PER_PAGE} OFFSET {offset}") cur.execute(sql) - return cur.fetchall() - + return int(cur.fetchone()[0]) + def select_one(self, **kwargs): conditions = [] diff --git a/0.8_indev/main.py b/0.8_indev/main.py index c52f2f6..86a948e 100644 --- a/0.8_indev/main.py +++ b/0.8_indev/main.py @@ -1,5 +1,4 @@ import sys -import texts import math # import time @@ -21,10 +20,12 @@ TODO: 6) Доделать ограничение на выбор категории - done 7) UPDATE для блюд - done 0.7 8) Постраничный вывод - indev 0.8 - реализация через offset. -9) Реализовать отдельный просмотр(offset) +9) Реализовать отдельный просмотр(offset) - done for cath 10) И отдельный вывод(offset) +1) detele category - done + FIXME: 1) Откомментировать os.cls 2) Исправить вылет при неверном вводе в самое начало(сделать выход на предыдущую менюшку) @@ -60,7 +61,11 @@ class Main: cth.drop() return def show_main_menu(self): - menu = texts.show_main_menu_txt + menu = """Привутствуем в меню, выберите действие: + 1 - просмотр категорий; + 2 - сброс и инициализация БД; + 9 - выход;""" + print(menu) return def read_next_step(self): @@ -79,63 +84,68 @@ class Main: else: return next_step - - def show_cath(self): - self.cath_id = -1 - menu = texts.show_cath_1txt - print(menu) - self.max_cath_index = len(CathTable().all()) - self.cath_page = 1 - lst = CathTable().get_page(self.cath_page) + def show_page_cath(self): + menu = """Просмотр списка категорий! +№\tНазвание\n-------------------------------------------------------------------------------------------""" + + cath_page = 1 + lst = CathTable().get_cath_page(cath_page) action = '>' max_page = math.ceil(self.max_cath_index/10) while True: - - self.cath_arr = [] - - for i in lst: - self.cath_arr.append(str(i[0])) + cath_arr = CathTable().get_cath_page(cath_page) add_func.cls() - for i in range(len(self.cath_arr)): - print(add_func.add_zero_before(str((i+1)+(10*(self.cath_page-1))), len(str(self.max_cath_index))) + "\t" + self.cath_arr[i]) + print(menu) + + for i in range(len(cath_arr)): + print(add_func.add_zero_before(cath_arr[i][0],\ + len(str(self.max_cath_index))) + "\t" + cath_arr[i][1]) + action = input('-------------------------------------------------------------------------------------------\n\ Для переключения между страницами используйте "<" и ">"\nКол-во записей на странице: 10\n\ Для выхода в меню действий нажмите любую другую клавишу\n=> ') + if(action=='>'): - if(self.cath_page==max_page): - self.cath_page = 1 + if(cath_page==max_page): + cath_page = 1 else: - self.cath_page += 1 - lst = CathTable().get_page(self.cath_page) + cath_page += 1 + lst = CathTable().get_cath_page(cath_page) elif(action=='<'): - if(self.cath_page==1): - self.cath_page = max_page + if(cath_page==1): + cath_page = max_page else: - self.cath_page -= 1 - lst = CathTable().get_page(self.cath_page) + cath_page -= 1 + lst = CathTable().get_cath_page(cath_page) else: break - - menu = texts.show_cath_2txt + + + + def show_cath(self): + self.cath_id = -1 + self.max_cath_index = CathTable().count() + self.show_page_cath() + menu = """-------------------------------------------------------------------------------------------\nДальнейшие операции: + 0 - возврат в главное меню; + 3 - добавление новой категории; + 4 - удаление категории; + 5 - просмотр блюд в категории; + 8 - обновить категорию; + 9 - выход.""" print(menu) return def after_show_cath(self, next_step): """Выбор действий после вывода категорий - """ + """ while True: if next_step == "4": # Удаление категории - if(self.cath_page<(self.max_cath_index//10)): - left = ((self.cath_page-1)*10)+1 - right = left+9 - print(left) - - else: - left = 1+((self.cath_page-1)*10) - right = self.max_cath_index + left = 0 + right = self.max_cath_index x = add_func.validate_input('Введите номер удаляемой категории (0 - для отмены): ', left, right) if(x!=-1): - CathTable().delete(self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)]) + CathTable().delete(CathTable().get_cath_from_page(x).get("id")) return "1" elif next_step == "6": #Добавление блюда в категорию @@ -143,13 +153,13 @@ class Main: next_step = "5" elif next_step == "7":#Удаление блюда из категории - if(self.dish_page<(self.max_index//10)): + if(self.dish_page<(self.max_dish_index//10)): left = ((self.dish_page-1)*10)+(self.dish_page==1) right = left+9 else: left = 1+((self.dish_page-1)*10)+(self.dish_page!=1) - right = self.max_index + right = self.mex_dish_index x = add_func.validate_input('Введите номер удаляемого блюда (0 - для отмены): ', left, right) if(x!=-1): DishTable().delete(self.dish_arr[(int(x)-1)-((self.dish_page-1)*10)][0]) @@ -172,14 +182,15 @@ class Main: if(x!=-1): CathTable().cath_update(self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)]) return "1" + elif next_step == "88": - if(self.dish_page<(self.max_index//10)): + if(self.dish_page<(self.mex_dish_index//10)): left = 1+((self.dish_page-1)*10) right = left+9 else: left = 0+((self.dish_page-1)*10) - right = self.max_index + right = self.mex_dish_index x = add_func.validate_input('Введите номер обновляемого блюда (0 - для отмены): ', left, right) if(x!=-1): DishTable().update_dish(self.dish_arr[(int(x)-1)-((self.cath_page-1)*10)][0]) @@ -238,9 +249,9 @@ class Main: self.dish_page = 1 lst = DishTable().get_page_dish(self.cath_id, self.dish_page) self.max_len_name = 0 - self.max_index = len(DishTable().all_by_cath_id(self.cath_id)) + self.mex_dish_index = len(DishTable().all_by_cath_id(self.cath_id)) action = '>' - max_page = math.ceil(self.max_index/10) + max_page = math.ceil(self.mex_dish_index/10) lst = DishTable().get_page_dish(self.cath_id, self.dish_page) while True: @@ -250,12 +261,12 @@ class Main: self.dish_arr.append([i[2], str(i[1]), str(i[4])]) self.max_len_name = max(self.max_len_name, len(i[2])) add_func.cls() - print("№" + " "*(len(str(self.max_index)) + 1)+ "Название" + " "*(self.max_len_name - 4)\ + print("№" + " "*(len(str(self.mex_dish_index)) + 1)+ "Название" + " "*(self.max_len_name - 4)\ +"Время приготовления Краткая инструкция\ \n-------------------------------------------------------------------------------------------") for i in range(len(self.dish_arr)): - txt = add_func.add_zero_before(str((i+1)+(10*(self.dish_page-1))), len(str(self.max_index))) + " "*(2+len(str(self.max_index))) + txt = add_func.add_zero_before(str((i+1)+(10*(self.dish_page-1))), len(str(self.mex_dish_index))) + " "*(2+len(str(self.mex_dish_index))) txt += self.dish_arr[i][0] + " "*(4+self.max_len_name - len(self.dish_arr[i][0])) txt += self.dish_arr[i][1] + " "*(5+19-len(self.dish_arr[i][1])) txt += self.dish_arr[i][2] @@ -278,7 +289,13 @@ class Main: else: break - menu = texts.show_dish_in_cath_txt + menu = """-------------------------------------------------------------------------------------------\nДальнейшие операции: + 0 - возврат в главное меню; + 1 - возврат в просмотр категорий; + 6 - добавление нового блюда; + 7 - удаление блюда; + 88 - для обновления блюда; + 9 - выход.""" print(menu) return self.read_next_step() diff --git a/0.8_indev/tables/__pycache__/cath_table.cpython-311.pyc b/0.8_indev/tables/__pycache__/cath_table.cpython-311.pyc index 6cebb9d..f24a087 100644 Binary files a/0.8_indev/tables/__pycache__/cath_table.cpython-311.pyc and b/0.8_indev/tables/__pycache__/cath_table.cpython-311.pyc differ diff --git a/0.8_indev/tables/cath_table.py b/0.8_indev/tables/cath_table.py index 1d6dcc5..7983b69 100644 --- a/0.8_indev/tables/cath_table.py +++ b/0.8_indev/tables/cath_table.py @@ -1,6 +1,9 @@ # Таблица с категориями и действия с ними from dbtable import * +import math + +ROW_PER_PAGE = 10 class CathTable(DbTable): def table_name(self): @@ -13,11 +16,10 @@ class CathTable(DbTable): def table_constraints(self): return ['CONSTRAINT "Name" UNIQUE (cath_name)'] - def delete(self, val): - param_sql = "DELETE FROM cath WHERE cath_name = %s;" + def delete(self, id): + param_sql = f"DELETE FROM cath WHERE id = {id};" cur = self.dbconn.conn.cursor() - value = "".join(val) - cur.execute(param_sql, (value,)) + cur.execute(param_sql) self.dbconn.conn.commit() def find_by_name(self, name): @@ -64,6 +66,36 @@ class CathTable(DbTable): return True else: return False + + def get_cath_page(self, page_num): + """Функция для получения "страницы" из БД по её номеру. + В программе заменяет .all() для вывода информации. + + Args: + page_num (int): номер страницы, определяется пользователем. + + Returns: + lst (list): Список, содержащий в себе все строки для этой страницы. + """ + final_list = [] + cur = self.dbconn.conn.cursor() + offset = (page_num - 1) * ROW_PER_PAGE + sql = (f"SELECT * FROM cath LIMIT {ROW_PER_PAGE} OFFSET {offset}") + cur.execute(sql) + zero_list = cur.fetchall() + for i in range(len(zero_list)): + final_list.append([str(i+1+(ROW_PER_PAGE*(page_num-1))), str(zero_list[i][0]), zero_list[i][1]]) + return final_list + + def get_cath_from_page(self, row_num): + arr = self.get_cath_page(math.ceil(row_num/ROW_PER_PAGE)) + row = dict() + for i in arr: + if(int(i[0]) == row_num): + row["id"] = str(i[2]) + row["cath_name"] = str(i[1]) + return row + # def change_pages(self, ) def example_insert(self): diff --git a/0.8_indev/test.py b/0.8_indev/test.py index 5b1e75e..d637a96 100644 --- a/0.8_indev/test.py +++ b/0.8_indev/test.py @@ -1,10 +1,8 @@ +a = dict() - -import os - - -print('До очистки') -# Для Windows -os.system('cls') - -print('после очистки') \ No newline at end of file +for i in range(1, 41, 2): + for j in range(2, 41, 2): + a[f"{i}"] = f"{j}" + +print(a) + \ No newline at end of file diff --git a/0.8_indev/texts.py b/0.8_indev/texts.py deleted file mode 100644 index 2cbce54..0000000 --- a/0.8_indev/texts.py +++ /dev/null @@ -1,29 +0,0 @@ -show_main_menu_txt = """Привутствуем в меню, выберите действие: - 1 - просмотр категорий; - 2 - сброс и инициализация БД; - 9 - выход;""" -show_cath_1txt = """Просмотр списка категорий! -№\tНазвание\n-------------------------------------------------------------------------------------------""" - -show_cath_2txt = """-------------------------------------------------------------------------------------------\nДальнейшие операции: - 0 - возврат в главное меню; - 3 - добавление новой категории; - 4 - удаление категории; - 5 - просмотр блюд в категории; - 8 - обновить категорию; - 9 - выход.""" - -show_dish_in_cath_txt = """-------------------------------------------------------------------------------------------\nДальнейшие операции: - 0 - возврат в главное меню; - 1 - возврат в просмотр категорий; - 6 - добавление нового блюда; - 7 - удаление блюда; - 88 - для обновления блюда; - 9 - выход.""" - -text_choice_update = """-------------------------------------------------------------------------------------------\n -Что вы хотите обновить? -1 - Категорию -2 - Блюдо -Введите необходимую цифру для выбора: -""" \ No newline at end of file diff --git a/lab6.code-workspace b/lab6.code-workspace new file mode 100644 index 0000000..0870ba8 --- /dev/null +++ b/lab6.code-workspace @@ -0,0 +1,11 @@ +{ + "folders": [ + { + "path": "." + }, + { + "path": "../sun_project" + } + ], + "settings": {} +} \ No newline at end of file