python项目之选课系统

程序的架构设计

- 选课系统
- 三层架构
- 视图层: 与用户交互的
- 接口层: 核心的业务逻辑
- 数据层: 处理数据的,增删改查
- 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')


猜你喜欢

转载自www.cnblogs.com/heirenxilou/p/12687655.html