2020-04-15 00:09:28

程序目录:

import os
BASE_PATH=os.path.dirname(os.path.dirname(__file__)) DB_PATH=os.path.join(BASE_PATH,'db')

settings.py

from interface import admin_interface
from lib import common
from interface import commin_interface user_info={
'user':None
}
# -管理员注册
def register():
while True:
username=input('>>:').strip()
pwd=input('>>:').strip()
re_pwd=input('>>:').strip()
if pwd == re_pwd:
flag,msg=admin_interface.register_interface(username,pwd)
if flag:
print(msg)
break
else:
print(msg)
else:
print('两次密码不一致')
# -管理员登录
def login():
while True:
username=input('>>:').strip()
pwd=input('>>:').strip()
flag,msg=commin_interface.login_interface(username,pwd,user_type='admin')
if flag:
user_info['user']=username
print(msg)
break
else:
print(msg)
# -创建学校
@common.auth('Admin')
def create_school():
while True:
school_name=input('>>:').strip()
school_address=input('>>:').strip()
flag,msg=admin_interface.crete_school_interface(school_name,school_address,user_info.get('user'))
if flag:
print(msg)
break
else:
print(msg) # -创建课程
@common.auth('Admin')
def create_class():
while True:
flag,school_list_msg=commin_interface.get_all_school_list()
if not flag:
print(school_list_msg)
break
for index,school_name in enumerate(school_list_msg):
print(f'编号:{index}名称:{school_name}')
choice=input('选择学校>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice=int(choice)
if choice not in range(len(school_list_msg)):
print('没有该编号')
continue
school_name=school_list_msg[choice]
course_name=input('创建课程名:').strip()
flag,msg=admin_interface.create_course_interface(school_name,course_name,user_info.get('user'))
if flag:
print(msg)
break
else:
print(msg) # -创建老师
@common.auth('Admin')
def create_teacher():
while True:
teacher_name=input('>>:').strip()
flag,msg=admin_interface.create_teacher_interface(teacher_name,user_info.get('user'))
if flag:
print(msg)
break
else:
print(msg) func_dic={
'':register,
'':login,
'':create_school,
'':create_class,
'':create_teacher,
}
def run():
while True:
print('''
1-管理员注册
2-管理员登录
3-创建学校
4-创建课程
5-创建老师
''')
choice=input('>>:').strip()
if choice == 'q':
user_info['user']=None
break
if choice not in func_dic:
continue func_dic.get(choice)()

admin.py

from core import admin
from core import student
from core import teacher func_dic={
'':admin.run,
'':student.run,
'':teacher.run, } def run():
while True:
print('''
1、管理员功能
2、学生功能
3、老师功能
''')
choice=input('>>:').strip()
if choice not in func_dic:
continue
func_dic.get(choice)()

src.py

from lib import common
from interface import student_interfacce
from interface import commin_interface
user_info={
'user':None
}
# -注册
def register():
while True:
username=input('>>:').strip()
pwd=input('>>:').strip()
re_pwd=input('>>:').strip()
if pwd == re_pwd:
flag,msg=student_interfacce.regisiter_interface(username,pwd)
if flag:
print(msg)
break
else:
print(msg)
# -登录
def login():
while True:
username=input('>>:').strip()
pwd=input('>>:').strip()
falg,msg=commin_interface.login_interface(username,pwd,user_type='student')
if falg:
user_info['user']=username
print(msg)
break
else:
print(msg)
# -选择校区
@common.auth('Student')
def choice_school():
while True:
#1.打印校区列表
flag,school_list=commin_interface.get_all_school_list()
if not flag:
print(school_list)
break
for index,school_name in enumerate(school_list):
print(f'编号{index}:学校名:{school_name}')
choice=input('>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice=int(choice)
if choice not in range(len(school_list)):
print('没有该编号')
continue
school_name=school_list[choice]
flag,msg=student_interfacce.choice_school(school_name,user_info.get('user'))
if flag:
print(msg)
break
else:
print(msg)
break # -选择课程
@common.auth('Student')
def choice_class():
while True:
#1获取学生选择的校区下的课程
flag,course_list=student_interfacce.get_school_course(user_info.get('user'))
if not flag:
print(course_list)
break
for index,course_name in enumerate(course_list):
print(f'编号:{index}课程名称:{course_name}')
choice=input('>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice=int(choice)
if choice not in range(len(course_list)):
print('没有该编号')
continue
course_name=course_list[choice]
flag,msg=student_interfacce.choice_course(course_name,user_info.get('user'))
if flag:
print(msg)
break
else:
print(msg) pass
# -查看成绩
@common.auth('Student')
def check_score():
flag,score_dic=student_interfacce.check_score(user_info.get('user'))
if flag:
print(score_dic)
else:
print(score_dic) func_dic={
'':register,
'':login,
'':choice_school,
'':choice_class,
'':check_score,
}
def run():
while True:
print('''
1-注册
2-登录
3-选择校区
4-选择班级
5-查看成绩
''')
choice=input('>>:').strip()
if choice == 'q':
user_info['user'] = None
break
if choice not in func_dic:
continue func_dic.get(choice)()

student.py

from lib import common
from interface import commin_interface
from interface import teacher_interface
user_info={
'user':None
}
# -登录
def login():
while True:
username=input('>>:').strip()
pwd=input('>>:').strip()
flag,msg=commin_interface.login_interface(username,pwd,user_type='teacher')
if flag:
user_info['user']=username
print(msg)
break
else:
print(msg)
# -查看教授课程
@common.auth('Teacher')
def check_course():
flag,course_list=teacher_interface.check_course_interface(user_info.get('user'))
if flag:
print(course_list)
else:
print(course_list)
# -选择教授课程
@common.auth('Teacher')
def choice_course():
while True:
#1.先选择校区
flag,school_list=commin_interface.get_all_school_list()
if not flag:
print(school_list)
break
for index,school_name in enumerate(school_list):
print(f'编号{index}:学校名:{school_name}')
choice=input('>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice=int(choice)
if choice not in range(len(school_list)):
print('没有该编号')
continue
school_name=school_list[choice]
#2.选择课程
flag,course_list=commin_interface.check_course(school_name)
if not flag:
print(course_list)
break
for index2,course_name in enumerate(course_list):
print(f'编号:{index2}课程名称:{course_name}')
choice2=input('>>:').strip()
if not choice2.isdigit():
print('请输入纯数字')
continue
choice2=int(choice2)
if choice2 not in range(len(course_list)):
print('没有该编号')
continue
course_name=course_list[choice2]
flag,msg=teacher_interface.choice_course_interface(course_name,user_info.get('user'))
if flag:
print(msg)
break
else:
print(msg)
# -查看课程学员
@common.auth('Teacher')
def check_student():
while True:
#1.先选择查看老师下的课程
flag,course_list=teacher_interface.check_course_interface(user_info.get('user'))
if not flag:
print(course_list)
break
for index,course_name in enumerate(course_list):
print(f'编号:{index}课程名:{course_name}')
choice=input('>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice=int(choice)
if choice not in range(len(course_list)):
print('没有该编号')
continue
course_name=course_list[choice]
#2.查看课程下的学生
flag1,student_list=teacher_interface.check_student_interface(course_name,user_info.get('user'))
if flag:
print(student_list)
break
else:
print(student_list)
# -修改学生成绩
@common.auth('Teacher')
def change_score():
while True:
# 1.先选择查看老师下的课程
flag, course_list = teacher_interface.check_course_interface(user_info.get('user'))
if not flag:
print(course_list)
break
for index, course_name in enumerate(course_list):
print(f'编号:{index}课程名:{course_name}')
choice = input('>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice = int(choice)
if choice not in range(len(course_list)):
print('没有该编号')
continue
course_name = course_list[choice]
# 2.查看课程下的学生
flag1, student_list = teacher_interface.check_student_interface(course_name, user_info.get('user'))
if not flag1:
print('该课程没有学生')
continue
for index,student_name in enumerate(student_list):
print(f'编号:{index}姓名:{student_name}')
choice=input('>>:').strip()
if not choice.isdigit():
print('请输入纯数字')
continue
choice=int(choice)
if choice not in range(len(student_list)):
print('没有该编号')
continue
student_name=student_list[choice]
score=input('修改后的分数:').strip()
msg=teacher_interface.change_score_interface(student_name,course_name,score,user_info.get('user'))
print(msg) func_dic={
'':login,
'':check_course,
'':choice_course,
'':check_student,
'':change_score,
}
def run():
while True:
print('''
1-登录
2-查看教授课程
3-选择教授课程
4-查看课程学员
5-修改学生成绩
''')
choice=input('>>:').strip()
if choice == 'q':
user_info['user'] = None
break
if choice not in func_dic:
continue func_dic.get(choice)()

teacher.py

from conf import settings
import os,pickle
def save(obj):
user_dir=os.path.join(settings.DB_PATH,obj.__class__.__name__)
if not os.path.exists(user_dir):
os.mkdir(user_dir)
user_path=os.path.join(user_dir,obj.name)
with open(user_path,'wb') as f:
pickle.dump(obj,f) def select(cls,name):
user_dir=os.path.join(settings.DB_PATH,cls.__name__)
user_path=os.path.join(user_dir,name)
if os.path.exists(user_path):
with open(user_path,'rb') as f:
obj=pickle.load(f)
return obj

db_handler.py

from db import db_handler

class Base:
def save(self):
db_handler.save(self)
@classmethod
def select(cls,name):
admin_obj=db_handler.select(cls,name)
return admin_obj
class Admin(Base):
def __init__(self,name,pwd):
self.name=name
self.pwd=pwd
def create_school(self,school_name,school_address):
school_obj=School(school_name,school_address)
school_obj.save()
def create_course(self,school_obj,course_name):
course_obj=Course(course_name)
course_obj.save()
school_obj.course_list.append(course_name)
school_obj.save()
def create_teacher(self,teacher_name,teacher_pwd):
teacher_obj=Teacher(teacher_name,teacher_pwd)
teacher_obj.save() class School(Base):
def __init__(self,name,address):
self.name=name
self.address=address
self.course_list=[] class Course(Base):
def __init__(self,name):
self.name=name
self.student_list=[]
class Student(Base):
def __init__(self,name,pwd):
self.name=name
self.pwd=pwd
self.school=None
self.course_list=[]
self.score_dic={}
def add_school(self,school_name):
self.school=school_name
self.save()
def add_course(self,course_name):
self.course_list.append(course_name)
self.save()
course_obj=Course(course_name)
course_obj.student_list.append(self.name)
course_obj.save()
self.score_dic[course_name]=0
self.save() class Teacher(Base):
def __init__(self,name,pwd):
self.name=name
self.pwd=pwd
self.course_list=[] def check_course(self):
return self.course_list def choice_course(self,course_name):
self.course_list.append(course_name)
self.save() def check_student(self,course_name):
course_obj=Course.select(course_name)
student_list=course_obj.student_list
return student_list def change_score(self,student_name,course_name,score,):
student_obj=Student.select(student_name)
student_obj.score_dic[course_name]=score
student_obj.save()

modles.py

from db import modles
#注册
def register_interface(username,pwd):
admin_obj=modles.Admin.select(username)
if admin_obj:
return False,'用户已存在'
admin_obj=modles.Admin(username,pwd)
admin_obj.save()
return True,'注册成功' def crete_school_interface(school_name,school_address,user):
school_obj=modles.School.select(school_name)
if school_obj:
return False,'该学校已存在'
admin_obj=modles.Admin.select(user)
admin_obj.create_school(school_name,school_address)
return True,'创建成功' def create_course_interface(school_name,course_name,user):
school_obj=modles.School.select(school_name)
if course_name in school_obj.course_list:
return False,'课程已存在'
admin_obj=modles.Admin.select(user)
admin_obj.create_course(school_obj,course_name)
return True,'创建成功' def create_teacher_interface(name,user,pwd=''):
teacher_obj=modles.Teacher.select(name)
if teacher_obj:
return False,'该老师已存在'
admin_obj=modles.Admin.select(user)
teacher_obj=admin_obj.create_teacher(name,pwd)
return True,'创建成功'

admin_interface.py

from conf import settings
import os
from db import modles
#获取所有学校列表
def get_all_school_list():
school_path=os.path.join(settings.DB_PATH,'School')
if os.path.exists(school_path):
school_list=os.listdir(school_path)
return True,school_list
return False,'没有学校' #所有用户登录功能
def login_interface(name,pwd,user_type):
if user_type == 'admin':
obj=modles.Admin.select(name)
elif user_type == 'student':
obj=modles.Student.select(name)
elif user_type == 'teacher':
obj=modles.Teacher.select(name)
else:
return False,'没有权限'
if obj:
if pwd == obj.pwd:
return True,'登录成功'
return False,'密码错误'
return False,'用户不存在' #查看课程接口
def check_course(school_name):
school_obj=modles.School.select(school_name)
course_list=school_obj.course_list
if course_list:
return True,course_list
return False,'没有课程,请联系管理员'

common_interface.py

from db import modles
#注册接口
def regisiter_interface(username,pwd):
student_obj=modles.Student.select(username)
if student_obj:
return False,'该用户已存在'
student_obj=modles.Student(username,pwd)
student_obj.save()
return True,'注册成功' #选择校区接口
def choice_school(school_name,student_name):
student_obj=modles.Student.select(student_name)
if student_obj.school:
return False,'已选择学校'
student_obj.add_school(school_name)
return True,'选择学校成功' #选择课程接口
def choice_course(course_name,student_name):
student_obj=modles.Student.select(student_name)
if course_name in student_obj.course_list:
return False,'该课程已存在'
student_obj.add_course(course_name)
return True,'选择课程成功' #查看分数接口
def check_score(student_name):
student_obj=modles.Student.select(student_name)
score_dic=student_obj.score_dic
if score_dic:
return True,score_dic
return False,'没有成绩,联系老师' #获取学生已选择的校区下的课程
def get_school_course(student_name):
student_obj=modles.Student.select(student_name)
school_name=student_obj.school
school_obj=modles.School.select(school_name)
course_list=school_obj.course_list
if course_list:
return True,course_list
return False,'该学校没有课程'

student_interface.py

from db import modles

#查看课程列表接口
def check_course_interface(teacher_name):
teacher_obj=modles.Teacher.select(teacher_name)
course_list=teacher_obj.check_course()
if course_list:
return True,course_list
return False,'没有课程' #选择课程接口
def choice_course_interface(course_name,teacher_name):
teacher_obj=modles.Teacher.select(teacher_name)
course_list=teacher_obj.course_list
if course_name in course_list:
return False,'该课程已存在'
teacher_obj.choice_course(course_name)
return True,'选择课程成功' #查看课程下的学生接口
def check_student_interface(course_name,teacher_name):
teacher_obj=modles.Teacher.select(teacher_name)
student_list=teacher_obj.check_student(course_name)
if student_list:
return True,student_list
return False,'该课程没有学生' #修改学生分数接口
def change_score_interface(student_name,course_name,score,teacher_name):
teacher_obj=modles.Teacher.select(teacher_name)
teacher_obj.change_score(student_name,course_name,score,)
return '修改成功'

teacher_interface.py

# 登录认证装饰器
def auth(role):
def login_auth(func):
from core import admin,student,teacher
def inner(*args,**kwargs):
if role == 'Admin':
if admin.user_info.get('user'):
res=func(*args,**kwargs)
return res
else:
print('请登录,再进行操作')
admin.login()
func()
if role == 'Student':
if student.user_info.get('user'):
res=func(*args,**kwargs)
return res
else:
print('请登录,再进行操作')
student.login()
func()
if role == 'Teacher':
if teacher.user_info.get('user'):
res=func(*args,**kwargs)
return res
else:
print('请登录,再进行操作')
teacher.login()
func()
return inner
return login_auth

common.py

#软件使用说明
本周作业:综合应用面向对象 角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程 7. 上面的操作产生的数据都通过pickle序列化保存到文件里 -需求分析
-管理员视图
-管理员注册
-管理员登录
-创建学校
-创建班级
-创建课程
-创建老师
-学生视图
-注册
-登录
-选择校区
-选择班级
-交学费
-查看成绩
-老师视图
-登录
-查看教授课程
-选择教授课程
-查看课程学员
-修改学生成绩
-项目的架构设计
三层架构
-视图层
-core
-src.py主视图
-admin.py管理员视图
-student.py学生视图
-teacher.py老师视图
-接口层
-interface
-admin_interface.py管理员接口
-student_interface.py学生接口
-teacher_interface.py老师接口 -数据处理层
-db
-modles.py 存放类
-da_handler.py保存\查看数据 3.分任务开发
4.测试
5.上线

readme.md

import os,sys
sys.path.append(os.path.dirname(__file__)) from core import src
if __name__ == '__main__':
src.run()

start.py

 

最新文章

  1. Highcharts中国地图热力图
  2. codeforce 121E - Lucky Array
  3. 为何重写toString方法后会使哈希码能够打印出来
  4. php 数组二分法查找函数
  5. Hark的数据结构与算法练习之若领图排序ProxymapSort
  6. 通过AJAX与ASP.NET结合实现的仿GridView增删改查功能
  7. 使用SAE部署Flask,使用非SAE flask版本和第三方依赖包的方法
  8. Processing_百度百科
  9. Fedora25
  10. [Jmeter]jemeter启动报错,返回错误码 5,处理方法
  11. log4cxx入门第一篇--一个小例子
  12. iOS 之 socket 与 http
  13. iOS 10 设备权限问题(相机,相册等)
  14. 报表工具highcharts使用心得
  15. Python学习基本小练习
  16. (26)A delightful way to teach kids about computers
  17. java 类型转换前先做检查
  18. v1版本
  19. .Net实现Windows服务安装完成后自动启动的两种方法
  20. Android应用安全之脆弱的加密

热门文章

  1. 线性表 & 散列表
  2. Telegraf和Grafana监控多平台上的SQL Server-自定义监控数据收集
  3. linux中c多线程同步方法
  4. 百度编辑器UEditor不能插入视频的解决方法
  5. scws中文分词安装和使用
  6. $.ajax 中的contentType 坑坑
  7. maven项目快速搭建SSM框架(一)创建maven项目,SSM框架整合,Spring+Springmvc+Mybatis
  8. SQL中游标的使用示例
  9. vscode 常用变量
  10. 【spring】循环依赖 Java Vs Spring