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

2020-12-13 15:49

阅读:544

标签:ati   switch   运行   函数   feedback   技术   应该   sch   inux   

大体流程图

技术图片

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

 

首先大体分块写函数

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)


评论


亲,登录后才可以留言!