Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928

Структура поезд. Работа с TimeSpan

19.01.2018, 10:33. Показов 4339. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно создать структуру поезд : №поезда, пункт и время прибытия, пункт и время отбытия.
Вывести все сведения о поездах, время пребывания в пути которых превышает 7 часов 20 минут.
И работать с временем нужно с помощью TimeSpan. А как с ним работать я без понятия(без него бы сделал).
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.01.2018, 10:33
Ответы с готовыми решениями:

Структура: Поезд
Пропустил занятие, теперь в душе не чаю, что нужно сделать(( помогите, пожалуйста Описать структуру с именем TRAIN, содержащую...

Работа с TimeSpan
Привет всем! У меня такая проблема нарисовалась. Есть параметр var rez = new TimeSpan(); Этот параметр я в цикле считаю. Получается...

Работа с TimeSpan
Доброго времени суток, уважаемые форумчане! разрабатываю программу, которая должна будет работать сутками и многие процессы и события...

30
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
19.01.2018, 10:58
Можете что-то вроде такого использовать при сравнении.
C#
1
2
3
4
5
6
TimeSpan ts = new TimeSpan(10, 2, 0);
TimeSpan maxTime = new TimeSpan(7, 20, 0);
if (ts > maxTime)
{
    Console.WriteLine($"{ts} превышает {maxTime}");
}
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
19.01.2018, 11:02  [ТС]
Bespridelschic, позже попробую, а можете еще подсказать как на форме мне ввести время в timespan?
И в каком формате вообще его вводить
0
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
19.01.2018, 11:05
Куча вариантом. Если Win Forms, то можете использовать Label. Выводить можно путем приведения к строке ToString()
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
19.01.2018, 11:07  [ТС]
Bespridelschic, нет как вводить
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
19.01.2018, 11:08
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
struct Train
    {
        public int number; // номер поезда
 
        public string targetStation; // конечная станция
 
        public DateTime arrivalTime; // время прибытия
 
        public string startStation; // начальная сатнция
 
        public DateTime startTime; // время отбытия
    }
 
 
    class RailwayStation
    {
        List<Train> trains = new List<Train>();
 
        public RailwayStation()
        {
            trains.Add(new Train
            {
                number = 1047,
                startStation = "Moskow",
                startTime = new DateTime(2018, 01, 19, 8, 0, 0),
                targetStation = "St. Peterburg",
                arrivalTime = new DateTime(2018, 01, 19, 17, 22, 00)
            });
 
            trains.Add(new Train
            {
                number = 812,
                startStation = "Moskow",
                startTime = new DateTime(2018, 01, 19, 12, 25, 00),
                targetStation = "Berlin",
                arrivalTime = new DateTime(2018, 01, 19, 22, 45, 00)
            });
 
            trains.Add(new Train
            {
                number = 25,
                startStation = "Moskow",
                startTime = new DateTime(2018, 01, 19, 9, 55, 00),
                targetStation = "Chehov",
                arrivalTime = new DateTime(2018, 01, 19, 12, 15, 00)
            });
        }
 
 
        private IEnumerable<Train> GetTrains(TimeSpan timeSpan)
        {
            return trains.Where(x => (x.arrivalTime - x.startTime) >= timeSpan);
        }
 
        public void PrintTrains(TimeSpan timeSpan)
        {
            foreach (var tr in GetTrains(timeSpan))
            {
                Console.WriteLine("Номер поезда - {0}", tr.number);
                Console.WriteLine("Станция отправления - {0}, время отправления - {1}", tr.startStation, tr.startTime.ToShortTimeString());
                Console.WriteLine("Станция назначения - {0}, время прибытия - {1}", tr.targetStation, tr.arrivalTime.ToShortTimeString());
                Console.WriteLine("Время в пути - {0}", tr.arrivalTime - tr.startTime);
                Console.WriteLine();
            }
 
            Console.ReadKey();
        }
    }
 
 class Program
    {
        static void Main(string[] args)
        {
            TimeSpan timeSpan = new TimeSpan(7, 20, 0);
            RailwayStation rs = new RailwayStation();
            rs.PrintTrains(timeSpan);
        }
    }
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
19.01.2018, 11:13  [ТС]
Prog_maker, а можете объяснить что делает эта строка
C#
1
2
3
4
 private IEnumerable<Train> GetTrains(TimeSpan timeSpan)
        {
            return trains.Where(x => (x.arrivalTime - x.startTime) >= timeSpan);
        }
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
19.01.2018, 11:33
Цитата Сообщение от 6elka1703 Посмотреть сообщение
а можете объяснить что делает эта строка
Это LINQ.
Проходит по всей коллекции и находит поезда у которых время прибытия минус время отправления больше либо равно промежутку времени
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
19.01.2018, 18:07  [ТС]
Prog_maker, а что значит х=>
0
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
20.01.2018, 03:05
6elka1703, аргумент лямбда-выражения
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
20.01.2018, 17:38  [ТС]
короче я сделал через массив но возникла проблема, мне нужно вызвать метод Time в котором проверяется условие и если оно выполняется то нужно вывести в listbox информацию о поездах, но как мне вызвать его вне цикла. Потому что в цикле он выводит столько записей сколько раз проходит по циклу, а мне нужно чтобы выводил только 1 раз.
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
  struct Train
        {
            public int number { get; set; }
 
            public string targetStation { get; set; }
 
            public TimeSpan arrivalTime { get; set; }
 
            public string startStation { get; set; }
 
            public TimeSpan startTime { get; set; }
 
            public bool Time(TimeSpan ts)
            {
                bool x;
                if (arrivalTime - startTime > ts)
                {
                    x = true;
                }
                else
                {
                    x = false;
                }
 
                return x;
            }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            TimeSpan ts = new TimeSpan(7, 20, 0);
            int n = int.Parse(textBox1.Text);
            Train[] train = new Train[n];
            for(int i=0; i < train.Length; i++)
            {
                train[i].number = int.Parse(textBox2.Text);
                train[i].targetStation = textBox6.Text;
                train[i].arrivalTime = new TimeSpan(int.Parse(textBox3.Text), int.Parse(textBox4.Text), int.Parse(textBox5.Text));
                train[i].startStation = textBox7.Text;
                train[i].startTime = new TimeSpan(int.Parse(textBox10.Text), int.Parse(textBox9.Text), int.Parse(textBox8.Text));
 
                if (train[i].Time(ts))
                {
                    listBox1.Items.Add(" poezd:" + train[i].number);
                }
 
            }
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
20.01.2018, 21:42
Не понятный метод )) вы в цикле считываете одни те же значения с одних и тех же тескбоксов.

Покажите свою форму. не понятно что вы сделать пытаетесь.

P.S. Если вам не понятны LINQ запросы, можно сделать через цикл.

было
C#
1
2
3
4
        private IEnumerable<Train> GetTrains(TimeSpan timeSpan)
        {
            return trains.Where(x => (x.arrivalTime - x.startTime) >= timeSpan);
        }
стало
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 private List<Train> GetTrains(TimeSpan timeSpan)
        {
            var trainsList = new List<Train>();
 
            foreach (var tr in trains)
            {
                if(tr.arrivalTime - tr.startTime >= timeSpan)
                {
                    trainsList.Add(tr);
                }
            }
 
            return trainsList;
        }
Добавлено через 2 минуты
P.PS Ваш метод Time можно упростить

C#
1
2
3
4
5
6
7
8
9
 public bool Time(TimeSpan ts)
            {
                if (arrivalTime - startTime > ts)
                {
                    return true;
                }
                
                return false;
            }
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
20.01.2018, 22:10
Prog_maker,
C#
1
2
3
4
public bool Time(TimeSpan ts)
            {
                return arrivalTime - startTime > ts;
            }
или, даже
C#
1
public bool Time(TimeSpan ts) => arrivalTime - startTime > ts;
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
20.01.2018, 22:41
Лучший ответ Сообщение было отмечено 6elka1703 как решение

Решение

Цитата Сообщение от Diamante Посмотреть сообщение
public bool Time(TimeSpan ts) => arrivalTime - startTime > ts;
Тут дело не в этом. Автор поста не знает что такое LINQ и лямбда выражения. Поэтому это не уместно ))

Цитата Сообщение от 6elka1703 Посмотреть сообщение
а что значит х=>
как бы тут все понятно ))))))
1
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
20.01.2018, 23:06  [ТС]
Prog_maker, я не понимаю чего вы прикопались к методу ?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
21.01.2018, 09:07
Цитата Сообщение от 6elka1703 Посмотреть сообщение
я не понимаю чего вы прикопались к методу ?
К какому именно?
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
21.01.2018, 11:50  [ТС]
Prog_maker, ну у меня там только один метод, да написан он абы как, но я спрашивал же не по метод а про то как мне вывести данные о поездах только один раз а не столько сколько по циклу проходит.
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
21.01.2018, 12:59
Как вариант доп. проверка
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void button1_Click(object sender, EventArgs e)
        {
            int countIf = 0;
            TimeSpan ts = new TimeSpan(7, 20, 0);
            int n = int.Parse(textBox1.Text);
            Train[] train = new Train[n];
            for(int i=0; i < train.Length; i++)
            {
                train[i].number = int.Parse(textBox2.Text);
                train[i].targetStation = textBox6.Text;
                train[i].arrivalTime = new TimeSpan(int.Parse(textBox3.Text), int.Parse(textBox4.Text), int.Parse(textBox5.Text));
                train[i].startStation = textBox7.Text;
                train[i].startTime = new TimeSpan(int.Parse(textBox10.Text), int.Parse(textBox9.Text), int.Parse(textBox8.Text));
 
                if (train[i].Time(ts) && countIf < 1)
                {
                     countIf++;
                     listBox1.Items.Add(" poezd:" + train[i].number);
                }
 
            }
Теперь if сработает один раз.
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
21.01.2018, 15:24  [ТС]
Prog_maker, спасибо. Скажите, а можно сделать так чтобы сначала ввести например 4 записи, а потом только вывести на экран нужные?
0
 Аватар для Prog_maker
459 / 403 / 153
Регистрация: 23.01.2011
Сообщений: 1,054
21.01.2018, 16:13
Короче я не совсем понимаю как выглядит ваша программа, поэтому предложу свой вариант. ))
Миниатюры
Структура поезд. Работа с TimeSpan  
Вложения
Тип файла: 7z StructTrain.7z (1.43 Мб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.01.2018, 16:13
Помогаю со студенческими работами здесь

TimeSpan is a type, which is not valid in TimeSpan
public void DisplayTime() { if (this.startTime.Year != 1) { this.interval = new...

Вывести "Пассажирский поезд" или "Грузовой поезд"
Как сделать, чтобы при &quot;passenger.Time&quot; выводилось &quot;Пассажирский поезд...&quot;, а при &quot;freight.Time&quot; выводилось &quot;Грузовой...

Округление TimeSpan
:help: как округлить TimeSpan по типу 18.30 -&gt; 18.00 18.31 -&gt; 19.00

Форматирование TimeSpan
Добрый день! Мне нужно вывести значение времени структуры TimeSpan с точностью до часа, но таким образом, если задано 25 часов, то и...

TimeSpan без дней
Считаю разность двух дат(DateTime) с помощью TimeSpan, иногда разность бывает больше одного дня, тогда TimeSpan возвращает строку вида:...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru