Курсовая работа: Разработка программного обеспечения для расчетов при монтаже строительных конструкций

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Министерство образования и науки Российской Федерации

ФГБОУ ВПО

«Уфимский государственный нефтяной технический университет»

Кафедра «Вычислительная техника и инженерная кибернетика»

Отчёт

по курсовому проекту

по разработке компонентов САПР

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

Уфа-2017

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

каркас одноэтажный здание

В курсовой работе описываются строительно-монтажные работы по возведению одноэтажного здания, каркас которого состоит из металлических конструктивных элементов. При определении параметров крана и троса, необходимо произвести расчеты, связанные с выбором основных монтажных приспособлений и грузозахватных устройств.

В связи с этим возникает необходимость разработки такого программного средства, которое позволяет выполнить расчеты параметров грузозахватного устройства.

В данной работе представлена структура и содержание программного средства расчетов при монтаже строительных конструкций. Программа представляет собой EXE-файл. Описание функций и клавиш будет приведено ниже.

1. Функции программы

1.1 Расчёт высоты подъема крюка

Рисунок 1. Интерфейс окна расчёта высоты подъема крюка.

Требумая высота крюка определяется по формуле:

, где

- превышение опоры монтируемого элемента.

- высота запаса, требующаяся из условий безопасности и удобства монтажа.

- высота монтируемого элемента.

- высота строповки.

1.2 Расчёт вылета крюка

Рисунок 2. Интерфейс окна расчёта вылета крюка.

Требумый вылет крюка рассчитывается по следующей формуле:

, где

а - ширина кранового пути.

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

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

1.3 Подбор троса

Рисунок 3. Интерфейс окна подбора троса.

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

Расчёт определяется по формуле (1):

, где

S - усилие, возникающее в одной ветви.

a - угол отклонения от вертикали.

Q - масса поднимаемой конструкции.

m - количество ветвей стропа.

И формуле (2):

, где

P - разрывное усилие в ветви стропа

k - коэффициент запаса прочности

В этом окне доступны функции добавления троса в локальную базу данных SQLite и просмотра всех тросов в базе данных.

Для хранения информации о тросах, была подключена база данных SQLite и создана таблица со следующей структурой:

Ключ

Наименование

Разрывное усилие

Диаметр

….

Таблица 1. Таблица в базе данных для хранения информации о троссах.

Рисунок 4. Интерфейс окна добавления троса.

Рисунок 5. Интерфейс окна просмотра всех тросов в базе данных.

1.4 Расчёт грузоподъемности крана

Рисунок 6. Интерфейс окна грузоподъемности крана.

Расчёт производится по формуле:

, где

- масса наиболее массивного элемента

- Масса строповочного устройства

- масса оснастки

2 Техническая реализация

2.1 Выбор средств разработки

Выбор проходил между двумя языками программирования: C# и C++.

C++ и C# -- это два разных языка программирования с C-подобным синтаксисом.

C# -- объектно-ориентированный язык с автоматическим управлением памятью, предназначенный для программирования на платформе .NET.

C++ -- кроссплатформенный язык общего назначения, совместимый в большинстве случаев с C.

Было решено осуществлять разработку на языке программирования C#.

Язык программирования C# -- объектно-ориентированный язык программирования, созданный компанией Microsoft для поддержки среды .NET Framework, является прямым потоком двух самых успешных в мире компьютерных языков: C и C++. От C он унаследовал синтаксис, ключевые слова и операторы. Он позволяет построить и усовершенствовать объектную модель, определенную в C++.

В качестве среды разработки выбрана Visual Studio. Это набор инструментов разработки, основанных на использовании компонентов, и других технологий для создания мощных, производительных приложений. Кроме того, среда Visual Studio оптимизирована для совместного проектирования, разработки и развертывания корпоративных решений.

В качестве базы данных была выбрана встраиваемая SQLite.

SQLite -- это встраиваемая кроссплатформенная БД, которая поддерживает достаточно полный набор команд SQL и доступна в исходных кодах.

Выбор на эту базу даных пал из-за простоты использования, отсутствия необходимости настройки сервера СУБД, свободной лицензии.

Также хотелось бы отметить её безопасность. База данных хранится в одном файле, права доступа к которому можно контролировать стандартными средствами ОС.

Код автоматически документируется в XML-документацию, через комментарии в коде.

Приложение 1

Листинг кода. Вспомогательные функции.

class Helpers

{

/// <summary>

/// Функция проверки на пустоту

/// </summary>

/// <param name="textBox">Входная строка</param>

/// <returns>Булево значение</returns>

public bool CheckNull(TextBox textBox)

{

return string.IsNullOrWhiteSpace(textBox.Text);

}

/// <summary>

/// Функция конвертирования строки в число типа с плавающей запятой

/// </summary>

/// <param name="textBox">Входная строка</param>

/// <returns>Число на выходе</returns>

public double TextToDouble(TextBox textBox)

{

return Double.Parse(textBox.Text, CultureInfo.InvariantCulture);

}

/// <summary>

/// Метод показа ошибки

/// </summary>

/// <param name="message">Текст ошибки</param>

public void ShowError(Exception message)

{

MessageBox.Show("Произошла ошибка\nТекст ошибки: " + message.ToString(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

public void ShowAlarm(string message)

{

MessageBox.Show(message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

/// <summary>

/// Метод показа оповещения

/// </summary>

/// <param name="message">Информационное сообщение</param>

public void ShowInfo(string message)

{

MessageBox.Show(message, "Оповещение", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

/// <summary>

/// Функция конвертирования градусов в радианы

/// </summary>

/// <param name="angle">Угол в градусах</param>

/// <returns>Угол в радианах</returns>

public double ConvertToRadians(double angle)

{

return (Math.PI / 180) * angle;

}

/// <summary>

/// Функция заполнения DataGridView из базы данных SQLite

/// </summary>

/// <param name="sql">Строка с SQL-запросом</param>

/// <param name="dataGrid">DataGridView который нужно заполнять</param>

public void FillTable(string sql, DataGridView dataGrid)

{

if (File.Exists("database.db3"))

{

using (SQLiteConnection conn = new SQLiteConnection("data source=database.db3"))

{

using (SQLiteCommand cmd = new SQLiteCommand(conn))

{

try

{

conn.Open();

SQLiteCommand comm = new SQLiteCommand(sql, conn);

using (SQLiteDataReader read = comm.ExecuteReader())

{

while (read.Read())

{

dataGrid.Rows.Add(new object[] {

read.GetValue(0),

read.GetValue(read.GetOrdinal("Name")),

read.GetValue(read.GetOrdinal("Force")),

read.GetValue(read.GetOrdinal("Diameter"))

});

}

}

}

catch (Exception ex)

{

ShowError(ex);

}

}

}

}

}

}

Приложение 2

Листинг кода. Окно добавления троса.

public partial class AddRopeForm : Form

{

Helpers help = new Helpers();

Random rand = new Random();

private string createDatabase = @"CREATE TABLE IF NOT EXISTS

[Ropes] (

[Id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,

[Name] NVARCHAR(2048) NULL,

[Force] REAL NULL,

[Diameter] REAL NULL)";

public AddRopeForm()

{

InitializeComponent();

}

private void buttonAddRope_Click(object sender, EventArgs e)

{

using (SQLiteConnection conn = new SQLiteConnection("data source=database.db3"))

{

using (SQLiteCommand cmd = new SQLiteCommand(conn))

{

try

{

conn.Open();

cmd.CommandText = createDatabase;

cmd.ExecuteNonQuery();

string name = ropeName.Text;

double force = help.TextToDouble(ropeForce);

double diameter = help.TextToDouble(ropeDiametr);

cmd.CommandText =@"INSERT INTO Ropes(Name,Force,Diameter) VALUES(@name,@force,@diameter)";

cmd.Parameters.AddWithValue("@name", name);

cmd.Parameters.AddWithValue("@force", force);

cmd.Parameters.AddWithValue("@diameter", diameter);

cmd.ExecuteNonQuery();

help.ShowInfo("Трос успешно добавлен.");

this.Close();

}

catch (Exception ex)

{

help.ShowError(ex);

}

}

}

}

}

Приложение 3

Листинг кода. Окно добавления троса.

public partial class RopesForm : Form

{

Helpers help = new Helpers();

string selectTable = "SELECT * from Ropes";

public RopesForm()

{

InitializeComponent();

}

private void RopesForm_Load(object sender, EventArgs e)

{

help.FillTable(selectTable, dataGridViewRopes);

}

}

Приложение 4

Листинг кода. Окно расчёта высоты подъема крюка.

private void buttonResult1_Click(object sender, EventArgs e)

{

try

{

if (!help.CheckNull(excess1) && !help.CheckNull(stock1)

&& !help.CheckNull(heightOne1) && !help.CheckNull(heightTwo1))

{

double Ho = help.TextToDouble(excess1);

double Hz = help.TextToDouble(stock1);

double Hel = help.TextToDouble(heightOne1);

double Hc = help.TextToDouble(heightTwo1);

heightResult1.Text = (Ho + Hz + Hel + Hc).ToString();

panel1.Visible = true;

}

else

{

help.ShowAlarm("Поля не могут быть пустыми.");

}

}

catch (Exception exception)

{

help.ShowError(exception);

}

}

Приложение 5

Листинг кода. Окно расчёта вылета крюка.

private void buttonResult2_Click(object sender, EventArgs e)

{

try

{

if (!help.CheckNull(centreDistance2) &&

!help.CheckNull(buildingDistance2) && !help.CheckNull(width2))

{

double a = help.TextToDouble(width2);

double b = help.TextToDouble(buildingDistance2);

double c = help.TextToDouble(centreDistance2);

departureResult2.Text = (a / 2 + b + c).ToString();

panel2.Visible = true;

}

else

{

help.ShowAlarm("Поля не могут быть пустыми.");

}

}

catch (Exception exception)

{

help.ShowError(exception);

}

}

Приложение 6

Листинг кода. Окно подбора троса.

private void buttonResult3_Click(object sender, EventArgs e)

{

try

{

if (!help.CheckNull(weight3) && !help.CheckNull(count3) && !help.CheckNull(angle3) && !help.CheckNull(ratio3))

{

double a = help.TextToDouble(angle3);

double rad = help.ConvertToRadians(a);

double Q = help.TextToDouble(weight3);

double m = help.TextToDouble(count3);

double S = (10 * Q) / (Math.Cos(rad) * m);

double k = help.TextToDouble(ratio3);

double P = S * k;

string selectTable = "SELECT * from Ropes";

forceResult3.Text = P.ToString();

help.FillTable(selectTable, dataGridViewRopes);

panel3.Visible = true;

}

else

{

help.ShowAlarm("Поля не могут быть пустыми.");

}

}

catch (Exception exception)

{

help.ShowError(exception);

}

}

Приложение 7

Листинг кода. Окно расчёта грузоподъемности крана.

private void buttonResult4_Click(object sender, EventArgs e)

{

try

{

if (!help.CheckNull(weight4) && !help.CheckNull(snap4) && !help.CheckNull(device4))

{

double Pe = help.TextToDouble(weight4);

double Pc = help.TextToDouble(snap4);

double Po = help.TextToDouble(device4);

loadResult4.Text = (Pe + Pc + Po).ToString();

panel4.Visible = true;

}

else

{

help.ShowAlarm("Поля не могут быть пустыми.");

}

}

catch (Exception exception)

{

help.ShowError(exception);

}

}