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

 

 

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

 

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

 

posted @ 2019-10-01 00:40  点小小  阅读(1039)  评论(2编辑  收藏  举报