Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Курсовая_2этап.docx
Скачиваний:
6
Добавлен:
12.04.2025
Размер:
1.36 Mб
Скачать

10 Проектирование пользовательского интерфейса

Для разработки пользовательского интерфейса использовался модуль Tkinter. Tkinter — это кроссплатформенный графический интерфейс Python, позволяющий работать с библиотекой Tk. Он содержит элементы графического интерфейса пользователя (GUI — Graphical User Interface), с помощью которых можно создавать различные приложения.

При разработке интерфейса использовался функциональный подход, где каждая функция (помимо функций выполняющих операции с базой данных и других вспомогательных функций) отвечает за каждую отдельную страницу интерфейса. Каждая функция, отвечающая за страницу интерфейса, принимает на вход три объекта:

  • app - это объект из модуля tkinter, который представляет графическое окно приложения.

  • cursor – это «курсор» базы данных. Он используется для выполнения SQL-запросов к базе данных.

  • conn – это объект из модуля MySQL, разработанный специально для связи языка программирования Python и СУБД MySQL. Он используется для установления соединения с базой данных.

Полный код генерации графического интерфейса приложения представлен в приложении В.

В листинге 29 представлен код подключения к базе данных и генерации главной страницы приложения. Главная страница генерируется путем вызова функции create_admin_interface.

Листинг 29 – Подключение к базе данных и создание основных объектов, необходимых для работы приложения

def main():

# Подключение к базе данных

conn = mysql.connector.connect(

host="localhost",

port = "3306",

user="root",

password="8&5jypSfzFyDhL",

database = 'hobbiton_bank'

)

# Создание курсора для выполнения SQL-запросов

cursor = conn.cursor(buffered=True)

app = tk.Tk()

# Установка фона окна черным

app.configure(bg='black')

app.protocol("WM_DELETE_WINDOW", lambda: on_closing(app, conn))

# Установка размеров окна на 1000*1000

app.geometry("1000x1000")

app.title("Служба безопасности банка Хоббитон")

create_admin_interface(app, cursor, conn)

app.mainloop()

main()

Рисунок 35 – Главная страница пользовательского интерфейса

После запуска программы у сотрудника банка есть возможность открыть список запросов к базе данных, список графиков, которые можно построить, а также «перейти на день вперед».

Кнопка «перейти на день вперед» отвечает за несколько функций (представлены в порядке выполнения):

  • Получение следующий даты (дата, следующая за датой последней транзакции в базе данных).

  • Добавление в базу данных случайное количество новых транзакций (от 1 до 1000).

  • Обновление балансов и лимитов счетов.

При нажатии на данную кнопку вызывается функция skip_day. Код функции представлен в листинге 30.

Листинг 30 – Код функции skip_day

def skip_day(app, conn, cursor, start_date):

start_date = datetime.strptime(start_date, '%d.%m.%Y') + timedelta(days=1)

fill_transactions(start_date, cursor, conn)

update_balances(start_date, cursor, conn)

create_admin_interface(app, cursor, conn)

Функция fill_transactions() отвечает за добавление новых транзакций в базу данных. Данная функция принимает на вход объекты cursor и conn для работы с базой данных и объект start_date – дату, на которую будут генерироваться новые транзакции. Код функции представлен в приложении Б.

Функция update_balances() отвечает за обновление балансов счетов основе новых транзакций. Также, данная функция отвечает за сброс дневных и месячных лимитов. Данная функция принимает на вход объекты conn и cursor для работы с базой данных и объект today_date – дату новых транзакций. Код функции представлен в листинге 31.

Функция create_admin_interface отвечает за повторную генерацию главной страницы приложения для корректного отображения текущей даты.

Листинг 31 – Код функции update_balances ()

def update_balances(today_date, cursor, conn):

cursor.execute('SELECT * FROM transactions WHERE date_time > %s', (today_date,))

transactions = cursor.fetchall()

for transaction in transactions:

amount = transaction[1]

sender_account = transaction[3]

recipient_account = transaction[4]

# Обновление баланса отправителя

cursor.execute('SELECT * FROM bank_accounts WHERE id = %s', (sender_account,))

sender_account_info = cursor.fetchone()

sender_balance = sender_account_info[2]

# Если транзакция прошла через карту

if transaction[5] is not None:

cursor.execute('SELECT * FROM cards WHERE id = %s' % transaction[5])

card_info = cursor.fetchone()

if card_info[5] != None and (card_info[5] - amount < 0 or card_info[6] - amount < 0):

continue

cursor.execute('UPDATE bank_accounts SET balance = %s WHERE id = %s' % (sender_balance - amount, sender_account))

# Обновление баланса получателя

cursor.execute('SELECT * FROM bank_accounts WHERE id = %s' % recipient_account)

recipient_account_info = cursor.fetchone()

recipient_balance = recipient_account_info[2]

cursor.execute('UPDATE bank_accounts SET balance = %s WHERE id = %s' % (recipient_balance + amount, recipient_account))

# Подтверждение изменений

conn.commit()

cursor.execute('SELECT * FROM cards WHERE daily_limit is not NULL')

cards = cursor.fetchall()

cursor.execute('SELECT MAX(date_time) FROM transactions')

last_month = cursor.fetchone()[0].month

# Обновление остатков дневных и месячных лимитов

for card in cards:

cursor.execute('UPDATE cards SET daily_limit_left = %s WHERE id = %s', (card[3], card[0]))

if last_month < today_date.month:

cursor.execute('UPDATE cards SET monthly_limit_left = %s WHERE id = %s', (card[4], card[0]))

При нажатии на кнопку «Запросы» вызывается функция create_requests_interface, которая создает интерфейс выбора запроса к базе данных. Интерфейс выбора запроса представлен на рисунке 36.

Рисунок 36 – Интерфейс выбора запроса

При нажатии кнопки одного из запросов вызывается соответствующая функция, отвечающая за генерацию интерфейса для запроса. Каждый интерфейс запроса состоит из:

  • Названия запроса в верхней части экрана

  • Даты последней транзакции в базе данных

  • Таблицы для вывода результатов запроса

  • Кнопки «Выполнить запрос» для выполнения запроса и отображения результата в таблице

  • Кнопки «Очистить таблицу» для очистки результатов запроса.

  • Полей для ввода параметров запроса, если они необходимы

Кнопка «Выполнить запрос» вызывает одну из 10 соответсвующих функций, выполняющих запрос к базе данных. Код функций для выполнения запросов представлен в приложении Г.

На рисунках 37-46 представлены интерфейсы для каждого запроса.

Рисунок 37 – Интерфейс выполнения запроса на максимальный баланс счета

Рисунок 38 – Интерфейс запроса на вывод счета с максимальным количеством карточек

Рисунок 39 – Интерфейс запроса на поиск «двойной покупки»

Рисунок 40 – Интерфейс запроса на поиск поломанного банкомата

Рисунок 41- Интерфейс запроса на поиск операций, выходящих за лимиты карты

Рисунок 42 – Интерфейс запроса на поиск карты с максимальным количеством операций

Рисунок 43 – Интерфейс запроса на поиск операций, проведенных в нерабочее время предприятий

Рисунок 44 – Интерфейс запроса на поиск интернет-магазинов с наибольшим количеством заказов

Рисунок 45 – Интерфейс запроса на вывод статистики по продажам предприятия

Рисунок 46 – Интерфейс запроса на вывод статистики по покупкам гражданина

Если запрос выводит исключение, оно открывается в отдельном окне ошибки. Пример окна ошибки представлен на рисунке 47.

Рисунок 47 – Окно ошибки

При нажатии на кнопку «Графики» на главной странице приложения вызывается функция create_graphs_interface, которая отвечает за вывод интерфейса выбора графика для построения. Интерфейс выбора графика представлен на рисунке 48.

Рисунок 48 – Интерфейс выбора графика

При нажатии одной из кнопок с названием графика вызывается соответствующая функция, которая отвечает за построение графика и вывод его на экран в интерфейсе приложения. Интерфейсы построения графиков представлены на рисунках 49, 50, 51.

Рисунок 49 – Интерфейс графика зависимости суммы транзакций от даты

Рисунок 50 – Интерфейс гистограммы суммы продаж по предприятиям

Рисунок 51 – Интерфейс графика зависимости количества транзакций в зависимости от времени

Соседние файлы в папке курсовая