forked from robertocarlosmedina/bus-controler-c
-
Notifications
You must be signed in to change notification settings - Fork 0
/
relatorios.c
139 lines (106 loc) · 3.38 KB
/
relatorios.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <limits.h> // para INT_MIN
#define SIZE 50
typedef struct relatorio{
int totalTranspor;
int duracao;
char * nomeCondutor[30];
} relatorio;
// criar uma pilha com capacidade para 100 elementos
relatorio stack[SIZE];
unsigned visto=false;
// inicializando a pilha vazia
int top = -1;
/* funções a serem utilizadas pera os relatórios */
void colocarElemento(int pessoasTrans, char * nomeCondu, int duracao);
int verificarFimDia();
int main()
{
int choice, data, i;
while(1)
{
/* Menu */
printf("------------------------------------\n");
printf(" STACK IMPLEMENTATION PROGRAM \n");
printf("------------------------------------\n");
printf("1. Push\n");
printf("2. Pop\n");
printf("------------------------------------\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch(choice)
{
case 1:
printf("Enter data to push into stack: ");
scanf("%d", &data);
// colocar elementos na pilha
colocarElemento(data, "José ne", 20);
break;
case 2:
for(i=0;i<=SIZE+top;i++){
data = verificarFimDia();
}
break;
default:
printf("Invalid choice, please try again.\n");
}
printf("\n\n");
}
return 0;
}
/**
* colocar elemento no topo da pilha
*/
void colocarElemento(int pessoasTrans, char * nomeCondu, int duracao)
{
// Verificar se a pilha ja esta cheia
if (top >= SIZE)
{
printf("\nALERTA: Pilha de relatórios se encontra cheia.\n");
return;
}
// Increase element count in stack
top++;
// Push element in stack
stack[top].totalTranspor = pessoasTrans;
strcpy(stack[top].nomeCondutor, nomeCondu);
stack[top].duracao = duracao;
// printf("dados colocados na pilha\n");
}
/**
* Ver os relatórios e esvaziar a pilha.
*/
int verificarFimDia()
{
int i=0, menorTempo=0, maisTranspor=0;
char conduMenorTempo[30], conduMaisTranspor[30];
// verificar se a pilha se encontra vazia.
if (top < 0)
{
return INT_MIN;
}
if (!visto){
printf("\n\tTodos os condutores:\n\n");
for(;i<=top;i++){
if (stack[i].duracao>menorTempo){
stpcpy(conduMenorTempo, stack[i].nomeCondutor);
menorTempo=stack[i].duracao;
}
if (stack[i].totalTranspor>maisTranspor){
stpcpy(conduMaisTranspor, stack[i].nomeCondutor);
maisTranspor=stack[i].totalTranspor;
}
printf("Condutor: %s, tempo: %d, pessoasTrans: %d\n", stack[i].nomeCondutor, stack[i].duracao, stack[i].totalTranspor);
}
printf("\n\tDestaques do dia: \n");
printf("\nCondutor que fez menos tempo: %s, tempo de: %d: ", conduMenorTempo, menorTempo);
printf("\nCondutor que Transportou mais pessoas: %s, numero pessoas: %d: ", conduMaisTranspor, maisTranspor);
printf("\nNumero voltas feitas pelo autocarro: %i", i);
visto = true;
}
// returnar o valor de topo da pilha decrementa o top eliminando o elemento de top
return stack[top--].totalTranspor;
}