-
Notifications
You must be signed in to change notification settings - Fork 0
/
interface.h
137 lines (115 loc) · 3.55 KB
/
interface.h
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
#include "lista.h"
using namespace std;
void print_menu(bool& lista);
void processa_menu(Lista* lista, Lista* sublista, bool& isLista);
void etapa01(Lista* lista);
/**
* Implementação da interface e da funcionalidade do menu
* @author Thiago de Oliveira Abreu
**/
void menu(Lista* lista, Lista* sublista, bool isLista=true)
{
print_menu(isLista);
processa_menu(lista,sublista,isLista);
}
void print_menu(bool& lista)
{
cout << "== Interface de Apoio ===" << endl;
cout << endl;
cout << "Etapas" << endl;
cout << "f - Realizar etapa 01" << endl;
cout << "e - Realizar etapa 02" << endl;
cout << endl;
cout << "Selecionada: " << ( lista ? "Lista":"Sublista" ) << " - [/] para alternar" << endl << endl;
cout << "a - Armazenar em arquivo .csv" << endl;
cout << "g - Gerar sublista de N dados aleatórios" << endl;
cout << "h - Ordenar com HeapSort" << endl;
cout << "q - Ordenar com QuickSort" << endl;
cout << "i - Ordenar com IntroSort" << endl;
cout << "p - Printar lista (Esse processo pode demorar alguns minutos)" << endl;
cout << "t - Printar tamanho da lista" << endl;
cout << "s - Fechar programa" << endl;
}
void processa_menu(Lista* lista, Lista* sublista, bool& isLista)
{
int time, comps, movs;
char comando;
string arq_saida;
Lista* selecionada = ( isLista ? lista:sublista );
naoentendi1:
cin >> comando;
switch( comando )
{
case 'h':
selecionada->heap_sort();
break;
case 'i':
selecionada->introSort(0, selecionada->get_pos(), time, comps, movs);
break;
case 'p':
selecionada->print();
break;
case 't':
cout << "A lista possui " << selecionada->get_tamanho() << " dados." << endl;
break;
case 'a':
cout << "Digite o nome do arquivo a ser salvo: ";
cin >> arq_saida;
selecionada->save_to_csv(arq_saida);
break;
case 'q':
selecionada->quick_sort();
break;
case 'g':
int n;
cout << "Digite o valor de N: ";
cin >> n;
sublista = lista->subListaAleatoria(n);
break;
case 'e':
int mtimes,ndata;
char alg;
cout << "Digite o valor de N ( Número de dados aleatórios ): ";
cin >> ndata;
cout << "Digite o valor de M ( Número de vezes a ser ordenado ): ";
cin >> mtimes;
cout << "Digite o algoritmo de ordenação [h/q/i]: ";
cin >> alg;
cout << "Digite o nome do arquivo de saida (.txt): ";
cin >> arq_saida;
selecionada->analisa_algoritmo(alg,ndata,mtimes,arq_saida);
break;
case 'f':
etapa01(lista);
break;
case 's':
return;
break;
case '/':
if( isLista && sublista == nullptr )
{
cout << "É necessário gerar uma Sublista [g] antes de selecioná-la" << endl;
goto naoentendi1;
}
isLista = !isLista;
menu(lista,sublista,isLista);
return;
break;
default:
goto naoentendi1;
}
naoentendi2:
cout << endl << "Voce deseja realizar outra ação ? [s/n]" << endl;
cin >> comando;
switch( comando )
{
case 's':
menu(lista,sublista,isLista);
break;
case 'n':
return;
break;
default:
goto naoentendi2;
}
}