python最简单选课系统作业_python选课系统作业

# 选课系统

# 角色:学校、学员、课程、讲师

# 要求:

# 1. 创建北京、上海 2 所学校

# 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开

# 3. 课程包含,周期,价格,通过学校创建课程

# 4. 通过学校创建班级, 班级关联课程、讲师

# 5. 创建学员时,选择学校,关联班级

# 5. 创建讲师角色时要关联学校,

# 6. 提供两个角色接口

# 6.1 学员视图, 可以登录,注册, 选择学校,选择课程,查看成绩

# 6.2 讲师视图, 讲师登录,选择学校,选择课程, 查看课程下学员列表 , 修改所管理的学员的成绩

# 6.3 管理视图,登录,注册,创建讲师, 创建班级,创建课程,创建学校

# 7. 上面的操作产生的数据都通过pickle序列化保存到文件里

分析:

角色:

管理员:

注册

登录

创建校区

创建老师

创建课程

老师:

登录

选择教授课程

查看课程下学生

修改学生的成绩

学生:

注册

登录

选择校区

选择课程

查看成绩

类:

抽出共有属性方法:Base

学校:School

学员:Student

课程:Course

讲师:Teacher

各个类属性和方法:

Base:

公用方法:

存数据:save

取数据:select

学校:

属性:

学校名字:school_name str

学校地址:school_addr str

开设的课程:course_list list

学员:

属性:

学员名字:student_name str

学员密码:student_pwd str

学员所属校区:school str

学员课程: course_list list

学员成绩: course_score dict

方法:

学员选择校区 choose_school(school_name)

列出所有校区的信息,学员选择

学员选择课程 choose_course(school_name)

学员必须先选择校区,列出该校区包含的课程

选择相应的课程,添加到学员课程列表中,并且将用户绑定给课程

讲师:

属性:

讲师名字:teacher_name str

讲师密码:teacher_pwd str

讲师课程: course_list list

方法:

讲师选择课程: choose_course(school_name, course_name)

先选择校区,列出该校区所有课程,讲师选择课程,如果没有选过,则添加

讲师修改学生的成绩:change_student_score(course, student_name)

通过自身对象中的课程列表,选择相应课程,调用课程下的所有学生信息,更改学生成绩

管理员:

属性:

管理员的名字:admin_name str

管理员的密码:admin_pwd str

方法:

管理员创建学校: create_school(school_name,school_addr)

直接输入学校的名字和地址,然后判断学校是否存在,不存在,则创建

管理员创建讲师: create_teacher(teacher_name)

直接创建讲师,密码为默认

管理员创建课程: create_course(school_name, course_name)

先选择校区,再创建课程名字,如果不存在,则创建这个课程

那个角色登陆了就执行那个角色的功能

进入到角色选项里面了可以随时退出

下面是程序说明程图

-------------------------------------------------------------

1740019-20200224175121385-1392441250.png

目录结构图

1740019-20200224175349414-769828071.png

一 ,下面是业务逻辑代码

1.conf下settings.py下代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 importos2

3 BASE_DIR = os.path.dirname(os.path.dirname(__file__))4 BASE_DB = os.path.join(BASE_DIR, 'db')

View Code

2.core下admin.py代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 from interface importstudent_interface, teacher_interface, admin_interface, common_interface2 from lib importcommon3

4 admin_info ={5 'name': None6 }7

8

9 defadmin_register():10 print('管理员注册')11 if admin_info['name']:12 print('管理员已经登陆了不能注册')13 return

14 whileTrue:15 name = input('请输入名字:').strip()16 password = input('请输入密码:').strip()17 conf_password = input('请确认密码:').strip()18 if password ==conf_password:19 flag, msg =admin_interface.admin_register_interface(name, password)20 ifflag:21 print(msg)22 break

23 else:24 print(msg)25 else:26 print('两次密码不一致')27

28

29 defadmin_login():30 print('管理员登陆')31 if admin_info['name']:32 print('管理员已经登陆了不能重复登陆')33 return

34 whileTrue:35 name = input('请输入名字:').strip()36 password = input('请输入密码:').strip()37 flag, msg = common_interface.login_interface(name, password, 'admin')38 ifflag:39 admin_info['name'] =name40 print(msg)41 break

42 else:43 print(msg)44

45

46 @common.login_auth(user_type='admin')47 defcreate_school():48 print('创建学校')49 school_name = input('请输入学校名字:').strip()50 address = input('请输入学校地址:').strip()51 flag, msg = admin_interface.create_school_interface(admin_info['name'], school_name,address)52 ifflag:53 print(msg)54 else:55 print(msg)56

57

58

59

60 @common.login_auth(user_type='admin')61 defcreate_teacher():62 print('创建老师')63 name = input('请输入老师名字:').strip()64 flag, msg = admin_interface.create_teacher_interface(admin_info['name'], name)65 ifflag:66 print(msg)67 else:68 print(msg)69

70

71

72

73 @common.login_auth(user_type='admin')74 defcreate_course():75 print('创建课程')76 whileTrue:77 school_list =common_interface.check_all_schools()78 ifschool_list:79 for i, school inenumerate(school_list):80 print('%s: %s' %(i, school))81 choose = input('请选择学校:').strip()82 ifchoose.isdigit():83 choose =int(choose)84 if choose >=len(school_list):85 continue

86 name = input('请输入课程名字:').strip()87 flag, msg = admin_interface.create_course_interface(admin_info['name'], name, school_list[choose])88 ifflag:89 print(msg)90 break

91 else:92 print(msg)93

94

95

96

97 func_dic ={98 '1': admin_register,99 '2': admin_login,100 '3': create_school,101 '4': create_teacher,102 '5': create_course,103 }104

105

106 defadmin_view():107 whileTrue:108 print("""

109 1 注册110 2 登陆111 3 创建学校112 4 创建老师113 5 创建课程114 """)115

116 choice = input('请选择功能:').strip()117 if choice == 'q' and 'Q':118 break

119

120 if choice not infunc_dic:121 continue

122

123 func_dic[choice]()

View Code

3.core下student.py代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 from interface importstudent_interface, common_interface2 from lib importcommon3

4 student_info ={5 'name': None6 }7

8

9 defstudent_register():10 print('学生注册')11 if student_info['name']:12 print('已经登陆了不能在注册了')13 return

14 whileTrue:15 name = input('请输入学生名字:').strip()16 password = input('请输入学生密码').strip()17 conf_password = input('请确认密码:').strip()18 if password ==conf_password:19 flag, msg =student_interface.student_register_interface(name, password)20 ifflag:21 print(msg)22 break

23 else:24 print(msg)25 else:26 print('两次密码不一致')27

28

29 defstudent_login():30 print('学生登陆')31 if student_info['name']:32 print('已经登陆了不能重复登陆')33 return

34 whileTrue:35 name = input('请输入学生名字:').strip()36 password = input('请输入学生密码:').strip()37 flag, msg = common_interface.login_interface(name, password, 'student')38 ifflag:39 print(msg)40 student_info['name'] =name41 break

42 else:43 print(msg)44

45

46 @common.login_auth('student')47 defchoose_school():48 print('选择学校')49 school_list =common_interface.check_all_schools()50 if notschool_list:51 print('请联系管理员创建学校')52 return

53 for i, school inenumerate(school_list):54 print('%s; %s' %(i, school))55 choice = input('请选择学校:').strip()56 ifchoice.isdigit():57 choice =int(choice)58 if choice

62

63 @common.login_auth('student')64 defchoose_course():65 print('选择课程')66 flag, course_list = student_interface.get_can_choose_course_interface(student_info['name'])67 if notflag:68 print(course_list)69 return

70 for i, course inenumerate(course_list):71 print('%s: %s' %(i, course))72 choice = input('请选择课程').strip()73 ifchoice.isdigit():74 choice =int(choice)75 if choice

83

84 @common.login_auth('student')85 defcheck_score():86 print('查看分数')87 course_score_dict = student_interface.check_score_interface(student_info['name'])88 print(course_score_dict)89

90

91

92 func_dic ={93 '1': student_register,94 '2': student_login,95 '3': choose_school,96 '4': choose_course,97 '5': check_score,98 }99

100

101 defstudent_view():102 whileTrue:103 print("""

104 1 注册105 2 登陆106 3 选择学校107 4 选择课程108 5 查看成绩109 """)110

111 choice = input('请选择功能:').strip()112 if choice == 'q' and 'Q':113 break

114 if choice not infunc_dic:115 continue

116 func_dic[choice]()

View Code

4.core下teacher.py代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 from interface importcommon_interface, teacher_interface2 from lib importcommon3

4

5 teacher_info ={6 'name': None7 }8

9

10 defteacher_login():11 print('老师登陆')12 if teacher_info['name']:13 print('老师已经登陆了不能重复登陆')14 return

15 whileTrue:16 name = input('请输入老师名字:').strip()17 password = input('请输入老师密码:').strip()18 flag, msg = common_interface.login_interface(name, password, 'teacher')19 ifflag:20 print(msg)21 teacher_info['name'] =name22 break

23 else:24 print(msg)25

26

27 @common.login_auth('teacher')28 defchoose_teach_course():29 print('选择要教授的课程')30 whileTrue:31 course_list =teacher_interface.get_all_course()32 if notcourse_list:33 print('现在还没有课程,请联系管理员创建课程')34 break

35 else:36 for i, course_list inenumerate(course_list):37 print('%s; %s' %(i, course_list))38 choice = input('请选择课程:').strip()39 ifchoice.isdigit():40 choice =int(choice)41 if choice >= len(course_list): continue

42 flag, msg = teacher_interface.choose_teacher_course_interface(teacher_info['name'], course_list[choice])43 ifflag:44 print(msg)45 break

46 else:47 print(msg)48 else:49 print('必须输入数字')50

51

52 @common.login_auth('teacher')53 defcheck_course():54 print('查看教授的课程')55 course_list = teacher_interface.check_all_teacher_course(teacher_info['name'])56 ifcourse_list:57 for course incourse_list:58 print(course)59 else:60 print('你还没有选择课程, 先去选择课程吧')61

62

63 @common.login_auth('teacher')64 defcheck_student():65 count =066 print('查看学生')67 course_list = teacher_interface.check_all_teacher_course(teacher_info['name'])68 ifcourse_list:69 for i, course inenumerate(course_list):70 print(i, course)71 choice = input('选择要查看课程下的学生:').strip()72 ifchoice.isdigit():73 choice =int(choice)74 if choice

84

85 @common.login_auth('teacher')86 defmodify_score():87 count =088 print('查看学生')89 course_list = teacher_interface.check_all_teacher_course(teacher_info['name'])90 ifcourse_list:91 for i, course inenumerate(course_list):92 print(i, course)93 choice = input('选择要查看课程下的学生:').strip()94 ifchoice.isdigit():95 choice =int(choice)96 if choice

123

124 func_dic ={125 '1': teacher_login,126 '2': choose_teach_course,127 '3': check_course,128 '4': check_student,129 '5': modify_score,130 }131

132

133 defteacher_view():134 whileTrue:135 print("""

136 1 登陆137 2 选择课程138 3 查看课程139 4 查看学生140 5 修改学生成绩141 """)142

143 choice = input('请选择功能:').strip()144 if choice == 'q' and 'Q':145 break

146 if choice not infunc_dic:147 continue

148 func_dic[choice]()

View Code

5.core下src.py代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 from core importadmin, student, teacher2

3 func_dic ={4 '1': admin.admin_view,5 '2': student.student_view,6 '3': teacher.teacher_view7

8 }9

10

11 defrun():12 whileTrue:13 print("""

14 1 管理员视图15 2 学生视图16 3 老师视图17 """)18 choice = input('请选择:').strip()19 if choice not infunc_dic:20 continue

21 func_dic[choice]()

View Code

二 ,下面是db文件代码

1.db_handler.py代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 from conf importsettings2 importos3 importpickle4

5

6 defsave(obj):7 path_dir = os.path.join(settings.BASE_DB, obj.__class__.__name__.lower())8 if notos.path.isdir(path_dir):9 os.mkdir(path_dir)10 path_obj =os.path.join(path_dir, obj.name)11 with open(path_obj, 'wb') as f:12 pickle.dump(obj, f)13

14

15 defselect(name, dir_type):16 path_dir =os.path.join(settings.BASE_DB, dir_type)17 if notos.path.isdir(path_dir):18 os.mkdir(path_dir)19 path_obj =os.path.join(path_dir, name)20 ifos.path.exists(path_obj):21 with open(path_obj, 'rb')as f:22 returnpickle.load(f)23 else:24 return None

View Code

2.modles.py

ContractedBlock.gif

ExpandedBlockStart.gif

1 from db importdb_handler2

3

4 classBaseClass:5 defsave(self):6 db_handler.save(self)7

8 @classmethod9 defget_obj_by_name(cls, name):10 return db_handler.select(name, cls.__name__.lower())11

12

13 classAdmin(BaseClass):14 def __init__(self, name, password):15 self.name =name16 self.password =password17 self.save()18

19

20 defcreate_school(self, school_name, addr):21 School(school_name, addr)22

23

24 defcreate_course(self, name):25 Course(name)26

27

28 defcreate_teacher(self, name, password):29 Teacher(name, password)30

31

32 classTeacher(BaseClass):33 def __init__(self, name, password):34 self.name =name35 self.password =password36 self.course_list =[]37 self.save()38

39 defadd_course(self, course_name):40 self.course_list.append(course_name)41 self.save()42

43 defmodify_score(self, student, course_name, score):44 student.score[course_name] =score45 student.save()46

47

48 classStudent(BaseClass):49 def __init__(self, name, password):50 self.name =name51 self.password =password52 self.score ={}53 self.school =None54 self.course_list =[]55 self.save()56

57 defget_school(self):58 returnself.school59

60 defchoose_school(self, school_name):61 self.school =school_name62 self.save()63

64 defadd_course(self, course_name):65 self.course_list.append(course_name)66 self.score[course_name] =067 self.save()68

69

70

71

72 classSchool(BaseClass):73 def __init__(self, name, addr):74 self.name =name75 self.addr =addr76 self.course_list =[]77 self.save()78

79 defadd_course(self, course_name):80 self.course_list.append(course_name)81 self.save()82

83

84

85 classCourse(BaseClass):86 def __init__(self, name):87 self.name =name88 self.student_list =[]89 self.save()

View Code

三 ,下面是接口api文件 interface

1.admin_interface

ContractedBlock.gif

ExpandedBlockStart.gif

1 from db importmodles2

3

4 defadmin_register_interface(name, password):5 admin_obj =modles.Admin.get_obj_by_name(name)6 ifadmin_obj:7 return False, '管理员已经存在'

8 else:9 modles.Admin(name, password)10 return True, '注册成功'

11

12

13 defcreate_school_interface(admin_name, school_name, addr):14 school_obj =modles.School.get_obj_by_name(school_name)15 ifschool_obj:16 return False, '学校已经存在'

17 else:18 admin_obj =modles.Admin.get_obj_by_name(admin_name)19 admin_obj.create_school(school_name, addr)20 return True, '学校创建成功'

21

22

23 def create_teacher_interface(admin_name, name, password = '666'):24 obj =modles.Teacher.get_obj_by_name(name)25 ifobj:26 return False, '老师已经存在'

27 else:28 admin_obj =modles.Admin.get_obj_by_name(admin_name)29 admin_obj.create_teacher(name, password)30 return True, '老师创建成功'

31

32

33 defcreate_course_interface(admin_name, course_name, school_name):34 obj =modles.Course.get_obj_by_name(course_name)35 ifobj:36 return False, '课程已经存在'

37 else:38 admin_obj =modles.Admin.get_obj_by_name(admin_name)39 admin_obj.create_course(course_name)40 school_obj =modles.School.get_obj_by_name(school_name)41 school_obj.add_course(course_name)42 return True, '课程已经创建成功'

View Code

2.common_interface

ContractedBlock.gif

ExpandedBlockStart.gif

1 from db importmodles2 importos3 from conf importsettings4 from lib importcommon5

6

7 deflogin_interface(name, password, user_type):8 if user_type == 'admin':9 obj =modles.Admin.get_obj_by_name(name)10 elif user_type == 'teacher':11 obj =modles.Teacher.get_obj_by_name(name)12 elif user_type == 'student':13 obj =modles.Student.get_obj_by_name(name)14 else:15 return False, '没有这个用户类型'

16 ifobj:17 if obj.name == name and obj.password ==password:18 return True, '%s: %s 登陆成功' %(user_type, name)19 else:20 return False, '密码不对'

21

22 else:23 return False, '用户不存在'

24

25

26 defcheck_all_schools():27 path = os.path.join(settings.BASE_DB, 'school')28 returncommon.get_all_dir_obj(path)29

30

31 defchoose_course_interface(student_name, course_name):32 obj =modles.Student.get_obj_by_name(student_name)33 obj.add_course(course_name)34 return True, '选课成功'

View Code

3.student_interface

ContractedBlock.gif

ExpandedBlockStart.gif

1 from db importmodles2

3

4 defstudent_register_interface(name, password):5 student_obj =modles.Student.get_obj_by_name(name)6 ifstudent_obj:7 return False, '学生已经存在'

8 else:9 modles.Student(name, password)10 return True, '注册成功'

11

12

13 defchoice_school_interface(student_name, school_name):14 student_obj =modles.Student.get_obj_by_name(student_name)15 school =student_obj.get_school()16 if notschool:17 student_obj.choose_school(school_name)18 return True, '%s: 选择学校成功' %(student_name)19 else:20 return False, '已经选择学校了, 不能重复选择学校'

21

22

23 defget_can_choose_course_interface(student_name):24 student_obj =modles.Student.get_obj_by_name(student_name)25 if notstudent_obj.school:26 return False, '你没有选择学校,请先选择学校'

27 school_obj =modles.School.get_obj_by_name(student_obj.school)28 ifschool_obj.course_list:29 returnTrue, school_obj.course_list30 else:31 return False, "该学校下没有课程"

32

33

34 defchoose_course_interface(student_name, course_name):35 obj =modles.Student.get_obj_by_name(student_name)36 obj.add_course(course_name)37 return True, '选课成功'

38

39

40 defcheck_score_interface(student_name):41 obj =modles.Student.get_obj_by_name(student_name)42 return obj.score

View Code

4.teacher_nterface

ContractedBlock.gif

ExpandedBlockStart.gif

1 from db importmodles2 importos3 from conf importsettings4 from lib importcommon5

6

7 defget_all_course():8 path = os.path.join(settings.BASE_DB, 'course')9 returncommon.get_all_dir_obj(path)10

11

12 defchoose_teacher_course_interface(teacher_name, course_name):13 teacher_obj =modles.Teacher.get_obj_by_name(teacher_name)14 if course_name not inteacher_obj.course_list:15 teacher_obj.add_course(course_name)16 return True, '选择课程成功'

17 else:18 return False, '你已经选择了本门课程'

19

20

21 defcheck_all_teacher_course(teacher_name):22 teacher_obj =modles.Teacher.get_obj_by_name(teacher_name)23 returnteacher_obj.course_list24

25

26 defcheck_student_in_course(course_name):27 course_obj =modles.Course.get_obj_by_name(course_name)28 returncourse_obj.student_list29

30

31 defmodify_score(teacher_name, course_name, student_name, score):32 teacher_obj =modles.Teacher.get_obj_by_name(teacher_name)33 student_obj =modles.Student.get_obj_by_name(student_name)34 teacher_obj.modify_score(student_obj, course_name, score)35 return True, '修改分数成功'

View Code

四 , 下面是lib代码

1.common下代码

ContractedBlock.gif

ExpandedBlockStart.gif

1 importos2

3

4 deflogin_auth(user_type):5 from core importadmin, student, teacher6

7 defauth(func):8

9 def wrapper(*args, **kwargs):10 if user_type == 'admin':11 if not admin.admin_info['name']:12 admin.admin_login()13 else:14 return func(*args, **kwargs)15 if user_type == 'teacher':16 if not teacher.teacher_info['name']:17 teacher.teacher_login()18 else:19 return func(*args, **kwargs)20 if user_type == 'student':21 if not student.student_info['name']:22 student.student_login()23 else:24 return func(*args, **kwargs)25

26 returnwrapper27

28 returnauth29

30

31 defget_all_dir_obj(path):32 ifos.path.exists(path):33 obj_list =os.listdir(path)34 returnobj_list35 else:36 return None

View Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值