Форум программистов, компьютерный форум CyberForum.ru

График учёта рабочего времени (структура) - C++

Восстановить пароль Регистрация
 
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
23.05.2012, 16:45     График учёта рабочего времени (структура) #1
Помогите решить,срочно надо...
вот задача и пример в этом документе:Фамилия.doc
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
25.05.2012, 00:11     График учёта рабочего времени (структура) #2
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
96
97
#include <cstdio>
#include <cstdlib>
#include <cstddef>
 
//--------------------------
typedef struct
{
    int h;
    int m;
 
} tm_t;
 
typedef struct
{
    char surname[12];
    tm_t time_start;
    tm_t time_end;
 
} employee_t;
 
//--------------------------
 
char* stime(const tm_t& t, char* buf)
{
    if(sprintf(buf, "%02d:%02d", t.h, t.m) != 5) return NULL;
    return buf;
}
 
tm_t count(const tm_t& t1, const tm_t& t2)
{
    int a = (t1.h * 60 + t1.m);
    int b = (t2.h * 60 + t2.m);
 
    int c = 24 * 60;
    if(a > b) c = (24 * 60) - a + b;
    else if(a < b) c = b - a;
 
    tm_t res = {c / 60, c % 60};
    return res;
}
 
bool is_correct_time_format(const tm_t& t)
{
    return (t.h >= 0 && t.h <= 23) && (t.m >= 0 && t.m <= 59);
}
 
//--------------------------
 
int clearbuf(FILE* in)
{
    int c = getc(in);
    while(c != EOF && c != '\n')
        c = getc(in);
    return c;
}
 
//--------------------------
 
int main()
{
    const size_t n = 4;
    employee_t e[n];
    //-------------------------
 
    for(size_t i = 0; i < n; ++i)
    {
        printf("surname -> ");
        int input_result = scanf("%11s", e[i].surname);
        if(input_result != 1) return 1;
        clearbuf(stdin);
 
        printf("start(hh:mm) -> ");
        input_result = scanf("%2d:%2d", &e[i].time_start.h, &e[i].time_start.m);
        if(input_result != 2 || !is_correct_time_format(e[i].time_start))  return 1;
        clearbuf(stdin);
 
        printf("end(hh:mm) -> ");
        input_result = scanf("%2d:%2d", &e[i].time_end.h, &e[i].time_end.m);
        if(input_result != 2 || !is_correct_time_format(e[i].time_end))  return 1;
        clearbuf(stdin);
    }
 
    //-------------------------
 
    printf("|%-12s|%-12s|%-12s|%-12s|\n",
           "SURNAME", "START", "END", "COUNT");
 
    for(size_t i = 0; i < n; ++i)
    {
        static const size_t buf_len = 6;
        char buf1[buf_len], buf2[buf_len], buf3[buf_len];
 
        tm_t c = count(e[i].time_start, e[i].time_end);
        printf("|%-12s|%-12s|%-12s|%-12s|\n",
               e[i].surname, stime(e[i].time_start, buf1), stime(e[i].time_end, buf2), stime(c, buf3));
    }
}
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
25.05.2012, 14:52  [ТС]     График учёта рабочего времени (структура) #3
можете помочь с коментами а то не особо понял код

Добавлено через 30 минут
и ещё никак по проще сделать нельзя(а то мне не поверят что такой код сделал)
например там ввёл время такое и такое и потом просто вывело не табличкой такой а просто время работы
вот:
время прихода 8:00
время ухода 20:00
Время на работе: 24 ч
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
25.05.2012, 16:00     График учёта рабочего времени (структура) #4
Цитата Сообщение от димарик Посмотреть сообщение
просто вывело не табличкой такой а просто время работы
А сразу нельзя было об этом сказать?
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
#include <cstdio>
 
//--------------------------
typedef struct
{
    int h;
    int m;
 
} tm_t;
 
typedef struct
{
    char surname[12];
    tm_t time_start;
    tm_t time_end;
 
} employee_t;
 
//--------------------------
 
tm_t count(const tm_t& t1, const tm_t& t2)
{
    int a = (t1.h * 60 + t1.m);
    int b = (t2.h * 60 + t2.m);
 
    int c = 24 * 60;
    if(a > b) c = (24 * 60) - a + b;
    else if(a < b) c = b - a;
 
    tm_t res = {c / 60, c % 60};
    return res;
}
 
bool is_correct_time_format(const tm_t& t)
{
    return (t.h >= 0 && t.h <= 23) && (t.m >= 0 && t.m <= 59);
}
 
//--------------------------
 
int clearbuf(FILE* in)
{
    int c = getc(in);
    while(c != EOF && c != '\n')
        c = getc(in);
    return c;
}
 
//--------------------------
 
int main()
{    
    employee_t e;
    //-------------------------
 
    printf("surname -> ");
    int input_result = scanf("%11s", e.surname);
    if(input_result != 1) return 1;
 
    printf("start(hh:mm) -> ");
    clearbuf(stdin);
    input_result = scanf("%2d:%2d", &e.time_start.h, &e.time_start.m);
    if(input_result != 2 || !is_correct_time_format(e.time_start))  return 1;
 
    printf("end(hh:mm) -> ");
    clearbuf(stdin);
    input_result = scanf("%2d:%2d", &e.time_end.h, &e.time_end.m);
    if(input_result != 2 || !is_correct_time_format(e.time_end))  return 1;
 
    //-------------------------
 
    tm_t c = count(e.time_start, e.time_end);
    printf("count -> %02d:%02d\n", c.h, c.m);
}
Цитата Сообщение от димарик Посмотреть сообщение
можете помочь с коментами а то не особо понял код
Задавай конкретные вопросы, я не знаю, что тебе понятно, а что нет.

Добавлено через 50 секунд
Цитата Сообщение от димарик Посмотреть сообщение
время прихода 8:00
время ухода 20:00
Время на работе: 24 ч
12 ч...
димарик
0 / 0 / 0
Регистрация: 26.02.2012
Сообщений: 81
25.05.2012, 17:55  [ТС]     График учёта рабочего времени (структура) #5
вот это не понимаю
C++
1
2
3
4
5
tm_t count(const tm_t& t1, const tm_t& t2)
bool is_correct_time_format(const tm_t& t)
{
    return (t.h >= 0 && t.h <= 23) && (t.m >= 0 && t.m <= 59);
}
и вот эту запись
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int clearbuf(FILE* in)
{
    int c = getc(in)
 
employee_t e;
    //-------------------------
 
    printf("surname -> ");
    int input_result = scanf("%11s", e.surname);
    if(input_result != 1) return 1;
 
    printf("start(hh:mm) -> ");
    clearbuf(stdin);
    input_result = scanf("%2d:%2d", &e.time_start.h, &e.time_start.m);
    if(input_result != 2 || !is_correct_time_format(e.time_start))  return 1;
 
    printf("end(hh:mm) -> ");
    clearbuf(stdin);
    input_result = scanf("%2d:%2d", &e.time_end.h, &e.time_end.m);
    if(input_result != 2 || !is_correct_time_format(e.time_end))  return 1;
Добавлено через 52 секунды
а вы не знаете ещё как вот эти строчки заменить сделать более упрощёнными
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
printf("surname -> ");
int input_result = scanf("%11s", e.surname);
if(input_result != 1) return 1;
 
printf("start(hh:mm) -> ");
clearbuf(stdin);
input_result = scanf("%2d:%2d", &e.time_start.h, &e.time_start.m);
if(input_result != 2 || !is_correct_time_format(e.time_start)) return 1;
 
printf("end(hh:mm) -> ");
clearbuf(stdin);
input_result = scanf("%2d:%2d", &e.time_end.h, &e.time_end.m);
if(input_result != 2 || !is_correct_time_format(e.time_end)) return 1;
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
26.05.2012, 00:16     График учёта рабочего времени (структура) #6
Вот, вариант попроще... без проверок на ошибки(при ошибочном вводе программа будет работать неправильно).
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
#include <iostream>
 
// ---структура "время"---
struct Time
{
    int h;   // часы
    int m;   // минуты
};
 
// ---структура "работник"---
struct Employee
{
    char surname[12];   // фамилия
    Time time_start;    // время начала рабочего дня
    Time time_end;      // время конца рабочего дня
};
 
int main()
{
    using namespace std;
 
    // ---создаём переменную типа Employee---
    Employee e;
 
    // ---вводим фамилию---
    cout << "SURNAME: ";
    cin >> e.surname;
 
    // ---указываем время начала рабочего дня---
    cout << "START\n";
    cout << "  hour: ";
    cin >> e.time_start.h;
    cout << "  min: ";
    cin >> e.time_start.m;
 
    // ---указываем время конца рабочего дня---
    cout << "END\n";
    cout << "  hour: ";
    cin >> e.time_end.h;
    cout << "  min: ";
    cin >> e.time_end.m;
 
    // ---вычисляем длину рабочего дня---
    int a = (e.time_start.h * 60 + e.time_start.m);
    int b = (e.time_end.h * 60 + e.time_end.m);
    int c = 24 * 60;
 
    if(a > b) c = (24 * 60) - a + b;
    else if(a < b) c = b - a;
 
    Time result = {c / 60, c % 60};
 
    // ---выводим результат---
    cout << "RESULT: " << result.h << "h " << result.m << "m\n";
}
Yandex
Объявления
26.05.2012, 00:16     График учёта рабочего времени (структура)
Ответ Создать тему
Опции темы

Текущее время: 17:05. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru