From 13427096d58c3243b1c551f97b1e4c880ef39e0b Mon Sep 17 00:00:00 2001 From: user_3d Date: Thu, 6 Nov 2025 11:26:15 +0500 Subject: [PATCH] 61120256 --- main.py | 59 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/main.py b/main.py index 6251065..0a5ef2a 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,20 @@ import sqlite3 +# Импорт библиотеки SQLite3 import pandas as pd +# Подключение библиотеки Pandas import os +# Подключение модуля операционной системы Python import sys +# Подключение модуля sys + import openpyxl +# Подключаем библиотеку OpenPyXL #alinaa +# Функция создает структуру таблиц в базе данных def create_tables(db_connection): - """Создает все необходимые таблицы в базе данных""" + # Создание нужных таблиц в базе данных cursor = db_connection.cursor() cursor.executescript(''' @@ -64,11 +71,11 @@ def create_tables(db_connection): ''') db_connection.commit() - print("✅ Таблицы успешно созданы") + print("✅ Таблицы успешно созданы") #Выводит надпись "Таблицы успешно созданы" def calculate_discount(total_quantity): - """Рассчитывает скидку на основе общего количества проданной продукции""" + # Функция рассчитывает скидку на основе объема продаж if total_quantity >= 300000: return 15, '15% (более 300000 ед.)' elif total_quantity >= 50000: @@ -80,10 +87,11 @@ def calculate_discount(total_quantity): def get_partners(db_path='partners.db', sort_by='rating', ascending=False): - """Получает данные о партнерах с возможностью сортировки""" + # Функция получает данные о партнерах из базы данных + # Ниже представлен SQL-запрос для выборки данных о партнерах try: conn = sqlite3.connect(db_path) - query = """ + query = """ SELECT pt.type_name AS "Тип партнера", p.name AS "Наименование партнера", @@ -101,7 +109,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False): GROUP BY p.id """ - # Добавляем сортировку + # Применяем нужную сортировку и лимитируем количество записей if sort_by == 'discount': query += " ORDER BY total_quantity" elif sort_by == 'rating': @@ -118,7 +126,7 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False): df = pd.read_sql_query(query, conn) conn.close() - # Добавляем колонки со скидкой + # Добавляем дополнительные колонки со скидкой if not df.empty: df['Скидка'] = df['total_quantity'].apply(lambda x: calculate_discount(x)[0]) df['Текст_скидки'] = df['total_quantity'].apply(lambda x: calculate_discount(x)[1]) @@ -134,7 +142,8 @@ def get_partners(db_path='partners.db', sort_by='rating', ascending=False): def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'): - """Получает историю реализации продукции с разными вариантами сортировки""" + # Функция получает историю продаж + # Ниже представлен SQL-запрос для выборки истории продаж try: conn = sqlite3.connect(db_path) query = """ @@ -153,7 +162,7 @@ def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'): JOIN ProductType pt ON pr.product_type_id = pt.id """ - # Добавляем сортировку по дате + # Добавление сортировки по дате if sort_by == 'date_desc': query += " ORDER BY s.sale_date DESC, s.created_at DESC" elif sort_by == 'date_asc': @@ -175,16 +184,18 @@ def get_sales_history(db_path='partners.db', limit=50, sort_by='date_desc'): return None 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['Директор']}" @@ -217,11 +228,11 @@ def print_partner_cards(partners_df): def print_sales_cards(sales_df): - """Выводит карточки истории реализации в виде таблицы""" + # Функция выводит историю продаж в табличном представлении if sales_df is None or sales_df.empty: print("📭 Нет данных о продажах") return - + # Рамка таблицы print("╔" + "═" * 147 + "╗") print(f"║ {'ИСТОРИЯ РЕАЛИЗАЦИИ ПРОДУКЦИИ':^145} ║") print("╠" + "═" * 147 + "╣") @@ -233,7 +244,7 @@ def print_sales_cards(sales_df): )) print("╠" + "═" * 147 + "╣") - # Данные таблицы + # Вывод данных таблицы for index, row in sales_df.iterrows(): date = str(row['Дата продажи'])[:10] partner = row['Партнер'] @@ -244,15 +255,16 @@ def print_sales_cards(sales_df): total = f"{row['Общая сумма']:,.2f}" print(f"║ {date} ║ {partner.ljust(16)} ║ {product.ljust(57)} ║ {article.ljust(8)} ║ {quantity.ljust(8)} ║ {price.ljust(10)} ║ {total.ljust(18)} ║") - + # Закрывающая рамка таблицы print("╚" + "═" * 147 + "╝") - # Итоги + # Итоговая статистика total_quantity = sales_df['Количество'].sum() total_amount = sales_df['Общая сумма'].sum() print(f"📊 ИТОГО: {len(sales_df)} продаж, {total_quantity:,} единиц, общая сумма: {total_amount:,.2f} руб.") + +# Простая функция выбора пункта меню def simple_choice(options): - """Упрощенная функция выбора""" print("\n" + "=" * 50) print("ВЫБЕРИТЕ ОПЦИЮ:") print("=" * 50) @@ -273,9 +285,8 @@ def simple_choice(options): print("\n👋 Программа прервана пользователем.") sys.exit(0) - +# Проверяет наличие данных в базе def check_database(): - """Проверяет загруженные данные в базе""" conn = sqlite3.connect('partners.db') try: cursor = conn.cursor() @@ -288,9 +299,8 @@ def check_database(): finally: conn.close() - +# Загружает данные из Excel-файлов в базу данных def load_data_from_files(): - """Загружает данные из Excel файлов в базу данных""" conn = sqlite3.connect('partners.db') cursor = conn.cursor() @@ -385,6 +395,7 @@ def load_data_from_files(): conn.commit() print(f"✅ Данные успешно загружены! Загружено {loaded_sales} продаж") + # Вывод "Данные успешно загружены! Загружено {loaded_sales} продаж check_database() except Exception as e: @@ -393,9 +404,8 @@ def load_data_from_files(): finally: conn.close() - + # Основное меню программы def display_menu(): - """Главное меню программы""" menu_options = [ 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)', 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)', @@ -441,6 +451,7 @@ def display_menu(): print("\n👋 До свидания!") break +# Главная точка запуска программы if __name__ == "__main__": display_menu() \ No newline at end of file