213 lines
5.8 KiB
Python
213 lines
5.8 KiB
Python
import datetime
|
||
|
||
# Функция для загрузки данных из файла
|
||
def load_sales(filename):
|
||
sales = []
|
||
try:
|
||
file = open(filename, 'r', encoding='utf-8')
|
||
for line in file:
|
||
line = line.strip()
|
||
if line:
|
||
parts = line.split('|')
|
||
if len(parts) == 5:
|
||
sale = {
|
||
"title": parts[0],
|
||
"genre": parts[1],
|
||
"price": int(parts[2]),
|
||
"quantity": int(parts[3]),
|
||
"date": parts[4]
|
||
}
|
||
sales.append(sale)
|
||
file.close()
|
||
except:
|
||
return []
|
||
return sales
|
||
|
||
|
||
# Считаем сколько денег заработали
|
||
def total_revenue(sales):
|
||
total = 0
|
||
for sale in sales:
|
||
money = sale["price"] * sale["quantity"]
|
||
total = total + money
|
||
return total
|
||
|
||
|
||
# Считаем сколько всего книг продали
|
||
def total_books_sold(sales):
|
||
total = 0
|
||
for sale in sales:
|
||
total = total + sale["quantity"]
|
||
return total
|
||
|
||
|
||
# Средняя цена книги
|
||
def avg_price(sales):
|
||
if len(sales) == 0:
|
||
return 0
|
||
summa = 0
|
||
for sale in sales:
|
||
summa = summa + sale["price"]
|
||
return summa / len(sales)
|
||
|
||
|
||
# Сколько книг продали по каждому жанру
|
||
def genre_stats(sales):
|
||
stats = {}
|
||
for sale in sales:
|
||
genre = sale["genre"]
|
||
kolvo = sale["quantity"]
|
||
if genre in stats:
|
||
stats[genre] = stats[genre] + kolvo
|
||
else:
|
||
stats[genre] = kolvo
|
||
return stats
|
||
|
||
|
||
# Какая книга продалась лучше всех
|
||
def top_book(sales):
|
||
if len(sales) == 0:
|
||
return "Нет данных"
|
||
|
||
knigi = {}
|
||
for sale in sales:
|
||
name = sale["title"]
|
||
kolvo = sale["quantity"]
|
||
if name in knigi:
|
||
knigi[name] = knigi[name] + kolvo
|
||
else:
|
||
knigi[name] = kolvo
|
||
|
||
luchshaya = ""
|
||
max_kolvo = -1
|
||
for name in knigi:
|
||
if knigi[name] > max_kolvo:
|
||
max_kolvo = knigi[name]
|
||
luchshaya = name
|
||
return luchshaya
|
||
|
||
|
||
# Какая книга продалась хуже всех
|
||
def worst_book(sales):
|
||
if len(sales) == 0:
|
||
return "Нет данных"
|
||
|
||
knigi = {}
|
||
for sale in sales:
|
||
name = sale["title"]
|
||
kolvo = sale["quantity"]
|
||
if name in knigi:
|
||
knigi[name] = knigi[name] + kolvo
|
||
else:
|
||
knigi[name] = kolvo
|
||
|
||
hudshaya = ""
|
||
min_kolvo = 999999999
|
||
for name in knigi:
|
||
if knigi[name] < min_kolvo:
|
||
min_kolvo = knigi[name]
|
||
hudshaya = name
|
||
return hudshaya
|
||
|
||
|
||
# Ищем книги по слову в названии
|
||
def find_by_title(sales, keyword):
|
||
result = []
|
||
keyword = keyword.lower()
|
||
for sale in sales:
|
||
title = sale["title"]
|
||
if keyword in title.lower():
|
||
if title not in result:
|
||
result.append(title)
|
||
return result
|
||
|
||
|
||
# Считаем выручку по месяцам
|
||
def sales_by_month(sales):
|
||
months = {}
|
||
for sale in sales:
|
||
month = sale["date"][:7]
|
||
money = sale["price"] * sale["quantity"]
|
||
if month in months:
|
||
months[month] = months[month] + money
|
||
else:
|
||
months[month] = money
|
||
return months
|
||
|
||
|
||
# Ищем дорогие книги
|
||
def expensive_books(sales, min_price):
|
||
result = []
|
||
for sale in sales:
|
||
if sale["price"] > min_price:
|
||
if sale["title"] not in result:
|
||
result.append(sale["title"])
|
||
return result
|
||
|
||
|
||
# Главная функция
|
||
def main():
|
||
# Текущая дата
|
||
now = datetime.datetime.now()
|
||
print("=" * 50)
|
||
print("ОТЧЕТ ПО ПРОДАЖАМ КНИЖНОГО МАГАЗИНА")
|
||
print("Дата: " + str(now.day) + "." + str(now.month) + "." + str(now.year))
|
||
print("=" * 50)
|
||
|
||
# Загружаем данные
|
||
sales = load_sales("books.txt")
|
||
|
||
if sales == []:
|
||
print("Ошибка: файл books.txt не найден")
|
||
return
|
||
|
||
# Выводим информацию
|
||
print("\n1. ОБЩАЯ ВЫРУЧКА")
|
||
print(" " + str(total_revenue(sales)) + " рублей")
|
||
|
||
print("\n2. ВСЕГО ПРОДАНО КНИГ")
|
||
print(" " + str(total_books_sold(sales)) + " штук")
|
||
|
||
print("\n3. СРЕДНЯЯ ЦЕНА КНИГИ")
|
||
print(" " + str(round(avg_price(sales), 2)) + " рублей")
|
||
|
||
print("\n4. СТАТИСТИКА ПО ЖАНРАМ")
|
||
stats = genre_stats(sales)
|
||
for genre in stats:
|
||
print(" " + genre + ": " + str(stats[genre]) + " шт")
|
||
|
||
print("\n5. САМАЯ ПРОДАВАЕМАЯ КНИГА")
|
||
print(" " + top_book(sales))
|
||
|
||
print("\n6. САМАЯ НЕПРОДАВАЕМАЯ КНИГА")
|
||
print(" " + worst_book(sales))
|
||
|
||
print("\n7. КНИГИ СО СЛОВОМ 'PYTHON'")
|
||
python_books = find_by_title(sales, "Python")
|
||
if python_books:
|
||
for book in python_books:
|
||
print(" " + book)
|
||
else:
|
||
print(" Не найдено")
|
||
|
||
print("\n8. ВЫРУЧКА ПО МЕСЯЦАМ")
|
||
months = sales_by_month(sales)
|
||
for month in sorted(months.keys()):
|
||
print(" " + month + ": " + str(months[month]) + " рублей")
|
||
|
||
print("\n9. КНИГИ ДОРОЖЕ 1000 РУБЛЕЙ")
|
||
expensive = expensive_books(sales, 1000)
|
||
if expensive:
|
||
for book in expensive:
|
||
print(" " + book)
|
||
else:
|
||
print(" Не найдено")
|
||
|
||
print("\n" + "=" * 50)
|
||
print("Отчет сформирован")
|
||
|
||
|
||
# Запускаем программу
|
||
if __name__ == "__main__":
|
||
main()
|