From c6bd8cc49481712dd8640144c05dd2fe1b8967bb Mon Sep 17 00:00:00 2001 From: user_3d Date: Thu, 16 Oct 2025 12:40:36 +0500 Subject: [PATCH] 16102025 --- main.py | 198 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 191 insertions(+), 7 deletions(-) diff --git a/main.py b/main.py index b4593d6..ef09f4a 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,16 @@ +import os import sqlite3 -import datetime + + import pandas as pd -#sos - - +import sys +import textwrap +if os.path.exists('partners.db'): + os.remove('partners.db') + print(f"База данных {'partners.db'} удалена") +else: + print(f"База данных {'partners.db'} не найдена, создаем новую") conn = sqlite3.connect('partners.db') cursor = conn.cursor() @@ -100,7 +106,6 @@ products = [ (1, 'Ламинат Дуб серый 32 класс 8 мм с фаской', '7028748', 3890.41), (4, 'Пробковое напольное клеевое покрытие 32 класс 4 мм', '5012543', 5450.59) ] - cursor.executemany(''' INSERT OR IGNORE INTO Product (product_type_id, product_name, article, min_partner_price) VALUES (?, ?, ?, ?) @@ -140,6 +145,7 @@ def get_ids(product_name, partner_name): return product_id, partner_id, sale_price + for sale in sales_data: product_name, partner_name, quantity, sale_date = sale try: @@ -150,8 +156,186 @@ for sale in sales_data: ''', (product_id, partner_id, quantity, sale_date, sale_price)) except Exception as e: print(f"Ошибка при добавлении продажи: {sale}, ошибка: {e}") - conn.commit() -conn.close() +def print_partners(partners_df): + if partners_df is None or partners_df.empty: + print("Нет данных о партнерах") + return + print("=" * 120) + print("{:<7} {:<20} {:<35} {:<20} {:<10}".format( + "Тип", "Наименование", "Директор", "Телефон", "Рейтинг" + )) + print("=" * 120) + + for _, row in partners_df.iterrows(): + print("{:<7} {:<20} {:<35} {:<20} {:<10}".format( + row['Тип партнера'][:7], + row['Наименование партнера'][:20], + row['Директор'][:35], + row['Телефон'][:20], + row['Рейтинг'] + )) + print("=" * 120) + print(f"Всего партнеров: {len(partners_df)}") + + +# print("╔" + "═" * 69 + "╗") +# print(f"║ {'КАРТОЧКА ПАРТНЕРА':^67} ║") +# print("╠" + "═" * 69 + "╣") +def print_partner_cards(partners_df): + """Функция для вывода партнеров в виде карточек с выравниваем""" + if partners_df is None or partners_df.empty: + print("Нет данных о партнерах") + return + + for index, row in partners_df.iterrows(): + print("╔" + "=" * 69 + "╗") + print(f"║ {'КАРТОЧКА ПАРТНЕРА':^67} ║") + print("╠" + "=" * 69 + "╣") + + type_text = f"Тип: {row['Тип партнера']}" + name_text = f"Наименование: {row['Наименование партнера']}" + director_text = f"Директор: {row['Директор']}" + rating_text = f"Рейтинг: {row['Рейтинг']}" + email_text = f"Контакты: {row['Электронная почта']}" + phone_text = f"Телефон: {row['Телефон']}" + inn_text = f"ИНН: {row['ИНН']}" + + address_text = row['Юридический адрес'] + # if len(address) > 60: + # address = address[:67] + "..." + address_text = f"Адрес: {address_text}" + + print(f"║ {type_text:<67} ║") + print(f"║ {name_text:<67} ║") + print(f"║ {director_text:<67} ║") + print(f"║ {rating_text:<67} ║") + print(f"║ {'':<67} ║") + print(f"║ {email_text:<67} ║") + print(f"║ {phone_text:<67} ║") + print(f"║ {'':<67} ║") + print(f"║ {inn_text:<67} ║") + print(f"║ {address_text[:63]:<63} ... ║") + + print("╚" + "═" * 69 + "╝") + print() + + +def get_partners(db_path='partners.db', sort_by='rating', ascending=False): + try: + # Подключаемся к базе данных + conn = sqlite3.connect(db_path) + + # SQL запрос для получения данных о партнерах + query = """ + SELECT + pt.type_name AS "Тип партнера", + p.name AS "Наименование партнера", + p.director AS "Директор", + p.email AS "Электронная почта", + p.phone AS "Телефон", + p.legal_address AS "Юридический адрес", + p.inn AS "ИНН", + p.rating AS "Рейтинг", + p.created_at AS "Дата создания" + FROM Partner p + JOIN PartnerType pt ON p.partner_type_id = pt.id + """ + + # Добавляем сортировку + if sort_by == 'rating': + query += " ORDER BY p.rating" + elif sort_by == 'name': + query += " ORDER BY p.name" + elif sort_by == 'type': + query += " ORDER BY pt.type_name, p.name" + else: + query += " ORDER BY p.rating" + + query += " DESC" if not ascending else " ASC" + + # Выполняем запрос и получаем данные в DataFrame + df = pd.read_sql_query(query, conn) + + # Закрываем соединение + conn.close() + + return df + except sqlite3.Error as e: + print(f"Ошибка базы данных: {e}") + return None + except Exception as e: + print(f"Общая ошибка: {e}") + return None + +def display_menu(): + """Функция для отображения главного меню""" + menu_options = [ + 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)', + 'ВЫХОД' + ] + + while True: + choice = simple_choice(menu_options) + + if choice == 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)': + print("\n КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)") + print("=" * 70) + partners = get_partners(sort_by='rating', ascending=False) + print_partner_cards(partners) + + elif choice == 'ВЫХОД': + print("\nДо свидания!") + + break + +def simple_choice(options): + print("\n" + "=" * 50) + print("ВЫБЕРИТЕ ОПЦИЮ:") + print("=" * 50) + for i, option in enumerate(options, 1): + print(f"{i}. {option}") + + while True: + try: + choice = input(f"\nВведите номер (1-{len(options)}): ").strip() + if choice.isdigit(): + choice_num = int(choice) + if 1 <= choice_num <= len(options): + return options[choice_num -1] + print(f"Пожалуйста, введите число от 1 до 10 {len(options)}") + except (ValueError, EOFError): + print("Неверный ввод. Попробуйте еще раз.") + except KeyboardInterrupt: + print("\nПрограмма прервана пользователем.") + sys.exit(0) + +if __name__ == "__main__": + print("Данные успешно добавлены в базу данных!") + print("\nКоличество записей в таблицах:") + tables = ['PartnerType', 'Partner', 'ProductType', 'Product', 'Sale'] + for table in tables: + cursor.execute(f'SELECT COUNT(*) FROM {table}') + count = cursor.fetchone()[0] + print(f"{table}: {count} записей") + conn.close() + display_menu() + #print("1. КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)") + #print("=" * 70) + #partners = get_partners(sort_by='rating', ascending=False) + #print_partner_cards(partners) + +#commit №3 + +# if __name__ == "main": +# +# +#16102025 + + # + # print("\n3. Партнеры со статистикой продаж:") + # partners_stats = get_partners() + # if partners_stats is not None: + # print(partners_stats.to_string(index=False))