• python【项目】:选课系统【简易版】


    • 功能要求
    角色:学校、学员、课程、讲师
    要求:
    1. 创建学校
    2. 创建课程
    3. 课程包含,周期,价格,通过学校创建课程
    4. 通过学校创建班级, 班级关联课程、讲师
    5. 创建学员时,选择学校,关联班级
    5. 创建讲师角色时要关联学校,
    6. 提供两个角色接口
    6.1 学员视图, 可以注册, 交学费, 选择班级,
    6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 创建学员的成绩
    6.3 管理视图,创建讲师, 创建班级,创建课程
    7. 上面的操作产生的数据都通过pickle序列化保存到文件里
    8. 增加日志文件,能同时输出到控制台
    9. 用户认证采用装饰
    10.增加try捕捉错误信息
    • 开发环境
    1. python 3.6.1
    2. PyCharm 2016.2.3
    • 数据流图与业务功能图
    1. 主程序数据流图  

     

       2.业务功能图

    • 目录结构

    
    
    • 程序设计
    
    
     1 #!/usr/bin/env python
     2 #coding=utf-8
     3 __author__ = 'yinjia'
     4 
     5 
     6 import os
     7 
     8 BASE_DIR = os.path.dirname(os.path.dirname(__file__))
     9 
    10 BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")
    11 
    12 BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")
    13 
    14 BASE_TEACHER_DIR = os.path.join(BASE_DIR,"db","teacher")
    15 
    16 TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")
    17 
    18 COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")
    19 
    20 SHOOL_DB_DIR = os.path.join(BASE_DIR,"db", "shool_list")
    21 
    22 STUDENTS_DB_DIR = os.path.join(BASE_DIR,"db", "students_list")
    23 
    24 SCHOOLCLASS_DB_DIR = os.path.join(BASE_DIR,'db','schoolclass_list')
    25 
    26 SCORE_DB_DIR = os.path.join(BASE_DIR,'db','score_list')
    27 
    28 BASE_LOG_DIR = os.path.join(BASE_DIR,'log','AAP_')
    settings.py
    
    
      1 #!/usr/bin/env python
      2 #coding=utf-8
      3 __author__ = 'yinjia'
      4 
      5 import os,sys,time,logging,pickle
      6 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
      7 from lib import models
      8 from config import settings
      9 from lib.models import *
     10 from bin import students
     11 from bin import admin
     12 from bin import teacher
     13 
     14 
     15 def Auth(type):
     16     """
     17     统一入口用户注册、认证
     18     :param type: 判断属于哪认证类型:students、admin、teacher
     19     :return: 返回认证结果
     20     """
     21     def inner(func):
     22         def wrapper():
     23             logger = Logger('auth').getlog()
     24             auth_msg = ["注册", "登录"]
     25             if type == "students_auth":
     26                 func()
     27                 for x, y in enumerate(auth_msg, 1):
     28                     print("%s%s%s" % (x, ".", y))
     29                 while True:
     30                     inp = str(input("33[35;0m请按序号选择[输入q|Q退出]:33[0m")).strip().lower()
     31                     if inp == "1":
     32                         use = str(input("33[36;0m请输入用户名:33[0m")).strip()
     33                         pwd = str(input("33[36;0m请输入密码:33[0m")).strip()
     34                         obj = models.Students()
     35                         if obj.register(use,pwd):
     36                             logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")
     37                         else:
     38                             logger.info("[用户名]" + use + ":注册成功")
     39                     elif inp == "2":
     40                         use = str(input("33[36;0m请输入用户名:33[0m")).strip()
     41                         pwd = str(input("33[36;0m请输入密码:33[0m")).strip()
     42                         if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, use)):
     43                             try:
     44                                 students_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR,use),'rb'))
     45                             except IOError as e:
     46                                 logger.error(e)
     47                             if students_obj.login(use,pwd):
     48                                 logger.info("[用户名]" + use + ":登录成功!")
     49                                 students.main(students_obj)
     50                             else:
     51                                 logger.error("[用户]" + use + ":密码错误!")
     52                         else:
     53                             logger.error("[用户名]" + use + "不存在!")
     54                     elif inp == "q":
     55                         print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
     56                         sys.exit()
     57                     else:
     58                         logger.error("无效选择!")
     59 
     60             elif type == "admin_auth":
     61                 func()
     62                 for x, y in enumerate(auth_msg, 1):
     63                     print("%s%s%s" % (x, ".", y))
     64                 while True:
     65                     inp = str(input("33[35;0m请按序号选择[输入q|Q退出]:33[0m")).strip().lower()
     66                     if inp == "1":
     67                         use = str(input("33[36;0m请输入用户名:33[0m")).strip()
     68                         pwd = str(input("33[36;0m请输入密码:33[0m")).strip()
     69                         obj = models.Admin()
     70                         if obj.register(use,pwd):
     71                             logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")
     72                         else:
     73                             logger.info("[用户名]" + use + ":注册成功")
     74                     elif inp == "2":
     75                         use = str(input("33[36;0m请输入用户名:33[0m")).strip()
     76                         pwd = str(input("33[36;0m请输入密码:33[0m")).strip()
     77                         if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, use)):
     78                             try:
     79                                 admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR,use),'rb'))
     80                             except IOError as e:
     81                                 logger.error(e)
     82                             if admin_obj.login(use,pwd):
     83                                 logger.info("[用户名]" + use + ":登录成功")
     84                                 admin.main(admin_obj)
     85                             else:
     86                                 logger.error("[用户名]" + use + ":密码错误!")
     87                         else:
     88                             logger.error("[用户]" + use + "不存在!")
     89 
     90                     elif inp == "q":
     91                         print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
     92                         sys.exit()
     93                     else:
     94                         logger.error("无效选择!")
     95 
     96             elif type == "teacher_auth":
     97                 func()
     98                 for x, y in enumerate(auth_msg, 1):
     99                     print("%s%s%s" % (x, ".", y))
    100                 while True:
    101                     inp = str(input("33[35;0m请按序号选择[输入q|Q退出]:33[0m")).strip().lower()
    102                     if inp == "1":
    103                         use = str(input("33[36;0m请输入用户名:33[0m")).strip()
    104                         pwd = str(input("33[36;0m请输入密码:33[0m")).strip()
    105                         obj = models.TeacherAuth()
    106                         if obj.register(use,pwd):
    107                             logger.error("[用户名]" + use + ":不能注册,当前已存在账户!")
    108                         else:
    109                             logger.info("[用户名]" + use + ":注册成功")
    110                     elif inp == "2":
    111                         use = str(input("33[36;0m请输入用户名:33[0m")).strip()
    112                         pwd = str(input("33[36;0m请输入密码:33[0m")).strip()
    113                         if os.path.exists(os.path.join(settings.BASE_TEACHER_DIR, use)):
    114                             try:
    115                                 teacher_obj = pickle.load(open(os.path.join(settings.BASE_TEACHER_DIR,use),'rb'))
    116                             except IOError as e:
    117                                 logger.error(e)
    118                             if teacher_obj.login(use,pwd):
    119                                 logger.info("[用户名]" + use + ":登录成功")
    120                                 teacher.main(teacher_obj)
    121                             else:
    122                                 logger.error("[用户名]" + use + ":密码错误!")
    123                         else:
    124                             logger.error("[用户名]" + use + "不存在!")
    125 
    126                     elif inp == "q":
    127                         print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
    128                         sys.exit()
    129                     else:
    130                         logger.error("无效选择!")
    131             else:
    132                 pass
    133         return wrapper
    134     return inner
    135 
    136 
    137 @Auth(type="students_auth")
    138 def students_auth():
    139     print("33[32;0m学生登录认证33[0m".center(40,"*"))
    140     return True
    141 
    142 @Auth(type="admin_auth")
    143 def admin_auth():
    144     print("33[32;0m管理员登录认证33[0m".center(40,"*"))
    145     return True
    146 
    147 @Auth(type="teacher_auth")
    148 def teacher_auth():
    149     print("33[32;0m讲师登录认证33[0m".center(40,"*"))
    150     return True
    151 
    152 def main():
    153     main_msg = ["学生视图", "讲师视图", "管理视图","退出"]
    154     print("33[32;0m学员选课系统33[0m".center(40, "*"))
    155     for i, j in enumerate(main_msg, 1):
    156         print("%s%s%s" % (i, ".", j))
    157     while True:
    158         inp = str(input("33[35;0m请按序号选择:33[0m")).strip()
    159         if inp == "1":
    160             students_auth()
    161         elif inp == "2":
    162             teacher_auth()
    163         elif inp == "3":
    164             admin_auth()
    165         elif inp == "4":
    166             print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
    167             sys.exit()
    168         else:
    169             print("无效选择!")
    auth.py
      1 #!/usr/bin/env python
      2 #coding=utf-8
      3 __author__ = 'yinjia'
      4 
      5 import os,sys,time,logging,pickle
      6 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
      7 from lib import models
      8 from config import settings
      9 from lib.models import *
     10 from bin import auth
     11 
     12 logger = Logger('admin').getlog()
     13 
     14 def create_shools(admin_obj):
     15     """
     16     创建学校
     17     :param admin_obj:
     18     :return:
     19     """
     20     school_list = []
     21     while True:
     22         school_name = str(input("33[36;0m请输入校区名[输入q退出]:33[0m")).strip().lower()
     23         if school_name == "q":
     24             break
     25         school_addr = str(input("33[36;0m请输入校区地址:33[0m")).strip()
     26         obj = models.School(school_name,school_addr,admin_obj)
     27         school_list.append(obj)
     28     if os.path.exists(settings.SHOOL_DB_DIR):
     29         try:
     30             exists_list = pickle.load(open(settings.SHOOL_DB_DIR,'rb'))
     31             school_list.extend(exists_list)
     32         except IOError as e:
     33             logger.error(e)
     34     try:
     35         pickle.dump(school_list,open(settings.SHOOL_DB_DIR,'wb'))
     36     except IOError as e:
     37         logger.error(e)
     38 
     39 def create_schoolclass(admin_obj):
     40     """
     41     创建班级
     42     :param admin_obj:
     43     :return:
     44     """
     45     schoolclass_list = []
     46     print(' 序号  校区  校址             创建时间            管理员')
     47     print('------------------------------------------------------')
     48     school_list = pickle.load(open(settings.SHOOL_DB_DIR, 'rb'))
     49     for num, item in enumerate(school_list, 1):
     50         print("%3s%5s%5s%25s%10s" % (num, item.school_name, item.school_addr,
     51                              item.create_time, item.create_admin.username))
     52     while True:
     53         schoolclass_name = str(input("33[36;0m请输入班级名[输入q退出]:33[0m")).strip().lower()
     54         if schoolclass_name == "q":
     55             break
     56         school_num = str(input("33[36;0m请序号选择校区:33[0m")).strip()
     57         obj = models.SchoolClass(school_list[int(school_num) - 1],schoolclass_name,admin_obj)
     58         schoolclass_list.append(obj)
     59     if os.path.exists(settings.SCHOOLCLASS_DB_DIR):
     60         try:
     61             exists_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR,'rb'))
     62             schoolclass_list.extend(exists_list)
     63         except IOError as e:
     64             logger.error(e)
     65     try:
     66         pickle.dump(schoolclass_list,open(settings.SCHOOLCLASS_DB_DIR,'wb'))
     67     except IOError as e:
     68         logger.error(e)
     69 
     70 def create_teacher(admin_obj):
     71     """
     72     创建讲师
     73     :param admin_obj:
     74     :return:
     75     """
     76     teacher_list = []
     77     print(' 序号  校区  班级             创建时间            管理员')
     78     print('------------------------------------------------------')
     79     school_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR, 'rb'))
     80     for num, item in enumerate(school_list, 1):
     81         print("%3s%5s%8s%25s%10s" % (num, item.schoolBJ.school_name, item.schoolclass_name,
     82                                      item.create_time, item.create_admin.username))
     83     while True:
     84         teacher_name = str(input("33[36;0m请输入讲师姓名[输入q退出]:33[0m")).strip().lower()
     85         if teacher_name == "q":
     86             break
     87         age = str(input("33[36;0m请输入讲师年龄:33[0m")).strip()
     88         salary = str(input("33[36;0m请输入讲师工资:33[0m")).strip()
     89         num = str(input("33[36;0m请序号选择班级:33[0m")).strip()
     90         obj = models.Teacher(school_list[int(num) - 1],school_list[int(num) - 1],teacher_name,age,salary,admin_obj)
     91         teacher_list.append(obj)
     92     if os.path.exists(settings.TEACHER_DB_DIR):
     93         try:
     94             exists_list = pickle.load(open(settings.TEACHER_DB_DIR,'rb'))
     95             teacher_list.extend(exists_list)
     96         except IOError as e:
     97             logger.error(e)
     98     try:
     99         pickle.dump(teacher_list,open(settings.TEACHER_DB_DIR,'wb'))
    100     except IOError as e:
    101         logger.error(e)
    102 def create_course(admin_obj):
    103     """
    104     创建课程
    105     :param admin_obj:
    106     :return:
    107     """
    108     course_list = []
    109     print(' 序号  校区  班级     讲师  年龄     工资         创建时间            管理员')
    110     print('---------------------------------------------------------------------------')
    111     teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
    112     for num, item in enumerate(teacher_list, 1):
    113         print("%3s%5s%8s%5s%4s%11s%23s%10s" % (
    114         num, item.schoolname.schoolBJ.school_name, item.schoolclass.schoolclass_name,
    115         item.teacher_name, item.age, item.salary,
    116         item.create_time, item.create_admin.username))
    117     while True:
    118         course_name = str(input("33[36;0m请输入课程名[输入q退出]:33[0m")).strip().lower()
    119         if course_name == "q":
    120             break
    121         course_cost = str(input("33[36;0m请输入课时费:33[0m")).strip()
    122         course_cycle = str(input("33[36;0m请输入课程周期:33[0m")).strip()
    123         num = str(input("33[36;0m请序号选择校区:33[0m")).strip()
    124         obj = models.Course(teacher_list[int(num) - 1], teacher_list[int(num) - 1],
    125                             teacher_list[int(num) - 1],course_name,course_cost,course_cycle, admin_obj)
    126         course_list.append(obj)
    127     if os.path.exists(settings.COURSE_DB_DIR):
    128         try:
    129             exists_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
    130             course_list.extend(exists_list)
    131         except IOError as e:
    132             logger.error(e)
    133     try:
    134         pickle.dump(course_list, open(settings.COURSE_DB_DIR, 'wb'))
    135     except IOError as e:
    136         logger.error(e)
    137 
    138 def main(admin_obj):
    139     logger = Logger('auth').getlog()
    140     while True:
    141         print("33[32;0m综合管理中心33[0m".center(40, "*"))
    142         msg = ["创建校区", "查看校区详情","创建班级", "查看班级详情","创建讲师", '查看讲师详情',"创建课程","查看课程详情"]
    143         for x, y in enumerate(msg, 1):
    144             print("%s%s%s" % (x, ".", y))
    145         inp = str(input("33[35;0m请按序号选择[输入q|Q退出]:33[0m")).strip().lower()
    146         if inp == '1':
    147             create_shools(admin_obj)
    148         elif inp == '2':
    149             print(' 序号  校区  校址             创建时间            管理员')
    150             print('------------------------------------------------------')
    151             info_list = pickle.load(open(settings.SHOOL_DB_DIR, 'rb'))
    152             for num, item in enumerate(info_list, 1):
    153                 print("%3s%5s%5s%25s%10s" % (num, item.school_name, item.school_addr,
    154                                           item.create_time, item.create_admin.username))
    155             input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
    156         elif inp == '3':
    157             create_schoolclass(admin_obj)
    158         elif inp == '4':
    159             print(' 序号  校区  班级             创建时间            管理员')
    160             print('------------------------------------------------------')
    161             school_list = pickle.load(open(settings.SCHOOLCLASS_DB_DIR, 'rb'))
    162             for num, item in enumerate(school_list, 1):
    163                 print("%3s%5s%8s%25s%10s" % (num, item.schoolBJ.school_name, item.schoolclass_name,
    164                                              item.create_time, item.create_admin.username))
    165             input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
    166         elif inp == '5':
    167             create_teacher(admin_obj)
    168         elif inp == '6':
    169             print(' 序号  校区  班级     讲师  年龄     工资         创建时间            管理员')
    170             print('---------------------------------------------------------------------------')
    171             teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
    172             for num, item in enumerate(teacher_list, 1):
    173                 print("%3s%5s%8s%5s%4s%11s%23s%10s" % (num, item.schoolname.schoolBJ.school_name, item.schoolclass.schoolclass_name,
    174                                                           item.teacher_name, item.age, item.salary,
    175                                              item.create_time, item.create_admin.username))
    176             input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
    177         elif inp == '7':
    178             create_course(admin_obj)
    179         elif inp == '8':
    180             print(' 序号  校区  班级     讲师  课程名     课时费     周期         创建时间             管理员')
    181             print('--------------------------------------------------------------------------------------')
    182             teacher_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
    183             for num, item in enumerate(teacher_list, 1):
    184                 print("%3s%5s%8s%5s%8s%8s%9s%23s%10s" % (
    185                 num, item.course_schoolname.schoolname.schoolBJ.school_name, item.course_schoolclass.schoolclass.schoolclass_name,
    186                         item.course_teacher_name.teacher_name,
    187                         item.course_name,item.cost,item.cycle,item.create_time, item.create_admin.username))
    188             input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
    189         elif inp == 'q':
    190             print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
    191             sys.exit()
    192         else:
    193             logger.error("无效选择!")
    194 
    195 def register():
    196     auth.main()
    admin.py
      1 #!/usr/bin/env python
      2 #coding=utf-8
      3 __author__ = 'yinjia'
      4 
      5 import os,sys,time,logging,pickle
      6 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
      7 from lib import models
      8 from config import settings
      9 from lib.models import *
     10 from bin import auth,teacher
     11 logger = Logger('admin').getlog()
     12 
     13 def select_course(students_obj):
     14     """
     15     选择课程
     16     :param students_obj:
     17     :return:
     18     """
     19     print(' 序号  校区  班级     讲师  课程名     课时费     周期    ')
     20     print('-------------------------------------------------------')
     21     try:
     22         course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
     23     except IOError as e:
     24         logger.error(e)
     25     else:
     26         for num, item in enumerate(course_list, 1):
     27             print("%3s%5s%8s%5s%8s%8s%9s" % (
     28                 num, item.course_schoolname.schoolname.schoolBJ.school_name,
     29                 item.course_schoolclass.schoolclass.schoolclass_name,
     30                 item.course_teacher_name.teacher_name,
     31                 item.course_name, item.cost, item.cycle))
     32         while True:
     33             num = str(input("33[36;0m请序号选择课程名[输入q退出]:33[0m")).strip().lower()
     34             if num == "q":
     35                 break
     36             select_course_obj = course_list[int(num) - 1]
     37             students_obj.course_list.append(select_course_obj)
     38         try:
     39             pickle.dump(students_obj, open(os.path.join(settings.BASE_STUDENTS_DIR,students_obj.username),'wb'))
     40         except IOError as e:
     41             logger.error(e)
     42 
     43 def course_info(students_obj):
     44     """
     45     查看选课信息
     46     :param students_obj:
     47     :return:
     48     """
     49     print(' 序号  校区  班级     讲师  课程名     课时费     周期    ')
     50     print('-------------------------------------------------------')
     51     for num, item in enumerate(students_obj.course_list, 1):
     52         print("%3s%5s%8s%5s%8s%8s%9s" % (
     53             num, item.course_schoolname.schoolname.schoolBJ.school_name,
     54             item.course_schoolclass.schoolclass.schoolclass_name,
     55             item.course_teacher_name.teacher_name,
     56             item.course_name, item.cost, item.cycle))
     57     input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
     58 
     59 def result_info(students_obj):
     60     """
     61     查看学习详情
     62     :param students_obj:
     63     :return:
     64     """
     65     print(' 学员   校区   班级    课程   成绩')
     66     print('---------------------------------')
     67     try:
     68         students_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))
     69     except IOError as e:
     70         logger.error(e)
     71     else:
     72         for i, item in students_dic.items():
     73             for x, y in item.score_schoolname.items():
     74                 print("%3s%6s%9s%5s%5s" % (x.username, y.course_schoolname.schoolname.schoolBJ.school_name,
     75                                            y.course_schoolclass.schoolclass.schoolclass_name, y.course_name, item.score))
     76         input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
     77 
     78 def study(students_obj):
     79     """
     80     学员上课
     81     :param students_obj:
     82     :return:
     83     """
     84     print(' 序号  校区  班级     讲师  课程名     课时费     周期    ')
     85     print('-------------------------------------------------------')
     86     for num, item in enumerate(students_obj.course_list, 1):
     87         print("%3s%5s%8s%5s%8s%8s%9s" % (
     88             num, item.course_schoolname.schoolname.schoolBJ.school_name,
     89             item.course_schoolclass.schoolclass.schoolclass_name,
     90             item.course_teacher_name.teacher_name,
     91             item.course_name, item.cost, item.cycle))
     92     while True:
     93         num = str(input("33[36;0m请按序号选择课程上课[输入q退出]:33[0m")).strip().lower()
     94         if num == "q":
     95             break
     96         obj = students_obj.course_list[int(num) - 1]
     97         if students_obj in students_obj.study_dict.keys():
     98             students_obj.study_dict[students_obj].append(obj)
     99         else:
    100             students_obj.study_dict[students_obj] = obj
    101     try:
    102         pickle.dump(students_obj.study_dict, open(settings.STUDENTS_DB_DIR, 'wb'))
    103     except IOError as e:
    104         logger.error(e)
    105 
    106 def main(students_obj):
    107     while True:
    108         print("33[32;0m学员学习中心33[0m".center(40, "*"))
    109         msg = ['选课','上课','查看选课信息','查看学习成绩']
    110         for x, y in enumerate(msg, 1):
    111             print("%s%s%s" % (x, ".", y))
    112         inp = str(input("33[35;0m请按序号选择[输入q|Q退出]:33[0m")).strip().lower()
    113         if inp == '1':
    114             select_course(students_obj)
    115         elif inp == '2':
    116             study(students_obj)
    117         elif inp == '3':
    118             course_info(students_obj)
    119         elif inp == '4':
    120             result_info(students_obj)
    121         elif inp == 'q':
    122             print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
    123             sys.exit()
    124         else:
    125             logger.error("无效选择!")
    126 
    127 def register():
    128     auth.main()
    students.py
     1 #!/usr/bin/env python
     2 #coding=utf-8
     3 __author__ = 'yinjia'
     4 
     5 
     6 import os,sys,time,logging,pickle
     7 sys.path.append(os.path.dirname(os.path.dirname(__file__)))
     8 from lib import models
     9 from config import settings
    10 from lib.models import *
    11 from bin import auth
    12 logger = Logger('admin').getlog()
    13 
    14 def Create_Score(teacher_obj):
    15     score_dic = {}
    16     print(' 学员  校区  班级     课程      ')
    17     print('------------------------------')
    18     try:
    19         students_dic = pickle.load(open(settings.STUDENTS_DB_DIR, 'rb'))
    20     except IOError as e:
    21         logger.error(e)
    22     else:
    23         for i, item in students_dic.items():
    24             print(i.username,item.course_schoolname.schoolname.schoolBJ.school_name,
    25                   item.course_schoolclass.schoolclass.schoolclass_name,
    26                   item.course_name)
    27         while True:
    28             students_name = str(input("33[36;0m请输入学员[输入q退出]:33[0m")).strip()
    29             if students_name == "q":
    30                 break
    31             score = str(input("33[36;0m请输入学员成绩:33[0m")).strip()
    32             obj = models.Score(students_name,students_dic,students_dic,students_dic,score)
    33 
    34             if teacher_obj in score_dic.keys():
    35                 score_dic[teacher_obj].append(obj)
    36             else:
    37                 score_dic[teacher_obj] = obj
    38         if os.path.exists(settings.SCORE_DB_DIR):
    39             try:
    40                 exists_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))
    41             except IOError as e:
    42                 logger.error(e)
    43             else:
    44                 if teacher_obj in exists_dic.keys():
    45                     score_dic[teacher_obj].append(exists_dic)
    46             try:
    47                 pickle.dump(score_dic, open(settings.SCORE_DB_DIR, 'wb'))
    48             except IOError as e:
    49                 logger.error(e)
    50         
    51 
    52 def show_info(teacher_obj):
    53     print(' 学员   校区   班级    课程   成绩')
    54     print('---------------------------------')
    55     try:
    56         students_dic = pickle.load(open(settings.SCORE_DB_DIR, 'rb'))
    57     except IOError as e:
    58         logger.error(e)
    59     else:
    60         for i, item in students_dic.items():
    61              for x,y in item.score_schoolname.items():
    62                 print("%3s%6s%9s%5s%5s" % (x.username,y.course_schoolname.schoolname.schoolBJ.school_name,
    63                       y.course_schoolclass.schoolclass.schoolclass_name,y.course_name,item.score))
    64         input("33[35;0m>>>>>>>>>按任意键退出...33[0m")
    65 
    66 def main(teacher_obj):
    67     while True:
    68         print("33[32;0m学员学习中心33[0m".center(40, "*"))
    69         msg = ['创建学员成绩','查看学员信息']
    70         for x, y in enumerate(msg, 1):
    71             print("%s%s%s" % (x, ".", y))
    72         inp = str(input("33[35;0m请按序号选择[输入q|Q退出]:33[0m")).strip().lower()
    73         if inp == '1':
    74             Create_Score(teacher_obj)
    75         elif inp == '2':
    76             show_info(teacher_obj)
    77         elif inp == 'q':
    78             print("33[32;0m谢谢您的光临,再见!33[0m".center(40, "*"))
    79             sys.exit()
    80         else:
    81             logger.error("无效选择!")
    82 
    83 def register():
    84     auth.main()
    teacher.py 
    • 类模板定义


    • 效果演示




  • 相关阅读:
    pytest简介
    python @property的用法及含义全面解析
    python的各种推导式(列表推导式、字典推导式、集合推导式)
    python--random库基本介绍
    整理一下python中with的用法
    Python之路:进程、线程
    Python代码风格的良好养成
    Ubuntu 部署Python开发环境
    Python面向对象编程
    Python文件操作
  • 原文地址:https://www.cnblogs.com/yinjia/p/8683168.html
Copyright © 2020-2023  润新知