Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итоговый курсовой отчет.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
732 Кб
Скачать
☆
  1. Описание реализации решения

    1. Описание архитектуры программы

В создании программы «Сайт игровых приставок» было выделено 4 основных пункта: создание главного окна программы; проектирование базы данных для программы; объединение БД с программой; вывод созданной программы на экран.

Программа была написана с помощью языка программирования Python, база данных создавалась с помощью СУБД MySQL.

Также при написании программы использовалась технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных» (ORM) [3].

К основным этапам роботы программы можно отнести: получение БД с сайта игровых приставок; обработка БД и вывод ее таблиц в программу; просмотр и внесение изменений пользователем программы.

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

Первый файл программы имеет название Settings. Этот файл отвечает за настройки программы. В нем находятся константы, которые не меняются на протяжении работы программы. Методы, которые содержаться в данном файле можно посмотреть в таблице В.8.

Второй файл программы имеет название Model и содержит в себе классы, методы и блоки обработки информации, которые отвечают за описание базы данных. В нем описаны какие таблицы есть и как они связаны друг с другом. В файле Model имеется 5 классов, которые соответствуют названиям таблиц. Методы и функции, которые содержаться в данных классах можно посмотреть в таблице В.3.

Третий файл программы имеет название Сreate_db. Этот файл отвечает за создание в базе данных таблиц.

Четвертый файл программы имеет название Main, он имеет 4 класса, методы и функции, которые отвечают за всю основную логику программы, а именно за создание интерфейса или за действия, выполняемые программой. Методы и функции, которые содержаться в данных классах можно посмотреть в таблице В.4 – В.7.

Фрагмент кода Б.1 содержит код из файла Settings.

Фрагмент кода Б.2 содержит код из файла Сreate_db, который отвечает за создание в базе данных таблиц.

В фрагменте кода Б.3 представлен листинг программы, который отвечает за описание БД.

Формирование главного окна программы можно просмотреть на фрагменте кода Б.4

Код, который создает сессию работы с БД отображен в фрагменте кода Б.5

Фрагмент кода Б.6 содержит вывод созданной программы на экран.

Поскольку благодаря технологии ORM по коду не встречается описание запросов, они выведены в консоли программы, а также заносятся в отдельный текстовый файл с названием sql-query-log. Этот файл содержит все запросы, которые адресовались к БД. При первом открытии программы файл создается автоматически, в последующие сессии работы программы запросы дописываются в конец файла. Дабы избежать путаницы, рекомендуется самостоятельно очищать файл sql-query-log перед новой работой с программой.

    1. Описание данных

Используемые элементы управления:

  • QPushButton – кнопки переключения между таблицами;

  • QAction – выпадающие подписи кнопок;

  • QTabWidget – отображает список таблиц в виде вкладок;

  • QDialog – отображает диалоговые окна;

  • QLineEdit - текстовый редактор одной строки.

  • QMessageBox – выводит окно сообщения при ошибках [11].

    1. Описание средств реализации

При разработке программы был использован язык программирования Python. Для построения БД была использована система управления базами данных MySQL.

MySQL – это одна из самых популярных и самых распространенных СУБД (система управления базами данных) в интернете. Она не предназначена для работы с большими объемами информации, но ее применение идеально для интернет сайтов, как небольших, так и достаточно крупных [4][5].

Достоинства MySQL:

  • Скорость работы;

  • Доступность;

  • Имеет API, через который быстро взаимодействует с приложением;

  • Имеет встроенный сервер, т.е. можно включить в приложение и не устанавливать сервер отдельно от программы;

  • Таблицы MyISAM одни из быстрых таблиц.

Недостатки MySQL:

  • Наиболее быстрый тип таблиц MyISAM имеет не высокую надёжность, при достижении таблиц размера более 10Gb;

  • Таблицы типа MyISAM не поддерживают транзакции;

  • Не предназначена для работы с большими объемами информации;

  • Поддерживает не все элементы SQL-стандарта [6].

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

  • библиотека PyQt4 - представляет собой инструмент для создания GUI приложений. PyQt представляет собой сочетание языка программирования Python и превосходной библиотеки Qt. PyQt реализована в виде набора модулей Python. Он насчитывает более 300 классов, и почти 6000 функций и методов. Он представляет собой платформо-независимый инструмент. То есть он работает на всех основных операционных систем (Unix, Windows и Mac) [7];

  • библиотека sqlalchemy 1.0.11 - это программная библиотека на языке Python для работы с реляционными СУБД с применением технологии ORM. Служит для синхронизации объектов Python и записей реляционной базы данных. SQLAlchemy позволяет описывать структуры баз данных и способы взаимодействия с ними на языке Python без использования [8];

    1. Описание графического интерфейса

Дизайн интерфейсов сводится к вопросу о том, как оформить и расположить визуальные элементы таким образом, чтобы внятно отразить поведение и представить информацию. Каждый элемент визуальной композиции имеет ряд свойств, таких как форма и цвет. Каждое отдельное свойство само по себе редко обладает естественным смыслом. Скорее можно сказать, что пользователь получает возможность разобраться в интерфейсе благодаря различным способам приложения этих свойств к каждому из элементов интерфейса [12].

Форма – главный признак сущности объекта для человека. В данной программе используется прямоугольная форма окна, блока для вывода таблиц на экран и кнопки. Их размеры задаются вручную, и для того, чтобы их изменить необходимо обращаться непосредственно к коду программы.

В качестве оформления использовался минималистический дизайн. В качестве приветствия с пользователем было создано отдельное окно, которое содержит надпись, изображение и кнопку, которая запускает саму программу. Данное окно имеет приятный фиолетовый цвет и изображение, выполненное в минималистичном стиле. Ознакомиться с окном приветствия программы можно на рисунке А.6. В главном же окне программы преобладают серые и белые тона.

Кроме этого был создан логический маршрут, который совпадает с движением взгляда пользователя. Он представлен на рисунке А.7. Сначала, когда пользователь смотрит на экранную форму, предполагается, что он визуально просматривает название программы. После того, как пользователь ознакомился с названием, предполагается, что его внимание привлекут единственные красочные кнопки программы добавления записи, удаления записи и обновление окна. Далее, после того, как пользователь зрительно ознакомился с кнопками управления данными, предполагается, что его внимание привлечет копки с названиями таблиц. После их ознакомления, пользователь переведет свое внимание на рабочее поле, где отображаются таблицы. В конечном итоге, не увидев больше ничего, пользователь закончит свой просмотр на кнопках сворачивания, полноэкранного режима и закрытия.

    1. Вместимость данных

Начиная с MySQL версии 3.23, где используется новый тип таблиц, максимальный размер таблицы доведен до 8 миллионов терабайт (263 bytes). Однако следует заметить, что операционные системы имеют свои собственные ограничения по размерам файлов. Ниже приведено несколько примеров:

  • 32-разрядная Linux-Intel – размер таблицы 4 Гб.

  • Solaris 2.7 Intel - 4 Гб

  • Solaris 2.7 UltraSPARC - 512 Гб

  • WindowsXP - 4 Гб

Как можно видеть, размер таблицы в базе данных MySQL обычно лимитируется операционной системой. По умолчанию MySQL-таблицы имеют максимальный размер около 4 Гб. Для любой таблицы можно проверить/определить ее максимальный размер с помощью команд SHOW TABLE STATUS или myisamchk -dv table_name. Если большая таблица предназначена только для чтения, можно воспользоваться myisampack, чтобы слить несколько таблиц в одну и сжать ее. Обычно myisampack ужимает таблицу по крайней мере на 50%, поэтому в результате можно получить очень большие таблицы.

    1. Описание требований к ПО и АО

Минимальные программные требования для работы приложения:

  • ОС Windows 98 – для работы приложения;

  • Python 3.4 и выше – для работы приложения;

  • Библиотека PyQt4 – для работы приложения;

  • Библиотека sqlalchemy 1.0.11 – для работы приложения;

Минимальные аппаратные требования для работы приложения:

  • CPU: 1 ГГц;

  • Память: 1 Гб;

  • HDD: 14 Гб. свободного места;

  • Видеоадаптер с поддержкой DirectX.

    1. Описание контрольных примеров

Рассмотрим результат работы программы «Сайт магазина игровых приставок» и правильность его обработки пользовательских запросов.

  1. Пусть пользователю необходимо внести данные нового товара в базу. Результат обработки данного запроса отображен на рисунке А.9.

  2. Пусть пользователю необходимо удалить данные из таблицы «Категории». Результат обработки данного запроса отображен на рисунке А.10 и А.11.

  3. Пусть пользователю необходимо внести изменение в описание товара. Результат обработки данного запроса отображен на рисунке А.12.

  4. Пусть пользователю захотелось нажать на кнопку удаления строки в пустой таблице. Результат обработки данного запроса отображен на рисунке А.13.

    1. Описание инструкций пользователя

Для запуска приложения необходимо на диске найти папку с названием «Сайт магазина игровых приставок». Затем перейдя в эту папку найти еще одну точно такую папку. После перехода необходимо найти файл с названием «main» и запустить его, щелкнув по нему 2 раза. Предполагается, что у пользователя уже установлены с прилагаемого диска все необходимые библиотеки, MySQL и программа Python.

После запуска файла «main», откроется главное окно программы. Главное окно программы условно разделено на три части. В основной части находится рабочее поле, в котором отображаются таблицы изображение персонального ассистента. В левой части находятся кнопки для редактирования базы данных. Также ниже предыдущей области, в левой части находятся кнопки, благодаря которым осуществляется переход между таблицами базы данных. Более детально ознакомиться с главным окном программы можно просмотрев его на рисунке А.8.

Для просмотра какой-либо таблицы необходимо кликнуть по кнопке с названием, которое соответствует названию таблицы. Для произведения какого-либо редактирования базы данных, необходимо кликнуть по соответствующему рисунку, предварительно выбрав таблицу, в которой хотите производить изменения. Пример выполнения этих действий можно посмотреть на рисунках А.8 – А.12.

ВЫВОДЫ

В ходе работы над проектом были реализованы следующие задачи:

• проанализированы и выделены основные этапы работы программы;

• разработана база данных, сформированы таблицы в соответствии с третьей нормальной формой;

• разработано приложение, которое выполняет функции редактирования базы данных.

Изучены общепризнанные методы и ознакомлены с особенностями использования MySQL на Python.

Выяснены основные достоинства программы «Сайт магазина игровых приставок» и его особенности, способствующие дальнейшему развитию и популярности среди различных категорий пользователей.

Результатом данной работы является разработанная программа «Сайт магазина игровых приставок» в которой обработка данных организована в виде реляционной базы данных.

При дальнейшем развитии этого приложения, можно расширить его функции.

СПИСОК ССЫЛОК

  1. Индустрия компьютерных игр, [Электронный ресурс]. Режим доступа https://ru.wikipedia.org/wiki/Индустрия_компьютерных_игр — Дата доступа: 08.05.2016

  2. Виртуальная реальность, [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/Виртуальная_реальность — Дата доступа: 08.05.2016

  3. ORM, [Электронный ресурс]. Режим доступа http://dic.academic.ru/dic.nsf/ruwiki/209846 — Дата доступа: 08.05.2016

  4. MySQL, [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/MySQL— Дата доступа: 08.05.2016

  5. Что такое MySQL. Взаимодействие с PHP, [Электронный ресурс]. Режим доступа: http://www.softtime.ru/bookphp/gl12_1.php — Дата доступа: 08.05.2016

  6. Преимущества и недостатки MySQL, [Электронный ресурс]. Режим доступа: http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=30947 — Дата доступа: 08.05.2016

  7. Введение в среду PyQt4, [Электронный ресурс]. Режим доступа: http://wiki.python.su/Документации/ВведениеВСредуPyQt4 — Дата доступа: 08.05.2016

  8. SQLAlchemy, [Электронный ресурс]. Режим доступа: http://dic.academic.ru/dic.nsf/ruwiki/1273414 — Дата доступа: 08.05.2016

  9. Python, [Электронный ресурс]. Режим доступа: http://ideafix.name/wp-content/uploads/2012/08/Python-12.pdf — Дата доступа: 08.05.2016

  10. Python Imaging Library, [Электронный ресурс]. Режим доступа: https://ru.wikipedia.org/wiki/Python_Imaging_Library — Дата доступа: 08.05.2016

  11. Список всех классов Qt., [Электронный ресурс]. Режим доступа: http://doc.crossplatform.ru/qt/4.7.x/classes.html — Дата доступа: 08.05.2016

  12. Купер А. Алан Купер об интерфейсе. Основы проектирования взаимодействия /А. Купер, Р. Рейман, Д. Кронин. Пер. с англ. СПб. Символ-Плюс, 2009 г., 688с., ил.

ПРИЛОЖЕНИЕ А

ПОЯСНЯЮЩИЕ ИЛЛЮСТРАЦИИ

Рисунок А.1 – ER-диаграмма.

Рисунок А.2 – Реляционная модель данных.

Рисунок А.3 – Первая нормальная форма.

Рисунок А.4 – Вторая нормальная форма.

Рисунок А.5 – Третья нормальная форма.

Рисунок А.6 – Окно приветствия.

Рисунок А.7 – Логический маршрут.

Рисунок А.8 – Главное окно программы.

Рисунок А.9 – Ввод нового товара в базу

Рисунок А.10 – Удаление данных из базы.

Рисунок А.11 – Удаление данных из базы.

Рисунок А.12 – Изменение данных в БД.

Рисунок А.13 – Вывод ошибки в БД

ПРИЛОЖЕНИЕ Б

ФРАГМЕНТЫ ЛИСТИНГА

import os # библиотека для работы с системными вызовами и консолью

BASE_URL = os.path.split(__file__)[0]

DATABASE_URL='mysql+mysqlconnector://root:1234@localhost/database_editor?charset=utf8' # подключение к БД

Рисунок Б.1 – Подключение к БД

from sqlalchemy import create_engine

from model import Base

from settings import DATABASE_URL

def create_db():

engine = create_engine(DATABASE_URL)

Base.metadata.create_all(engine)

create_db()

Рисунок Б.2 – Создание таблиц в БД

from sqlalchemy import Column, ForeignKey, Integer, Float, String, Text

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import relationship

Base = declarative_base()

class Category(Base):

""" Категория """

__tablename__ = 'category'

id = Column(Integer, primary_key=True)

name = Column(String(150))

description = Column(Text())

items = relationship('Item', backref='items')

def __repr__(self):

return '<Category> {}'.format(self.name)

def __str__(self):

return '<Category> {}'.format(self.name)

class Item(Base):

""" Товар """

__tablename__ = 'item'

id = Column(Integer, primary_key=True)

id_category = Column(Integer, ForeignKey('category.id'))

id_manufacturer = Column(Integer, ForeignKey('manufacturer.id'))

name = Column(String(150))

description = Column(Text())

price = Column(Float)

count = Column(Integer)

def __repr__(self):

return '<Item> {}'.format(self.name)

def __str__(self):

return '<Item> {}'.format(self.name)

class Manufacturer(Base):

""" Производитель """

__tablename__ = 'manufacturer'

id = Column(Integer, primary_key=True)

name = Column(String(150))

def __repr__(self):

return '<Manufacturer> {}'.format(self.name)

def __str__(self):

return '<Manufacturer> {}'.format(self.name)

class Order(Base):

""" Заказ """

__tablename__ = 'order'

id = Column(Integer, primary_key=True)

id_item = Column(Integer, ForeignKey('item.id'))

id_buyer = Column(Integer, ForeignKey('buyer.id'))

# series_number = Column(Integer)

# season_number = Column(Integer)

# looked = Column(Boolean(), default=False)

def __repr__(self):

return '<Order> {}'.format(self.id_item)

def __str__(self):

return '<Order> {}'.format(self.id_item)

class Buyer(Base):

""" Заказ """

__tablename__ = 'buyer'

id = Column(Integer, primary_key=True)

nick = Column(String(150))

email = Column(String(150))

def __repr__(self):

return '<Buyer> {}'.format(self.nick)

def __str__(self):

return '<Buyer> {}'.format(self.nick)

Рисунок Б.3 – Описание таблиц БД

class MainWindow(QtGui.QMainWindow):

def __init__(self):

super(MainWindow, self).__init__(None)

self.db_metadata = Base.metadata

self.main_widget = QtGui.QWidget()

self.main_layout = QtGui.QVBoxLayout()

self.main_widget.setLayout(self.main_layout)

self.setCentralWidget(self.main_widget)

self.menu_buttons = []

self.tab_tables = TabTablesWidget()

self.toolbar = self.addToolBar('Работа с БД')

self.build_toolbar()

self.build_widgets()

def build_toolbar(self):

add_action = QtGui.QAction(

QtGui.QIcon('icons/add.png'), 'Добавить новую строку', self

)

add_action.triggered.connect(self.add_new_row)

rm_action = QtGui.QAction(

QtGui.QIcon('icons/delete.png'), 'Удалить строку', self

)

rm_action.triggered.connect(self.remove_row)

update_action = QtGui.QAction(

QtGui.QIcon('icons/update.png'), 'Обновить', self

)

update_action.triggered.connect(self.update_table_view)

self.toolbar.addAction(add_action)

self.toolbar.addAction(rm_action)

self.toolbar.addAction(update_action)

def build_widgets(self):

splitter = QtGui.QSplitter(QtCore.Qt.Horizontal)

splitter.addWidget(self.create_menu())

splitter.addWidget(self.create_tabs_area())

self.main_layout.addWidget(splitter)

def create_menu(self):

menu = QtGui.QFrame(self)

menu.setLayout(QtGui.QVBoxLayout())

menu.setFrameShape(QtGui.QFrame.StyledPanel)

for table_name in self.db_metadata.sorted_tables:

table_name = table_name.name

button = QtGui.QPushButton(rus[table_name].capitalize())

button.clicked.connect(

lambda event, name=table_name: self.tab_tables.create_tab(name)

)

menu.layout().addWidget(button)

menu.layout().addStretch(len(self.menu_buttons))

menu.setFixedWidth(menu.sizeHint().width())

return menu

def create_tabs_area(self):

tabs_area = QtGui.QFrame(self)

tabs_area.setLayout(QtGui.QVBoxLayout())

tabs_area.layout().addWidget(self.tab_tables)

tabs_area.setFrameShape(QtGui.QFrame.StyledPanel)

return tabs_area

def add_new_row(self):

current_widget = self.tab_tables.current_widget()

if current_widget:

self.dialog = DialogAddingNewRecord(current_widget.table)

self.dialog.button_ok.clicked.connect(

lambda: current_widget.add_new_row(self.dialog.get_values())

)

self.dialog.button_cancel.clicked.connect(self.dialog.close)

self.dialog.show()

def remove_row(self):

current_widget = self.tab_tables.current_widget()

if not current_widget:

return

elif not current_widget.selected_cell:

QtGui.QMessageBox.warning(

self, 'Ошибка', 'Выберите строку, которую хотите удалить',

QtGui.QMessageBox.Yes

)

return

current_widget.remove_row()

def update_table_view(self):

current_widget = self.tab_tables.current_widget()

if current_widget:

current_widget.load_data()

Рисунок Б.4 – Формирование главного окна программы

def create_db_session() -> Session:

engine = create_engine(DATABASE_URL)

new_session = sessionmaker(bind=engine)

return new_session()

session = create_db_session()

Рисунок Б.5 – Код, который создает сессию работы с БД

app = QtGui.QApplication(sys.argv)

main_window = MainWindow()

main_window.setWindowTitle('Магазин игровых приставок')

main_window.setGeometry(100, 100, 700, 400)

main_window.show()

app.exec_()

Рисунок Б.6 – Вывод созданной программы на экран

ПРИЛОЖЕНИЕ В

ТАБЛИЦЫ

Таблица В.1 – Структура таблицы «Сайт игровых приставок»

Имя поля

Тип

Ширина

1

Назв_товара

Character

150

2

Описан_товара

Text

3

Назв_категории

Character

150

4

Описан_категории

Text

5

Кол-во

Numeric

11

6

Цена

Numeric

11

7

Назв_производителя

Character

150

8

Имя_покупателя

Character

150

9

Электр_почта_покупателя

Character

150

Таблица В.2 – Примеры хранимых данных

Имя поля

Запись 1

Запись 2

Назв_товара

Игровая консоль x-box 360

Игровая консоль Sony PlayStation 4

Описан_товара

Игровая консоль x-box 360

Игровая консоль Sony PlayStation 4

Назв_категории

Консоли

Консоли

Описан_категории

Игровые приставки

Игровые приставки

Кол-во_товара

1

1

Цена_товара

3500 грн

6000 грн

Назв_производителя

Microsoft

Sony

Имя_покупателя

tomb

Richard

Электр_почта_покупателя

tmb@mail.ru

Rich@rambler.ru

Таблица В.3 – Блоки обработки информации классов Category, Item, Manufacturer, Order, Buyer

Название блока (def)

Описание функции

__repr__

Метод для получения строкового представления объекта. Возвращает "сырые" данные, использующиеся для внутреннего представления в python.

__str__

Метод для получения строкового представления объекта. Возвращает значения в читаемой для пользователя форме.

Таблица В.4 – Блоки обработки информации класса MainWindow

Название блока (def)

Описание функции

_init_

Запускает __init__ базового класса, чтобы были проинициализированы все нужные атрибуты, а также рассматривает некоторые свойства виджета и рамещения.

build_widgets

Создаёт виджеты, которые отображаются в окне.

build_toolbar

Создает панель инструментов графического интерфейса пользователя, предназначенный для размещения на нем нескольких других элементов, таких как: кнопки, меню, поле с текстом, списки и т.д

create_menu

Создает меню, где отображаются все таблицы БД и из которого можно перейти к нужной таблице для редактирования

create_tabs_area

Создает виджет, отображающий открытые для редактирования таблицы

add_new_row

Запускает диалог добавления новой записи в БД

remove_row

Удаляет выделенную строку из таблицы

update_table_view

Обновляет данные в таблице (синхронизует таблицу с таблицей БД)

Таблица В.5 – Блоки обработки информации класса DatabaseTableView

Название блока (def)

Описание функции

__init__

Запускает __init__ базового класса, чтобы были проинициализированы все нужные атрибуты, а также рассматривает некоторые свойства виджета и рамещения.

load_data

Загружает в таблицу данные из базы данных

view_clicked

срабатывает, когда пользователь кликает по ячейке таблицы, для того, чтобы узнать куда кликнули

add_new_row

Добавляет в базу новую запись

remove_row

Удаляет из базы данных выделенную в таблице строку и удаляет ее из таблицы

Таблица В.6 – Блоки обработки информации класса TabTablesWidget

Название блока (def)

Описание функции

__init__

Запускает __init__ базового класса, чтобы были проинициализированы все нужные атрибуты, а также рассматривает некоторые свойства виджета и рамещения.

create_tab

Добавляет в окно вкладку

close_tab

Запускается для удаления вкладки из виджета

current_widget

Возвращает текущую таблицу

Таблица В.7 – Блоки обработки информации класса DialogAddingNewRecord

Название блока (def)

Описание функции

__init__

Запускает __init__ базового класса, чтобы были проинициализированы все нужные атрибуты, а также рассматривает некоторые свойства виджета и рамещения.

build_widgets

Создаёт виджеты, которые отображаются в окне.

get_values

Возвращает данные введеные пользователем в поля

create_db_session

Создает сессию работы с БД

Таблица В.8 – Методы файла Settings

Методы

Описание

os.path.split()

Разбивает путь на кортеж (голова, хвост), где хвост - последний компонент пути, а голова - всё остальное.

ПРИЛОЖЕНИЕ Г

ФАЙЛ README

Прежде чем открыть программу необходимо:

1. Установить Python v3.4 и выше. Прилагается установочный файл на версию 3.4.2

2. Установить MySQL. Прилагается установочный архив.

3. Установить библиотеку PyQt4. Прилагается установочный файл.

4. Установить библиотеку sqlalchemy==1.0.11, для этого необходимо перейти в командную строку компьютера, и написать:

cd C:\Python34\Scripts

pip3.exe install sqlalchemy==1.0.11

После чего можно закрыть консоль и запускать файл "main"