Python 文件操作 —— 师生信息管理系统(三系统)
# 三系统师生信息管理系统(文件版)
""" 思考: 1、请问如何实现文件内容增、删、改、查? 2、如何避免使用全局变量? 3、全局变量在函数里如何修改? 4、如何捕获异常为我所用? 介绍: 1、管理系统在生活中处处可见,把单一的功能集合到一起就能组成一个系统。本系统是在学生信息管理系统 改进而来,升级了的有:可以存储信息,多系统操作。 2、多系统操作,共分为管理员、教师端、学生端。 3、管理员默认账号:123456 默认密码:123456 4、隐藏功能:数字0,是返回(为了美观,而牺牲的功能) 知识点: 1、文件操作:增、删、改、查 2、类的继承:多继承,单继承 3、类与对象:类方法、公共属性 4、循环语句、条件语句、跳转语句 重点:with语句、旗帜、函数封装 不足: 1、由于split()函数无法分割'\n',所以本程序采用追加空格加换行' \n'的格式写入文件 所以当输入信息时,有空格,会导致空格后面的信息缺失。 2、界面太丑,提示语不够丰富,有待改善。 3、本程序还不够精简,代码注释较少,对基础较弱的道友不太友好,有待改善 创新: 1、输入信息时,可以限制输入字符类型,以达到规避出现BUG,例如:不可以输入空格。 2、文字显示太丑,可以改为图形化界面。 3、功能局限,可以适当添加。 """
1 # 三系统师生信息管理系统(文件版) 2 3 4 5 # 全局变量类 ========================================================================== 6 class Global: 7 8 # 设置归属地(默认:220703) 9 home_location = '220703' 10 # 设置随机位数 11 rand_digit = 4 12 13 # 设置重置密码 14 default_password = '123' 15 16 # 管理员工号 17 admin_id = '123456' 18 # 管理员密码 19 admin_password = '123456' 20 21 # 一级目录 22 one_dir = 'system data' 23 one_dir += '/' 24 # 二级目录 25 two_dir = 'info data' 26 two_dir += '/' 27 # 路径拼接 28 path_dir = one_dir + two_dir 29 30 31 # 菜单界面类 ========================================================================== 32 class UI(Global): 33 34 # 通用标题 35 @classmethod 36 def show_title(cls, info, space=0, num=9): 37 print(' '*space + '='*num + info + '='*num) 38 39 # 初始界面 40 @classmethod 41 def login_ui(cls): 42 cls.show_title(info='欢迎来到师生信息管理系统', num=3) 43 print(' '*3 + '1.注册\t\t2.登录') 44 45 # 身份确认(学生/教师) 46 @classmethod 47 def regist_type_ui(cls): 48 cls.show_title(info='欢迎来到注册账号管理系统', num=3) 49 print('1.学生注册\t\t2.教师注册') 50 51 # 学生端菜单界面 52 @classmethod 53 def stu_ui(cls): 54 cls.show_title(info='学生信息管理系统(学生端)', num=4) 55 print('1.查看学生信息\t2.修改学生信息') 56 print('3.修改学生密码\t0.退出') 57 58 # 教师端菜单界面 59 @classmethod 60 def teach_ui(cls): 61 cls.show_title(info='学生信息管理系统(教师端)', num=4) 62 print('1.查看教师信息\t2.修改教师信息') 63 print('3.修改教师密码\t4.重置学生密码') 64 print('5.查找学生信息\t6.遍历学生信息') 65 print('7.注销学生账号\t0.退出') 66 67 # 管理员菜单界面 68 @classmethod 69 def admin_ui(cls): 70 cls.show_title(info='学生信息管理系统(管理员)', num=4) 71 print('1.重置师生密码\t2.修改管理员密码') 72 print('3.查找师生信息\t4.设置账号归属地') 73 print('5.遍历师生信息\t6.设置随机数位数') 74 print('7.注销师生账号\t8.设置默认密码') 75 print('0.退出') 76 77 # 重置密码界面 78 @classmethod 79 def reset_password_ui(cls): 80 cls.show_title(info='欢迎来到重置密码管理系统', num=4) 81 print('1.重置学生密码\t2.重置教师密码') 82 83 # 遍历学生/教师信息 84 @classmethod 85 def output_info_ui(cls): 86 cls.show_title(info='欢迎来到遍历信息管理系统', num=4) 87 print('1.遍历学生信息\t2.遍历教师信息') 88 89 # 注销学生/教师账号 90 @classmethod 91 def logout_account_ui(cls): 92 cls.show_title(info='欢迎来到注销账号管理系统', num=4) 93 print('1.注销学生账号\t2.注销教师账号') 94 95 96 # 菜单功能选择类(单继承) =============================================================== 97 class Menu_option(UI): 98 99 num_list = list() # 定义全局变量(如果报错就把这行放在函数外面) 100 101 # 自然数列表 102 @classmethod 103 def char_list(cls): 104 cls.num_list = list() 105 for i in range(10): 106 cls.num_list.append(str(i)) 107 108 # 输入编号(整数) 109 @classmethod 110 def input_num(cls, max, menu, min=0,): 111 112 cls.char_list() # 存入自然数字符 113 114 buf = '请选择功能:' 115 while True: 116 flag_not_num = 0 # 非整数旗帜 117 num = input(buf) 118 119 # 保证字符串是整数 120 for i in num: 121 if i not in cls.num_list: 122 flag_not_num = 1 123 break 124 125 # 在范围内返回整数 126 if not flag_not_num: 127 # 捕获异常 128 try: 129 if min <= int(num) <= max: # 等价于 int(num) >= min and int(num) <= max 130 return int(num) 131 except: 132 return -1 133 134 buf = '请重新选择功能(整数):' 135 136 # 打印菜单 137 if menu == 1: 138 cls.login_ui() 139 elif menu == 2: 140 cls.regist_type_ui() 141 elif menu == 3: 142 cls.stu_ui() 143 elif menu == 4: 144 cls.teach_ui() 145 elif menu == 5: 146 cls.admin_ui() 147 elif menu == 6: 148 cls.reset_password_ui() 149 elif menu == 7: 150 cls.output_info_ui() 151 elif menu == 8: 152 cls.logout_account_ui() 153 154 155 # 文件操作类 ========================================================================== 156 class File_handle: 157 158 # 创建一个空目录 159 @classmethod 160 def mkdir(cls, dir_name): 161 import os 162 # 判断目录是否存在,不存在立即创建 163 if os.path.exists(path=dir_name) is False: 164 os.mkdir(path=dir_name) 165 166 # 创建一个txt文件 167 @classmethod 168 def mkfile(cls, file_name): 169 import os 170 # 判断文件是否存在,不存在立即创建 171 if os.path.exists(path=file_name) is False: 172 with open(file=file_name, mode='w', encoding='utf-8'): 173 pass 174 175 176 # 特殊功能类 ========================================================================== 177 class Special_func(Global, File_handle): 178 179 # 随机产生多位数字 180 @classmethod 181 def produce_rand_num(cls, digit=4): 182 num = '' 183 import random 184 for i in range(digit): 185 num += str(random.choice(seq=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) 186 return num 187 188 # 把全局变量写入文件 189 @classmethod 190 def write_the_message(cls): 191 192 # 把全局变量写入文件 193 with open(file=f'{cls.one_dir}admin.txt', mode='w', encoding='utf-8') as file: 194 file.writelines([cls.home_location+' ',str(cls.rand_digit)+' ',cls.default_password+' ',cls.admin_password]) 195 196 # 读取全局变量文件 197 @classmethod 198 def read_the_message(cls): 199 200 # 判断文件是否存在 201 import os 202 if os.path.exists(path=f'{cls.one_dir}admin.txt') is False: 203 # 创建目录 204 cls.mkdir(dir_name=cls.one_dir) 205 cls.mkdir(dir_name=cls.path_dir) 206 return 207 208 # 读取文件信息 209 with open(file=f'{cls.one_dir}admin.txt', mode='r', encoding='utf-8') as file: 210 admin_info = file.readlines() 211 212 # 赋值 213 cls.home_location = admin_info[0].split()[0] 214 cls.rand_digit = int(admin_info[0].split()[1]) 215 cls.default_password = admin_info[0].split()[2] 216 cls.admin_password = admin_info[0].split()[3] 217 218 219 # 菜单功能实现类(单继承) =============================================================== 220 class Menu_realizes(Menu_option, Special_func, File_handle): 221 222 # 随机生成学号/工号(不重复) 223 @classmethod 224 def random_id(cls): 225 # 随机产生数字 226 num = cls.produce_rand_num(digit=cls.rand_digit) 227 228 # 判断账号是否重复(在目录里查找) 229 import os 230 # 1.创建一个管理系统目录 231 cls.mkdir(dir_name=cls.one_dir) 232 # 2.创建一个学生信息系统目录 233 cls.mkdir(dir_name=cls.path_dir) 234 # 3.把学生信息目录的文件存入列表 235 stu_info = os.listdir(cls.path_dir) 236 # 4.拼接学号文件 237 stu_id = cls.home_location + num + '.txt' 238 239 # 判断此学号是否存在 240 if stu_id in stu_info: 241 cls.random_id() 242 return cls.buf 243 244 cls.buf = cls.home_location + num # 此变量是在作用域在方法内 245 return cls.buf 246 247 # 录入信息到管理系统 248 @classmethod 249 def input_info(cls, file_path, job): 250 251 data = '' 252 253 # 获取学号/工号 254 account = file_path.split('/')[2].split('.')[0] 255 if job == '学生': 256 print(f'您的学号是:{account}') 257 else: 258 print(f'您的工号是:{account}') 259 260 # 输入数据 261 while True: 262 password = input('请设置密码:') + '@)@@)&)#' 263 if password != '@)@@)&)#': 264 password = password.split('@)@@)&)#')[0] 265 break 266 while True: 267 name = input(f'请输入{job}姓名:') + '@)@@)&)#' 268 if name != '@)@@)&)#': 269 name = name.split('@)@@)&)#')[0] 270 break 271 while True: 272 phone_num = input(f'请输入{job}手机号:') + '@)@@)&)#' 273 if phone_num != '@)@@)&)#': 274 phone_num = phone_num.split('@)@@)&)#')[0] 275 break 276 277 while True: 278 addr = input(f'请输入{job}家庭地址:') + '@)@@)&)#' 279 if addr != '@)@@)&)#': 280 addr = addr.split('@)@@)&)#')[0] 281 break 282 283 # 保存数据 284 data += account + ' \n' 285 data += password + ' \n' 286 data += name + ' \n' 287 data += phone_num + ' \n' 288 data += addr + ' \n' 289 data += job + ' \n' 290 291 with open(file=file_path, mode='r+', encoding='utf-8') as file: 292 file.writelines(data) 293 294 # 打印信息 295 @classmethod 296 def output_info(cls, file_path, flag=False): 297 with open(file=file_path, mode='r+', encoding='utf-8') as file: 298 299 info_txt = file.readlines() 300 301 if info_txt[-1].split()[0] == '学生': 302 job = '学号:' 303 else: 304 job = '工号:' 305 306 # 打印信息 307 for i in range(6): 308 if i == 0: 309 print(f'{job}{info_txt[i].split()[0]}', end='\t') 310 elif i == 1: 311 print(f'密码:{info_txt[i].split()[0]}', end='\t') 312 elif i == 2: 313 print(f'姓名:{info_txt[i].split()[0]}', end='\t') 314 elif i == 3: 315 print(f'手机号:{info_txt[i].split()[0]}', end='\t') 316 elif i == 4: 317 print(f'家庭地址:{info_txt[i].split()[0]}', end='\t') 318 319 if flag and i == 5: 320 print(f'职业:{info_txt[i].split()[0]}', end='\t') 321 print() 322 323 # 注册 324 @classmethod 325 def regist_account(cls, job): 326 import os 327 328 # 随机生成学号/工号 329 account = cls.random_id() 330 331 # 文件路径拼接 332 file_name = os.path.join(cls.path_dir, account + '.txt') 333 # 创建一个txt文件,用于存储信息 334 cls.mkfile(file_name=file_name) 335 336 # 打开txt文件,开始存入信息 337 cls.input_info(file_path=file_name, job=job) 338 339 # 打印学生信息 340 cls.output_info(file_path=file_name) 341 342 # 确认是否保存信息 343 while True: 344 is_save = input('请确认是否保存信息(y/n):') 345 if is_save == 'n' or is_save == 'N': 346 os.remove(path=file_name) 347 print('注册失败!') 348 break 349 elif is_save == 'y' or is_save == 'Y': 350 print('注册成功!') 351 break 352 353 # 判断账号密码是否正确,并返回职业 354 @classmethod 355 def check_account_password(cls, account, password): 356 357 # 判断是否为管理员 358 if account == cls.admin_id and password == cls.admin_password: 359 return '管理员' 360 361 # 字符串拼接 362 account += '.txt' 363 364 # 获取目录文件名 365 import os 366 person = os.listdir(cls.path_dir) 367 368 # 判断账号是否存在 369 if account not in person: 370 if account == cls.admin_id + '.txt': 371 print('密码输入错误!') 372 return None 373 print('学号/工号不存在!') 374 return None 375 376 # 判断密码是否正确 377 with open(file=cls.path_dir + account, encoding='utf-8') as file: 378 if password != file.readlines()[1].split()[0]: 379 print('输入密码错误!') 380 return False 381 382 # 调整读写位置 383 file.seek(0, 0) 384 # print(file.readlines()) 385 386 # 判断账号是学生还是教师 387 if '学生' == file.readlines()[-1].split()[0]: 388 return '学生' 389 else: 390 return '教师' 391 392 # 修改个人信息 393 @classmethod 394 def change_info(cls, file_name): 395 while True: 396 new_name = input('请输入新的姓名:') + '@)@@)&)#' 397 if new_name != '@)@@)&)#': 398 new_name = new_name.split('@)@@)&)#')[0] 399 break 400 while True: 401 new_phone_num = input('请输入新的手机号:') + '@)@@)&)#' 402 if new_phone_num != '@)@@)&)#': 403 new_phone_num = new_phone_num.split('@)@@)&)#')[0] 404 break 405 406 while True: 407 new_addr = input('请输入新的家庭地址:') + '@)@@)&)#' 408 if new_addr != '@)@@)&)#': 409 new_addr = new_addr.split('@)@@)&)#')[0] 410 break 411 412 # 字符串拼接 413 new_name += ' \n' 414 new_phone_num += ' \n' 415 new_addr += ' \n' 416 417 # 获取个人信息,并修改 418 with open(file=file_name, mode='r', encoding='utf-8') as file: 419 data = file.readlines() 420 data[2] = new_name 421 data[3] = new_phone_num 422 data[4] = new_addr 423 424 # 确认是否修改信息 425 while True: 426 buf = input('请确认是否保存信息(y/n):') 427 if buf == 'y' or buf == 'Y': 428 print('已成功修改信息') 429 break 430 elif buf == 'n' or buf == 'N': 431 print('已放弃修改信息') 432 return 433 434 # 保存更新修改后的信息 435 with open(file=file_name, mode='w', encoding='utf-8') as file: 436 file.writelines(data) 437 438 # 修改个人密码 439 @classmethod 440 def change_password(cls, file_name): 441 old_password = input('请输入旧密码:') 442 while True: 443 new_password = input('请输入新密码:') + '@)@@)&)#' 444 if new_password != '@)@@)&)#': 445 new_password = new_password.split('@)@@)&)#')[0] 446 break 447 448 # 读取文件数据 449 with open(file=file_name, encoding='utf-8') as file: 450 data = file.readlines() 451 452 # 校对旧密码,是否正确 453 if data[1].split()[0] != old_password: 454 print('旧密码输入有误!') 455 return 456 457 # 确认是否修改密码 458 while True: 459 buf = input('请确认是否修改密码(y/n):') 460 if buf == 'y' or buf == 'Y': 461 print('已成功修改密码') 462 break 463 elif buf == 'n' or buf == 'N': 464 print('已放弃修改密码') 465 return 466 467 # 替换旧密码 468 new_password += ' \n' 469 data[1] = new_password 470 471 # 重写到文件里 472 with open(file=file_name, mode='w', encoding='utf-8') as file: 473 file.writelines(data) 474 475 # 重置登录密码 476 @classmethod 477 def reset_password(cls, job): 478 479 # 确认身份 480 if job == '学生': 481 account = input('请输入学号:') 482 else: 483 account = input('请输入工号:') 484 name = input(f'请输入{job}姓名:') 485 486 # 获取目录信息 487 import os 488 dir_info = os.listdir(cls.path_dir) 489 490 # 判断账号是否存在 491 if f'{account}.txt' not in dir_info: 492 if job == '学生': 493 print('学号输入有误!') 494 else: 495 print('工号输入有误!') 496 return 497 498 # 获取文件信息 499 with open(file=f'{cls.path_dir + account}.txt', encoding='utf-8') as file: 500 file_info = file.readlines() 501 502 # 判断账号是否为学生/教师 503 if file_info[-1] != f'{job} \n': 504 if job == '学生': 505 print('此学号不存在!') 506 else: 507 print('此工号不存在!') 508 return 509 510 # 校对输入姓名 511 if name + ' \n' != file_info[2]: 512 print(f'{job}姓名输入有误!') 513 return 514 515 # 确认是否重置密码 516 while True: 517 buf = input('请确认是否重置密码(y/n):') 518 if buf == 'y' or buf == 'Y': 519 print('已成功重置密码') 520 break 521 elif buf == 'n' or buf == 'N': 522 print('已放弃重置密码') 523 return 524 525 # 修改密码 526 file_info[1] = f'{cls.default_password} \n' 527 528 # 写入文件信息 529 with open(file=f'{cls.path_dir + account}.txt', mode='w', encoding='utf-8') as file: 530 file.writelines(file_info) 531 532 # 查找个人信息 533 @classmethod 534 def find_info(cls, job=None, flag=False): 535 flag_none = 0 536 name = input(f'请输入需要查找姓名:') 537 538 # 获取目录信息 539 import os 540 dir_info = os.listdir(cls.path_dir) 541 542 # 遍历查找 543 for i in dir_info: 544 # 获取文件信息 545 with open(file=cls.path_dir + i, encoding='utf-8') as file: 546 file_info = file.readlines() 547 if file_info[2] == name + ' \n': 548 if not flag_none: 549 cls.show_title(info=f'查找的信息如下') 550 flag_none = 1 551 552 if str(job) + ' \n' == file_info[-1]: 553 cls.output_info(file_path=cls.path_dir + i, flag=flag) 554 555 elif not job: 556 cls.output_info(file_path=cls.path_dir + i, flag=flag) 557 558 if not flag_none: 559 print(f'姓名输入有误!') 560 561 # 打印所有学生/教师信息 562 @classmethod 563 def output_all_info(cls, job): 564 565 flag_none = 0 566 567 # 获取目录信息 568 import os 569 dir_info = os.listdir(cls.path_dir) 570 571 # 校对信息,并打印 572 for i in dir_info: 573 with open(file=cls.path_dir + i, encoding='utf-8') as file: 574 if file.readlines()[-1] == job + ' \n': 575 cls.output_info(file_path=cls.path_dir + i) 576 flag_none = 1 577 578 if not flag_none: 579 print('\n\t\t 暂无数据\n') 580 581 # 注销学号/工号 582 @classmethod 583 def logout_account(cls, job): 584 585 # 确认身份 586 if job == '学生': 587 account = input('请输入学号:') 588 else: 589 account = input('请输入工号:') 590 name = input(f'请输入{job}姓名:') 591 592 # 获取目录信息 593 import os 594 dir_info = os.listdir(cls.path_dir) 595 596 # 判断账号是否存在 597 if f'{account}.txt' not in dir_info: 598 if job == '学生': 599 print('学号输入有误!') 600 else: 601 print('工号输入有误!') 602 return 603 604 # 获取文件信息 605 with open(file=f'{cls.path_dir + account}.txt', encoding='utf-8') as file: 606 file_info = file.readlines() 607 608 # 判断账号是否为学生/教师 609 if file_info[-1] != f'{job} \n': 610 if job == '学生': 611 print('此学号不存在!') 612 else: 613 print('此工号不存在!') 614 return 615 616 # 校对输入姓名 617 if name + ' \n' != file_info[2]: 618 print(f'{job}姓名输入有误!') 619 return 620 621 # 改变赋值 622 if job == '学生': 623 job = '学号' 624 else: 625 job = '工号' 626 627 # 确认是否注销学号/工号 628 while True: 629 buf = input(f'请确认是否注销{job}(y/n):') 630 if buf == 'y' or buf == 'Y': 631 print(f'已成功注销{job}') 632 break 633 elif buf == 'n' or buf == 'N': 634 print(f'已放弃注销{job}') 635 return 636 637 # 删除文件 638 os.remove(path=f'{cls.path_dir + account}.txt') 639 640 # 修改管理员密码 641 @classmethod 642 def change_admin_password(cls): 643 old_password = input('请输入旧密码:') 644 while True: 645 new_password = input('请输入新密码:') + '@)@@)&)#' 646 if new_password != '@)@@)&)#': 647 new_password = new_password.split('@)@@)&)#')[0] 648 break 649 650 # 校验旧密码 651 if old_password != cls.admin_password: 652 print('旧密码输入错误!') 653 return 654 655 # 确认是否修改密码 656 while True: 657 buf = input('请确认是否修改管理员密码(y/n):') 658 if buf == 'y' or buf == 'Y': 659 print(f'已成功修改管理员密码') 660 break 661 elif buf == 'n' or buf == 'N': 662 print('已放弃修改管理员密码') 663 return 664 665 # 修改密码 666 cls.admin_password = new_password 667 668 # 写入文件 669 cls.write_the_message() 670 671 # 归属地设置 672 @classmethod 673 def set_home_location(cls): 674 while True: 675 new_home_location = input('请输入新归属地:') + '@)@@)&)#' 676 if new_home_location != '@)@@)&)#': 677 new_home_location = new_home_location.split('@)@@)&)#')[0] 678 break 679 680 # 确认是否修改归属地 681 while True: 682 buf = input('请确认是否修改归属地(y/n):') 683 if buf == 'y' or buf == 'Y': 684 print(f'已成功修改归属地') 685 break 686 elif buf == 'n' or buf == 'N': 687 print('已放弃修改归属地') 688 return 689 690 # 修改归属地 691 cls.home_location = new_home_location 692 693 # 写入文件 694 cls.write_the_message() 695 696 # 设置随机数位数 697 @classmethod 698 def set_rand_digit(cls): 699 while True: 700 new_rand_digit = input('请输入新随机数位数:') + '@)@@)&)#' 701 if new_rand_digit != '@)@@)&)#': 702 new_rand_digit = new_rand_digit.split('@)@@)&)#')[0] 703 break 704 705 # 确认是否修改随机数位数 706 while True: 707 buf = input('请确认是否修改归属地(y/n):') 708 if buf == 'y' or buf == 'Y': 709 print(f'已成功修改随机数位数') 710 break 711 elif buf == 'n' or buf == 'N': 712 print('已放弃修改随机数位数') 713 return 714 715 # 修改随机数位数 716 cls.rand_digit = new_rand_digit 717 718 # 写入文件 719 cls.write_the_message() 720 721 # 设置默认密码 722 @classmethod 723 def set_default_password(cls): 724 while True: 725 new_default_password = input('请输入新默认密码:') + '@)@@)&)#' 726 if new_default_password != '@)@@)&)#': 727 new_default_password = new_default_password.split('@)@@)&)#')[0] 728 break 729 730 # 确认是否修改默认密码 731 while True: 732 buf = input('请确认是否修改默认密码(y/n):') 733 if buf == 'y' or buf == 'Y': 734 print(f'已成功修改默认密码') 735 break 736 elif buf == 'n' or buf == 'N': 737 print('已放弃修改默认密码') 738 return 739 740 # 修改默认密码 741 cls.default_password = new_default_password 742 743 # 写入文件 744 cls.write_the_message() 745 746 747 # 菜单功能框架类(单继承) =============================================================== 748 class Menu_bar(Menu_realizes): 749 750 # 注册 or 登录 751 @classmethod 752 def login_option(cls, num): 753 # 注册 # 选择注册类型(学生/教师) 754 if num == 1: 755 while True: 756 cls.regist_type_ui() 757 num = cls.input_num(max=2, min=0, menu=2) 758 if num == 0: 759 print('已返回') 760 break 761 elif num == -1: 762 continue 763 764 Menu_bar.regist_option(num=num) 765 break 766 767 # 登录 768 elif num == 2: 769 account = input('请输入学号/工号:') 770 password = input('请输入密码:') 771 772 # 检查账号密码是否正确 773 job = cls.check_account_password(account=account, password=password) 774 775 # 进入不同的系统 776 # 学生系统 777 if job == '学生': 778 while True: 779 cls.stu_ui() 780 num = cls.input_num(max=3, menu=3) 781 if num == 0: 782 print('已返回') 783 return 784 cls.stu_option(num=num, account=account) 785 786 # 教师系统 787 elif job == '教师': 788 while True: 789 cls.teach_ui() 790 num = cls.input_num(max=7, menu=4) 791 if num == 0: 792 print('已返回') 793 return 794 cls.teach_option(num=num, account=account) 795 796 # 管理员系统 797 elif job == '管理员': 798 while True: 799 cls.admin_ui() 800 num = cls.input_num(max=8, menu=5) 801 if num == 0: 802 print('已返回') 803 return 804 cls.admin_option(num=num) 805 806 # 选择学生注册 or 教师注册 807 @classmethod 808 def regist_option(cls, num): 809 # 学生注册 810 if num == 1: 811 cls.show_title('学生注册') 812 cls.regist_account(job='学生') 813 814 # 教师注册 815 elif num == 2: 816 cls.show_title('教师注册') 817 cls.regist_account(job='教师') 818 819 # 选择学生功能 820 @classmethod 821 def stu_option(cls, num, account): 822 # 文件拼接 823 file_name = cls.path_dir + account + '.txt' 824 825 # 1.查看学生信息 826 if num == 1: 827 cls.show_title(info='查看学生信息') 828 cls.output_info(file_path=file_name) 829 830 # 2.修改学生信息 831 elif num == 2: 832 cls.show_title(info='修改学生信息') 833 cls.change_info(file_name=file_name) 834 835 # 3.修改学生密码 836 elif num == 3: 837 cls.show_title(info='修改学生密码') 838 cls.change_password(file_name=file_name) 839 840 # 选择教师功能 841 @classmethod 842 def teach_option(cls, num, account): 843 # 文件路径拼接 844 file_name = cls.path_dir + account + '.txt' 845 846 # 1.查看教师信息 847 if num == 1: 848 cls.show_title(info='查看教师信息') 849 cls.output_info(file_path=file_name) 850 851 # 2.修改教师信息 852 elif num == 2: 853 cls.show_title(info='修改教师信息') 854 cls.change_info(file_name=file_name) 855 856 # 3.修改教师密码 857 elif num == 3: 858 cls.show_title(info='修改教师密码') 859 cls.change_password(file_name=file_name) 860 861 # 4.重置学生密码 862 elif num == 4: 863 cls.show_title(info='重置学生密码') 864 cls.reset_password(job='学生') 865 866 # 5.查找学生信息 867 elif num == 5: 868 cls.show_title(info='查找学生信息') 869 cls.find_info(job='学生') 870 871 # 6.遍历学生信息 872 elif num == 6: 873 cls.show_title(info='遍历学生信息') 874 cls.output_all_info(job='学生') 875 876 # 7.注销学生账号 877 elif num == 7: 878 cls.show_title(info='注销学生账号') 879 cls.logout_account(job='学生') 880 881 # 选择管理员功能 882 @classmethod 883 def admin_option(cls, num): 884 885 # 1.重置师生密码 886 if num == 1: 887 while True: 888 cls.reset_password_ui() 889 num = cls.input_num(max=2, menu=6) 890 if num == 0: 891 print('已返回') 892 break 893 elif num == 1: 894 cls.show_title(info='重置学生密码') 895 cls.reset_password(job='学生') 896 break 897 elif num == 2: 898 cls.show_title(info='重置教师密码') 899 cls.reset_password(job='教师') 900 break 901 902 # 2.修改管理员密码 903 elif num == 2: 904 cls.show_title(info='修改管理员密码') 905 cls.change_admin_password() 906 907 # 3.查找师生信息 908 elif num == 3: 909 cls.show_title(info='查找师生信息') 910 cls.find_info(flag=True) 911 912 # 4.设置账号归属地 913 elif num == 4: 914 cls.show_title(info='设置账号归属地') 915 cls.set_home_location() 916 917 # 5.遍历师生信息 918 elif num == 5: 919 while True: 920 cls.output_info_ui() 921 num = cls.input_num(max=2, menu=7) 922 if num == 0: 923 print('已返回') 924 break 925 elif num == 1: 926 cls.show_title(info='遍历学生信息') 927 cls.output_all_info(job='学生') 928 break 929 elif num == 2: 930 cls.show_title(info='遍历教师信息') 931 cls.output_all_info(job='教师') 932 break 933 934 # 6.设置随机数位数 935 elif num == 6: 936 cls.show_title(info='设置随机数位数') 937 cls.set_rand_digit() 938 939 # 7.注销师生账号 940 elif num == 7: 941 while True: 942 cls.logout_account_ui() 943 num = cls.input_num(max=2, menu=8) 944 if num == 0: 945 print('已返回') 946 break 947 elif num == 1: 948 cls.show_title(info='注销学生账号') 949 cls.logout_account(job='学生') 950 break 951 elif num == 2: 952 cls.show_title(info='注销教师账号') 953 cls.logout_account(job='教师') 954 break 955 956 # 8.设置默认密码 957 elif num == 8: 958 cls.show_title(info='设置默认密码') 959 cls.set_default_password() 960 961 962 # 功能实现区(相当于C语言的主函数) ======================================================= 963 while True: 964 965 # 读取文件 966 Menu_bar.read_the_message() 967 968 Menu_bar.login_ui() # 注册 or 登录界面 969 970 num = Menu_bar.input_num(max=2, min=0, menu=1) # 选择菜单功能编号 971 972 if num == 0: 973 Menu_bar.show_title(info='已退出管理系统', num=7) 974 Menu_bar.write_the_message() # 写入文件 975 break 976 977 Menu_bar.login_option(num=num) # 实现菜单功能
运行结果:
===欢迎来到师生信息管理系统===
1.注册 2.登录
请选择功能:2
请输入学号/工号:123456
请输入密码:123456
====学生信息管理系统(管理员)====
1.重置师生密码 2.修改管理员密码
3.查找师生信息 4.设置账号归属地
5.遍历师生信息 6.设置随机数位数
7.注销师生账号 8.设置默认密码
0.退出
请选择功能:0
已返回
===欢迎来到师生信息管理系统===
1.注册 2.登录
请选择功能:1
===欢迎来到注册账号管理系统===
1.学生注册 2.教师注册
请选择功能:1
=========学生注册=========
您的学号是:2207039778
请设置密码:123456
请输入学生姓名:周华
请输入学生手机号:10086
请输入学生家庭地址:广州
学号:2207039778 密码:123456 姓名:周华 手机号:10086 家庭地址:广州
请确认是否保存信息(y/n):y
注册成功!
===欢迎来到师生信息管理系统===
1.注册 2.登录
请选择功能:0
=======已退出管理系统=======
Process finished with exit code 0