c语言之一个简单的《学生教师管理系统》小结记录

Posted lttdxuexizhilu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言之一个简单的《学生教师管理系统》小结记录相关的知识,希望对你有一定的参考价值。

大体流程图

技术图片

 大概的一个项目要实现如上功能

 

首先大体分块写函数

1、先实现界面的相关功能

写一个简单的界面登录函数

终端界面编辑相关参数见 c语言linux终端花里胡哨输出

先做一个简单的登录界面

 

千万不要觉得界面编辑没有用,上图!感受一下差距吧!

 技术图片

编辑界面之前

 

 

技术图片

 编辑之后

差别应该很明显了吧!!!!美感提升一个档次。

此博文是在基本完成之后回顾所做,所以进行了界面优化,使用起来舒适度得到了极大的提升。

 

技术图片
 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 
View Code

 

 

主函数利用while循环可以保证菜单不退出

技术图片
 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 
View Code

 

 

执行选项菜单

技术图片
 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 
View Code

 

 

学生和教师的菜单类似。

 

登录界面一览登录界面一览

技术图片

 

 

技术图片

 

技术图片

 

技术图片

 

 技术图片

 

技术图片

 

登录函数 login.c全部

技术图片
  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)
317             
318                 if(resID[j] == IDhao)
319                 
320                     printf("辞职申请管理员还未处理,请耐心等待!\\n");
321                     return 1;//辞职申请还未处理;
322                     break;
323                 
324                 if(resokID[j] == IDhao)
325                 
326                     resokID[j] = 0;
327                     resdID[i] = 0;
328                     printf("辞职申请已通过,此次为最后一次登录!\\n");
329                     return 2;//辞职申请已经处理并且已经批准;
330                     break;
331                 
332                 j++;
333             
334             resdID[i] = 0;
335             printf("管理员未通过您的辞职申请,有事请面谈!\\n");
336             return 3;//申请辞职处理过但是不同意辞职;
337             break;
338         
339         i++;
340     
341     return 0;//未申请过辞职
342 
343 
344 /*管理员执行选项*/
345 int admindo(TeaNode *pTHead)
346 
347     system("clear");
348     printf("\\033[32m\\033[1m\\033[44m ? 管理员admin,您好!\\n\\033[0m\\n");
349     printf("\\033[33m ? ? ? ? ? ? ? ? ? ? ? ? ? ? 操作选项? ? ? ? ? ? ? ? ? ? ? ? ? ? \\n");
350     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
351     printf("\\t\\t\\t ? 1.教师信息录入\\n");
352     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
353     printf("\\t\\t\\t ? 2.查看教师信息\\n");
354     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
355     printf("\\t\\t\\t ? 3.修改教师信息\\n");
356     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
357     printf("\\t\\t\\t ? 4.删除教师信息\\n");
358     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
359     printf("\\t\\t\\t ? 0.注销\\n");
360     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
361     printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \\n\\n");
362     printf("请选择:");
363     char ch;
364     ch = getchar();
365     switch(ch)
366     
367         case 1:
368             
369                 entertea(pTHead);
370                 break;
371             
372         case 2:
373             
374                 getchar();
375                 examintea(pTHead);
376                 char ch1 = \\0;
377                 printf("\\n");
378                 printf("按Enter退回菜单!\\n");
379                 ch1 = getchar();
380                 break;
381             
382         case 3:
383             
384                 modifytea(pTHead);
385                 break;
386             
387         case 4:
388             
389                 deltea(pTHead);                
390                 break;
391             
392         case 0:
393             
394                 return 1;
395             
396         default :
397             
398                 getchar();
399                 system("clear");
400                 printf("\\n选项输入错误!请重新输入");
401             
402     
403 
404 
405 /*教师登录菜单*/
406 int tealogin(TeaNode *pTHead)
407 
408     int teaID;    
409     char teapwd[MAX_SIZE];
410     system("clear");
411     printf("\\033[33m ? ? ? ? ? ? ? ? ? ? 教师登录? ? ? ? ? ? ? ? ? ? \\n\\n\\n\\n");
412     printf("\\t ?  用户名(工号):");
413     scanf("%d",&teaID);
414     getchar();
415     IDhao = teaID;
416     printf("\\n\\n\\n");
417     printf("\\t ?  输  入  密  码:");
418     set_disp_mode(STDIN_FILENO,0);
419     getpasswd(teapwd, MAX_SIZE);
420     set_disp_mode(STDIN_FILENO,1);
421     //getchar();//吸收字符
422     TeaNode *p = makeTeaNode(); 
423     p =    findteanode(pTHead, teaID);
424     if(p == NULL)
425     
426         return -1;
427     
428     if(strncmp(p->data.password,teapwd,strlen(p->data.password)) == 0)
429         
430         if(strcmp(p->data.position,"head") == 0)
431         
432             system("clear");
433             return 1;
434         
435         else 
436         
437             system("clear");
438             return 2;
439         
440     
441     else 
442     
443         printf("教师密码输入错误!\\n");
444     
445 
446 
447 
448 
449 /*班主任执行选项*/
450 int headteacherdo(Node *pHead, TeaNode *pTHead, int ID)
451 
452     TeaNode *temp = makeTeaNode();
453     temp = findteanode(pTHead, ID);
454     char name1[16];
455     strcpy(name1, temp->data.name);
456     printf("\\033[32m\\033[1m\\033[44m ?  %d 班班主任 %s,您好!\\n\\033[0m\\n",temp->data.classes,name1);
457     printf("\\033[33m ? ? ? ? ? ? ? ? ? ? ? ? 班主任操作选项 ? ? ? ? ? ? ? ? ? ? ? ? \\n");
458     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
459     printf("\\t\\t\\t1.录入本班学生信息\\n");
460     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
461     printf("\\t\\t\\t2.查看本班学生信息\\n");
462     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
463     printf("\\t\\t\\t3.修改学生相关信息\\n");
464     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
465     printf("\\t\\t\\t4.删除学生所有信息\\n");
466     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
467     printf("\\t\\t\\t5.按总分排名查看成绩\\n");
468     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
469     printf("\\t\\t\\t6.修改自己登录密码\\n");
470     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
471     printf("\\t\\t\\t7.辞职\\n");
472     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
473     printf("\\t\\t\\t0.注销\\n");
474     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
475     printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \\n\\n");
476     printf("请选择:");
477     char ch = \\0;
478     ch = getchar();
479     switch(ch)
480     
481         case 1:
482             
483                 enterstu(pHead);
484                 break;
485             
486         case 2:
487             
488                 getchar();
489                 examinestu(pTHead, pHead, IDhao);
490                 char ch1 = \\0;
491                 printf("\\n");
492                 printf("按Enter退回菜单!\\n");
493                 ch1 = getchar();
494                 break;
495             
496         case 3:
497             
498                 modifystu(pHead);
499                 break;
500             
501         case 4:
502             
503                 printf("请输入要删除学生学号:");
504                 int stuID;
505                 scanf("%d", &stuID);
506                 getchar();
507                 delstu(pHead, stuID);
508                 break;
509             
510         case 5:
511             
512                 getchar();
513                 bublesort(pHead);
514                 writeToFile(pHead);
515                 lookrank(pTHead, pHead, IDhao);
516                 char ch1 = \\0;
517                 printf("\\n");
518                 printf("按Enter退回菜单!\\n");
519                 ch1 = getchar();
520                 break;
521             
522         case 6:
523             
524                 changepasswd(pTHead, IDhao);
525                 return 1;
526                 break;
527             
528         case 7:
529             
530                 int n;
531                 n = resignation(pTHead, IDhao);
532                 if(n == 0)
533                 
534                     break;
535                 
536                 else if(n != 0)
537                 
538                     resID[resnum] = IDhao;
539                     resdID[resnum] = IDhao;
540                     resnum++;
541                     return 1;
542                 
543             
544         case 0:
545             
546                 return 1;
547             
548         default :
549             
550                 getchar();
551                 system("clear");
552                 printf("\\n选项输入错误!请重新输入");
553             ;
554     
555 
556 
557 /*任课教师执行菜单*/
558 int teacherdo(TeaNode *pTHead, Node *pHead)
559 
560     printf("任课教师操作选项:\\n");
561     printf("\\t1.查看学生科目成绩以及排名\\n");
562     printf("\\t2.修改自己登录密码\\n");
563     printf("\\t3.辞职\\n");
564     printf("\\t0.注销\\n");
565     printf("请选择:");
566     char ch = \\0;
567     ch = getchar();
568     switch(ch)
569     
570         case 0:
571             
572                 return 1;
573                 break;
574             
575         case 1:
576             
577                 getchar();
578                 onebublesort(pTHead, pHead, IDhao);
579                 writeToFile(pHead);
580                 lookrank(pTHead, pHead, IDhao);
581                 char ch1 = \\0;
582                 printf("\\n");
583                 printf("按Enter退回菜单!\\n");
584                 ch1 = getchar();
585                 break;
586             
587         case 2:
588             
589                 changepasswd(pTHead, IDhao);
590                 return 1;
591                 break;
592             
593         case 3:
594             
595                 int n;
596                 n = resignation(pTHead, IDhao);
597                 if(n == 0)
598                 
599                     break;
600                 
601                 else if(n != 0)
602                 
603                     resID[resnum] = IDhao;
604                     resdID[resnum] = IDhao;
605                     resnum++;
606                     return 1;
607                 
608             
609         default :
610             
611                 getchar();
612                 system("clear");
613                 printf("\\n选项输入错误!请重新输入");
614             
615     
616 
617 
618 
619 
620 /*学生登录菜单*/
621 int stulogin(Node *pHead)
622 
623     int stuID;    
624     char stupwd[MAX_SIZE];
625     system("clear");
626     printf("\\033[33m ? ? ? ? ? ? ? ? ? ? 学生登录? ? ? ? ? ? ? ? ? ? \\n\\n\\n\\n");
627     printf("\\t ?  用户名(ID号):");
628     scanf("%d",&stuID);
629     IDstuhao = stuID;
630     printf("\\n\\n\\n");
631     printf("\\t ?  输  入  密  码:");
632     scanf("%s",stupwd);
633     //getchar();//吸收字符
634     Node *p = makeNode(); 
635     p =    findnode(pHead, stuID);
636     if(p == NULL)
637     
638         return -1;
639     
640     if(strcmp(p->data.password,stupwd) == 0)
641         
642         system("clear");
643         return 1;
644     
645     else 
646     
647         printf("密码输入错误!\\n");
648         return 0;
649     
650 
651 
652 /*学生执行菜单*/
653 int studo(Node *pHead)
654 
655     Node *temp = makeNode();
656     temp = findnode(pHead, IDstuhao);
657     char name1[16];
658     strcpy(name1, temp->data.name);
659     printf("\\033[32m\\033[1m\\033[44m ?  %d 班同学 %s,您好!\\n\\033[0m\\n",temp->data.classes,name1);
660     printf("\\033[33m ? ? ? ? ? ? ? ? ? ? ? ? ? 学生操作选项 ? ? ? ? ? ? ? ? ? ? ? ? ? \\n");
661     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
662     printf("\\t\\t\\t1.学生信息查询\\n");
663     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
664     printf("\\t\\t\\t2.登录密码修改\\n");
665     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
666     printf("\\t\\t\\t3.成绩班级排名\\n");
667     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
668     printf("\\t\\t\\t4.成绩学校排名\\n");
669     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
670     printf("\\t\\t\\t0.退出\\n");
671     printf("|\\t\\t\\t\\t\\t\\t\\t\\t|\\n");
672     printf(" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? \\n\\n");
673     printf("请选择:");
674 
675     char ch = \\0;
676     ch = getchar();
677     switch(ch)
678     
679 
680         case 1:
681             
682                 getchar();
683                 mynews(pHead, IDstuhao);
684                 char ch1 = \\0;
685                 printf("\\n");
686                 printf("按Enter退回菜单!\\n");
687                 ch1 = getchar();
688                 system("clear");
689                 break;
690             
691         case 2:
692             
693                 stuchangepsw(pHead, IDstuhao);
694                 return 1;
695                 break;
696             
697         case 3:
698             
699                 getchar();
700                 classranking(pHead, IDstuhao);
701                 char ch1 = \\0;
702                 printf("\\n");
703                 printf("按Enter退回菜单!\\n");
704                 ch1 = getchar();
705                 system("clear");
706                 break;
707             
708         case 4:
709             
710                 getchar();
711                 schoolranking(pHead, IDstuhao);
712                 char ch1 = \\0;
713                 printf("\\n");
714                 printf("按Enter退回菜单!\\n");
715                 ch1 = getchar();
716                 system("clear");
717                 break;
718             
719         case 0:
720             
721                 return 1;
722                 break;
723             
724         default :
725             
726                 getchar();
727                 system("clear");
728                 printf("\\n选项输入错误!请重新输入");
729             
730     
731 
732 
733 
734 //函数getpasswd用于获得用户输入的密码,并将其存储在指定的字符数组中
735 int getpasswd(char* passwd, int size)
736 
737    int c;
738    int n = 0;
739 
740    do
741       c=getchar();
742       if (c != \\n|c!=\\r)
743          passwd[n++] = c;
744       
745    while(c != \\n && c !=\\r && n < (size - 1));
746    passwd[n] = \\0;
747    return n;
748 
749 //函数set_disp_mode用于控制是否开启输入回显功能
750 //如果option为0,则关闭回显,为1则打开回显
751 int set_disp_mode(int fd,int option)
752 
753    int err;
754    struct termios term;
755    if(tcgetattr(fd,&term)==-1)
756      perror("Cannot get the attribution of the terminal");
757      return 1;
758    
759    if(option)
760         term.c_lflag|=ECHOFLAGS;
761    else
762         term.c_lflag &=~ECHOFLAGS;
763    err=tcsetattr(fd,TCSAFLUSH,&term);
764    if(err==-1 && err==EINTR)
765         perror("Cannot set the attribution of the terminal");
766         return 1;
767    
768    return 0;
769 
View Code

 

头文件 login.h

技术图片
 1 #include <termios.h>
 2 #include <unistd.h>
 3 #include <errno.h>
 4 #include "teacherdo.h"
 5 
 6 #define MAX_SIZE 20
 7 #define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)
 8 
 9 /*管理员登录菜单*/
10 int adminlogin();
11 
12 /*学生登录菜单*/
13 int stulogin(Node *pHead);
14 
15 /*学生执行菜单*/
16 int studo();
17 
18 /*管理员执行选项*/
19 int admindo(TeaNode *pHead);
20 
21 /*主菜单*/
22 int login(Node *pHead, TeaNode *pTHead);
23 
24 /*教师登录菜单*/
25 int tealogin(TeaNode *pTHead);
26 
27 /*班主任执行菜单*/
28 int headteacherdo(Node *pHead, TeaNode *pTHead, int ID);
29 
30 /*任课教师执行菜单*/
31 int teacherdo(TeaNode *pTHead, Node *pHead);
32 
33 /*辞职信息显示*/
34 int resinformation(TeaNode *pTHead);
35 
36 /*辞职信息回馈*/
37 int resfeedback(TeaNode *pTHead);
38 
39 //函数getpasswd用于获得用户输入的密码,并将其存储在指定的字符数组中
40 int getpasswd(char* passwd, int size);
41 
42 //函数set_disp_mode用于控制是否开启输入回显功能
43 //如果option为0,则关闭回显,为1则打开回显
44 int set_disp_mode(int fd,int option);
View Code

 

 

整个项目分开写到了很多个文件里,有些函数没有讲到,后续会一个一个介绍。

 

本着一个记录自己学习成果的态度,也希望能够给其他人有一个参考。

 

以上是关于c语言之一个简单的《学生教师管理系统》小结记录的主要内容,如果未能解决你的问题,请参考以下文章

跪求一个c语言学生选课管理系统,急用!不要百度文库的,我要个程序正确,能满足教师学生管理的,谢谢

C语言课程设计"学生信息管理系统设计 "怎么做?

用C语言做学生信息管理系统设计

学生成绩管理系统c

求用C语言编写一个简单的学生信息管理程序【 C++】网上之前有C 的好像

求用C语言编写一个简单的学生信息管理程序和课程设计报告