Сравнение DateTime через структуры - C (СИ)

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

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

Помогите с идеей и реализацией, а то ничего не приходить в голову. Есть структура
 typedef struct DateTime {
    int year , month , day , hour , minute ;
    } DateTime ;
 
    typedef enum Role {
    Admin, Writer, Client
    } Role;
 
    typedef struct User {
    char firstName [ SHORTSTRLEN + 1];
    char lastName [ SHORTSTRLEN + 1];
    char email [ SHORTSTRLEN + 1];
    char login [ SHORTSTRLEN + 1];
    DateTime created ;
    DateTime lastLogin ;
    Role role ;
    } User ;
в ней размещены данные пользователей, с клавиатуры вводится Date и Time и нужно отсортировать пользователей с DateTime lastLogin > введенной (то есть активные пользователи). Вопросы: 1.Можно ли загнать дату с клавиатуры в существующие структуры или нужно что то создавать новое? 2.Как сравнить даты через структуры используя qsort и compare 3.Как отсортировать нужных пользователей с DateTime lastLogin > введенной

Решение задачи: «Сравнение DateTime через структуры»

textual
Листинг программы
int cmp(const void * a, const void * b) {
    DateTime * da = (DateTime*)a;
    DateTime * db = (DateTime*)b;
 
    if ( da->year == db->year ) {
        if ( da->month == db->month ) {
            if ( da->day == db->day ) {
                if ( da->hour == db->hour ) {
                    return da->minute - db->minute;
                }
                else {
                    return da->hour - db->hour;
                }
            }
            else {
                return da->day - db->day;
            }
        }
        else {
            return da->month - db->month;
        }
    }
    else {
        return da->year - db->year;
    }
}

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

В представленном коде реализована функция сравнения двух объектов типа DateTime. Список элементов кода:

  1. Объявление функции cmp с типом возвращаемого значения int и двумя указателями на void в качестве аргументов.
  2. Приведение указателей к типу DateTime*.
  3. Проверка равенства года.
  4. Если год не равен, то возвращается разница между годами.
  5. Если год равен, то проверяется равенство месяца.
  6. Если месяц не равен, то возвращается разница между месяцами.
  7. Если месяц равен, то проверяется равенство дня.
  8. Если день не равен, то возвращается разница между днями.
  9. Если день равен, то проверяется равенство часа.
  10. Если час не равен, то возвращается разница между часами.
  11. Если час равен, то проверяется равенство минуты.
  12. Если минута не равна, то возвращается разница между минутами.
  13. Если минута равна, то возвращается ноль.
  14. Если до этого момента объекты не сравнены и вернули разницу, то возвращается -1.
  15. Если до этого момента объекты не сравнены и не вернули разницу, то возвращается 0.
  16. Если объекты сравнены до этого момента, то возвращается 1.

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


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

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

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