From 0224527d04432cdb881bb0306778729f2ebe4369 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Sat, 18 May 2024 01:53:46 +0300 Subject: [PATCH] delete for cath --- .../__pycache__/add_func.cpython-311.pyc | Bin 2885 -> 3018 bytes 0.8_indev/__pycache__/dbtable.cpython-311.pyc | Bin 9837 -> 9292 bytes 0.8_indev/add_func.py | 4 +- 0.8_indev/dbtable.py | 19 +-- 0.8_indev/main.py | 111 ++++++++++-------- .../__pycache__/cath_table.cpython-311.pyc | Bin 7169 -> 9238 bytes 0.8_indev/tables/cath_table.py | 40 ++++++- 0.8_indev/test.py | 16 ++- 0.8_indev/texts.py | 29 ----- lab6.code-workspace | 11 ++ 10 files changed, 124 insertions(+), 106 deletions(-) delete mode 100644 0.8_indev/texts.py create mode 100644 lab6.code-workspace diff --git a/0.8_indev/__pycache__/add_func.cpython-311.pyc b/0.8_indev/__pycache__/add_func.cpython-311.pyc index d188ea87163dafa67fdcf4c42afada575160b3d0..334d0f24e58f7bc5aae94f39b47e7a7b99f7b7ba 100644 GIT binary patch delta 349 zcmX>qc1oOYIWI340}!xpc26_mp2#QRWCP?)XGmd4Va#EOg3ydnj44bl3{gxe%s`Sk zg(a0Gg%ya|Qd!d2QrKHqqF7TnfHG_;jKK_=oExK*nMBoGtYSh^6O%JyJi=pg5|hkg z4D>7}Phrw!WZ8U($%utfa`RWV5N1Y;$zEKc^~oSNzyKqV!3@No*?$A|hfQvNN@-52U6DFa8swDXDj@NJnURt41_NgU7*2l76(Xy| N%*g$L0h0jR4FIKvM92UD delta 215 zcmX>lepHNaIWI340}xcZI;WL$P2`g>(F5|PGo&!2Fy=5sF{CiHFhnt?Fat@Z6qZ!x z6jmT+OJz=DOJQ$eiDF4%3}(>e*qEWrB(C9N6%&%0n4A&g5gwD1m}C}Xpl6|HIC%k+ zE+g~ib4*4oj1rp}*+ZBa%_oO(g}P|67O?>BD&hnYVnE^+b8$&gks^?_lA#FXsv-^` s@r%PIH$SB`C)KV<1;}Lt;^HJA@qw98%DkdZ~F*zf~BRnQ2G07~(K+j^cGo!E6 zrNOwSl5^NZ?m%w|Yon#)|vIQb!u_~a~MmC4(9v;|7IL1sZf4buX)$%4$v%*>Ju zlMVUAw1OElS^TO*gI#@GokJ9y{X_jiG_*7o+=Bdl6^cTEnu?f!geH5D(BybA2~OtB zypp0gpvdF~F%k3R{L;LVDqfeQki?{%R6Q^^6)0I84iWz@n1Pb5yt)`B_-iJ}|%uzRBBE0~sqPbEv7=moYL*eqg{(egunu!6943 H3$y?Ls$XTw delta 1020 zcmZ`%?MqWp7{7Phy^3#B@jcSRv~n;mNf5ON8L25KzKs+bjM=6M)8cL`nH%#Z)UXh} zMS(;XkstgrHJR9{bD$3)QGE+P1WJ9bo^#b}NFDC^o#&kA<@Ypx8^P9 z=4Np?+N_uQtp%%jm3--`2CKvFab3IaXzp=%U43UAr=@dJUEIdERaEI%@cs~S)#Lo} z8Q~G<=EFMWDPN+L2{pxGeTaAKf>=AG3kn<;Hn{a6~EHaA1hk4i5Xx*1wby8aZ+o3qckpFo9eN)&eF6Z>+WA9%@aam?)iK0XS2K*VA~r zJpO<@?6VT>gemd*{G`@9=u=fZ!`>z%bR4T~SctkJB~rh_+IR6*uL;E1c>-2hi(<^g zz1n=tf#gAZ=zY|Z#`vRuMmnV5W>0aOy#VW=?u0+~UO{EH975 rM@`wh(I`~za2nJo534)*u=1_?WW7ztm+x@@#$EON=YPC%E)x6!jYp8B 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 6cebb9d148c28118f87463f133bb837eaa1815f0..f24a087cc32af26179504da7d4c57077efaaf7dd 100644 GIT binary patch delta 2876 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 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