Загрузка данных
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
namespace Щебнев
{
internal class FV
{
public class Metal
{
public string Metals { get; set; }
public string Name { get; set; }
public double Density { get; set; }
public string History { get; set; }
}
public static List<Metal> metal = new List<Metal>
{
new Metal { Metals="Сталь", Name="Ст3", Density=7.85, History="Ст3 — углеродистая конструкционная сталь обыкновенного качества. Широко применяется в строительстве и машиностроении." },
new Metal { Metals="Сталь", Name="Ст20", Density=7.85, History="Сталь 20 — низкоуглеродистая конструкционная сталь. Хорошо сваривается, применяется для трубопроводов." },
new Metal { Metals="Сталь", Name="Ст45", Density=7.85, History="Сталь 45 — среднеуглеродистая сталь повышенной прочности. Применяется для валов, шестерён." },
new Metal { Metals="Сталь", Name="A36", Density=7.85, History="Конструкционная сталь A36 по стандарту ASTM. Популярна в США для металлоконструкций." },
new Metal { Metals="Сталь", Name="65Г", Density=7.82, History="Пружинная сталь 65Г. Высокая упругость и износостойкость." },
new Metal { Metals="Нержавеющая сталь", Name="AISI 304", Density=7.93, History="AISI 304 — наиболее распространённая нержавеющая сталь. Пищевое и химическое оборудование." },
new Metal { Metals="Нержавеющая сталь", Name="AISI 316", Density=8.00, History="AISI 316 — кислотостойкая нержавейка с молибденом. Применяется в морской и химической промышленности." },
new Metal { Metals="Нержавеющая сталь", Name="AISI 430", Density=7.70, History="AISI 430 — ферритная нержавеющая сталь. Применяется в декоративных и бытовых изделиях." },
new Metal { Metals="Нержавеющая сталь", Name="12Х18Н10Т", Density=7.90, History="12Х18Н10Т — аустенитная нержавеющая сталь с титаном. Высокая жаропрочность." },
new Metal { Metals="Нержавеющая сталь", Name="20Х13", Density=7.75, History="20Х13 — мартенситная нержавеющая сталь. Применяется для столовых приборов и турбинных лопаток." },
new Metal { Metals="Алюминий", Name="АД0", Density=2.70, History="АД0 — технически чистый алюминий. Высокая электро- и теплопроводность." },
new Metal { Metals="Алюминий", Name="АМг3", Density=2.66, History="АМг3 (AlMg3) — алюминий-магниевый сплав. Хорошая свариваемость и коррозионная стойкость." },
new Metal { Metals="Алюминий", Name="Д16", Density=2.78, History="Д16 — дюралюминий. Высокая прочность, применяется в авиационной промышленности." },
new Metal { Metals="Алюминий", Name="АВ", Density=2.72, History="Сплав АВ — авиаль. Хорошо прессуется и анодируется." },
new Metal { Metals="Алюминий", Name="В95", Density=2.85, History="В95 — высокопрочный алюминиевый сплав. Применяется в силовых авиационных конструкциях." },
new Metal { Metals="Бронза", Name="БрОФ10-1", Density=8.70, History="БрОФ10-1 — оловянно-фосфористая бронза. Высокие антифрикционные свойства." },
new Metal { Metals="Бронза", Name="БрАЖ9-4", Density=7.60, History="БрАЖ9-4 — алюминиево-железистая бронза. Применяется для втулок и подшипников." },
new Metal { Metals="Бронза", Name="БрКМц3-1", Density=8.40, History="БрКМц3-1 — кремнисто-марганцевая бронза. Упругие элементы и пружины." },
new Metal { Metals="Бронза", Name="БрО5Ц5С5", Density=8.80, History="БрО5Ц5С5 — оловянная бронза. Арматура, подшипники." },
new Metal { Metals="Бронза", Name="БрАМц9-2", Density=7.65, History="БрАМц9-2 — алюминиево-марганцевая бронза. Детали машин и приборов." },
new Metal { Metals="Латунь", Name="Л63", Density=8.45, History="Л63 — двойная латунь. Хорошо штампуется и тянется." },
new Metal { Metals="Латунь", Name="Л68", Density=8.50, History="Л68 — латунь с высоким содержанием меди. Применяется для гильз и патронов." },
new Metal { Metals="Латунь", Name="ЛС59-1", Density=8.45, History="ЛС59-1 — свинцовистая латунь. Хорошо обрабатывается резанием." },
new Metal { Metals="Латунь", Name="ЛАЖ60-1-1", Density=8.20, History="ЛАЖ60-1-1 — алюминиево-железистая латунь. Морская арматура." },
new Metal { Metals="Латунь", Name="ЛЖМц59-1-1",Density=8.50, History="ЛЖМц59-1-1 — железомарганцевая латунь. Конденсаторные трубки." },
new Metal { Metals="Медь", Name="М1", Density=8.96, History="М1 — медь высокой чистоты (99.9%). Электрические провода и кабели." },
new Metal { Metals="Медь", Name="М2", Density=8.94, History="М2 — медь электротехническая. Шины, провода." },
new Metal { Metals="Медь", Name="М3", Density=8.93, History="М3 — медь общего назначения. Трубки, листы, прутки." },
new Metal { Metals="Медь", Name="М1р", Density=8.96, History="М1р — медь раскисленная фосфором. Сварные конструкции." },
new Metal { Metals="Медь", Name="МБ", Density=8.90, History="МБ — бескислородная медь. Электровакуумные приборы." },
new Metal { Metals="Титан", Name="ВТ1-0", Density=4.51, History="ВТ1-0 — технически чистый титан. Химическая промышленность, медицина." },
new Metal { Metals="Титан", Name="ВТ6", Density=4.43, History="ВТ6 (Ti-6Al-4V) — наиболее распространённый титановый сплав. Авиация, имплантаты." },
new Metal { Metals="Титан", Name="ВТ14", Density=4.42, History="ВТ14 — высокопрочный α+β-сплав. Крепёжные детали авиаконструкций." },
new Metal { Metals="Титан", Name="ОТ4", Density=4.55, History="ОТ4 — α-сплав титана с алюминием и марганцем. Листовая штамповка." },
new Metal { Metals="Титан", Name="ПТ-3В", Density=4.50, History="ПТ-3В — псевдо-α сплав. Лопатки компрессоров." },
new Metal { Metals="Чугун", Name="СЧ15", Density=7.20, History="СЧ15 — серый чугун. Корпусные детали, станины станков." },
new Metal { Metals="Чугун", Name="СЧ20", Density=7.25, History="СЧ20 — серый чугун повышенной прочности. Блоки цилиндров двигателей." },
new Metal { Metals="Чугун", Name="ВЧ50", Density=7.10, History="ВЧ50 — высокопрочный чугун с шаровидным графитом. Коленвалы, шестерни." },
new Metal { Metals="Чугун", Name="КЧ35-10",Density=7.30, History="КЧ35-10 — ковкий чугун. Детали сельхозмашин и автомобилей." },
new Metal { Metals="Чугун", Name="ЧХ16", Density=7.40, History="ЧХ16 — хромистый белый чугун. Размольные детали, износостойкие изделия." },
new Metal { Metals="Цинк", Name="Ц0А", Density=7.13, History="Ц0А — цинк особой чистоты. Применяется в гальванике и химической промышленности." },
new Metal { Metals="Цинк", Name="ЦА4", Density=6.60, History="ЦА4 — цинково-алюминиевый сплав. Литьё под давлением." },
new Metal { Metals="Цинк", Name="ЦАМ4-3", Density=6.70, History="ЦАМ4-3 — цинково-алюминиево-медный сплав. Точное литьё." },
new Metal { Metals="Цинк", Name="ЦАМ10-5",Density=6.30, History="ЦАМ10-5 — антифрикционный цинковый сплав. Подшипники скольжения." },
new Metal { Metals="Цинк", Name="ЦВ", Density=7.14, History="ЦВ — цинк вторичный. Используется в производстве цинковых сплавов." },
};
}
public partial class MainWindow : Window
{
private string _currentShape = "";
public MainWindow()
{
InitializeComponent();
rbList.IsChecked = true;
Material.SelectedIndex = 0;
}
private void Shape_Checked(object sender, RoutedEventArgs e)
{
if (!(sender is RadioButton rb)) return;
_currentShape = rb.Content.ToString();
UpdateFieldLabels();
}
private void UpdateFieldLabels()
{
lblA.Content = "Размер A, мм:";
lblB.Content = "Размер B, мм:";
lblS.Visibility = Visibility.Collapsed;
tbS.Visibility = Visibility.Collapsed;
switch (_currentShape)
{
case "Уголок":
lblA.Content = "Ширина полки, мм:";
lblB.Content = "Длина полки, мм:";
lblS.Content = "Толщина полки S, мм:";
lblS.Visibility = Visibility.Visible;
tbS.Visibility = Visibility.Visible;
break;
case "Лист":
lblA.Content = "Ширина A, мм:";
lblB.Content = "Высота (толщина) B, мм:";
break;
case "Труба круглая":
lblA.Content = "Наружный диаметр D, мм:";
lblB.Content = "Внутренний диаметр d, мм:";
break;
case "Круг / проволока":
lblA.Content = "Диаметр D, мм:";
lblB.Content = "(не используется)";
break;
case "Квадратная труба":
lblA.Content = "Сторона квадрата A, мм:";
lblB.Content = "Толщина стенки S, мм:";
break;
case "Квадрат":
lblA.Content = "Сторона A, мм:";
lblB.Content = "(не используется)";
break;
case "Швеллер":
lblA.Content = "Ширина полки B, мм:";
lblB.Content = "Высота стенки H, мм:";
lblS.Content = "Толщина стенки S, мм:";
lblS.Visibility = Visibility.Visible;
tbS.Visibility = Visibility.Visible;
break;
case "Лента":
lblA.Content = "Ширина A, мм:";
lblB.Content = "Толщина B, мм:";
break;
case "Балка":
lblA.Content = "Ширина полки B, мм:";
lblB.Content = "Высота H, мм:";
lblS.Content = "Толщина стенки S, мм:";
lblS.Visibility = Visibility.Visible;
tbS.Visibility = Visibility.Visible;
break;
case "Шестигранник":
lblA.Content = "Размер под ключ S, мм:";
lblB.Content = "(не используется)";
break;
case "Рельсы":
lblA.Content = "Высота рельса H, мм:";
lblB.Content = "Ширина подошвы B, мм:";
lblS.Content = "Толщина шейки S, мм:";
lblS.Visibility = Visibility.Visible;
tbS.Visibility = Visibility.Visible;
break;
}
}
private void Material_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (Material.SelectedItem == null) return;
string v = ((ComboBoxItem)Material.SelectedItem).Content.ToString();
MarkaMetall.ItemsSource = FV.metal
.Where(m => m.Metals == v)
.Select(p => p.Name)
.ToList();
if (MarkaMetall.Items.Count > 0)
MarkaMetall.SelectedIndex = 0;
}
private void MarkaMetall_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (MarkaMetall.SelectedItem == null) return;
string p = MarkaMetall.SelectedItem as string;
if (p == null) return;
var metal = FV.metal.FirstOrDefault(m => m.Name == p);
if (metal == null) return;
Density.Text = metal.Density.ToString("F2");
History.Text = metal.History;
}
private void cbHistory_Checked(object sender, RoutedEventArgs e)
=> History.Visibility = Visibility.Visible;
private void cbHistory_Unchecked(object sender, RoutedEventArgs e)
=> History.Visibility = Visibility.Collapsed;
private void Calculate_Click(object sender, RoutedEventArgs e)
{
if (!double.TryParse(Density.Text.Replace(',', '.'),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture,
out double rho))
{
MessageBox.Show("Выберите материал и марку металла.", "Ошибка");
return;
}
double A = ParseMM(tbA.Text);
double B = ParseMM(tbB.Text);
double S = ParseMM(tbS.Text);
double L = ParseM (tbL.Text);
if (L <= 0)
{
MessageBox.Show("Введите длину L (м) > 0.", "Ошибка");
return;
}
double area = 0;
switch (_currentShape)
{
case "Уголок":
if (A <= 0 || B <= 0 || S <= 0) { ShowInputError(); return; }
area = A * S + (B - S) * S;
break;
case "Лист":
case "Лента":
if (A <= 0 || B <= 0) { ShowInputError(); return; }
area = A * B;
break;
case "Труба круглая":
if (A <= 0 || B <= 0 || B >= A) { ShowInputError(); return; }
area = Math.PI / 4.0 * (A * A - B * B);
break;
case "Круг / проволока":
if (A <= 0) { ShowInputError(); return; }
area = Math.PI / 4.0 * A * A;
break;
case "Квадратная труба":
if (A <= 0 || B <= 0) { ShowInputError(); return; }
double inner = A - 2 * B;
if (inner <= 0) { ShowInputError(); return; }
area = A * A - inner * inner;
break;
case "Квадрат":
if (A <= 0) { ShowInputError(); return; }
area = A * A;
break;
case "Швеллер":
if (A <= 0 || B <= 0 || S <= 0) { ShowInputError(); return; }
area = B * S * 2 + (A - 2 * S) * S;
break;
case "Балка":
if (A <= 0 || B <= 0 || S <= 0) { ShowInputError(); return; }
area = 2 * A * S + (B - 2 * S) * S;
break;
case "Шестигранник":
if (A <= 0) { ShowInputError(); return; }
area = (3.0 * Math.Sqrt(3.0) / 2.0) * (A / 2.0) * (A / 2.0);
break;
case "Рельсы":
if (A <= 0 || B <= 0 || S <= 0) { ShowInputError(); return; }
double headH = A * 0.3;
double webH = A * 0.5;
double footH = A - headH - webH;
double headW = B * 0.55;
area = B * footH + S * webH + headW * headH;
break;
default:
MessageBox.Show("Выберите тип проката.", "Ошибка");
return;
}
double volume_mm3 = area * (L * 1000.0);
double volume_cm3 = volume_mm3 / 1000.0;
double mass_g = rho * volume_cm3;
double mass_kg = mass_g / 1000.0;
tbResult.Text = mass_kg.ToString("F3") + " кг";
}
private static double ParseMM(string s)
{
if (string.IsNullOrWhiteSpace(s)) return 0;
double.TryParse(s.Replace(',', '.'),
System.Globalization.NumberStyles.Any,
System.Globalization.CultureInfo.InvariantCulture,
out double v);
return v;
}
private static double ParseM(string s) => ParseMM(s);
private static void ShowInputError()
=> MessageBox.Show("Проверьте введённые размеры.", "Ошибка ввода");
}
}