From fc29c9a965c8201a2f802a48d90e8c8d8093ee1d Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Sat, 18 May 2024 18:21:20 +0300 Subject: [PATCH] done page_output, ready for test --- 0.8_indev/__pycache__/dbtable.cpython-311.pyc | Bin 9292 -> 9292 bytes 0.8_indev/main.py | 168 ++++++++--------- .../__pycache__/cath_table.cpython-311.pyc | Bin 9238 -> 8997 bytes .../__pycache__/dish_table.cpython-311.pyc | Bin 32537 -> 34729 bytes 0.8_indev/tables/cath_table.py | 18 +- 0.8_indev/tables/dish_table.py | 170 +++++++++++------- 6 files changed, 185 insertions(+), 171 deletions(-) diff --git a/0.8_indev/__pycache__/dbtable.cpython-311.pyc b/0.8_indev/__pycache__/dbtable.cpython-311.pyc index aa06591175317570811d8702af8051375d937f07..873cecf743050140c5644c273b1eae04f14b841a 100644 GIT binary patch delta 20 acmX@(amIstIWI340}u$Ncx>c$Q~>}yjs)ER delta 20 acmX@(amIstIWI340}#Y-b>GPCr~&{$kp+7I diff --git a/0.8_indev/main.py b/0.8_indev/main.py index 86a948e..d68caaa 100644 --- a/0.8_indev/main.py +++ b/0.8_indev/main.py @@ -25,11 +25,19 @@ TODO: 1) detele category - done +2) update category - done +3) add category - done FIXME: 1) Откомментировать os.cls 2) Исправить вылет при неверном вводе в самое начало(сделать выход на предыдущую менюшку) 3) При вводе текста пропуск сделать с помощью пустой строки. + +TEST: +1) Удаление категории + ввод неизвестных символов и отмена +2) Обновление категории + ввод неизвестных символов и отмена +3) Добавление категории + ввод неизвестных символов и отмена + ''' @@ -153,16 +161,11 @@ class Main: next_step = "5" elif next_step == "7":#Удаление блюда из категории - 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.mex_dish_index + left = 0 + right = self.max_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]) + DishTable().delete(DishTable().get_dish_from_page(x).get("id")) else: return "1" next_step = "5" @@ -171,29 +174,19 @@ class Main: next_step = self.show_dish_in_cath() elif next_step == "8": # Обновление названия категории - if(self.cath_page<(self.max_cath_index//10)): - left = 1+((self.cath_page-1)*10) - right = left+9 - - 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().cath_update(self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)]) + CathTable().cath_update(CathTable().get_cath_from_page(x).get("cath_name")) return "1" - elif next_step == "88": - 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.mex_dish_index + elif next_step == "88": # Обновление блюда + left = 0 + right = self.max_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]) + DishTable().update_dish(DishTable().get_dish_from_page(x)) else: return "1" @@ -208,86 +201,81 @@ class Main: """ Добавление новой категории в таблицу """ - data = [] - data.append(input("Введите название (1 - отмена): ").strip()) - if data[0] == "1": - return - while((len(data[0].strip()) == 0)or(len(data[0].strip()) > 32)): - if (len(data[0].strip()) > 32): - data[0] = input("Название слишком длинное! Введите название заново (1 - отмена):").strip() - if data[0] == "1": - return + data = input("Введите название (enter - отмена): ").strip() + while((len(data) == 0)or(len(data) > 32)or(CathTable().check_by_name(data))): + if (len(data) > 32): + data = input("Название слишком длинное! Введите название заново (enter - отмена): ").strip() + elif(CathTable().check_by_name(data)): + data = input("Такое название уже существует! Введите название заново (enter - отмена): ").strip() else: - data[0] = input("Название не может быть пустым! Введите название заново (1 - отмена):").strip() - if data[0] == "1": - return + return CathTable().insert_one(data) return + + def show_dish_page(self): + print("Блюда:") + dish_page = 1 + lst = DishTable().get_dish_page(self.cath_id, dish_page) + self.max_len_name = 0 + self.max_dish_index = DishTable().count(self.cath_id) + action = '>' + max_page = math.ceil(self.max_dish_index/10) + lst = DishTable().get_dish_page(self.cath_id, dish_page) + + while True: + self.dish_arr = [] + + for i in lst: + 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_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*(dish_page-1))), \ + len(str(self.max_dish_index))) + " "*(2+len(str(self.max_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] + print(txt) + action = input('-------------------------------------------------------------------------------------------\n\ + Для переключения между страницами используйте "<" и ">"\nКол-во записей на странице: 10\n\ + Для выхода в меню действий нажмите любую другую клавишу\n=> ') + if(action=='>'): + if(dish_page==max_page): + dish_page = 1 + else: + dish_page += 1 + lst = DishTable().get_dish_page(self.cath_id, dish_page) + elif(action=='<'): + if(dish_page==1): + dish_page = max_page + else: + dish_page -= 1 + lst = DishTable().get_dish_page(self.cath_id, dish_page) + else: + break def show_dish_in_cath(self): """Вывод всех блюд в выбранной пользователем категории """ - if self.cath_id == -1: while True: - if(self.cath_page<(self.max_cath_index//10)): - left = 1+((self.cath_page-1)*10) - right = left+9 - - else: - left = 1+((self.cath_page-1)*10)+(self.cath_page!=1) - right = self.max_cath_index + left = 0 + right = self.max_cath_index x = add_func.validate_input('Выберите номер интересуемой категории (0 - отмена): ', left, right) add_func.cls() if(x!=-1): - self.cath_id = CathTable().find_by_name(self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)]) - self.cath_obj = self.cath_arr[(int(x)-1)-((self.cath_page-1)*10)] + self.cath = CathTable().get_cath_from_page(x) + self.cath_obj = self.cath.get("cath_name") + self.cath_id = self.cath.get("id") else: return "1" - print("Выбрана категория: " + self.cath_obj) - print("Блюда:") - self.dish_page = 1 - lst = DishTable().get_page_dish(self.cath_id, self.dish_page) - self.max_len_name = 0 - self.mex_dish_index = len(DishTable().all_by_cath_id(self.cath_id)) - action = '>' - max_page = math.ceil(self.mex_dish_index/10) - lst = DishTable().get_page_dish(self.cath_id, self.dish_page) + self.show_dish_page() + print(f"Выбрана категория: {self.cath_obj}") - while True: - self.dish_arr = [] - - for i in lst: - 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.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.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] - print(txt) - action = input('-------------------------------------------------------------------------------------------\n\ - Для переключения между страницами используйте "<" и ">"\nКол-во записей на странице: 10\n\ - Для выхода в меню действий нажмите любую другую клавишу\n=> ') - if(action=='>'): - if(self.dish_page==max_page): - self.dish_page = 1 - else: - self.dish_page += 1 - lst = DishTable().get_page_dish(self.cath_id, self.dish_page) - elif(action=='<'): - if(self.dish_page==1): - self.dish_page = max_page - else: - self.dish_page -= 1 - lst = DishTable().get_page_dish(self.cath_id, self.dish_page) - else: - break menu = """-------------------------------------------------------------------------------------------\nДальнейшие операции: 0 - возврат в главное меню; 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 f24a087cc32af26179504da7d4c57077efaaf7dd..424a48280a0a7eb687f8e4dd998bfb33ed2a6af1 100644 GIT binary patch delta 943 zcmZ`$Ur19?9KPr7?(U!4-F2IH8*5xP4a`cXDQX59I-D-u+R{}>h%+*6(Dg=O6Tzq6 z8vP)GA^4}-OAnLLQ`u{e-O0ch2udVa5HpmZhwR)tvllyDzTf$M-}n2@<(y}|Fa4&B z(WoczdOhEJ`$OfbX@^EuIG{6N(sv;heAfgJ1+Cg)q=l5Wi=!qf*)4cPom|T+u7;xS z0+|?uPHj*hrzc677d%kZUZxXdTpJ?QB-ydPYqbJ+PE&MN)vH?5@9qf zsAnl)t#)u522lkh3{O!jpo(hmctRW(_;bAUK0hzLlio;cQnt387vwW{c?=Ik=&cw% zb+T_4$&S0wZX9-;>?k51tQgzT0BjnclV1=#G_~0W^Gv9~gf^I=b!I5f#0pI8F}2B5 zg56vXYNlr{O70Pa{TjKi;7^P<$sY>J{D{JjkSQufePV4JtaqLDE_P@7miv~1FM@g2 zS73eF@H*Qfu`QdNt3(j)J|(eVnd~R!#ITYWR``g*N0h`Z&Pk=F4~$?lH{zf1k|lF) z${a`N7v$MF)Bxd17ixw?Wg2}2y=4?7K~mMY@GYxE8ehlJ!abFw(!>HitA_im9nuyX zqG8oiV`Tn%2ts7xv&DyWn75Lm4eG3yT(*C5l1^$I$8B8gfF(5tX=@Xrb04kSs9HFK zRiPQfjD`;et^}g|jFunt`y)Nk@*~z7V7tmqnXmu~p471GSd0&C|NlXlXYiG+<3JsMvxgG8sIGNv?pin9M7U63E(4^TM+;Q#;t delta 1127 zcmZ{iTSyd99LCR?ogMc+&d$2K6K3OPu&P*1Rb{M`heBXC|{~2cPMQ+r4 zCf#laqO0d!UH41zq30uqPeYEI%uiV2mVU;FR3^?IL~!1=8(ZORUIXT!)Ygu}hGXaY zS+i3Par++czlR1-7^Q%98C0&>jqy;=f9ES{kx11E$^^IOp=rB%X4> zE=QCP#~lgF7>YX+n5qkIJNhvT4(BM|0^`n-^;PmFnat|LWQI(WXJo3ZM$X`>7S(vW z&oY&v6Y$;{i>~Yqou(-nCsX7Jc|`RYc}k{bx>1=Sv*asMv+T)(Ja zpto1ZOtB0TP8qhkJib-9-Ehp+?p+zcysHM>?put)z@&TI`bM2^THu>r@vZZGtIoGA z@NFY(+Q}!YFDoNT+T|UIK+b*Y+3QmJ*p&? zv~Nu^lC>b;x(|Xc*>5>qm4Uv>=2gV)MdAB5ZsUD9j>MbjXDNh8XapCj6-B z$0)oB1!Jqza~uk;H6RhQTxUK>9b-V6O-QrpM@>IU8My-Z>Iq{VNt7|fE(M*>9ldC+X{REH@Pc8re diff --git a/0.8_indev/tables/__pycache__/dish_table.cpython-311.pyc b/0.8_indev/tables/__pycache__/dish_table.cpython-311.pyc index 7cc03d3ad3387fec8ccc60aecd21660fd8bef420..c4ce7705b952161a731190c37902e5ffc974333e 100644 GIT binary patch delta 7587 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 Jp 32)or(self.check_by_name(data.strip()))): if (len(data.strip()) > 32): - data = input("Название слишком длинное! Введите название заново (1 - отмена):").strip() - if data == "1": - return - elif len(data.strip()) == 0: - data = input("Название не может быть пустым! Введите название заново (1 - отмена):").strip() - if data == "1": - return + data = input("Название слишком длинное! Введите название заново (enter - отмена):").strip() + elif(self.check_by_name(data.strip()) == 1): + data = input("Такое название уже существует. Введите новое (enter - отмена):").strip() else: - data = input("Такое название уже существует. Введите новое (1 - отмена):").strip() + return "1" param_sql = f"UPDATE cath SET cath_name = '{data}' WHERE cath_name = '{old}';" cur.execute(param_sql) @@ -80,7 +74,7 @@ class CathTable(DbTable): 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}") + sql = (f"SELECT * FROM {self.table_name()} LIMIT {ROW_PER_PAGE} OFFSET {offset}") cur.execute(sql) zero_list = cur.fetchall() for i in range(len(zero_list)): diff --git a/0.8_indev/tables/dish_table.py b/0.8_indev/tables/dish_table.py index a683180..7f70c1a 100644 --- a/0.8_indev/tables/dish_table.py +++ b/0.8_indev/tables/dish_table.py @@ -2,6 +2,9 @@ from dbtable import * import add_func +import math + +ROW_PER_PAGE = 10 class DishTable(DbTable): def table_name(self): @@ -17,8 +20,6 @@ class DishTable(DbTable): def table_constraints(self): return ['CONSTRAINT "Name Dish" UNIQUE (dish_name)'] - - def find_by_position(self, num): sql = "SELECT * FROM " + self.table_name() sql += " ORDER BY " @@ -37,22 +38,67 @@ class DishTable(DbTable): cur.execute(sql) return cur.fetchall() - def get_page_dish(self, cath_id, page_num): - row_per_page = 10 - offset = (page_num - 1) * row_per_page - sql = f"""SELECT * FROM dish WHERE cath_id = {str(cath_id)}\ - ORDER BY {", ".join(self.primary_key())} LIMIT {row_per_page} OFFSET {offset}""" - cur = self.dbconn.conn.cursor() - cur.execute(sql) - return cur.fetchall() - - def delete(self, val): - sql = "DELETE FROM dish" - sql += " WHERE dish_name" - sql += "=" + "'" + val + "';" +# def get_page_dish(self, cath_id, page_num): +# offset = (page_num - 1) * ROW_PER_PAGE +# sql = f"""SELECT * FROM dish WHERE cath_id = {str(cath_id)}\ +# ORDER BY {", ".join(self.primary_key())} LIMIT {ROW_PER_PAGE} OFFSET {offset}""" +# cur = self.dbconn.conn.cursor() +# cur.execute(sql) +# return cur.fetchall() + + def delete(self, id): + sql = f"""DELETE FROM {self.table_name()} WHERE id = {id};""" cur = self.dbconn.conn.cursor() cur.execute(sql) self.dbconn.conn.commit() + + def count(self, id): + sql = f"""SELECT COUNT(*) FROM {self.table_name()} WHERE cath_id = {id};""" + cur = self.dbconn.conn.cursor() + cur.execute(sql) + return int(cur.fetchone()[0]) + + def get_dish_from_page(self, row_num): + arr = self.get_dish_page(math.ceil(row_num/ROW_PER_PAGE), self.cath) + row = dict() + for i in arr: + if(int(i[0]) == row_num): + row["id"] = i[1] + row["dish_name"] = str(i[2]) + row["cath_id"] = i[3] + row["cook_time"] = str(i[4]) + row["manual"] = str(i[5]) + return row + + def get_dish_page(self, cath_id, page_num): + """Функция для получения "страницы" из БД по её номеру. + В программе заменяет .all() для вывода информации. + + Args: + page_num (int): номер страницы, определяется пользователем. + cath_id (int): id категории, из которой необходимо получить блюда + + Returns: + lst (list): Список, содержащий в себе все строки для этой страницы. + + 0 - number + 1 - id + 2 - name + 3 - cath_id + 4 - cook_time + 5 - manual + """ + final_list = [] + cur = self.dbconn.conn.cursor() + offset = (page_num - 1) * ROW_PER_PAGE + sql = (f"SELECT * FROM {self.table_name()} WHERE cath_id = {cath_id} 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))), zero_list[i][3],\ + str(zero_list[i][2]), zero_list[i][0], str(zero_list[i][1]), str(zero_list[i][4])]) + return final_list + def check_by_name(self, value): sql = f"SELECT * FROM {self.table_name()} WHERE dish_name='{value}'" @@ -83,99 +129,84 @@ class DishTable(DbTable): def insert_dishone(self, cath_id): - ins_name = input('Введите название добавляемого блюда (1 - для отмены): ') + ins_name = input('Введите название добавляемого блюда (1 - для отмены): ').strip() - while (ins_name.strip() == '')or(len(ins_name.strip()) > 32)\ + while (ins_name == '')or(len(ins_name) > 32)\ or(DishTable().check_by_name(ins_name)): - if(ins_name.strip() == ''): - ins_name = input("\nПустая строка. Повторите ввод! Укажите название удаляемого блюда (0 - отмена): ") - if ins_name == "0": - return "1" - - elif(len(ins_name.strip()) > 32): + if(len(ins_name) > 32): ins_name = input("\nСлишком длинная строка. Повторите ввод!\ - Укажите название удаляемого блюда (0 - отмена): ") - if ins_name == "0": + Укажите название добавляемого блюда (enter - отмена): ").strip() + if ins_name == "": return "1" else: print('\nТакое блюдо уже существует') - ins_name = input("Повторите ввод! Укажите название блюда (0 - отмена): ") - if ins_name == "0": + ins_name = input("Повторите ввод! Укажите название блюда (enter - отмена): ").strip() + if ins_name == "": return "1" ins_time = input(f'\nПроцесс добавления блюда: {ins_name}\ - \nВведите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ') - while(ins_time==0)or(add_func.validate_time_format(ins_time)==False): - if ins_time == "0": + \nВведите время приготовления в формате 10 minutes/1 hour 5 minutes (enter - для отмены): ').strip() + if(ins_time==''): + return "1" + while(add_func.validate_time_format(ins_time)==False): + ins_time = input('Время введено в неверном формате. Повторите попытку.\n\ +Введите время приготовления в формате 10 minutes/1 hour 5 minutes (enter - для отмены): ').strip() + if(ins_time==''): return "1" - else: - ins_time = input('Время введено в неверном формате. Повторите попытку.\n\ -Введите время приготовления в формате 10 minutes/1 hour 5 minutes (1 - для отмены): ') - + ins_manual = input(f'\nПроцесс добавления блюда: {ins_name}\ - \nВведите краткую инструкцию приготовления блюда (1 - для отмены): ') - if ins_manual == "0": + \nВведите краткую инструкцию приготовления блюда (enter - для отмены): ').strip() + if ins_manual == "": return "1" - insert = [cath_id, ins_time, ins_name, ins_manual] - self.insert_one(insert) - def update_dish(self, dish): + def update_dish(self, obj: dict): print('После изменения выберите другой пункт для изменения или введите 0 для выхода') - n = dish x = -10000 - obj_id = self.id_by_name(dish)[1] + dish_id = obj.get("id") + dish_name = obj.get("dish_name") + tmp = dish_name while True: - x = add_func.validate_input(f'\nВыбранное блюдо: {n}\nЧто вы хотите изменить в рецепте?\n\ + x = add_func.validate_input(f'\nВыбранное блюдо: {tmp}\nЧто вы хотите изменить в рецепте?\n\ 1 - Название\n2 - Время приготовления\n3 - Инструкция\n0 - для отмены\n=> ', 0, 3) if(x==1): - new_name = input(f"Текущее название {n}.\nВведите новое название (0 - для отмены): ") + new_name = input(f"Текущее название {tmp}.\nВведите новое название (enter - для отмены): ") while (new_name.strip() == '')or(len(new_name.strip()) > 32)\ - or(DishTable().check_by_name(new_name))or(x=='0'): - - if(new_name.strip() == ''): - new_name = input("Пустая строка. Повторите ввод! Укажите название блюда (0 - отмена): ") - if new_name == "0": - break - - elif(DishTable().check_by_name(new_name)): + or(DishTable().check_by_name(new_name)): + if(DishTable().check_by_name(new_name)): print('Такое блюдо уже существует') - new_name = input("Повторите ввод! Укажите название блюда (0 - отмена): ") - if new_name == "0": - break + new_name = input("Повторите ввод! Укажите название блюда (enter - отмена): ") elif(len(new_name.strip()) > 32): new_name = input("Слишком длинная строка. Повторите ввод!\ - Укажите название блюда (0 - отмена): ") - if new_name == "0": - break + Укажите название блюда (enter - отмена): ") else: break - # dish = new_name - n = new_name + tmp = new_name new_name = "'" + new_name + "'" - self.update('dish_name', new_name, obj_id) + self.update('dish_name', new_name, dish_id) elif(x==2): - new_time = input(f'Введите время приготовления в формате 10 minutes/1 hour 5 minutes (0 - для отмены): ') - while(new_time==0)or(add_func.validate_time_format(new_time)==False): - if new_time == "0": + new_time = input(f'Введите время приготовления в формате 10 minutes/1 hour 5 minutes (enter - для отмены): ') + while(new_time=='')or(add_func.validate_time_format(new_time)==False): + if new_time == '': break else: - new_time = input('Введите время приготовления в формате 10 minutes/1 hour 5 minutes (0 - для отмены): ') + new_time = input('Введите время приготовления в формате 10 minutes/1 hour 5 minutes\ + (enter - для отмены): ') new_time = "'" + new_time + "'" - self.update('cook_time', new_time, obj_id) + self.update('cook_time', new_time, dish_id) elif(x==3): - new_manual = input(f'Введите краткую инструкцию приготовления блюда (0 - для отмены): ') - if new_manual == "0": + new_manual = input(f'Введите краткую инструкцию приготовления блюда (enter - для отмены): ') + if new_manual == "": break new_manual = "'" + new_manual + "'" - self.update('manual', new_manual, obj_id) + self.update('manual', new_manual, dish_id) elif(x==-1): break @@ -274,4 +305,5 @@ class DishTable(DbTable): self.insert_one([1, "1 hour 20 minutes", "Паста с песто из авокадо", "Паста с соусом из авокадо, базилика и сыра."]) self.insert_one([1, "30 minutes", "Яичница с авокадо", "Яичница с добавлением авокадо и других ингредиентов."]) self.insert_one([1, "55 minutes", "Веганский пад-тай", "Пад-тай с использованием растительных ингредиентов."]) - return \ No newline at end of file + return + \ No newline at end of file