c语言之一个简单的《学生教师管理系统》小结记录(一)
2020-12-13 15:49
标签:ati switch 运行 函数 feedback 技术 应该 sch inux 写一个简单的界面登录函数 终端界面编辑相关参数见 c语言linux终端花里胡哨输出 先做一个简单的登录界面 千万不要觉得界面编辑没有用,上图!感受一下差距吧! 编辑界面之前 编辑之后 差别应该很明显了吧!!!!美感提升一个档次。 此博文是在基本完成之后回顾所做,所以进行了界面优化,使用起来舒适度得到了极大的提升。 主函数利用while循环可以保证菜单不退出 执行选项菜单 学生和教师的菜单类似。 登录函数 login.c全部大体流程图
大概的一个项目要实现如上功能
首先大体分块写函数
1、先实现界面的相关功能
1 /*登录界面菜单*/
2 int login(Node *pHead, TeaNode *pTHead)
3 {
4 system("clear");
5 printf("\t\t\t");
6 printf("\033[32m\033[1m\033[44m欢迎来到师生管理系统\n\033[0m\n");
7 printf("\033[33m ? ? ? ? ? ? ? ? ? ? ? ? ? ? \033[1m登录选项\033[0m\033[33m? ? ? ? ? ? ? ? ? ? ? ? ? ? \n");
8 printf("|\t\t\t\t\t\t\t\t|\n");
9 printf("\t\t\t1.管理员登录\n");
10 printf("|\t\t\t\t\t\t\t\t|\n");
11 printf("\t\t\t2.教师登录\n");
12 printf("|\t\t\t\t\t\t\t\t|\n");
13 printf("\t\t\t3.学生登录\n");
14 printf("|\t\t\t\t\t\t\t\t|\n");
15 printf("\t\t\t0.退出\n");
16 printf("|\t\t\t\t\t\t\t\t|\n");
17 printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \n\n");
18 printf("请选择:");
19 char ch;
20 ch = getchar();
21 switch(ch)
22 {
23 case ‘1‘:
24 {
25 int ret = adminlogin();
26 if(ret != 1)
27 {
28 printf("管理员登入失败!\n\n\n");
29 printf("按任意键退出系统!!!");
30 char ch1;
31 ch1 = getchar();//利用字符获取函数实现简单的界面停留
32 return 0;
33 }
34 else if(ret == 1)
35 return 1;//返回1,回在主函数中根据不同的返回值进入不同的操作菜单
36 }
37 case ‘2‘:
38 {
39
40 int ret = tealogin(pTHead);
41 while(ret != 1 && ret != 2)
42 {
43 system("clear");
44 printf("教师登入失败!\n");
45 printf("请重新输入!\n");
46 ret = tealogin(pTHead);//调用教师登录函数
47 getchar();
48 }
49 if(ret == 1)
50 //由于教师是班主任和任课老师执行是有差别的,所以函数中返回值为1时为班主任,返回值为2时为任课老师
51 {
52 getchar();
53 return 2;
54 break;
55 }
56 if(ret == 2)
57 {
58 getchar();
59 return 3;
60 break;
61 }
62 }
63 case ‘3‘:
64 {
65 int retstu = stulogin(pHead);//学生登录函数
66 getchar();
67 while(retstu != 1)
68 {
69 system("clear");
70 printf("学生登入失败!\n");
71 printf("请重新输入!\n");
72 retstu = stulogin(pHead);
73 getchar();
74 }
75 if(retstu == 1)
76 {
77 return 4;//返回值为4
78 break;
79 }
80 }
81 case ‘0‘:
82 {
83 return 0;//返回0,退出管理系统
84 }
85 default:
86 {
87 printf("\n选项输入错误!请重新输入");
88 login(pHead, pTHead);
89 };
90 }
91 }
1 void main()
2 {
3 int retlogin = login(pHead, pTHead);//读取登录菜单返回值,不同返回值代表不同用户在操作
4 while(retlogin != 0)//为0时退出,不为0时一直循环,实现系统的持续运行
5 {
6 while(retlogin == 1)//管理员身份登入
7 {
8 if(admindo(pTHead) == 1)//管理员执行函数
9 {
10 getchar();//吸收字符
11 retlogin = login(pHead, pTHead);
12 }
13 }
14 while(retlogin == 2)//班主任
15 {
16 if(headteacherdo(pHead, pTHead,IDhao) == 1)
17 {
18 getchar();
19 retlogin = login(pHead, pTHead);
20 }
21 }
22 while(retlogin == 3)//任课老师
23 {
24 if(teacherdo(pTHead, pHead) == 1)
25 {
26 getchar();
27 retlogin = login(pHead, pTHead);
28 }
29 }
30 while(retlogin == 4)//学生登录
31 {
32 if(studo(pHead) == 1)//学生执行菜单
33 {
34 getchar();
35 retlogin = login(pHead, pTHead);
36 }
37 }
38 }
39 }
1 /*管理员执行选项*/
2 int admindo(TeaNode *pTHead)
3 {
4 printf("\033[32m\033[1m\033[44m ? 管理员admin,您好!\n\033[0m\n");
5 printf("\033[33m ? ? ? ? ? ? ? ? ? ? ? ? ? ? 操作选项? ? ? ? ? ? ? ? ? ? ? ? ? ? \n");
6 printf("|\t\t\t\t\t\t\t\t|\n");
7 printf("\t\t\t ? 1.教师信息录入\n");
8 printf("|\t\t\t\t\t\t\t\t|\n");
9 printf("\t\t\t ? 2.查看教师信息\n");
10 printf("|\t\t\t\t\t\t\t\t|\n");
11 printf("\t\t\t ? 3.修改教师信息\n");
12 printf("|\t\t\t\t\t\t\t\t|\n");
13 printf("\t\t\t ? 4.删除教师信息\n");
14 printf("|\t\t\t\t\t\t\t\t|\n");
15 printf("\t\t\t ? 0.注销\n");
16 printf("|\t\t\t\t\t\t\t\t|\n");
17 printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \n\n");
18 printf("请选择:");
19 char ch;
20 ch = getchar();
21 switch(ch)
22 {
23 case ‘1‘:
24 {
25 entertea(pTHead);
26 break;
27 }
28 case ‘2‘:
29 {
30 getchar();
31 examintea(pTHead);
32 char ch1 = ‘\0‘;
33 printf("\n");
34 printf("按Enter退回菜单!\n");
35 ch1 = getchar();
36 break;
37 }
38 case ‘3‘:
39 {
40 modifytea(pTHead);
41 break;
42 }
43 case ‘4‘:
44 {
45 printf("请输入要删除教师工号:");
46 int teaID;
47 scanf("%d", &teaID);
48 getchar();
49 deltea(pTHead, teaID);
50 break;
51 }
52 case ‘0‘:
53 {
54 return 1;
55 }
56 default :
57 {
58 getchar();
59 system("clear");
60 printf("\n选项输入错误!请重新输入");
61 }
62 }
63 }
登录界面一览登录界面一览
1 #include "login.h"
2
3 int IDhao;
4 int IDstuhao;
5 int resID[10] = {0};//申请辞职待处理的教师ID存储
6 int resdID[10] = {0};//申请辞职未处理的教师ID
7 int resnum = 0;
8 int resokID[10] = {0};//批准辞职的教师ID
9
10 void main()
11 {
12 Node *pHead = makeNode();
13 pHead = readFromFile(pHead);
14 TeaNode *pTHead = makeTeaNode();
15 pTHead = readFromTeaFile(pTHead);
16 /*if(pTHead == NULL)
17 {
18 TeaNode *pTHead = makeTeaNode();
19 writeToTeaFile(pTHead);
20 }*/
21
22 int retlogin = login(pHead, pTHead);//读取登录菜单返回值,不同返回值代表不同用户在操作
23 while(retlogin != 0)//为0时退出,不为0时一直循环,实现系统的持续运行
24 {
25 int flag = 0;
26 while(retlogin == 1)//管理员身份登入
27 {
28 if(flag == 0)
29 {
30 resinformation(pTHead);//辞职信息窗口显示
31 flag = 1;
32 }
33 if(admindo(pTHead) == 1)//管理员执行函数
34 {
35 flag = 0;
36 getchar();//吸收字符
37 retlogin = login(pHead, pTHead);
38 }
39 }
40 while(retlogin == 2)//班主任
41 {
42 int nn = resfeedback(pTHead);
43 if(nn == 2)
44 {
45 if(headteacherdo(pHead, pTHead,IDhao) == 1)
46 {
47 directdeltea(pTHead,IDhao);
48 getchar();
49 retlogin = login(pHead, pTHead);
50 }
51 }
52 else
53 {
54 if(headteacherdo(pHead, pTHead,IDhao) == 1)
55 {
56 getchar();
57 retlogin = login(pHead, pTHead);
58 }
59 }
60 }
61 while(retlogin == 3)//任课老师
62 {
63 int nn = resfeedback(pTHead);
64 if(nn == 2)
65 {
66 if(teacherdo(pTHead, pHead) == 1)
67 {
68 directdeltea(pTHead,IDhao);
69 getchar();
70 retlogin = login(pHead, pTHead);
71 }
72 }
73 else
74 {
75 if(teacherdo(pTHead, pHead) == 1)
76 {
77 getchar();
78 retlogin = login(pHead, pTHead);
79 }
80 }
81 }
82 while(retlogin == 4)//学生登录
83 {
84 if(studo(pHead) == 1)//学生执行菜单
85 {
86 getchar();
87 retlogin = login(pHead, pTHead);
88 }
89 }
90 }
91
92 // readFromFile(pHead);
93 // showList(pHead)
94 }
95
96
97 /*登录界面菜单*/
98 int login(Node *pHead, TeaNode *pTHead)
99 {
100 system("clear");
101 printf("\t\t\t");
102 printf("\033[32m\033[1m\033[44m欢迎来到师生管理系统\n\033[0m\n");
103 printf("\033[33m ? ? ? ? ? ? ? ? ? ? ? ? ? ? \033[1m登录选项\033[0m\033[33m? ? ? ? ? ? ? ? ? ? ? ? ? ? \n");
104 printf("|\t\t\t\t\t\t\t\t|\n");
105 printf("\t\t\t1.管理员登录\n");
106 printf("|\t\t\t\t\t\t\t\t|\n");
107 printf("\t\t\t2.教师登录\n");
108 printf("|\t\t\t\t\t\t\t\t|\n");
109 printf("\t\t\t3.学生登录\n");
110 printf("|\t\t\t\t\t\t\t\t|\n");
111 printf("\t\t\t0.退出\n");
112 printf("|\t\t\t\t\t\t\t\t|\n");
113 printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \n\n");
114 printf("请选择:");
115 char ch;
116 ch = getchar();
117 switch(ch)
118 {
119 case ‘1‘:
120 {
121 int ret = adminlogin();
122 if(ret != 1)
123 {
124 printf("管理员登入失败!\n\n\n");
125 printf("按任意键退出系统!!!");
126 char ch1;
127 ch1 = getchar();//利用字符获取函数实现简单的界面停留
128 return 0;
129 }
130 else if(ret == 1)
131 return 1;//返回1,回在主函数中根据不同的返回值进入不同的操作菜单
132 }
133 case ‘2‘:
134 {
135
136 int ret = tealogin(pTHead);
137 while(ret != 1 && ret != 2)
138 {
139 system("clear");
140 printf("教师登入失败!\n");
141 printf("请重新输入!\n");
142 ret = tealogin(pTHead);//调用教师登录函数
143 getchar();
144 }
145 if(ret == 1)
146 //由于教师是班主任和任课老师执行是有差别的,所以函数中返回值为1时为班主任,返回值为2时为任课老师
147 {
148 getchar();
149 return 2;
150 break;
151 }
152 if(ret == 2)
153 {
154 getchar();
155 return 3;
156 break;
157 }
158 }
159 case ‘3‘:
160 {
161 int retstu = stulogin(pHead);//学生登录函数
162 getchar();
163 while(retstu != 1)
164 {
165 system("clear");
166 printf("学生登入失败!\n");
167 printf("请重新输入!\n");
168 retstu = stulogin(pHead);
169 getchar();
170 }
171 if(retstu == 1)
172 {
173 return 4;//返回值为4
174 break;
175 }
176 }
177 case ‘0‘:
178 {
179 return 0;//返回0,退出管理系统
180 }
181 default:
182 {
183 printf("\n选项输入错误!请重新输入");
184 login(pHead, pTHead);
185 };
186 }
187 }
188
189 /*管理员登录菜单*/
190 int adminlogin()
191 {
192 char sname[MAX_SIZE];
193 char spwd[MAX_SIZE];
194 system("clear");
195 for(int i = 0; i 3; i++)
196 {
197 //printf("\n\n\n");
198 printf("\033[33m ? ? ? ? ? ? ? ? ? ? 管理员登录? ? ? ? ? ? ? ? ? ? \n\n\n\n");
199 printf("\t\t ? 用户名:");
200 scanf("%s",sname);
201 getchar();
202 printf("\n\n\n");
203 printf("\t\t ? 密 码:");
204 set_disp_mode(STDIN_FILENO,0);
205 getpasswd(spwd, MAX_SIZE);
206 set_disp_mode(STDIN_FILENO,1);
207 if(strcmp(sname,"admin") == 0 && strncmp(spwd,"123456",6) == 0)
208 {
209 //getchar();//吸收多余字符
210 system("clear");
211 return 1;
212 }
213 else
214 {
215 if(i == 2)
216 {
217 return -1;
218 }
219 else
220 {
221 system("clear");
222 printf("\t\033[31m ? ? ? 提示:用户名或者密码输入错误!");
223 printf("还有%d次机会\033[0m\n\n\n", 2-i);
224 }
225 }
226 }
227 }
228
229 /*辞职信息显示*/
230 int resinformation(TeaNode *pTHead)
231 {
232 system("clear");
233 printf("\033[33m ? ? ? ? ? ? ? ? ? ? ? ? ? \033[1m辞职信息提醒\033[0m\033[33m? ? ? ? ? ? ? ? ? ? ? ? ? \n\n");
234 TeaNode *temp = makeTeaNode();
235 if(resID[0] == 0)
236 {
237 printf("|\t\t\t\t\t\t\t\t|\n\n");
238 printf("|\t\t\t\t\t\t\t\t|\n");
239 printf("\t\t\t无辞职信息!\n");
240 printf("|\t\t\t\t\t\t\t\t|\n\n");
241 printf("|\t\t\t\t\t\t\t\t|\n\n");
242 printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \n\n");
243 printf("按Enter继续...");
244 getchar();
245 }
246 else
247 {
248 printf("有 %d 条辞职信息待处理!\n",resnum);
249 int i =0;
250 while(i 10)
251 {
252 if(resID[i] != 0)
253 {
254 temp = findteanode(pTHead,resID[i]);
255 printf("该教师信息为:\n");
256 printf("--%-4d -- %-8s -- %-10s --\n",
257 temp->data.ID, temp->data.name, temp->data.password);
258 printf("-- %-3d -- %-3d -- %-3c -- %-10s --\n",
259 temp->data.age,temp->data.classes, temp->data.sex, temp->data.position);
260 getchar();
261 printf("是否同意辞职[Y/N]");
262 char ch = ‘\0‘;
263 while(ch != ‘Y‘ && ch != ‘N‘ && ch != ‘y‘ && ch != ‘n‘)
264 {
265 scanf("%c",&ch);
266 getchar();
267 }
268 if(ch == ‘Y‘ || ch == ‘y‘)
269 {
270 int j = 0;
271 while(j 10)
272 {
273 if(resokID[j] == 0)
274 {
275 resokID[j] = temp->data.ID;
276 break;
277 }
278 j++;
279 }
280 }
281 else if(ch == ‘N‘ || ch == ‘n‘)
282 {
283 printf("不同意辞职!\n");
284 }
285 }
286 i++;
287 }
288 printf("处理完毕!\n");
289 getchar();
290 char ch1 = ‘\0‘;
291 printf("按Enter进入操作菜单!\n");
292 ch1 = getchar();
293 system("clear");
294 }
295 for(int z = 0; z 10; z++)
296 {
297 resID[z] = 0;
298 }
299 resnum = 0;
300 temp = NULL;
301 }
302
303 /*辞职信息回馈*/
304 int resfeedback(TeaNode *pTHead)
305 {
306 TeaNode *temp = makeTeaNode();
307 temp = findteanode(pTHead, IDhao);
308 int i = 0;
309 while(i 10)
310 {
311 // printf("%d\n",resdID[i]);
312 // printf("%d\n",resID[i]);
313 if(resdID[i] == IDhao)
314 {
315 int j = 0;
316 while(j 10)