python选课系统
python选课系统
程序的架构设计
- 选课系统
- 三层架构
- 视图层: 与用户交互的
- 接口层: 核心的业务逻辑
- 数据层: 处理数据的,增删改查
- pickle格式的数据
- bytes类型数据
- Python
- 对象: ---> object
需求分析
- 管理员功能
- 管理员注册
- 管理员登录
- 创建学校
- 创建班级(先选择校区)
- 班级名称
- 班级绑定的校区
- 创建课程(课程绑定给班级,先选择班级)
- 课程周期
- 课程价格
- 创建老师
- 老师名称
- 老师密码
- 学生的功能
- 注册
- 登录
- 交学费
- 选择校区
- 选择课程
- 查看分数
- 老师的功能
- 登录
- 查看授课课程
- 选择授课课程
- 查看课程下学生
- 修改学生分数
用户视图层
1 src: 2 from core import admin 3 from core import student 4 from core import teacher 5 6 7 new_dic={ 8 '1':admin.run, 9 '2':student.run, 10 '3':teacher.run, 11 } 12 13 def run(): 14 while True: 15 print(''' 16 1 管理员 17 2 学生选课 18 3 老师 19 ''') 20 choice=input('请输入选择的功能').strip() 21 22 if choice=='q': 23 break 24 if choice not in new_dic: 25 print('输入错误请再次输入') 26 continue 27 28 new_dic[choice]() 29 30 31 32 admin: 33 from interface import admin_interface 34 from interface import common_interface 35 from lib import common 36 37 admin_user={'user':None} 38 39 def admin_regist(): 40 while True: 41 user=input('请输入账户').strip() 42 pwd=input('请输入密码').strip() 43 repwd=input('请再次输入密码').strip() 44 45 if pwd==repwd: 46 47 flag,msg=admin_interface.check_user( 48 user,pwd 49 ) 50 if flag: 51 print(msg) 52 break 53 else: 54 print(msg) 55 56 else: 57 print('两次密码不一致') 58 59 60 def admin_log(): 61 while True: 62 user = input('请输入账户').strip() 63 pwd = input('请输入密码').strip() 64 if user and pwd: 65 flag,msg=common_interface.all_user_log(user,pwd,role='admin') 66 if flag: 67 admin_user['user'] = user 68 print(msg) 69 break 70 else: 71 print(msg) 72 continue 73 else: 74 print('请输入账户密码') 75 76 77 @common.decorator_name('admin') 78 def create_school(): 79 while True: 80 school_name=input('请输入学校名称').strip() 81 school_addr=input('请输入学校地址').strip() 82 #调用接口保存学校 83 flag,msg=admin_interface.create_school_interface( 84 #由谁创建的学校 获取登录的管理员 85 school_name,school_addr,admin_user.get('user') 86 ) 87 if flag: 88 print(msg) 89 break 90 else: 91 print(msg) 92 93 94 95 @common.decorator_name('admin') 96 def create_class(): 97 pass 98 @common.decorator_name('admin') 99 def create_course(): 100 while True: 101 #让管理员选择学校 102 flag,school_list_or_msg=common_interface.get_all_scholl_interface() 103 if not flag: 104 print(school_list_or_msg) 105 106 #调用接口,获取所有学校的名称并打印 107 for index,school_name in enumerate(school_list_or_msg): 108 print(f'编号:{index} 学校名:{school_name}') 109 110 111 choice= input('请输入学校编号').strip() 112 if not choice.isdigit(): 113 print('请输入数字') 114 continue 115 choice=int(choice) 116 if choice not in range(len(school_list_or_msg)): #学校个数长度 117 print('请输入正确编号') 118 school_name=school_list_or_msg[choice] #school_ilst_or_msge 本身就是列表os。listdir出来的 enumerate本来就是打印给别人看的 119 # 选择学校后,再输入课程名称 120 course_name=input('请输入课程名称').strip() 121 122 #调用创建课程接口,让管理员去创建课程 123 flag,msg=admin_interface.create_course_interface( 124 school_name,course_name,admin_user.get('user') 125 ) 126 if flag: 127 print(msg) 128 break 129 else: 130 print(msg) 131 132 133 134 135 136 137 138 139 140 @common.decorator_name('admin') 141 def create_teacher(): 142 while True: 143 # 管理员输入创建老师的名字 144 teacher_name=input('请输入老师的名字').strip() 145 # 调用老师接口创建老师 146 flag,msg=admin_interface.create_teacher_interface( 147 teacher_name,admin_user.get('user') 148 ) 149 if flag: 150 print(msg) 151 break 152 else: 153 print(msg) 154 155 156 157 158 new_dic={ 159 '1':admin_regist, 160 '2':admin_log, 161 '3':create_school, 162 '4':create_class, 163 '5':create_course, 164 '6':create_teacher, 165 166 167 } 168 169 def run(): 170 while True: 171 print(''' 172 1 - 管理员注册 173 2 - 管理员登录 174 3 - 创建学校 175 4 - 创建班级(无效) 176 5 - 创建课程 177 6 - 创建老师 178 179 ''') 180 choice = input('请输入选择的功能').strip() 181 if choice=='q': 182 break 183 if choice not in new_dic: 184 print('输入错误请再次输入') 185 continue 186 187 new_dic[choice]() 188 189 190 student。py 191 from lib import common 192 from interface import student_interface 193 from interface import common_interface 194 195 196 student_user={'user':None} 197 def regist(): 198 while True: 199 student_name=input('请输入账户输入密码').strip() 200 student_pwd=input('请输入账户输入密码').strip() 201 repwd = input('请再次输入密码').strip() 202 203 if student_pwd == repwd: 204 #调用接口判断用户是否存在 不存在接口成再创建返回 205 flag, msg = student_interface.student_user(student_name,student_pwd) 206 207 208 if flag: 209 print(msg) 210 break 211 else: 212 print(msg) 213 214 else: 215 print('两次密码不一致') 216 217 218 219 220 221 def log(): 222 while True: 223 user = input('请输入账户').strip() 224 pwd = input('请输入密码').strip() 225 if user and pwd: 226 flag, msg = common_interface.all_user_log(user,pwd,role='student') 227 if flag: 228 student_user['user'] = user 229 print(msg) 230 break 231 else: 232 print(msg) 233 continue 234 else: 235 print('请输入账户密码') 236 @common.decorator_name('student') 237 def repay(): 238 while True: 239 students_money=input('是否进行缴费y/n') 240 if students_money=='y': 241 flag,msg=student_interface.student_pay(student_user.get('user')) 242 if flag: 243 print(msg) 244 break 245 else: 246 print(msg) 247 break 248 else: 249 print('不缴费滚蛋') 250 break 251 252 253 254 @common.decorator_name('student') 255 def choose_school(): 256 while True: 257 # 打印课程列表提供选择 258 flag, school_list_or_msg = common_interface.get_all_scholl_interface() 259 if not flag: 260 print(school_list_or_msg) 261 for index, school_name in enumerate(school_list_or_msg): 262 print(f'编号:{index} 学校名:{school_name}') 263 264 choice = input('请输入课程编号').strip() 265 if not choice.isdigit(): 266 print('请输入数字') 267 continue 268 choice = int(choice) 269 if choice not in range(len(school_list_or_msg)): # 学校个数长度 270 print('请输入正确编号') 271 continue 272 school_name = school_list_or_msg[choice] 273 # 调用接口判断学生是否有校区 274 flag1,msg=student_interface.chack_have_school(school_name,student_user.get('user')) 275 if flag1: 276 print(msg) 277 break 278 else: 279 print(msg) 280 break 281 282 283 284 @common.decorator_name('student') 285 def choose_course(): 286 while True: 287 # 打印课程列表提供选择 288 flag,course_list_or_msg = common_interface.get_all_course() 289 if not flag: 290 print(course_list_or_msg) 291 # 调用接口,获取所有学校的名称并打印 292 for index, course_name in enumerate(course_list_or_msg): 293 print(f'编号:{index} 课程名:{course_name}') 294 295 choice = input('请输入课程编号').strip() 296 if not choice.isdigit(): 297 print('请输入数字') 298 continue 299 choice = int(choice) 300 if choice not in range(len(course_list_or_msg)): # 学校个数长度 301 print('请输入正确编号') 302 continue 303 cousrse_name = course_list_or_msg[choice] # school_ilst_or_msge 本身就是列表os。listdir出来的 enumerate本来就是打印给别人看的 304 # 调用学生接口为学生类列表中添加课程 305 flag1,msg=student_interface.add_course(cousrse_name,student_user.get('user')) 306 if flag1: 307 print(msg) 308 break 309 else: 310 print(msg) 311 break 312 313 314 315 @common.decorator_name('student') 316 def check_score(): 317 flag,msg=student_interface.check_score_interface(student_user.get('user')) 318 if flag: 319 print(msg) 320 else: 321 print(msg) 322 323 new_dic={ 324 '1':regist, 325 '2':log, 326 '3':repay, 327 '4':choose_school, 328 '5':choose_course, 329 '6':check_score, 330 } 331 332 def run(): 333 while True: 334 print(''' 335 1 - 注册 336 2 - 登录 337 3 - 交学费 338 4 - 选择校区 339 5 - 选择课程 340 6 - 查看分数 341 342 ''') 343 choice = input('请输入选择的功能').strip() 344 345 if choice=="q": 346 break 347 if choice not in new_dic: 348 print('输入错误请再次输入') 349 continue 350 351 new_dic[choice]() 352 353 354 teacher。py 355 from lib import common 356 from interface import common_interface 357 from interface import teacher_interface 358 teacher_user={'user':None} 359 def log(): 360 while True: 361 user = input('请输入账户').strip() 362 pwd = input('请输入密码').strip() 363 if user and pwd: 364 flag, msg = common_interface.all_user_log(user, pwd, role='teacher') 365 if flag: 366 teacher_user['user'] = user 367 print(msg) 368 break 369 else: 370 print(msg) 371 continue 372 else: 373 print('请输入账户密码') 374 #查看授课课程 375 @common.decorator_name('teacher') 376 def check_coures(): 377 flag, msg = teacher_interface.check_course_interface(teacher_user.get('user')) 378 if flag: 379 print(msg) 380 else: 381 print(msg) 382 383 @common.decorator_name('teacher') 384 def choice_course(): 385 while True: 386 flag,course_list_or_msg=common_interface.get_all_course() 387 if not flag: 388 print(course_list_or_msg) 389 for index,course in enumerate(course_list_or_msg): 390 print(f'编号:{index} 课程:{course}') 391 choice=input('请输入编号') 392 choice=int(choice) 393 if choice not in range(len(course_list_or_msg)): 394 print('请输入正确编号') 395 course_name=course_list_or_msg[choice] 396 #获取教师对象添加授课课程 397 flag1,msg=teacher_interface.add_course_interface(course_name,teacher_user.get('user')) 398 if flag1: 399 print(msg) 400 break 401 else: 402 print(msg) 403 break 404 405 406 407 408 @common.decorator_name('teacher') 409 def check_course_student(): 410 while True: 411 flag,course_list_or_msg=teacher_interface.check_course_interface(teacher_user.get('user')) 412 if not flag: 413 print(course_list_or_msg) 414 415 for index, course in enumerate(course_list_or_msg): 416 print(f'编号:{index} 课程:{course}') 417 choice = input('请输入编号') 418 choice = int(choice) 419 if choice not in range(len(course_list_or_msg)): 420 print('请输入正确编号') 421 course_name = course_list_or_msg[choice] 422 flag,msg=teacher_interface.check_course_from_student(teacher_user.get('user'),course_name) 423 if flag: 424 print(msg) 425 break 426 else: 427 print(msg) 428 break 429 430 431 432 433 434 435 @common.decorator_name('teacher') 436 def change_score(): 437 while True: 438 flag, course_list_or_msg = teacher_interface.check_course_interface(teacher_user.get('user')) 439 if not flag: 440 print(course_list_or_msg) 441 442 for index, course in enumerate(course_list_or_msg): 443 print(f'编号:{index} 课程:{course}') 444 choice = input('请输入编号') 445 choice = int(choice) 446 if choice not in range(len(course_list_or_msg)): 447 print('请输入正确编号') 448 course_name = course_list_or_msg[choice] 449 flag1, students_msg = teacher_interface.check_course_from_student(teacher_user.get('user'), course_name) 450 if flag1: 451 for index, students in enumerate(students_msg): 452 print(f'编号{index} 选择学生{students}') 453 choice = input('请输入编号') 454 choice = int(choice) 455 if choice not in range(len(students_msg)): 456 print('请输入正确编号') 457 student_name = students_msg[choice] 458 student_score=input('请输入学生分数修改') 459 #修改分数 460 flag3,msg=teacher_interface.change_student_score(student_name,course_name,student_score) 461 if flag3: 462 print(msg) 463 break 464 break 465 466 467 468 new_dic={ 469 '1':log, 470 '2':check_coures, 471 '3':choice_course, 472 '4':check_course_student, 473 '5':change_score, 474 475 } 476 477 def run(): 478 while True: 479 print(''' 480 1- 登录 481 2- 查看授课课程 482 3- 选择授课课程 483 4- 查看课程下学生 484 5- 修改学生分数 485 ''') 486 choice = input('请输入选择的功能').strip() 487 if choice=='q': 488 break 489 if choice not in new_dic: 490 print('输入错误请再次输入') 491 continue 492 493 else: 494 new_dic[choice]()
逻辑接口层
1 admin_interface.py 2 from db import models 3 4 5 def check_user(username,pwd): 6 # 1查看用户是否存在 7 obj=models.Admin.chack(username) 8 if obj: 9 return False,'用户存在' 10 # 2或不存在返回注册成功,调用实例化得到对象并保存 11 admin_obj=models.Admin(username,pwd) 12 admin_obj.save() 13 return True,'注册成功' 14 #管理员登录 15 def log(user,pwd): 16 user_obj=models.Admin.chack(user) #用类调用会获取类名在类名文件夹中找注册的人进行反序列化返回对象 17 if user_obj: 18 if user_obj.user==user and user_obj.pwd==pwd: #对象直接点取user,pwd 19 return True,'登录成功' 20 else: 21 return False,'登录失败密码或账户错误' 22 else: 23 return False,'无此用户' 24 25 26 #管理员创建学校接口 27 def create_school_interface( school_name,school_addr,admin_user): 28 #查看当前学校是否已近存在 29 school_obj=models.School.chack(school_name) 30 #学校存在返回False告诉用户学校已近存在 31 if school_obj: 32 return False,'学校已近存在!' 33 #若不存在,则创建学校 注意(由管理员创建) 34 admin_obj=models.Admin.chack(admin_user) 35 #由管理员来调用创建学校方法,并传入学校的名称和地址 36 admin_obj.create_school( 37 school_name,school_addr 38 ) 39 # 返回创建成功 40 return True,f'{school_name}学校创建成功' 41 42 #管理员创建课程接口 创建课程关联学校名称 43 def create_course_interface(school_name,course_name,admin_name): 44 # 1,查看课程是否存在, 45 #获取学校对象中的课程列表 46 school_obj=models.School.chack(school_name) 47 #查看课程是否重复 48 if course_name in school_obj.course_list: 49 return False,'课程已近存在' 50 #课程不存在则创建 (由管理员创建) 51 admin_obj=models.Admin.chack(admin_name) 52 admin_obj.create_course(school_obj,course_name) 53 return True,f'{course_name}课程创建成功,绑定给{school_name}' 54 55 56 def create_teacher_interface(teacher_name,admin_name,teacher_pwd='123'): # 给老师默认密码123 57 # 判断老师是否存在 58 teacher_obj=models.Teacher.chack(teacher_name) 59 60 # 若存在,则不让创建 61 if teacher_obj: 62 return False,'老师已近存在' 63 64 #若不存在则创建 65 admin_obj=models.Admin.chack(admin_name) 66 admin_obj.create_teacher(teacher_name,teacher_pwd) #由管理员对象创建老师 67 return True,f'{teacher_name}老师创建成功' 68 69 70 71 72 student。interface。py 73 from db import models 74 #学生用户创建 75 def student_user(student_name,student_pwd): 76 77 student_obj=models.Student.chack(student_name) 78 if student_obj: 79 return False,'用户存在请重新创建' 80 #用户不存在创建成功返回 81 student_obj1=models.Student(student_name,student_pwd) 82 student_obj1.save() 83 return True,f'{student_name}学生注册成功' 84 85 86 #为学生添加课程 87 def add_course(cousrse_name,student_user): 88 #调用学生类添加课程 89 student_obj=models.Student.chack(student_user) 90 #判断课程是否已近添加过了 91 if cousrse_name in student_obj.course: 92 return False,'课程已近添加过了无需重复添加' 93 student_obj.course.append(cousrse_name) 94 student_obj.save() 95 #把学生添加到课程内 96 cousrse_obj = models.Course.chack(cousrse_name) 97 cousrse_obj.student.append(student_obj.user) 98 cousrse_obj.save() 99 return True,'添加成功' 100 101 102 #查看学生是否已近有学校 103 def chack_have_school(school_name,student_user): 104 student_obj=models.Student.chack(student_user) 105 #如果校区已经选择 106 if student_obj.school: 107 return False,'学校已经存在,学生只能有一个校区多门课程' 108 #如果没有选择校区的添加校区 109 student_obj.school=school_name 110 student_obj.save() 111 return True,f'{school_name}添加成功' 112 113 #学生缴费 114 def student_pay(student_user): 115 student_obj=models.Student.chack(student_user) 116 if student_obj.course_pay: 117 return False,'无需重复缴费' 118 student_obj.course_pay=True 119 student_obj.save() 120 return True,f'{student_user},缴费成功' 121 122 #学生查看分数 123 def check_score_interface(student_user): 124 student_obj=models.Student.chack(student_user) 125 if not student_obj.score: 126 return False,f'老师暂未评分,请联系代课老师' 127 else: 128 return True,f'{student_obj.score}' 129 130 131 132 teacher。interface。py 133 from db import models 134 #查看自身授课程 135 def check_course_interface(teacher_user): 136 teacher_obj=models.Teacher.chack(teacher_user) 137 if not teacher_obj.course_list_from_teacher: 138 return False,f'您还未添加授课科目,先去添加吧' 139 else: 140 return True,teacher_obj.course_list_from_teacher 141 # 添加授课课程 142 def add_course_interface(course_name,teacher_user): 143 teacher_obj=models.Teacher.chack(teacher_user) 144 #判断课程是否已近添加过 145 if course_name in teacher_obj.course_list_from_teacher: 146 return False,'课程已近添加过了' 147 teacher_obj.course_list_from_teacher.append(course_name) 148 teacher_obj.save() 149 return True,'课程选择成功,望认真教学' 150 151 152 #查看课程下的学生 153 def check_course_from_student(teacher_user,course_name): 154 #调用课程类里的学生信息 155 course_obj=models.Course.chack(course_name) 156 157 teacher_obj = models.Teacher.chack(teacher_user) 158 if course_name not in teacher_obj.course_list_from_teacher: 159 return False,'您还未教授本门课程请先添加' 160 #无学生添加列表 161 if not course_obj.student: 162 return False,'课程占无学生选择' 163 164 else: 165 return True,course_obj.student 166 167 #修改学生分数 168 def change_student_score(student_name,course_name,student_score): 169 student_obj=models.Student.chack(student_name) 170 student_obj.score[course_name]=student_score 171 student_obj.save() 172 return True,f'{student_name}课程评分{student_score}成功' 173 174 175 176 177 178 179 common。interface。py 180 import os 181 from conf import settings 182 from db import models 183 """""" 184 '''公共接口''' 185 186 #获取所有学校名称接口 187 def get_all_scholl_interface(): 188 #获取学校文件夹路劲 189 school_dir=os.path.join(settings.DB_PATH,'School') 190 if not school_dir: 191 return False,'没有学校请先联系管理员' 192 #文件存在 获取文件夹下的学校名字等 os.listdir 193 school_list=os.listdir(school_dir) 194 return True,school_list 195 196 #所有用户登录 197 def all_user_log(user,pwd,role): 198 199 if role=='admin': 200 user_obj=models.Admin.chack(user) #用类调用会获取类名在类名文件夹中找注册的人进行反序列化返回对象 201 202 elif role=='student': 203 user_obj=models.Student.chack(user) 204 205 elif role=='teacher': 206 user_obj=models.Teacher.chack(user) 207 else: 208 return False,'角色登录不存在' 209 210 211 if user_obj: 212 if user_obj.user == user and user_obj.pwd == pwd: # 对象直接点取user,pwd 213 return True, '登录成功' 214 else: 215 return False, '登录失败密码或账户错误' 216 else: 217 return False, '无此用户' 218 219 #获取所有学校课程 220 def get_all_course(): 221 #获取学校文件夹路劲 222 course_dir=os.path.join(settings.DB_PATH,'Course') 223 if not course_dir: 224 return False,'没有课程请先联系管理员,添加课程' 225 #文件存在 获取文件夹下的学校名字等 os.listdir 226 course_list=os.listdir(course_dir) 227 return True,course_list
数据处理层 db
models(类的存放)
1 models.py 2 from db import db_handler 3 4 '''用户存放类的''' 5 # 父类 继承查看数据和保存数据 6 7 class Base: 8 @classmethod 9 # 用类的绑定使用检查用户是否存在(存在返回查找的对象) 10 def chack(cls, user): 11 obj = db_handler.chack_data(cls, user) 12 return obj 13 14 def save(self): 15 db_handler.save(self) 16 17 #管理员类 18 class Admin(Base): 19 def __init__(self,user,pwd): 20 self.user=user 21 self.pwd=pwd 22 23 24 #创建学校 25 def create_school(self,school_name,school_addr): 26 # 实例化(内部调用学校类实例化得到对象,并保存) 27 school_obj=School(school_name,school_addr) 28 #调用学校类里的继承父类函数保存 29 school_obj.save() 30 31 #创建课程 32 def create_course(self,school_obj,course_name): 33 #调用课程类 34 course_obj=Course(course_name) 35 course_obj.save() 36 #获取当前学校对象,并将课程添加到课程列表中 37 school_obj.course_list.append(course_name) 38 #更新学校数据 39 school_obj.save() 40 41 42 43 44 def create_teacher(self,teacher_name,teacher_pwd): 45 teacher_obj=Teacher(teacher_name,teacher_pwd) #实例化得到老师对象并保存 46 teacher_obj.save() #调用继承保存函数进行 更行添加修改 47 48 49 50 # 学校类 51 class School(Base): 52 def __init__(self,name,addr): 53 #必须user db里的chack——data代码要同意规范 54 self.user=name 55 self.addr=addr 56 #学校关联班级 57 self.course_list=[] 58 59 60 61 # 学生类 62 class Student(Base): 63 def __init__(self,student_name,student_pwd): 64 self.user=student_name 65 self.pwd=student_pwd 66 self.school=None 67 self.course_pay=False 68 self.course=[] 69 self.score={} #定义空字典等待老师批改后输入分数 70 71 #课程类 72 class Course(Base): 73 def __init__(self,course_name): 74 self.user=course_name 75 self.student=[] 76 77 78 #教师类 79 class Teacher(Base): 80 def __init__(self,user_name,teacher_pwd): 81 self.user=user_name #需要统一 82 self.pwd=teacher_pwd 83 self.course_list_from_teacher=[]
db_handler(数据处理)
1 import os 2 import pickle 3 from conf import settings 4 #保存数据对象 5 def save(obj): 6 # 获取类命创建文件夹 7 class_name=obj.__class__.__name__ 8 9 #1.文件路劲拼接大文件夹啊 10 PATH=os.path.join(settings.DB_PATH,class_name) 11 # 判断文件夹是否存在 12 if not os.path.exists(PATH): 13 os.mkdir(PATH) 14 #拼接当前用户的pickle文件路劲,以用户名作为文件名 15 user_path=os.path.join(PATH,obj.user) #这里调用对象的user 所以后面都需要规范user的使用 16 #打开文件储存 17 with open(user_path,mode='wb')as f: 18 pickle.dump(obj,f) 19 20 # 查看文件数据 21 def chack_data(cls,user): 22 class_name = cls.__name__ #获取类的名字 23 24 # 1.文件路劲拼接大文件夹啊 25 PATH = os.path.join(settings.DB_PATH, class_name) 26 27 # 拼接当前用户的pickle文件路劲,以用户名作为文件名 28 user_path = os.path.join(PATH,user) 29 if not os.path.isfile(user_path): 30 return None 31 32 #判断文件用户文件是否存在 33 if os.path.exists(user_path): 34 # 打开文件储存 35 with open(user_path, mode='rb')as f: 36 obj=pickle.load(f) 37 return obj
lib下的common(公用方法)
1 #装饰器 2 def decorator_name(role): 3 def decorator(func): 4 from core import admin,student,teacher 5 def wrapper(*args,**kwargs): 6 if role=='admin': 7 if admin.admin_user['user']: 8 res=func(*args,**kwargs) 9 return res 10 else: 11 print('请先登录') 12 admin.admin_log() 13 elif role=='student': 14 if student.student_user['user']: 15 res=func(*args,**kwargs) 16 return res 17 else: 18 print('请先登录') 19 student.log() 20 elif role=='teacher': 21 if teacher.teacher_user['user']: 22 res=func(*args,**kwargs) 23 return res 24 else: 25 print('请先登录') 26 teacher.log() 27 return wrapper 28 return decorator
配置conf 下的settings
import os BASE_PATH=os.path.dirname(os.path.dirname(__file__)) DB_PATH=os.path.join(BASE_PATH,'db')
执行文件头 tart
import os import sys from core import src sys.path.append(os.path.dirname(__file__)) if __name__ == '__main__': src.run()
readme说明书
程序的架构设计 - 选课系统 - 三层架构 - 视图层: 与用户交互的 - 接口层: 核心的业务逻辑 - 数据层: 处理数据的,增删改查 - pickle格式的数据 - bytes类型数据 - Python - 对象: ---> object 需求分析 - 管理员功能 - 管理员注册 - 管理员登录 - 创建学校 - 创建班级(先选择校区) - 班级名称 - 班级绑定的校区 - 创建课程(课程绑定给班级,先选择班级) - 课程周期 - 课程价格 - 创建老师 - 老师名称 - 老师密码 - 学生的功能 - 注册 - 登录 - 交学费 - 选择校区 - 选择课程 - 查看分数 - 老师的功能 - 登录 - 查看授课课程 - 选择授课课程 - 查看课程下学生 - 修改学生分数
用类名创建文件夹名 用对象名命名数据文件名

浙公网安备 33010602011771号