diff --git a/main.py b/main.py index 71f993c..1a6c0aa 100644 --- a/main.py +++ b/main.py @@ -1,17 +1,24 @@ import sqlite3 +# Импортируем библиотеку SQLite3 для взаимодействия с базами данных SQLite import pandas as pd +# Подключаем библиотеку Pandas для обработки и анализа данных import os +# Подключаем модуль операционной системы Python для работы с файлами и путями import sys +# Подключаем модуль sys для взаимодействия с интерпретатором Python и системой import openpyxl +# Подключаем библиотеку OpenPyXL для чтения и записи файлов Excel формата .xlsx +#061155 def create_tables(db_connection): - """Создает все необходимые таблицы в базе данных""" + # Функция создает структуру таблиц в базе данных cursor = db_connection.cursor() + # Создание таблиц и индексов cursor.executescript(''' CREATE TABLE IF NOT EXISTS PartnerType ( id INTEGER PRIMARY KEY AUTOINCREMENT, @@ -64,13 +71,13 @@ def create_tables(db_connection): CREATE INDEX IF NOT EXISTS idx_sale_partner ON Sale(partner_id); CREATE INDEX IF NOT EXISTS idx_sale_date ON Sale(sale_date); ''') - + # Создание таблиц и индексов db_connection.commit() print("✅ Таблицы успешно созданы") def calculate_discount(total_quantity): - """Рассчитывает скидку на основе общего количества проданной продукции""" + # Функция рассчитывает скидку на основе объема продаж if total_quantity >= 300000: return 15, '15% (более 300000 ед.)' elif total_quantity >= 50000: @@ -82,9 +89,10 @@ def calculate_discount(total_quantity): 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 "Тип партнера", @@ -103,7 +111,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': @@ -136,9 +144,10 @@ 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'): - """Получает историю реализации продукции с разными вариантами сортировки""" + # Функция получает историю продаж try: conn = sqlite3.connect(db_path) + # Здесь прописан SQL-запрос для выборки истории продаж query = """ SELECT s.sale_date AS "Дата продажи", @@ -155,7 +164,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': @@ -177,11 +186,11 @@ 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} ║") @@ -202,6 +211,7 @@ def print_partner_cards(partners_df): address = address[:57] + "..." address_text = f"Адрес: {address}" + # Информация о партнере print(f"║ {type_text:<67} ║") print(f"║ {name_text:<67} ║") print(f"║ {director_text:<67} ║") @@ -219,11 +229,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 + "╣") @@ -235,7 +245,7 @@ def print_sales_cards(sales_df): )) print("╠" + "═" * 147 + "╣") - # Данные таблицы + # Вывод данных о продажах for index, row in sales_df.iterrows(): date = str(row['Дата продажи'])[:10] partner = row['Партнер'] @@ -248,13 +258,14 @@ def print_sales_cards(sales_df): 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) @@ -277,7 +288,7 @@ def simple_choice(options): def check_database(): - """Проверяет загруженные данные в базе""" + # Проверяет наличие данных в базе conn = sqlite3.connect('partners.db') try: cursor = conn.cursor() @@ -292,7 +303,7 @@ def check_database(): def load_data_from_files(): - """Загружает данные из Excel файлов в базу данных""" + # Загружает данные из Excel-файлов в базу данных conn = sqlite3.connect('partners.db') cursor = conn.cursor() @@ -397,7 +408,7 @@ def load_data_from_files(): def display_menu(): - """Главное меню программы""" + # Основное меню программы menu_options = [ 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по рейтингу)', 'КАРТОЧКИ ПАРТНЕРОВ (сортировка по скидкам)', @@ -443,6 +454,6 @@ def display_menu(): print("\n👋 До свидания!") break - +# Главная точка запуска программы if __name__ == "__main__": display_menu() diff --git a/read.txt b/read.txt index 55e5e68..de15ea5 100644 --- a/read.txt +++ b/read.txt @@ -30,8 +30,7 @@ def create_tables(db_connection): # Создание таблиц и индексов cursor.executescript(''' ... - ''') # Здесь прописаны запросы на создание таблиц и индексов - + ''') # Создание таблиц и индексов db_connection.commit() print("✅ Таблицы успешно созданы")