delete for cath

This commit is contained in:
ada-dmitry
2024-05-18 01:53:46 +03:00
parent faf1b8f757
commit 0224527d04
10 changed files with 124 additions and 106 deletions
Binary file not shown.
Binary file not shown.
+2 -2
View File
@@ -71,6 +71,6 @@ def add_zero_before(old_index: str, max_len: str) -> str:
def cls(): def cls():
# Закомментировать строку нижу, если нужно выключить очистку терминала # Закомментировать строку ниже, если нужно выключить очистку терминала
os.system('cls') # os.system('cls')
return return
+3 -14
View File
@@ -98,22 +98,11 @@ class DbTable:
cur.execute(sql) cur.execute(sql)
return cur.fetchall() return cur.fetchall()
def get_page(self, page_num): def count(self):
"""Функция для получения "страницы" из БД по её номеру. sql = f"""SELECT COUNT(*) FROM {self.table_name()};"""
В программе заменяет .all() для вывода информации.
Args:
page_num (int): номер страницы, определяется пользователем.
Returns:
lst (list): Список, содержащий в себе все строки для этой страницы.
"""
ROW_PER_PAGE = 10
cur = self.dbconn.conn.cursor() 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) cur.execute(sql)
return cur.fetchall() return int(cur.fetchone()[0])
def select_one(self, **kwargs): def select_one(self, **kwargs):
+60 -43
View File
@@ -1,5 +1,4 @@
import sys import sys
import texts
import math import math
# import time # import time
@@ -21,10 +20,12 @@ TODO:
6) Доделать ограничение на выбор категории - done 6) Доделать ограничение на выбор категории - done
7) UPDATE для блюд - done 0.7 7) UPDATE для блюд - done 0.7
8) Постраничный вывод - indev 0.8 - реализация через offset. 8) Постраничный вывод - indev 0.8 - реализация через offset.
9) Реализовать отдельный просмотр(offset) 9) Реализовать отдельный просмотр(offset) - done for cath
10) И отдельный вывод(offset) 10) И отдельный вывод(offset)
1) detele category - done
FIXME: FIXME:
1) Откомментировать os.cls 1) Откомментировать os.cls
2) Исправить вылет при неверном вводе в самое начало(сделать выход на предыдущую менюшку) 2) Исправить вылет при неверном вводе в самое начало(сделать выход на предыдущую менюшку)
@@ -60,7 +61,11 @@ class Main:
cth.drop() cth.drop()
return return
def show_main_menu(self): def show_main_menu(self):
menu = texts.show_main_menu_txt menu = """Привутствуем в меню, выберите действие:
1 - просмотр категорий;
2 - сброс и инициализация БД;
9 - выход;"""
print(menu) print(menu)
return return
def read_next_step(self): def read_next_step(self):
@@ -79,44 +84,55 @@ class Main:
else: else:
return next_step return next_step
def show_page_cath(self):
menu = """Просмотр списка категорий!
\tНазвание\n-------------------------------------------------------------------------------------------"""
def show_cath(self): cath_page = 1
self.cath_id = -1 lst = CathTable().get_cath_page(cath_page)
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)
action = '>' action = '>'
max_page = math.ceil(self.max_cath_index/10) max_page = math.ceil(self.max_cath_index/10)
while True: while True:
cath_arr = CathTable().get_cath_page(cath_page)
self.cath_arr = []
for i in lst:
self.cath_arr.append(str(i[0]))
add_func.cls() add_func.cls()
for i in range(len(self.cath_arr)): print(menu)
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])
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\ action = input('-------------------------------------------------------------------------------------------\n\
Для переключения между страницами используйте "<" и ">"\nКол-во записей на странице: 10\n\ Для переключения между страницами используйте "<" и ">"\nКол-во записей на странице: 10\n\
Для выхода в меню действий нажмите любую другую клавишу\n=> ') Для выхода в меню действий нажмите любую другую клавишу\n=> ')
if(action=='>'): if(action=='>'):
if(self.cath_page==max_page): if(cath_page==max_page):
self.cath_page = 1 cath_page = 1
else: else:
self.cath_page += 1 cath_page += 1
lst = CathTable().get_page(self.cath_page) lst = CathTable().get_cath_page(cath_page)
elif(action=='<'): elif(action=='<'):
if(self.cath_page==1): if(cath_page==1):
self.cath_page = max_page cath_page = max_page
else: else:
self.cath_page -= 1 cath_page -= 1
lst = CathTable().get_page(self.cath_page) lst = CathTable().get_cath_page(cath_page)
else: else:
break 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) print(menu)
return return
@@ -125,17 +141,11 @@ class Main:
""" """
while True: while True:
if next_step == "4": # Удаление категории if next_step == "4": # Удаление категории
if(self.cath_page<(self.max_cath_index//10)): left = 0
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 right = self.max_cath_index
x = add_func.validate_input('Введите номер удаляемой категории (0 - для отмены): ', left, right) x = add_func.validate_input('Введите номер удаляемой категории (0 - для отмены): ', left, right)
if(x!=-1): 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" return "1"
elif next_step == "6": #Добавление блюда в категорию elif next_step == "6": #Добавление блюда в категорию
@@ -143,13 +153,13 @@ class Main:
next_step = "5" next_step = "5"
elif next_step == "7":#Удаление блюда из категории 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) left = ((self.dish_page-1)*10)+(self.dish_page==1)
right = left+9 right = left+9
else: else:
left = 1+((self.dish_page-1)*10)+(self.dish_page!=1) 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) x = add_func.validate_input('Введите номер удаляемого блюда (0 - для отмены): ', left, right)
if(x!=-1): if(x!=-1):
DishTable().delete(self.dish_arr[(int(x)-1)-((self.dish_page-1)*10)][0]) DishTable().delete(self.dish_arr[(int(x)-1)-((self.dish_page-1)*10)][0])
@@ -172,14 +182,15 @@ class Main:
if(x!=-1): if(x!=-1):
CathTable().cath_update(self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)]) CathTable().cath_update(self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)])
return "1" return "1"
elif next_step == "88": 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) left = 1+((self.dish_page-1)*10)
right = left+9 right = left+9
else: else:
left = 0+((self.dish_page-1)*10) left = 0+((self.dish_page-1)*10)
right = self.max_index right = self.mex_dish_index
x = add_func.validate_input('Введите номер обновляемого блюда (0 - для отмены): ', left, right) x = add_func.validate_input('Введите номер обновляемого блюда (0 - для отмены): ', left, right)
if(x!=-1): if(x!=-1):
DishTable().update_dish(self.dish_arr[(int(x)-1)-((self.cath_page-1)*10)][0]) 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 self.dish_page = 1
lst = DishTable().get_page_dish(self.cath_id, self.dish_page) lst = DishTable().get_page_dish(self.cath_id, self.dish_page)
self.max_len_name = 0 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 = '>' 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) lst = DishTable().get_page_dish(self.cath_id, self.dish_page)
while True: while True:
@@ -250,12 +261,12 @@ class Main:
self.dish_arr.append([i[2], str(i[1]), str(i[4])]) self.dish_arr.append([i[2], str(i[1]), str(i[4])])
self.max_len_name = max(self.max_len_name, len(i[2])) self.max_len_name = max(self.max_len_name, len(i[2]))
add_func.cls() 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-------------------------------------------------------------------------------------------") \n-------------------------------------------------------------------------------------------")
for i in range(len(self.dish_arr)): 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][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][1] + " "*(5+19-len(self.dish_arr[i][1]))
txt += self.dish_arr[i][2] txt += self.dish_arr[i][2]
@@ -278,7 +289,13 @@ class Main:
else: else:
break break
menu = texts.show_dish_in_cath_txt menu = """-------------------------------------------------------------------------------------------\nДальнейшие операции:
0 - возврат в главное меню;
1 - возврат в просмотр категорий;
6 - добавление нового блюда;
7 - удаление блюда;
88 - для обновления блюда;
9 - выход."""
print(menu) print(menu)
return self.read_next_step() return self.read_next_step()
+36 -4
View File
@@ -1,6 +1,9 @@
# Таблица с категориями и действия с ними # Таблица с категориями и действия с ними
from dbtable import * from dbtable import *
import math
ROW_PER_PAGE = 10
class CathTable(DbTable): class CathTable(DbTable):
def table_name(self): def table_name(self):
@@ -13,11 +16,10 @@ class CathTable(DbTable):
def table_constraints(self): def table_constraints(self):
return ['CONSTRAINT "Name" UNIQUE (cath_name)'] return ['CONSTRAINT "Name" UNIQUE (cath_name)']
def delete(self, val): def delete(self, id):
param_sql = "DELETE FROM cath WHERE cath_name = %s;" param_sql = f"DELETE FROM cath WHERE id = {id};"
cur = self.dbconn.conn.cursor() cur = self.dbconn.conn.cursor()
value = "".join(val) cur.execute(param_sql)
cur.execute(param_sql, (value,))
self.dbconn.conn.commit() self.dbconn.conn.commit()
def find_by_name(self, name): def find_by_name(self, name):
@@ -65,6 +67,36 @@ class CathTable(DbTable):
else: else:
return False 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): def example_insert(self):
self.insert_one(["Завтрак"]) self.insert_one(["Завтрак"])
+5 -7
View File
@@ -1,10 +1,8 @@
a = dict()
for i in range(1, 41, 2):
for j in range(2, 41, 2):
a[f"{i}"] = f"{j}"
import os print(a)
print('До очистки')
# Для Windows
os.system('cls')
print('после очистки')
-29
View File
@@ -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 - Блюдо
Введите необходимую цифру для выбора:
"""
+11
View File
@@ -0,0 +1,11 @@
{
"folders": [
{
"path": "."
},
{
"path": "../sun_project"
}
],
"settings": {}
}