Конструктор уроків
1
Тобі потрібно створити програму «Домашня бухгалтерія», яка дозволяє вести облік особистих доходів та витрат.

# ==========================================================
# ДОМАШНЯ БУХГАЛТЕРІЯ НА TKINTER
# ==========================================================
# ==========================================================
# ІМПОРТ БІБЛІОТЕК
# ==========================================================
# Імпортуємо всі основні віджети Tkinter:
# Tk, Label, Button, Entry, Listbox та інші.
from tkinter import *
# Імпортуємо Combobox (випадаючий список).
from tkinter.ttk import Combobox
# Імпортуємо готові вікна повідомлень.
from tkinter import messagebox
# ==========================================================
# СПИСКИ КАТЕГОРІЙ
# ==========================================================
# Категорії доходів.
income_categories = [
"Зарплата",
"Подарунок",
"Підробіток",
"Продаж",
"Інше"
]
# Категорії витрат.
expense_categories = [
"Продукти",
"Паливо",
"Кафе",
"Комунальні",
"Розваги",
"Інше"
]
# ==========================================================
# СПИСОК УСІХ ОПЕРАЦІЙ
# ==========================================================
# Порожній список.
# Тут будуть зберігатися всі записи.
operations = []
# ==========================================================
# ФУНКЦІЯ ОНОВЛЕННЯ КАТЕГОРІЙ
# ==========================================================
def update_categories():
"""
Функція змінює список категорій
залежно від вибраного типу операції.
"""
# Отримуємо вибране значення.
operation_type = type_box.get()
# Якщо обрано Доходи.
if operation_type == "Доходи":
# Завантажуємо список категорій доходів.
category_box["values"] = income_categories
else:
# Інакше завантажуємо категорії витрат.
category_box["values"] = expense_categories
# Встановлюємо перший елемент списку.
category_box.current(0)
# ==========================================================
# ФУНКЦІЯ ПЕРЕРАХУНКУ БАЛАНСУ
# ==========================================================
def update_balance():
"""
Рахує:
- загальні доходи
- загальні витрати
- баланс
"""
# Початкові значення.
income_total = 0
expense_total = 0
# Перебираємо всі операції.
for operation in operations:
# Якщо це дохід.
if operation["type"] == "Доходи":
# Додаємо до доходів.
income_total += operation["amount"]
else:
# Додаємо до витрат.
expense_total += operation["amount"]
# Баланс = доходи - витрати.
balance = income_total - expense_total
# Оновлюємо написи.
income_label.config(
text=f"Доходи: {income_total:.2f} грн"
)
expense_label.config(
text=f"Витрати: {expense_total:.2f} грн"
)
balance_label.config(
text=f"Баланс: {balance:.2f} грн"
)
# ==========================================================
# ФУНКЦІЯ ДОДАВАННЯ ОПЕРАЦІЇ
# ==========================================================
def add_operation():
"""
Додає новий запис.
"""
try:
# Отримуємо суму.
amount = float(
amount_entry.get()
)
# Перевірка.
if amount <= 0:
messagebox.showerror(
"Помилка",
"Сума повинна бути більше нуля"
)
return
# Отримуємо тип операції.
operation_type = type_box.get()
# Отримуємо категорію.
category = category_box.get()
# Створюємо словник.
operation = {
"type": operation_type,
"category": category,
"amount": amount
}
# Додаємо до списку.
operations.append(operation)
# Якщо дохід.
if operation_type == "Доходи":
sign = "+"
else:
sign = "-"
# Додаємо запис до Listbox.
history_list.insert(
END,
f"{sign}{amount:.2f} грн | {category}"
)
# Перераховуємо баланс.
update_balance()
# Очищаємо поле.
amount_entry.delete(0, END)
except:
messagebox.showerror(
"Помилка",
"Введіть число"
)
# ==========================================================
# ФУНКЦІЯ ВИДАЛЕННЯ ЗАПИСУ
# ==========================================================
def delete_operation():
"""
Видаляє вибраний запис.
"""
# Отримуємо вибраний рядок.
selected = history_list.curselection()
# Якщо нічого не вибрано.
if not selected:
messagebox.showwarning(
"Увага",
"Оберіть запис"
)
return
# Отримуємо номер рядка.
index = selected[0]
# Видаляємо із списку.
operations.pop(index)
# Видаляємо з Listbox.
history_list.delete(index)
# Оновлюємо баланс.
update_balance()
# ==========================================================
# ФУНКЦІЯ СТАТИСТИКИ
# ==========================================================
def show_statistics():
"""
Показує статистику по категоріях.
"""
stats = {}
# Перебираємо операції.
for operation in operations:
category = operation["category"]
amount = operation["amount"]
# Якщо категорії ще немає.
if category not in stats:
stats[category] = 0
stats[category] += amount
result = ""
# Формуємо текст.
for category, amount in stats.items():
result += (
f"{category}: "
f"{amount:.2f} грн\n"
)
if result == "":
result = "Немає даних"
messagebox.showinfo(
"Статистика",
result
)
# ==========================================================
# ГОЛОВНЕ ВІКНО
# ==========================================================
# Створюємо головне вікно.
root = Tk()
# Заголовок програми.
root.title("Домашня бухгалтерія")
# Розмір вікна.
root.geometry("650x650")
# Забороняємо зміну розміру.
root.resizable(False, False)
# ==========================================================
# ЗАГОЛОВОК
# ==========================================================
title_label = Label(
root,
text="ДОМАШНЯ БУХГАЛТЕРІЯ",
font=("Arial", 18, "bold")
)
title_label.pack(pady=10)
# ==========================================================
# ТИП ОПЕРАЦІЇ
# ==========================================================
Label(
root,
text="Тип операції:"
).pack()
type_box = Combobox(
root,
values=["Доходи", "Витрати"],
state="readonly"
)
type_box.pack()
type_box.current(0)
type_box.bind(
"<<ComboboxSelected>>",
lambda event: update_categories()
)
# ==========================================================
# КАТЕГОРІЯ
# ==========================================================
Label(
root,
text="Категорія:"
).pack()
category_box = Combobox(
root,
state="readonly"
)
category_box.pack()
# Заповнюємо категорії.
update_categories()
# ==========================================================
# СУМА
# ==========================================================
Label(
root,
text="Сума:"
).pack()
amount_entry = Entry(
root,
width=20,
font=("Arial", 12)
)
amount_entry.pack(pady=5)
# ==========================================================
# КНОПКА ДОДАТИ
# ==========================================================
Button(
root,
text="Додати операцію",
command=add_operation
).pack(pady=10)
# ==========================================================
# ІСТОРІЯ
# ==========================================================
history_list = Listbox(
root,
width=60,
height=15
)
history_list.pack(pady=10)
# ==========================================================
# СТАТИСТИКА
# ==========================================================
income_label = Label(
root,
text="Доходи: 0.00 грн",
font=("Arial", 12)
)
income_label.pack()
expense_label = Label(
root,
text="Витрати: 0.00 грн",
font=("Arial", 12)
)
expense_label.pack()
balance_label = Label(
root,
text="Баланс: 0.00 грн",
font=("Arial", 14, "bold")
)
balance_label.pack(pady=10)
# ==========================================================
# КНОПКИ КЕРУВАННЯ
# ==========================================================
Button(
root,
text="Видалити запис",
command=delete_operation
).pack(pady=5)
Button(
root,
text="Статистика",
command=show_statistics
).pack(pady=5)
# ==========================================================
# ЗАПУСК ПРОГРАМИ
# ==========================================================
# Запускає головний цикл Tkinter.
# Без цього рядка вікно не працюватиме.
root.mainloop()
2
Виправити помилки в файлі домашня бухгалтерія.py та прикріпити виправлений файл.
Рефлексія від 0 учнів
Сподобався:
Так: 0
Ні: 0
Зрозумілий:
Так: 0
Ні: 0
Потрібні роз'яснення:
Ні: 0
Так: 0
Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.