mirror of
https://github.com/ada-dmitry/lab6.git
synced 2026-09-24 01:10:15 +00:00
delete for cath
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -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
@@ -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
@@ -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()
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -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
@@ -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('после очистки')
|
|
||||||
@@ -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 - Блюдо
|
|
||||||
Введите необходимую цифру для выбора:
|
|
||||||
"""
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "../sun_project"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user