Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294

Учет ГСМ

29.10.2016, 19:00. Показов 3817. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, пишу курсовую работу по учету гсм на С#. Есть ряд вопросов(но прежде посмотрите программу):
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO; //для работы с потоковыми классами
 
namespace AZS_2016
{
    public partial class AZS_1 : Form
    {
        public AZS_1()
        {
            InitializeComponent();
        }
 
         void Price_for_Fuel1_TextChanged(object sender, EventArgs e)
        {
            string price_92 = "35,65";
            Price_for_Fuel1.Text = price_92;
        }
 
        private void Price_for_Fuel3_TextChanged(object sender, EventArgs e)
        {
            string price_95 = "37,40";
            Price_for_Fuel3.Text = price_95;
        }
 
        private void Price_for_Fuel2_TextChanged_1(object sender, EventArgs e)
        {
            string price_DT = "38,55";
            Price_for_Fuel2.Text = price_DT;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            var fin_out = new StreamReader("storage_92.txt");
            var str = fin_out.ReadToEnd();
            fin_out.Close();
            int stor = Convert.ToInt32(str);
            int litr = Convert.ToInt32(Fuel1.Text);
            double ostatok = stor - litr;
            str = Convert.ToString(ostatok);
            var fin_in = new StreamWriter("storage_92.txt");
            fin_in.Write(str);
            fin_in.Close();
        }
 
        private void label10_Click(object sender, EventArgs e)
        {
 
        }
    }
}

1) Как мне посчитать сумму за весь заправленный бензин
2) Каким образом в этой программе можно реализовать "Наследование".
Создать например класс и задать в нем
C#
1
2
3
4
5
class Fuel 
{
     int Fuel_Id; // 92,92 или ДТ
     double Price; // ведь у каждого бензина своя цена
}
И что-то больше ничего придумать не могу. Слишком усложнять программу не нужно.
3) И как в этой программе можно применять "Полиморфизм" и "Инкапсуляцию"
Буду очень благодарен, за помощь. Если есть вопросы - задавайте.

Добавлено через 3 часа 24 минуты
Актуальны вопросы:
2 и 3
Второй вроде реализовал, посмотрите пожалуйста
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO; //для работы с потоковыми классами
 
namespace AZS_2016
{
    public partial class AZS_1 : Form
    {
        public AZS_1()
        {
            InitializeComponent();
        }
        class Fuel_Price
        {
            public double ai92(double price_92, int litr)
            {
                double total = price_92 * litr;
                return total; 
            }
            public double ai95(double price_95, int litr)
            {
                double total = price_95 * litr;
                return total;
            }
            public double aiDT(double price_DT,int litr)
            {
                double total = price_DT * litr;
                return total;
            }
        }
         private void Price_for_Fuel1_TextChanged(object sender, EventArgs e)
        {
            double price_92 = 35.65;
            Price_for_Fuel1.Text = Convert.ToString(price_92);
        }
 
        private void Price_for_Fuel3_TextChanged(object sender, EventArgs e)
        {
            double price_DT = 37.40;
            Price_for_Fuel1.Text = Convert.ToString(price_DT); ;
        }
 
        private void Price_for_Fuel2_TextChanged_1(object sender, EventArgs e)
        {
            double price_95 = 38.90;
            Price_for_Fuel1.Text = Convert.ToString(price_95);
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            var fin_out = new StreamReader("storage_92.txt"); //открытие файла "Цестерна_92" для чтения
            var str = fin_out.ReadToEnd(); // чтение до конца файла и присвоение переменной
            fin_out.Close(); //закрытие файла
            int stor = Convert.ToInt32(str); //конвертируем в инт и присваиваем считанные данные переменной
            int litr = Convert.ToInt32(Fuel1.Text); //конвертируем вписанные данные в текстбокс Fuel1
            double ostatok = stor - litr; //остаток бензина в цестерне
            str = Convert.ToString(ostatok); //остаток конвертирум в стринг
            var fin_in = new StreamWriter("storage_92.txt"); //открываем файл для записи
            fin_in.Write(str); //записываем все, что хранится в переменой стр
            fin_in.Close(); // закрываем файл
            Fuel_Price af = new Fuel_Price();
            double summary = af.ai92(35.65,litr); //общая сумма за бензин
            summa.Text = Convert.ToString(summary); //конвертация в стринг и вывод в текстбокс
            var sum_out = new StreamReader("total_sum.txt"); //открываем файл для чтения
            var sum_o = sum_out.ReadToEnd(); //читаем до конца файл
            double conv_sum_o = Convert.ToDouble(sum_o); //конвертируем переменную с содержимым файл в даубл
            sum_out.Close(); // закрываем файл для чтения
            var sum_in = new StreamWriter("total_sum.txt"); // открываем файл для записи
            double total_sum = conv_sum_o + summary; // берем складываем старые данные и новые
            sum_in.Write(total_sum);//записываем сумму в файл
            sum_in.Close();//закрываем файл
        }
 
        private void Add_Fuel1_Click(object sender, EventArgs e)
        {
            var file_in = new StreamReader("storage_92.txt");//открывем текстовый файл для чтения
            var str = file_in.ReadToEnd(); //читаем до конца
            file_in.Close(); // закрываем
            if (str != "200") // если в цестерне не 200 литров
            {
                var file_out = new StreamWriter("storage_92.txt"); //открываем файл для записи
                str = "200"; // присваем цестерне 200
                file_out.Write(str); //записываем в файл
                file_out.Close() ; // закрываем файл
            }
        }
    }
}

Окно выглядит примерно так:
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2016, 19:00
Ответы с готовыми решениями:

Учет ГСМ
Всем helllo!!! У меня вопрос надо создать БД Учет ГСМ (приход и расход топлива, списание топлива по путевым листам ...) подскажите...

Учет путевых и ГСМ
Добрый день! Хочу немного облегчить себе заполнение отчетных данных по списанию ГСМ, но знаний видимо не достаточно. Может кто нибудь...

Склад ГСМ
Доброе время суток. Подскажите как правильно создать запрос для остатков на конец дня и для остатка на начало дня.

17
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
29.10.2016, 20:00
Цитата Сообщение от Kurtis Посмотреть сообщение
1) Как мне посчитать сумму за весь заправленный бензин
2) Каким образом в этой программе можно реализовать "Наследование".
3) И как в этой программе можно применять "Полиморфизм" и "Инкапсуляцию"
Попробуйте воспользоваться такими классами:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    abstract class Fuel
    {
        public virtual double Price{ get { return 0; } }
        public double Volume { get; set; }
        public double Total { get { return Volume*Price; }}
    }
 
    class AI92 : Fuel
    {
        public override double Price { get { return 35.65; } }
    }
 
    class AI95 : Fuel
    {
        public override double Price { get { return 38.90; } }
    }
 
    class DT : Fuel
    {
        public override double Price { get { return 37.40; } }
    }
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
30.10.2016, 11:51  [ТС]
Storm23, доброго времени суток! А вы можете подсказать как вызвать отсюда переменную price_92
C#
1
2
3
4
5
         private void Price_for_Fuel1_TextChanged(object sender, EventArgs e)
        {
            double price_92 = 35.65;
            Price_for_Fuel1.Text = Convert.ToString(price_92);
        }
и положить ее сюда
C#
1
double summary = af.ai92(35.65,litr);
вместо числа???
Просто первая конструкция, которую я вам показал служит для отображения стоимости бензина в текстбокс. Корректно ли я это сделал???
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
30.10.2016, 14:17
Цитата Сообщение от Kurtis Посмотреть сообщение
Корректно ли я это сделал???
Нет, в вашем коде все сделано неправильно, а событие Price_for_Fuel1_TextChanged вообще лишено смысла.
Вам нужно сделать следующим образом:
1) В форме создать поле типа Fuel:
C#
1
private Fuel CurrentFuel;
2) Сделать комбобокс, в котором пользователь может выбрать тип горючего.
3) Сделать воле ввода, в котором пользователь может ввести требуемый объем горючего.
4) Сделать кнопку "Заправить", по которой вам нужно создать объект типа AI92, AI95 или DT - в зависимости от выбранной марки в комбобоксе. Объект занести в поле CurrentFuel. В свойство Volume созданного объекта нужно занести объем топлива.
5) Теперь объем, цена и сумма будут доступны в объекте CurrentFuel, и вы можете делать дальнейшие вычисления, обращаясь к данному объекту.
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
30.10.2016, 16:27  [ТС]
1) В форме создать поле типа Fuel:
C#Выделить код
1
private Fuel CurrentFuel;
Этого понять не могу.... Что это за поле с типом Fuel и где оно на форме должно располагаться?

Добавлено через 16 минут
И еще, можно ли так объявлять данные для combobox'a
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
        private void AZS_1_Load(object sender, EventArgs e)
        {
            Fuel_Type.Items.Add("АИ-92");
            Fuel_Type.Items.Add("АИ-95");
            Fuel_Type.Items.Add("ДТ");
        }
а потом вызывать в Button_click1(заправить) через
C#
1
2
3
4
             if (Fuel_Type.Text == "АИ-92");
            {
 
            }
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
30.10.2016, 16:39
Можно еще вот так попробовать вот такие классы определить. С учетом того, что дизтопливо есть разное)))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {
            Fuel ai95 = new GasolineFuel(GasolineType.AI95);
            Fuel ai98 = new GasolineFuel(GasolineType.AI98);
            Fuel winterDiesel = new DieselFuel(DieselType.WINTER);
            Fuel summerDiesel = new DieselFuel(DieselType.SUMMER);
        }
    }
 
    public abstract class Fuel {
        public abstract double Price { get; }
    }
 
    public class GasolineFuel : Fuel {
        public GasolineFuel(GasolineType type) {
            Type = type;
        }
        public GasolineType Type { get; private set; }
 
        public override double Price {
            get {
                double price = 0;
                switch (Type) {
                    case GasolineType.AI95:
                        price = 38.90;
                        break;
                    case GasolineType.AI98:
                        price = 39.50;
                        break;
                    default:
                        break;
                }
                return price;
            }
        }
    }
 
    public class DieselFuel : Fuel {
        public DieselFuel(DieselType type) {
            Type = type;
        }
        public DieselType Type { get; private set; }
 
        public override double Price {
            get {
                double price = 0;
                switch (Type) {
                    case DieselType.SUMMER:
                        price = 37.40;
                        break;
                    case DieselType.WINTER:
                        price = 38.50;
                        break;
                    default:
                        break;
                }
                return price;
            }
        }
    }
 
    public enum DieselType {
        WINTER, 
        SUMMER
    }
 
    public enum GasolineType {
        AI95, 
        AI98
    }
}
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
30.10.2016, 16:39  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void button1_Click(object sender, EventArgs e)
        {
            if (Fuel_Type.Text == "АИ-92")
            {
                double price_92 = 35.56;
            }
 
            else if (Fuel_Type.Text == "АИ-92")
            {
                double price_95 = 38.60;
            }
            else if (Fuel_Type.Text == "ДТ")
            {
                double price_95 = 38.60;
            }
        }
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
30.10.2016, 16:40
Цитата Сообщение от Kurtis Посмотреть сообщение
можно ли так объявлять данные для combobox'a
Переопределите метод ToString() в каждом классе и добавляйте.
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
30.10.2016, 16:46  [ТС]
Просто объясню, что преподавателю хотелось бы увидеть(имею ввиду визуально). Окно, в котором отображается:
1) Выбор бензина
2) Цена выбранного бензина
3) Ввод кол-во литров бензина
4) Кнопка заправка и бензовоз
После выбора бензина, цену лучше вывести в тектбокс?
C#
1
2
3
4
5
            if (Fuel_Type.Text == "АИ-92")
            {
                double price_92 = 35.56;
                price_litr.Text = Convert.ToString(price_92);
            }
Мне кажется или я к тому же возвращаюсь, с чего и начинал?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
31.10.2016, 11:23
Лучший ответ Сообщение было отмечено Kurtis как решение

Решение

Цитата Сообщение от Kurtis Посмотреть сообщение
Этого понять не могу.... Что это за поле с типом Fuel и где оно на форме должно располагаться?
Форма - это такой же класс, как и любой другой. В этом классе вы можете размещать произвольные методы, поля, свойства и события.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication353
{
    public partial class MainForm : Form
    {
        //выбранное топливо
        private Fuel CurrentFuel;
 
        public MainForm()
        {
            InitializeComponent();
            //обновляем интерфейс
            UpdateInterface();
        }
 
        /// <summary>
        /// Обновление интерфейса
        /// </summary>
        void UpdateInterface()
        {
            if(cbFuelType.SelectedIndex == -1)
            {
                //не выбран тип топлива, блокируем поле ввода и кнопку
                btFill.Enabled = tbVolume.Enabled = false;
                return;//выходим
            }
            //разблокируем поле ввода и кнопку
            btFill.Enabled = tbVolume.Enabled = true;
            //создадим объект Fuel
            switch(cbFuelType.SelectedItem.ToString())
            {
                case "АИ-92": CurrentFuel = new AI92(); break;
                case "АИ-95": CurrentFuel = new AI95(); break;
                case "ДТ": CurrentFuel = new DT(); break;
            }
            //заносим объем топлива
            CurrentFuel.Volume = (double)tbVolume.Value;
            //выводим цену
            tbPrice.Text = CurrentFuel.Price.ToString("0.00");
            //выводим стоимость
            tbTotal.Text = CurrentFuel.Total.ToString("0.00");
        }
 
        private void cbFuelType_SelectedIndexChanged(object sender, EventArgs e)
        {
            //обновляем интерфейс
            UpdateInterface();
        }
 
        private void btFill_Click(object sender, EventArgs e)
        {
            MessageBox.Show(string.Format("Цена: {0:0.00}\r\nОбъем: {1:0.00}\r\nСтоимость: {2:0.00}", CurrentFuel.Price, CurrentFuel.Volume, CurrentFuel.Total));
        }
    }
 
    /// <summary>
    /// Топливо
    /// </summary>
    abstract class Fuel
    {
        public virtual double Price { get { return 0; } }
        public double Volume { get; set; }
        public double Total { get { return Volume * Price; } }
    }
 
    class AI92 : Fuel
    {
        public override double Price { get { return 35.65; } }
    }
 
    class AI95 : Fuel
    {
        public override double Price { get { return 38.90; } }
    }
 
    class DT : Fuel
    {
        public override double Price { get { return 37.40; } }
    }
}
Вложения
Тип файла: zip WindowsFormsApplication353.zip (48.9 Кб, 50 просмотров)
2
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
02.11.2016, 19:20  [ТС]
Storm23, добрый вечер. Спасибо за программу, сделал по своему, но с некоторыми вашими элементами. Например, обновление интерфейса, не знал что такое вообще есть. А могли бы посоветовать книгу, по работе с windows forms?
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
27.11.2016, 09:56  [ТС]
Доброго времени суток, снова! Новая проблема образовалась.
При вводе количества бензина, у меня сразу же появляется цена, как только я ввожу отрицательное число, у меня ошибка выходит на этом действии int litr = Convert.ToInt32(LiterstextBox1.Text); Хотя у int32 от -2млн до 2млн диапазон.
Миниатюры
Учет ГСМ  
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
27.11.2016, 10:13  [ТС]
Как сделать так, чтобы любое число, которое было введено в textbox становилось положительным
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
27.11.2016, 14:37
C#
1
your_number = Math.Abs(your_number);
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
27.11.2016, 17:29  [ТС]
Diamante, дело в том, что меня выбрасывает на ошибку как только я ввожу "-"
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
27.11.2016, 18:05
C#
1
Convert.ToInt32(LiterstextBox1.Text.Replace("-",""));
0
8 / 5 / 3
Регистрация: 13.02.2013
Сообщений: 294
27.11.2016, 18:14  [ТС]
Diamante, а если у меня вот так
Кликните здесь для просмотра всего текста
C#
1
2
3
 double ConvertLiters = zapr.CountingSum(Convert.ToInt32(LitersTextBox2.Text.Replace("-","0")));//вызов метода и передача конвентированного значения литров
string ConvertSum = Convert.ToString(ConvertLiters);//конвертируем полученную сумму в string
TotalTextBox3.Text = ConvertSum;//выводим сумму в текст бокс
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
27.11.2016, 18:30
вот оно ч0, Михалыч!
попробуй так
C#
1
2
double your_var;
your_var = double.TryParse(LitersTextBox2.Text, out your_var) ? your_var : 0;
ну дальше пхай your_var куда там надо
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.11.2016, 18:30
Помогаю со студенческими работами здесь

Расход ГСМ
Подскажите как сделать: 1. если отчет нужно делать раз в месяц, лучше вести базу в одной таблице, просто делать выборку по дате? 2. как...

Определение средств экономии ГСМ
Здравствуйте, помогите пожалуйста решить задачу на паскале. Буду очень благодарна. составьте алгоритм и программу запроса данных и печати...

Расчет хранение ГСМ тн-сутки
Добрый день! помогите собрать формулу для расчета хранения дизельного топлива. первые 30 суток бесплатные, далее идет 12 рублей/тн/сут. с...

Таблица по учету ГСМ - фильтр для каждого сотрудника
Добрый день! Имеется таблица по учету ГСМ. Автомобилем пользуются разные сотрудники, и оплачивают топливо сами, для компенсации необходимо...

Учет средств измерения (учет приборов для метрологов)
Доброго всем времени суток. Столкнулся с такой проблемой как учет средств измерения (приборы КИПиА), раньше их было несколько десятков и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru