程序的架构设计
- 选课系统
- 三层架构
- 视图层: 与用户交互的
- 接口层: 核心的业务逻辑
- 数据层: 处理数据的,增删改查
- pickle格式的数据
- bytes类型数据
- Python
- 对象: ---> object
需求分析
- 管理员功能
- 管理员注册
- 管理员登录
- 创建学校
- 创建班级(先选择校区)
- 班级名称
- 班级绑定的校区
- 创建课程(课程绑定给班级,先选择班级)
- 课程周期
- 课程价格
- 创建老师
- 老师名称
- 老师密码
- 学生的功能
- 注册
- 登录
- 交学费
- 选择校区
- 选择课程
- 查看分数
- 老师的功能
- 登录
- 查看授课课程
- 选择授课课程
- 查看课程下学生
- 修改学生分数
主视图
1 '''
2 主视图
3 '''
4 from core import admin
5 from core import student
6 from core import teacher
7
8 func_dic = {
9 '1':admin.admin_view,
10 '2':student.student_view,
11 '3':teacher.teacher_view,
12 }
13 def run():
14 while True:
15 print('''
16 1.管理员功能
17 2.学生功能
18 3.老师功能
19 ''')
20 cmd = input('输入要进入的功能编号')
21 if not cmd.isdigit():
22 print('请正确输入编号')
23 continue
24 if cmd.isdigit():
25 func_dic[cmd]()
类
1 '''
2 存放类
3 '''
4 from db import db_handler
5
6
7 class BASE:
8 '''
9 存放存取文件内容的方法的父类
10 '''
11 def __init__(self, name, psd):
12 self.username = name
13 self.password = psd
14
15 def save(self):
16 db_handler.save(self)
17
18 @classmethod
19 def getinfo(self, username):
20 obj = db_handler.getinfo(self, username)
21 return obj
22
23 @classmethod
24 def get_obj_number(self):
25 number = db_handler.get_obj_number(self)
26 return number
27
28 class Admin(BASE):
29 def __init__(self, name, psd):
30 super().__init__(name,psd)
31 self.save()
32
33 class Student(BASE):
34 def __init__(self,name,psd,age,gender,number):
35 super().__init__(name,psd)
36 self.age = age
37 self.gender = gender
38 self.__number = number
39 self.student_course_list = []
40 self.score_dic = {}
41 self.save()
42
43 @property
44 def check_number(self):
45 number = self.__number
46 return number
47
48 def choose_course(self, course_name):
49 self.student_course_list.append(course_name)
50 self.score_dic[course_name] = 0
51
52 class Teacher(BASE):
53 def __init__(self, name, psd, age, gender, salarys,level):
54 super().__init__(name,psd)
55 self.age = age
56 self.gender = gender
57 self.__salarys = salarys
58 self.__level = level
59 self.save()
60
61 @property
62 def check_salarys(self):
63 salarys=self.__salarys
64 return salarys
65
66 @property
67 def check_level(self):
68 level = self.__level
69 return level
70
71 class BASE2:
72 def save(self):
73 db_handler.save(self)
74
75 @classmethod
76 def getinfo(self, username):
77 obj = db_handler.getinfo(self, username)
78 return obj
79
80
81 class School(BASE2):
82 def __init__(self,school_name,school_addr):
83 self.school_name = school_name
84 self.school_addr = school_addr
85 self.classes_list = []
86 self.save()
87
88 def create_course(self, classes_name, school_name):
89 cls_obj = Classes(classes_name, school_name)
90 self.classes_list.append(cls_obj)
91 self.save()
92 return cls_obj
93
94 class Classes(BASE2):
95 def __init__(self, classes_name, school_name):
96 self.classes_name = classes_name
97 self.school_name = school_name
98 self.course_list = []
99 self.save()
100
101 def create_course(self, course_name):
102 self.course_list.append(course_name)
103
104 class Course(BASE2):
105 def __init__(self, course_name, course_period, course_price):
106 self.course_name = course_name
107 self.course_period = course_period
108 self.course_price = course_price
数据库
1 import os
2 import pickle
3 from conf import settings
4
5 def save(obj):
6 user_dir = os.path.join(settings.DB_PATH,obj.__class__.__name__)
7 if not os.path.isdir(user_dir):
8 os.mkdir(user_dir)
9 if os.path.isdir(user_dir):
10 user_path = os.path.join(user_dir,obj.username)
11 with open(user_path,'wb')as f:
12 pickle.dump(obj,f)
13
14 def getinfo(cls,username):
15 user_path = os.path.join(settings.DB_PATH,cls.__name__,username)
16 if os.path.exists(user_path):
17 with open(user_path,'rb')as f:
18 obj = pickle.load(f)
19 return obj
20
21 def get_obj_number(obj):
22 obj_dir = os.path.join(settings.DB_PATH,obj.__class__.__name__)
23 if not obj_dir:
24 return None
25 else:
26 obj_number = os.path.getsize(obj_dir)
27 return obj_number
28
29 def show_schoollist():
30 school_dir = settings.COURSE_PATH
31 if not school_dir:
32 return None
33 else:
34 school_list = []
35 for school in os.listdir(school_dir):
36 school_list.append(school)
37 return school
38
39
40 def show_courselist():
41 course_dir = settings.COURSE_PATH
42 if not course_dir:
43 return None
44 else:
45 course_list = []
46 for course in os.listdir(course_dir):
47 course_list.append(course)
48 return course_list
管理员视图
1 '''
2 管理员视图
3 - 管理员功能
4 - 管理员注册
5 - 管理员登录
6 - 创建学校
7 - 创建班级(先选择校区)
8 - 班级名称
9 - 班级绑定的校区
10 - 创建课程(课程绑定给班级,先选择班级)
11 - 课程周期
12 - 课程价格
13 - 创建老师
14 - 老师名称
15 - 老师密码
16 '''
17
18 from interface import admin_interface
19
20 def register():
21 '''
22 注册功能
23 :return:
24 '''
25 while True:
26 username = input('请输入用户名').strip()
27 userpsd = input('请输入密码').strip()
28 re_psd = input('再次输入密码').strip()
29 if userpsd == re_psd :
30 flag,msg =admin_interface.register_interface(username,userpsd)
31 if flag:
32 print(msg)
33 else:
34 print(msg)
35
36
37 def login():
38 while True:
39 username = input('请输入用户名').strip()
40 userpsd = input('请输入密码').strip()
41 flag,msg = admin_interface.login_interface(username,userpsd)
42 if flag:
43 print(msg)
44 else:
45 print(msg)
46
47
48 def create_school():
49 while True:
50 school_name = input('请输入学校名').strip()
51 school_addr = input('请输入学校地址').strip()
52 flag,msg =admin_interface.create_school_interface(school_name,school_addr)
53 if flag:
54 print(msg)
55 else:
56 print(msg)
57
58
59
60 def create_classes():
61 while True:
62 classes_name = input('请输入班级名').strip()
63 school_name = input('请输入学校名').strip()
64 flag, msg = admin_interface.create_classes_interface(classes_name,school_name)
65 if flag:
66 print(msg)
67 else:
68 print(msg)
69
70
71 def create_course():
72 while True:
73 course_name = input('请输入课程名').strip()
74 course_period = input('请输入课程周期').strip()
75 course_price = input('请输入课程价格').strip()
76 flag, msg = admin_interface.create_course_interface(course_name, course_period, course_price)
77 if flag:
78 print(msg)
79 else:
80 print(msg)
81
82
83 def create_teacher():
84 while True:
85 teacher_name = input('请输入教师名').strip()
86 psd = '000'#默认初始密码为000
87 age = input('请输入年龄').strip()
88 gender = input('请输入性别').strip()
89 salarys = input('请输入薪资').strip()
90 level = input('请输入级别').strip()
91 flag, msg = admin_interface.create_teacher_interface(teacher_name, psd, age, gender, salarys,level)
92 if flag:
93 print(msg)
94 else:
95 print(msg)
96
97 func_dic = {
98 '1':register,
99 '2':login,
100 '3':create_school,
101 '4':create_classes,
102 '5':create_course,
103 '6':create_teacher,
104 }
105 def admin_view():
106 while True:
107 print('''
108 1.管理员注册
109 2.管理员登录
110 3.创建学校
111 4.创建班级
112 5.创建课程
113 6.创建老师
114 ''')
115 cmd = input('请选择功能编号').strip()
116 if not cmd.isdigit():
117 print('请正确输入功能编号')
118 continue
119 if cmd.isdigit():
120 func_dic[cmd]()
管理员接口
1 '''
2 管理员接口
3 '''
4 from db import models
5
6 def register_interface(username,password):
7 admin_obj = models.Admin.getinfo(username)
8 if admin_obj:
9 return False,'用户已存在'
10 models.Admin(username,password)
11 return True,'注册成功'
12
13 def login_interface(username,password):
14 admin_obj = models.Admin.getinfo(username)
15 if not admin_obj:
16 return False,'用户不存在'
17 if admin_obj:
18 if admin_obj.password ==password:
19 return True,f'{username}登录成功'
20 else:
21 return False,'密码错误'
22
23 def create_school_interface(school_name,school_addr):
24 school_obj = models.School.getinfo(school_name)
25 if school_obj:
26 return False,'该学校已存在'
27 models.School(school_name,school_addr)
28 return True,'学校创建成功'
29
30
31 def create_classes_interface(classes_name, school_name):
32 classes_obj = models.Classes.getinfo(classes_name)
33 if classes_obj:
34 return False, '该班级已存在'
35 models.Classes(classes_name, school_name)
36 return True, '班级创建成功'
37
38
39 def create_course_interface(course_name, course_period, course_price):
40 course_obj = models.Course.getinfo(course_name)
41 if course_obj:
42 return False,'课程已存在'
43 models.Course(course_name, course_period, course_price)
44 models.Classes.course_list(course_name)
45 return True,'课程创建成功'
46
47
48 def create_teacher_interface(name, psd, age, gender, salarys,level):
49 teacher_obj = models.Teacher.getinfo(name)
50 if teacher_obj:
51 return False,'教师已存在'
52 models.Teacher(name, psd, age, gender, salarys,level)
53 return True,'教师创建成功'
学生视图
'''
学生视图
- 学生的功能
- 注册
- 登录
- 交学费
- 选择校区
- 选择课程
- 查看分数
'''
from interface import student_interface
login_user = None
def register():
'''
注册功能
:return:
'''
while True:
username = input('请输入用户名').strip()
userpsd = input('请输入密码').strip()
re_psd = input('再次输入密码').strip()
if userpsd == re_psd :
print('请继续完善信息以完成注册')
age = input('请输入你的年龄').strip()
if not age.isdigit():
print('请正确输入年龄')
continue
gender = input('请输入你的性别').strip()
flag,msg =student_interface.register_interface(username,userpsd,age,gender)
if flag:
print(msg)
break
else:
print(msg)
def login():
while True:
username = input('请输入用户名').strip()
userpsd = input('请输入密码').strip()
flag, msg = student_interface.login_interface(username, userpsd)
if flag:
global login_user
login_user = username
print(msg)
break
else:
print(msg)
def pay():
while True:
course_name = input('请选择您要缴费的课程')
cost,msg= student_interface.course_price(course_name)
print(msg)
flag,msg = student_interface.pay_interface(login_user)
if flag:
print(msg)
else:
print(msg)
def choose_school():
while True:
school_list = student_interface.show_schoollist()
school_dic = {}
for num, school in enumerate(school_list):
school_dic[num] = school
print(f'编号{num}:课程名{school}')
cmd = input('请输入选择的学校')
if not cmd.isdigit():
print('请正确输入课程编号')
else:
school_name = school_dic[cmd]
flag, msg = student_interface.choose_school_interface(school_name)
if flag:
print(msg)
break
else:
print(msg)
def choose_course():
while True:
course_list = student_interface.show_courselist()
course_dic ={}
for num , course in enumerate(course_list):
course_dic[num]=course
print(f'编号{num}:课程名{course}')
cmd = input('请输入选择的课程')
if not cmd.isdigit():
print('请正确输入课程编号')
else:
course_name = course_dic[cmd]
flag, msg = student_interface.choose_course_interface(login_user,course_name)
if flag:
print(msg)
break
else:
print(msg)
def check_score():
while True:
course_name = input('请选择要查看分数的课程')
flag,msg = student_interface.check_score_interface(login_user,course_name)
if flag:
print(msg)
else:
print(msg)
func_dic = {
'1':register,
'2':login,
'3':pay,
'4':choose_school,
'5':choose_course,
'6':check_score
}
def student_view():
while True:
print('''
1.注册
2.登录
3.缴费
4.选择学校
5.选择课程
6.创建老师
''')
cmd = input('请选择功能编号').strip()
if not cmd.isdigit():
print('请正确输入功能编号')
continue
if cmd.isdigit():
func_dic[cmd]()
学生接口
'''
学生功能接口
'''
from db import models
from db import db_handler
def register_interface(username,password,age,gender):
student_obj = models.Student.getinfo(username)
if student_obj:
return False,'用户已存在'
#根据student数据库中的对象个数自动生成学号
student_number = models.Student.get_obj_number()
number = student_number+1
models.Student(username,password,age,gender,number)
return True,f'注册成功,您的学号为{number}'
def login_interface(username,password):
student_obj = models.Student.getinfo(username)
if not student_obj:
return False,'用户不存在'
if student_obj:
if student_obj.password ==password:
return True,f'{username}登录成功'
else:
return False,'密码错误'
def course_price(coursename):
course_obj = models.Course.getinfo(coursename)
cost = course_obj.price
return cost,f'课程{coursename}的价格为{cost}'
def pay_interface(username):
student_obj = models.Student.getinfo(username)
pass
def show_schoollist():
schoollist = db_handler.show_courselist()
return schoollist
def show_courselist():
courselist = db_handler.show_courselist()
return courselist
def choose_course_interface(username,course_name):
student_obj = models.Student.getinfo(username)
student_obj.choose_course(course_name)
return True,f'选课成功,{username}选择{course_name}'
def check_score_interface(username,coursename):
student_obj = models.Student.getinfo(username)
if not student_obj.score_dic:
return False,'您现在无成绩'
dic=student_obj.score_dic
if coursename not in dic.keys:
return False,'您未选改门课程或者无该门课程'
else:
return True,f'您该门课程的成绩为{dic[coursename]}'
设置
1 import os
2
3 BASE_PATH = os.path.dirname(os.path.dirname(__file__))
4
5 DB_PATH = os.path.join(BASE_PATH,'db')
6
7 SCHOOL_PATH = os.path.join(BASE_PATH,'School')
8
9 COURSE_PATH = os.path.join(BASE_PATH,'Course')