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
主函数利用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
执行选项菜单
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
学生和教师的菜单类似。
登录界面一览登录界面一览
登录函数 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
头文件 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);
整个项目分开写到了很多个文件里,有些函数没有讲到,后续会一个一个介绍。
本着一个记录自己学习成果的态度,也希望能够给其他人有一个参考。
以上是关于c语言之一个简单的《学生教师管理系统》小结记录的主要内容,如果未能解决你的问题,请参考以下文章
跪求一个c语言学生选课管理系统,急用!不要百度文库的,我要个程序正确,能满足教师学生管理的,谢谢