-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
233 lines (170 loc) · 5.63 KB
/
main.cpp
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <cstdio>
using namespace std;
/*
** general note:
**
**
**
*/
/***************************************************************************
***************************************************************************/
// 全局变量、类型定义
void(*pfun[100])(void) = { nullptr };
int inputTag; // 菜单界面中判断输入是否有效的标识符。
int inputNum; // 菜单界面中用户输入的整数
int interfaceLevel; // 当前菜单界面的层级,主菜单是一级。
/***************************************************************************
***************************************************************************/
// extern变量
/***************************************************************************
***************************************************************************/
// 函数声明
/***************************************************************************
***************************************************************************/
// extern函数
extern void reset_pfun(void);
extern void traverse_pfun(void);
extern void set_fun_linearStructure_sequence_list(void);
extern void set_fun_linearStructure_linked_list(void);
extern void start_linearStructure_sequence_list(void);
extern void start_linearStructure_linked_list(void);
/***************************************************************************
***************************************************************************/
// 函数定义
int main(int argc, char** argv)
{
inputNum = 99;
inputTag = 0;
interfaceLevel = 1;
reset_pfun();
// 主界面循环——选择章节
while (1 == interfaceLevel)
{
cout << "\n\n\n\n" << endl;
cout << "**************************MAIN MENU**********************" << endl;
cout << "Please input a number to choose a function setting plan:" << endl;
cout << "-1. Quit" << endl;
cout << "0. 线性结构" << endl;
cout << "1. 树型结构" << endl;
cout << "2. 图型结构" << endl;
cout << "3. 查找算法" << endl;
cout << "4. 排序算法" << endl;
inputTag = scanf("%d", &inputNum);
// 若输入值不是整数,重新输入。
if (0 == inputTag)
{
cout << "Invalid input. Please input again:" << endl;
setbuf(stdin, NULL); // stdin输入流由默认缓冲区转为无缓冲区,这样就清空了缓冲区中的内容。
// 不要用fflush来清空缓存区,该函数很多编译器支持得不好。
continue;
}
// 对主界面输入值的响应:
switch (inputNum)
{
case -1: // 退出程序
{
interfaceLevel = 0;
break;
}
case 0: // 0. 线性结构
{
// 界面层级符置为2,进入二级界面:
interfaceLevel = 2;
while (2 == interfaceLevel)
{
cout << "\n\n\n\n" << endl;
cout << "**************************LINEAR STRUCTURE MENU**********************" << endl;
cout << "Please input a number to choose a function setting plan:" << endl;
cout << "-1. Back to the previous interface" << endl;
cout << "0. 线性结构——顺序表" << endl;
cout << "1. 线性结构——链表" << endl;
inputTag = scanf("%d", &inputNum);
// 若输入值不是整数,重新输入。
if (0 == inputTag)
{
cout << "Invalid input. Please input again:" << endl;
setbuf(stdin, NULL); // stdin输入流由默认缓冲区转为无缓冲区,这样就清空了缓冲区中的内容。
// 不要用fflush来清空缓存区,该函数很多编译器支持得不好。
continue;
}
// 对二级界面输入值的响应:
switch (inputNum)
{
case -1:
interfaceLevel = 1;
break;
case 0:
reset_pfun();
set_fun_linearStructure_sequence_list();
start_linearStructure_sequence_list();
break;
case 1:
reset_pfun();
set_fun_linearStructure_linked_list();
start_linearStructure_linked_list();
break;
default:
cout << "Invalid input. Please input again:" << endl;
break;
}
}
break;
}
case 1: // 1. 树形结构
{
// 界面层级符置为2,进入二级界面:
interfaceLevel = 2;
while (2 == interfaceLevel)
{
cout << "\n\n\n\n" << endl;
cout << "**************************TREE STRUCTURE MENU**********************" << endl;
cout << "Please input a number to choose a function setting plan:" << endl;
cout << "-1. Back to the previous interface" << endl;
cout << "0. 树型结构——二叉树基本" << endl;
cout << "1. 树型结构——线索二叉树" << endl;
inputTag = scanf("%d", &inputNum);
// 若输入值不是整数,重新输入。
if (0 == inputTag)
{
cout << "Invalid input. Please input again:" << endl;
setbuf(stdin, NULL); // stdin输入流由默认缓冲区转为无缓冲区,这样就清空了缓冲区中的内容。
// 不要用fflush来清空缓存区,该函数很多编译器支持得不好。
continue;
}
// 对二级界面输入值的响应:
switch (inputNum)
{
case -1:
interfaceLevel = 1;
break;
case 0:
reset_pfun();
break;
case 1:
reset_pfun();
break;
default:
cout << "Invalid input. Please input again:" << endl;
break;
}
}
break;
}
case 2: // 2. 图型结构
{}
case 3: // 3. 查找算法
{}
case 4: // 4 . 排序算法
{}
default: // default. 不合法的整数输入:
{
cout << "Invalid input. Please input again:" << endl;
break;
}
}
}
return 0;
}