Расписание поездов: Какой формат следует использовать для даты и времени - C++ Builder

Узнай цену своей работы

Формулировка задачи:

Передо мной стоит такая задача. Заполнить массив структур. Заполнение из файла. Затем заливается в ListView. Структура такая: Расписание поездов. Дано: Точка_отправления, дата_отправления, время_отправления, точка_прибытия, дата_прибытия, время прибытия, тип_поезда. Вопрос вот в чем, какой формат следует использовать для даты и времени? Это лучше закинуть в одну переменную или отдельно? Мне потребуется рассчитывать среднее время в пути. Изучение си только начинаю, поэтому всё очень туго. Попытки загуглить малоуспешны. Нахожу функции, которые переводят время в строку, а как наоборот, чтобы потом можно было с ним работать, не соображу. Если у кого-то есть время и желание помочь, буду премного благодарна. Или может, кто посоветует литературу, где можно об этом почитать и разобраться. Заранее спасибо.

Решение задачи: «Расписание поездов: Какой формат следует использовать для даты и времени»

textual
Листинг программы
typedef struct
{ int day;
   int mon;
   int year;
   int h;
   int m;
} tm1;   // объявить структуру для даты/времени. свою, чтобы не было секунд/недель и прочего
 
typedef struct   
 { char t_o[10];
   tm1 dt1; // дата и время отправления, то есть элементом структуры будет являться структура, правильно?
   char t_p[10];
   tm1 dt2; // дата и время прибытия
   char tip[12];
 } B;
 
unsigned size=2; 
 B *data = (B*)malloc(size*sizeof(B)); // это мой динамический массив будет, элементы которого структуры B
 int i=0; //счетчик
 
void __fastcall TForm1::downl_btClick(TObject *Sender)
{
while(!feof(inp)) // пока не конец файла, считываю
   {  fscanf(inp, "%s %??  %s %?? %s",  &data[i].t_o, &data[i].dt1, &data[i].t_p, &data[i].dt2, &data[i].tip);
         // что нужно поставить на место знаков вопроса? 
      TListItem *Item = ListView1->Items->Add();
      Item->Caption =data[i].t_o;
      Item->SubItems->Add(???); // и как вывести это в ячейку listview в нормальном виде?
      Item->SubItems->Add(data[i].t_p);
      Item->SubItems->Add(???);
      Item->SubItems->Add(data[i].tip);
      i++;
      size++;
      data =  (B*)realloc(data, size*sizeof(B));
    }
}

Объяснение кода листинга программы

В этом коде используется структура tm1 для представления даты и времени. Это структура, объявленная внутри кода, которая содержит поля для дня, месяца, года, часов и минут. Далее, используется структура B, которая содержит массив символов t_o для хранения строки отправление, t_p для хранения строки прибытие, dt1 для хранения даты и времени отправления и dt2 для хранения даты и времени прибытия. Также есть строка tip, которая, вероятно, содержит дополнительную информацию о поезде. В функции TForm1::downl_btClick используется функция fscanf для чтения данных из файла. Похоже, что она считывает пять строк: отправление и дату и время отправления, прибытие и дату и время прибытия, а также строку tip. Считанные данные добавляются в ListView1 в виде элементов списка. Каждое строка добавляется как заголовок, а затем подзаголовки - это дата и время отправления и прибытия. Вопросы, вероятно, относятся к тому, как правильно считывать и отображать дату и время. Вместо знаков вопроса в коде нужно использовать функции форматирования даты и времени, которые преобразуют значения dt1 и dt2 в строки в нужном формате. Например, можно использовать функции asctime и ctime из стандартной библиотеки C. Также стоит отметить, что в коде есть потенциальная проблема с памятью. Функция realloc может вызвать ошибку, если попытается выделить память для size элементов, которые на самом деле больше не нужны. Это может произойти, если в файле есть пустые строки. Для решения этой проблемы необходимо проверять, что i не превышает size перед вызовом realloc.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы