Риэлтерская контора
Панель элементов: "данные", "компоненты". Описание структуры базы данных. Блок-схема реализации программы, техническое описание. Вид окна "ввод пароля". Список элементов пользовательского интерфейса. Исходный код программы. Инструкция пользователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 29.09.2016 |
Размер файла | 983,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
[Введите текст]
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Казанский национальный исследовательский технологический университет»
(ФГБОУ ВО «КНИТУ»)
ИУАИТ, Автоматизации и управления
Кафедра автоматизированных систем сбора и обработки информации
Курсовая работа
по дисциплине «Объектно-ориентированное программирование»
на тему: «Риэлтерская контора»
Казань, 2016
Аннотация
В первом разделе курсовой работы содержится рассмотрение теоретического вопроса: «Панель элементов: “Данные” и “Компоненты”».
Второй раздел данной курсовой работы посвящен выполнению практического задания, которое заключается в разработке прикладной программы под названием «Риэлтерская контора».
Для разработки программы использовалась среда программирования C#. База данных создана средствами MSAccess.
При помощи созданной прикладной программы «Риэлтерская контора» администратор имеет возможность:
Добавлять информацию о новых квартирах
Удалять информацию о квартирах, которая хранится в базе данных.
1. «Панель элементов: “Данные” и “Компоненты”»
Панель элементов
На панели элементов отображаются значки для элементов управления и других элементов, которые можно добавить проекты Visual Studio.
Чтобы открыть панель элементов, в меню Вид выберите пункт Панель элементов. Можно закрепить панель элементов, а также зафиксировать ее в открытом состоянии или использовать для нее функцию Автоматическое скрытие.
Значки панели элементов можно перетащить в конструктор или вставить в редактор кода. В любом случае добавляется базовый код для создания экземпляра элемента панели элементов в файле активного проекта.
На панели элементов отображаются только элементы, соответствующие типу файла, с которым вы работаете. Можно выполнить поиск по панели элементов, чтобы дополнительно отфильтровать отображаемые элементы. Если для проекта необходим элемент управления, который не поддерживается в профиле клиента, можно настроить проект для всей платформы, изменив его свойства.
Вкладка “Данные”
Отображение объектов данных, которые можно добавить в формы и компоненты. Вкладка Данные панели элементов отображается при создании проекта, связанного с конструктором. Панель элементов появляется по умолчанию в интегрированной среде разработки VisualStudio; если необходимо отобразить Панель элементов, выберите пункт Панель элементов в меню Вид.
Список элементов пользовательского интерфейса
Чтобы перейти непосредственно на справочную страницу.NET Framework для конкретного компонента, нажмите F1 в элементе на панели элементов или элементе компонента в области конструктора.
Название |
Описание |
|
DataSet |
Добавление экземпляра типизированного или нетипизированного набора данных в форму или компонент. При перетаскивании объекта в конструктор объект отображается в диалоговом окне, что позволяет выбрать существующий класс типизированного набора данных или создать новый пустой нетипизированный набор данных. |
|
DataGridView |
Предоставляет мощный и гибкий способ отображения данных в табличном формате. |
|
BindingSource |
Компонент позволяет упростить процесс привязки элемента управления к базовому источнику данных. |
|
BindingNavigator |
Представляет пользовательский интерфейс для перехода и обработки для элементов управления на форме, которые привязываются к данным. |
Вкладка “Компоненты”
Служит для отображения компонентов, добавленных в конструкторы VisualBasic и Visual C#. Кроме компонентов.NET Framework, которые входят в состав VisualStudio (например, компонентов MessageQueue и EventLog), на эту вкладку можно добавлять собственные и сторонние компоненты. Дополнительные сведения см. в разделе Howto: ManipulateToolboxTabs.
Чтобы открыть эту вкладку, в меню Вид выберите команду Панель элементов. На панели элементов выберите вкладку Компоненты.
Название |
Описание |
|
BackgroundWorker |
Создание экземпляра компонента System.ComponentModel.BackgroundWorker, предназначенного для выполнения операции в отдельном выделенном потоке. |
|
DirectoryEntry |
Создание экземпляра компонента DirectoryEntry, который инкапсулирует узел или объект иерархии ActiveDirectory и может использоваться для взаимодействия с поставщиками услуг ActiveDirectory. |
|
DirectorySearcher |
Создание экземпляра компонента DirectorySearcher, который может использоваться для выполнения запросов к ActiveDirectory. |
|
ErrorProvider |
Создание экземпляра компонента System.Windows.Forms.ErrorProvider, указывающего конечному пользователю на наличие ошибки, связанной с элементом управления формы. |
|
EventLog |
Создание экземпляра компонента EventLog, который используется для взаимодействия с системными и пользовательскими журналами событий, в том числе для записи событий в журнал и чтения данных журнала. Дополнительные сведения см. в разделе Знакомство с компонентом EventLog; |
|
FileSystemWatcher |
Создание экземпляра компонента FileSystemWatcher, который используется для отслеживания изменений в любом доступном каталоге или файле. Дополнительныесведениясм. вразделе How to: Configure FileSystemWatcher Component Instances. |
|
HelpProvider |
Создание экземпляра компонента System.Windows.Forms.HelpProvider, предоставляющего всплывающую справку или справку в Интернете для элементов управления. |
|
ImageList |
Создание экземпляра компонента System.Windows.Forms.ImageList, предоставляющего методы управления коллекцией объектовSystem.Drawing.Image. |
|
MessageQueue |
Создание экземпляра компонента MessageQueue, который используется для взаимодействия с очередями сообщений, в том числе для чтения сообщений из очередей, записи сообщений в очереди, обработки транзакций и выполнения задач по администрированию очередей. Дополнительные сведения см. в разделе UsingMessagingComponents. |
|
PerformanceCounter |
Создание экземпляра компонента PerformanceCounter, который может использоваться для взаимодействия со счетчиками производительности Windows, в том числе для создания новых категорий и экземпляров, чтения значений из счетчиков и выполнения вычислений с использованием значений счетчиков. Дополнительные сведения см. в разделе Выявление пороговых значений производительности. |
|
Процесс |
Создание экземпляра компонента Process, который может использоваться для остановки, запуска и изменения данных, связанных с процессами системы. Дополнительные сведения см. в разделе Наблюдение за процессами Windows и управление этими процессами. |
|
SerialPort |
Создание экземпляра компонента System.IO.Ports.SerialPort, который предоставляет средства для синхронного и управляемого событиями ввода-вывода, доступа к состоянию подключения-отключения устройства, а также для доступа к свойствам драйвера последовательного порта. |
|
ServiceController |
Создание экземпляра компонента ServiceController, который может использоваться для управления существующими службами, в том числе для запуска и остановки служб, а также передачи команд в службы. Дополнительные сведения см. в разделе Наблюдение за службами Windows. |
|
Таймер |
Создание экземпляра компонента Timer, который может использоваться для добавления функций, основанных на таймере, в приложение Windows. Дополнительные сведения см. в разделе Компонент Timer (WindowsForms). |
2. Практический раздел
Риэлтерская контора.
Описание структуры базы данных
Для хранения данных будет использоваться база данных, созданная средствами MSAccess.
Для реализации поставленной задачи спроектируем одну таблицу. Таблица является как справочная, так и с помощью нее можно создавать различные формы, запросы.
Структура разработанной базы данных приведена в таблице 2.1
Таблица 2.1 - Таблицы и их описание
Название таблицы |
Имя поля |
Тип данных |
Описание |
|
Квартиры |
Код квартиры |
Счетчик |
Ключевое поле таблицы, уникальный идентификатор |
|
Цена |
Числовой |
Цена квартиры |
||
Количество комнат |
Числовой |
Количество комнат в квартире |
||
Район |
Текстовой |
Район в котором находится квартира |
||
Адрес |
Текстовой |
Адрес квартиры |
||
ФИО Владельца |
Текстовой |
ФИО владельца квартиры |
||
Номер телефона владельца |
Числовой |
Номер телефона владельца квартиры |
2.1 Блок-схема реализации программы
Программой предусмотрено три основных функции, в частности:
просмотр, редактирование и удаление информации из выбранных таблиц базы данных;
поиск нужной информации по таблицам;
просмотр информации о квартире.
Блок-схема реализации поиска по таблицам приведена на рисунке 2.2.
Блок-схема процесса просмотра, редактирования и удаления информации из выбранной таблицы базы данных приведена на рисунке 2.1.
Рис. 2.1 - Блок-схема реализации поиска по таблицам
Рис. 2.2 - Блок-схема процесса просмотра, редактирования и удаления информации из выбранной таблицы базы данных
2.2 Техническое описание программы
База данных реализована средствами MSAccess 2013.
Прикладная программа разработана с использованием среды С# Builder.
Для работы прикладной программы необходимая операционная система семейства Windows.
Общий вес программы 1,8 Мб.
Для работы прикладной программы «Риэлтерская контора» необходимо 5 Мб оперативной памяти.
Минимальные требования к компьютеру для запуска разработанной программы:
процессор с частотой не менее 66 МГц;
32 Мб оперативной памяти;
300 Мб постоянной памяти.
2.3 Инструкция пользователя
Программа запускается путем двойного нажатия мышкой на файл.
После запуска программы пользователь видит главное окно.
Его внешний вид приведен на рисунке 2.3.
Рис. 2.3 - Главное окно
В главном окне, пользователь может:
Открыть окно администратора, введя пароль “admin”
Открыть окно по поиску квартир
Выйти из программы
Осуществить просмотр справки и информации о программе (рис.2.4)
Рис. 2.4 - О программе
После того, как пользователь нажимает на кнопку “Администратор”, появляется окно ввода пароля (рис.2.5а)
Рис. 2.5 а - Окно ввода пароля Рис. 2.5 б - Неверный пароль
интерфейс база данные окно
После того, как пользователь вводит пароль (“admin”) и нажимает кнопку “Войти”, выходит окно Администратора. Внешний вид окна приведен на рисунке 2.7а. В случае, если введен неверный пароль, то появится окно с предупреждением (рис.2.6 а).
Рис. 2.6 а - Окно Администратора
Просмотр вкладки “Помощь” (рис 2.7а)
Рис. 2.7 а - Вкладка “Помощь”
В данном окне можно добавить информацию о квартире в базу данных, а так же - удалить информацию из нее.
После того, как пользователь нажимает на кнопку “Поиск квартир”, появляется окно Поиска (рис. 2.8 а). Можно выбрать из выпадающего списка - количество комнат и район (рис. 2.8 б).
Рис. 2.8 а - Окно поиска Рис. 2.8 б
При нажатии на кнопку “Найти”, появляется окно с результатом поиска (рис. 2.9 а).
Рис. 2.9 а - Результат поиска
Рис. 2.9 б - Вкладка “Помощь”
В данном окне, пользователю выводится вся информация о квартирах, найденная по заданным критериям. Пользователь может распечатать результат поиска с помощью кнопки “Распечатать”
В результате выполнения курсовой работы была разработана программа «Риэлтерская контора», которая выполняет все возложенные на нее функции по обработке информации и предоставлению пользователю данных о квартирах.
Заключение
В данной курсовой работе нами было рассмотрено использование баз данных, созданных средствами MSAccess, их связь между собой и дальнейшее использование в данной программе.
Второй раздел данной курсовой работы посвящен выполнению практического задания, которое заключается в разработке прикладной программы под названием «Риэлтерская контора».
Для разработки программы использовалась среда программирования C#.База данных создана средствами MSAccess.
В процессе создания прикладной программы «Риэлтерская контора» мною был улучшен практический навык работы в среде программирования C#.
Список источников
1. Н. Культин "MicrosoftVisual C# в задачах и примерах" - СПб.: БХВ-Петербург, 2009. - 320 с.
2. Э.Троелсен “C# и платформа.NET 3.0” - Питер, 2008. - 1456 с.
3. https://msdn.microsoft.com //
Приложение
Исходный код программы
Форма главного окна:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespaceRieltorskoe_agentsvo
{
publicpartialclassForm1: Form
{
public Form1()
{
InitializeComponent();
}
privatevoid button1_Click(object sender, EventArgs e)
{
Hide();
Form2 f = newForm2();
f.ShowDialog();
Show();
}
privatevoid button2_Click(object sender, EventArgs e)
{
Hide();
Form4 f = newForm4();
f.ShowDialog();
Show();
}
privatevoid button3_Click(object sender, EventArgs e)
{
Application.Exit();
}
privatevoid richTextBox1_TextChanged(object sender, EventArgs e)
{
}
privatevoidоПрограммеToolStripMenuItem_MouseDown(object sender, MouseEventArgs e)
{
}
privatevoidоПрограммеToolStripMenuItem_MouseLeave(object sender, EventArgs e)
{
richTextBox1.Visible = false;
}
privatevoid richTextBox1_MouseLeave(object sender, EventArgs e)
{
richTextBox1.Visible = false;
}
privatevoidоПрограммеToolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
richTextBox1.Visible = true;
}
privatevoid textBox1_TextChanged(object sender, EventArgs e)
{
}
privatevoidячяToolStripMenuItem_Click(object sender, EventArgs e)
{
}
privatevoid pictureBox1_Click(object sender, EventArgs e)
{
}
privatevoid label1_Click(object sender, EventArgs e)
{
}
}
}
Форма ввода пароля:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespaceRieltorskoe_agentsvo
{
publicpartialclassForm2: Form
{
public Form2()
{
InitializeComponent();
}
privatevoid Form2_Load(object sender, EventArgs e)
{
}
privatevoid button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "admin")
{
Hide();
Form3 f = newForm3();
f.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("Неверныйпароль");
}
}
privatevoid textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
Формаадминистратора:
using System;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
usingSystem.Data.OleDb;
namespaceRieltorskoe_agentsvo
{
publicpartialclassForm3: Form
{
public Form3()
{
InitializeComponent();
}
double b = 0;
double number;
OleDbConnection con = newOleDbConnection();
OleDbCommandcmd = newOleDbCommand();
OleDbDataReader read;
voidconnectdataBase()
{
con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Rieltorskoe agentsvo\Rieltorskoeagentsvo\rieltor.accdb; Persist Security Info = True";
cmd.Connection = con;
}
voiddisplayData()
{
connectdataBase();
con.Open();
cmd.CommandText = "SELECT * FROM Квартиры";
read = cmd.ExecuteReader();
listView1.Items.Clear();
ListViewItem li;
b = 1;
ArrayList mas = newArrayList();
while (read.Read())
{
double a = Convert.ToDouble(read[0]);
mas.Add(a);
li = listView1.Items.Add(read[0].ToString());
li.SubItems.Add(read[1].ToString());
li.SubItems.Add(read[2].ToString());
li.SubItems.Add(read[3].ToString());
li.SubItems.Add(read[4].ToString());
li.SubItems.Add(read[5].ToString());
li.SubItems.Add(read[6].ToString());
}
while (mas.Contains(b))
{
b++;
}
textBox1.Text = b.ToString();
con.Close();
read.Close();
}
voidcleartextbox()
{
TextBox[] t = { textBox2, textBox3, textBox4, textBox5, textBox6, textBox7};
foreach (TextBox x in t)
{
x.Text = "";
}
}
privatevoid Form3_Load(object sender, EventArgs e)
{
displayData();
}
privatevoid button1_Click(object sender, EventArgs e)
{
if ((textBox2.Text == "") || (textBox3.Text == "") || (textBox4.Text == "") || (textBox5.Text == "") || (textBox6.Text == "") || (textBox7.Text == ""))
{
MessageBox.Show("Заполните все поля!");
}
else
{
connectdataBase();
con.Open();
cmd.CommandText = @"INSERT INTO Квартиры([Код квартиры], [Цена], [Количество комнат], [Район], [Адрес], [ФИО Владельца], [Номер телефона владельца]) VALUES('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "','" + textBox6.Text + "','" + textBox7.Text + "')";
cmd.ExecuteNonQuery();
con.Close();
displayData();
cleartextbox();
}
}
privatevoid button2_Click(object sender, EventArgs e)
{
connectdataBase();
con.Open();
cmd.CommandText = "DELETE * FROM Квартиры WHERE [Кодквартиры] = '" + textBox8.Text + "'";
cmd.ExecuteNonQuery();
con.Close();
displayData();
}
privatevoid listView1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
textBox8.Text = listView1.SelectedItems[0].Text;
}
else { displayData();}
}
privatevoid button3_Click(object sender, EventArgs e)
{
this.Close();
}
privatevoidпомощьToolStripMenuItem_MouseEnter(object sender, EventArgs e)
{
richTextBox1.Visible = true;
}
privatevoid richTextBox1_MouseLeave(object sender, EventArgs e)
{
richTextBox1.Visible = false;
}
}
}
ФормаПоиска:
using System;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
namespaceRieltorskoe_agentsvo
{
publicpartialclassForm4: Form
{
public Form4()
{
InitializeComponent();
}
privatevoid Form4_Load(object sender, EventArgs e)
{
}
privatevoid comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
}
privatevoid button1_Click(object sender, EventArgs e)
{
Hide();
Form5 f = newForm5(Convert.ToString(comboBox1.Text), Convert.ToString(comboBox2.Text));
f.ShowDialog();
this.Close();
}
privatevoid comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
Форма Результат поиска:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
usingSystem.Data.OleDb;
namespaceRieltorskoe_agentsvo
{
publicpartialclassForm5: Form
{
privatestringkomnata, raion;
public Form5(stringkomnata, stringraion)
{
InitializeComponent();
this.komnata = komnata;
this.raion = raion;
}
OleDbConnection con = newOleDbConnection();
OleDbCommandcmd = newOleDbCommand();
OleDbDataReader read;
voidconnectdataBase()
{
con.ConnectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = C:\Rieltorskoe agentsvo\Rieltorskoeagentsvo\rieltor.accdb; Persist Security Info = True";
cmd.Connection = con;
}
voiddisplayData()
{
connectdataBase();
con.Open();
cmd.CommandText = "SELECT * FROM Квартиры WHERE [Район]='"+ raion +"' and [Количествокомнат]='"+ komnata +"'";
read = cmd.ExecuteReader();
listView1.Items.Clear();
ListViewItem li;
while (read.Read())
{
li = listView1.Items.Add(read[0].ToString());
li.SubItems.Add(read[1].ToString());
li.SubItems.Add(read[2].ToString());
li.SubItems.Add(read[3].ToString());
li.SubItems.Add(read[4].ToString());
li.SubItems.Add(read[5].ToString());
li.SubItems.Add(read[6].ToString());
}
con.Close();
read.Close();
}
privatevoid Form5_Load(object sender, EventArgs e)
{
displayData();
}
privatevoid button2_Click(object sender, EventArgs e)
{
this.Close();
}
privatevoidпомощьToolStripMenuItem_Click (object sender, EventArgs e)
{
}
privatevoidпомощьToolStripMenuItem_MouseEnter (object sender, EventArgs e)
{
richTextBox1.Visible = true;
}
privatevoidпомощьToolStripMenuItem_MouseLeave (object sender, EventArgs e)
{
richTextBox1.Visible = false;
}
privatevoid printDocument1_PrintPage (object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
Bitmap bmp = newBitmap(listView1.Size.Width + 400, listView1.Size.Height + 200);
listView1.DrawToBitmap(bmp, listView1.Bounds);
e.Graphics.DrawImage(bmp, 0, 0);
}
privatevoid richTextBox1_TextChanged(object sender, EventArgs e)
{
}
privatevoid button1_Click(object sender, EventArgs e)
{
printDocument1.Print();
}
}
}
Размещено на Allbest.ru
Подобные документы
Склад ОАО "Ориенбанк", его специфика и структура. Описание структуры базы данных складского учета для предприятия. Разработка пользовательского интерфейса программы. Инструкция к применению базы данных. Автоматизация операций и учета средств банка.
курсовая работа [4,7 M], добавлен 26.02.2010Написание программы входа пользователя в систему через пароль. Необходимость содержания входа в систему через ввод, проверки пароля, а также регистрации пользователя с занесением его имени и пароля в базу данных. Блокировка системы при неверном пароле.
лабораторная работа [2,7 M], добавлен 19.10.2009Характеристика программы на языке VBA, которая вводит исходные данные, выполняет расчеты и выводит результаты на экран. Описание переменных в программе, ее блок-схема и алгоритм работы. Листинг программы. Описание входных данных и результат вычислений.
курсовая работа [721,4 K], добавлен 10.11.2010Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Разработка информационной программы для риэлтерской конторы по учету клиентской базы и базы квартир с фиксированием всех операций по купле-продаже. Описание структуры базы данных. Создание запросов и отчетов. Инструкция по эксплуатации, текст программы.
курсовая работа [2,4 M], добавлен 07.09.2012Возможности извлечения информации из баз данных. Программы для создания и обработки базы данных и создания пользовательского интерфейса. Обоснование выбора программных средств для реализации. Создание базы данных, интерфейса и базы данных к интерфейсу.
курсовая работа [2,9 M], добавлен 24.03.2023Программный продукт для игры "Крестики-нолики". Описание пользовательского интерфейса. Факт базы данных, определяющий состояние счёта. Предикат изменяющий состояние игрового процесса и подсчитывающий количество занятых ячеек поля. Исходный код программы.
курсовая работа [34,6 K], добавлен 19.05.2014Написание программы для работы со списком документов, разработка функционала. Требования к аппаратному и программному обеспечению. Описание интерфейса пользователя. Структура программы и описание данных. Процедура тестирования и его результаты.
курсовая работа [1,5 M], добавлен 26.08.2012Составление схемы концептуальной модели данных. Разработка структуры реляционной базы данных и интерфейса пользователя. Особенности главных этапов проектирования базы данных. Способы реализации запросов и отчетов. Специфика руководства пользователя.
курсовая работа [186,9 K], добавлен 18.12.2010Описание глобальных переменных и подпрограмм. Блок-схема головной функции main. Нахождение произведения элементов с четными номерами. Минимум среди сумм элементов диагоналей, параллельных побочной диагонали матрицы. Результаты тестового прогона программы.
курсовая работа [766,4 K], добавлен 10.02.2015