zoukankan      html  css  js  c++  java
  • 作业:选课系统

    本章作业

    题目:选课系统开发,要求有四种角色:学校、学员、课程、讲师

    详细要求:

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

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

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

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

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

    6. 创建讲师角色时要关联学校

    7. 提供两个角色接口

    8. 为学员、讲师、管理员分别提供用户界面,并提供对应功能: 1 学员视图, 可以注册, 交学费, 选择班级, 2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 3 管理视图,创建讲师, 创建班级,创建课程

    注1:上面的操作产生的数据都通过pickle序列化保存到文件里 

    C:.
    │ main_server.py
    │ RAMDE
    │ tree.txt
    │ __init__.py
    │ 选课系统.pdf

    ├─conf
    │ │ setting.py --->配置文件
    │ │ __init__.py
    │ │
    │ └─__pycache__
    │ setting.cpython-36.pyc
    │ __init__.cpython-36.pyc

    ├─core
    │ │ admin.py --> 管理员类
    │ │ db_handler.py ---> 文件读、存操作
    │ │ main.py --> 入口
    │ │ school.py --> 学校类
    │ │ Student.py --》 学生类
    │ │ Teachar.py --》 讲师类
    │ │ __init__.py
    │ │
    │ └─__pycache__
    │ admin.cpython-36.pyc
    │ db_handler.cpython-36.pyc
    │ main.cpython-36.pyc
    │ school.cpython-36.pyc
    │ Student.cpython-36.pyc
    │ Teachar.cpython-36.pyc
    │ __init__.cpython-36.pyc

    ├─db
    │ │ __init__.py
    │ │
    │ └─accounts --》 账号文件
    │ │ class_info ---》班级信息文件
    │ │ course_info---》课程文件
    │ │ school_info---》学校文件
    │ │ student---》学生文件
    │ │ teacher_info---》讲师文件
    │ │ userinfo---》用户登陆文件
    │ │ __init__.py
    │ │
    │ └─studentinfo --》 班级文件夹
    │ linuxs1
    │ pythons2

    main_server.py

    1 import os,sys
    2 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    3 sys.path.append(BASE_DIR)
    4 
    5 if __name__ == '__main__':
    6     from core import main
    7     main.entrance()
    View Code

     main.py

     1 import sys,os
     2 from conf.setting import userinfo
     3 from .school import Course
     4 from .admin import admin
     5 from .Teachar import Teacher
     6 from .Student import Student
     7 def login():
     8     user = input('请输入账号:').strip()
     9     pwd = input('请输入密码:').strip()
    10     with open(userinfo) as f:
    11         for line in f:
    12             username,passwd,role = line.strip().split('|')
    13             if username == user and passwd == pwd:
    14                 print('登陆成功')
    15                 return {'username':user,'role':role}
    16 
    17         else:
    18             print('登陆失败!')
    19 def entrance():
    20     print('欢迎登陆选课系统')
    21     ret = login()
    22     flag_exit = False
    23     if ret:
    24         role_class = getattr(sys.modules[__name__],ret['role'])
    25         obj = role_class(ret['username'])
    26         while not flag_exit:
    27             for i,j in enumerate(role_class.menu,1):
    28                 print(i,j[0])
    29             choice = input('请输入您的选择:').strip()
    30             if choice.isdigit():
    31                 choice = int(choice)
    32                 getattr(obj,role_class.menu[choice-1][1])()
    33             else:
    34                 print('输入错误请重新输入')
    View Code

    setting.py

     1 import  os,sys
     2 import logging
     3 
     4 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     5 
     6 userinfo = r"%sdbaccountsuserinfo"%BASE_DIR
     7 teacher_obj = r"%sdbaccounts	eacher_info"%BASE_DIR
     8 school_obj = r"%sdbaccountsschool_info"%BASE_DIR
     9 class_obj = r"%sdbaccountsclass_info"%BASE_DIR
    10 course_obj = r"%sdbaccountscourse_info"%BASE_DIR
    11 student_obj = r"%sdbaccountsstudent"%BASE_DIR
    12 studentinfo = r"%sdbaccountsstudentinfo"%BASE_DIR
    View Code

    admin.py

      1 from conf import setting
      2 import os,pickle
      3 from .db_handler import My_pickle
      4 from .Teachar import myTeacher
      5 from .school import Class
      6 from .Student import myStudent
      7 class admin:
      8     menu = [   ('创建讲师账号','creatTeacher'),
      9                 ('查看讲师信息','showTeacher'),
     10                 ('查看课程信息','showCourse'),
     11                ('查看班级信息','showClass'),
     12                ('查看学校','showSchool'),
     13                ('创建班级','creatClass'),
     14                ('创建学生账号','creatStudent'),
     15                ('指定班级老师','boundClass')
     16     ]
     17     def __init__(self,name,):
     18         self.name = name
     19         self.teacher_pickle_obj = My_pickle(setting.teacher_obj)
     20         self.course_pickle_obj = My_pickle(setting.course_obj)
     21         self.class_pickle_obj = My_pickle(setting.class_obj)
     22         self.school_pickle_obj = My_pickle(setting.school_obj)
     23 
     24 
     25     @staticmethod
     26     def user_info(obj):
     27         with open(setting.userinfo,'a') as f:
     28             f.write('
    %s'%obj)
     29 
     30 
     31 
     32     def creatTeacher(self):
     33         teacher_name = input('请输入姓名:').strip()
     34         teacher_pwd = input('请输入密码:').strip()
     35         self.showSchool()
     36         teacher_school = input('请输入讲师所在学校').strip()
     37         teacher_salary = input("请输入讲师工资:").strip()
     38         teacher_file = '%s|%s|Teacher'%(teacher_name,teacher_pwd)
     39         self.user_info(teacher_file)
     40         teacher = myTeacher(teacher_name,teacher_school,teacher_salary)
     41         self.teacher_pickle_obj.dump_pickle(teacher)
     42         print('创建成功')
     43 
     44     def creatStudent(self):
     45         student_name = input('请输入学生名字:').strip()
     46         student_pwd = input('请输入学生密码:').strip()
     47         student_age = input('请输入学生年龄:').strip()
     48         student_sex = input('请输入学生性别:').strip()
     49         self.showSchool()
     50         student_school = input('请输入学生所在的学校:').strip()
     51         self.showClass()
     52         student_class  = input('请输入学生所在的班级:').strip()
     53         class_g = self.class_pickle_obj.load_pickle()
     54         for clas in class_g:
     55             # print(clas.name)
     56             if clas.name == student_class:
     57                 content = '%s|%s|Student'%(student_name,student_pwd)
     58                 admin.user_info(content)
     59                 stu_obj = myStudent(student_name,student_school,student_age,student_sex)
     60                 My_pickle(setting.student_obj).dump_pickle(stu_obj)
     61                 print('创建成功!')
     62                 break
     63         else:
     64             print('输入的内容有误!')
     65 
     66     def boundClass(self):
     67         self.showClass()
     68         class_name = input('请输入为指定的班级:').strip()
     69         self.showTeacher()
     70         class_teacher = input('请输入为指定的老师:').strip()
     71         teach_g = self.teacher_pickle_obj.load_pickle()
     72         for teacher_obj in teach_g:
     73             # print(teacher_obj.__dict__)
     74             if teacher_obj.name == class_teacher:
     75                 teacher_obj.classes.append(class_name)
     76                 self.teacher_pickle_obj.edit_pickle(teacher_obj)
     77                 print('绑定成功')
     78                 return
     79 
     80     def creatClass(self):
     81         class_name = input('请输入班级的名称:').strip()
     82         self.showSchool()
     83         school_name = input('请输入学校的名字:').strip()
     84         self.showCourse()
     85         course = input('请输入学科的名称:').strip()
     86         student_path = os.path.join(setting.studentinfo,class_name)
     87         open(student_path,'w').close()
     88         class_obj = Class(school_name,class_name,course,student_path)
     89         self.class_pickle_obj.dump_pickle(class_obj)
     90         print('创建成功!')
     91 
     92     def show(self,pickle_obj):
     93 
     94         pickle_obj = getattr(self,pickle_obj)
     95         load_g = pickle_obj.load_pickle()
     96         for coures_obj in load_g:
     97             print(coures_obj.__dict__)
     98             for i in coures_obj.__dict__:
     99                 print(i, coures_obj.__dict__[i])
    100             print(''.center(50,'-'))
    101 
    102     def showTeacher(self):
    103         self.show('teacher_pickle_obj')
    104     def showCourse(self):
    105         self.show('course_pickle_obj')
    106     def showClass(self):
    107         self.show('class_pickle_obj')
    108     def showSchool(self):
    109         self.show('school_pickle_obj')
    View Code

    db_handler.py

     1 from conf import setting
     2 from .school import Course
     3 import pickle
     4 import os
     5 
     6 class My_pickle:
     7 
     8     def __init__(self,filename):
     9         self.filename = filename
    10 
    11     def dump_pickle(self,obj):
    12         with open(self.filename,'ab') as f:
    13             pickle.dump(obj,f)
    14 
    15     def load_pickle(self):
    16         with open(self.filename,'rb') as f:
    17             while True:
    18                 try:
    19                    obj = pickle.load(f)
    20                    yield obj
    21                 except:
    22                     break
    23 
    24 
    25     def edit_pickle(self,obj):
    26         # f2 = My_pickle(self.filename+'.bak')
    27         with open(self.filename,'rb') as f:
    28             with open(self.filename+'.new','wb') as f1:
    29                 item = pickle.load(f)
    30                 if item.name == obj.name:
    31                     pickle.dump(obj,f1)
    32                 else:
    33                     pickle.dump(item,f1)
    34 
    35         os.remove(self.filename)
    36         os.rename(self.filename+'.new',self.filename)
    View Code

    school.py 

     1 import os,sys
     2 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
     3 sys.path.append(BASE_DIR)
     4 class Class:
     5     def __init__(self,school,name,course,student_path):
     6         self.school = school
     7         self.name = name
     8         self.course = course
     9         self.student_path = student_path
    10 
    11 
    12 class Course:
    13     def __init__(self,name,period,price,school):
    14         self.name = name
    15         self.period = period
    16         self.price = price
    17         self.school = school
    18     def __repr__(self):
    19         return self.name
    20 
    21 class School:
    22     def __init__(self,name,course):
    23         self.name = name
    24         self.course = course
    25 
    26 
    27 
    28 # if __name__ == '__main__':
    29 
    30     # from core import school
    31     # from conf import setting
    32     # from core import db_handler
    33     # school_pickle = db_handler.My_pickle(setting.school_obj)
    34     # python = school.Course('python','6个月',19800,'上海校区')
    35     # liunx =  school.Course('liunx','7个月',20000,'上海校区')
    36     # go =  school.Course('go','4个月',6000,'北京校区')
    37     # bejing =  school.School('北京校区',[go])
    38     # shanghai =  school.School('上海校区',[python,liunx])
    39     # school_pickle.dump_pickle(bejing)
    40     # school_pickle.dump_pickle(shanghai)
    41 
    42 
    43     # import pickle
    44     # from core import school
    45     # from conf.setting import course_obj
    46     # from core.db_handler import My_pickle
    47     # coures_pickle1 = My_pickle(course_obj)
    48     # python = Course('python','6个月',19800,'上海校区')
    49     # liunx =  Course('liunx','7个月',20000,'上海校区')
    50     # go =  Course('go','4个月',6000,'北京校区')
    51     # coures_pickle1.dump_pickle(python)
    52     # coures_pickle1.dump_pickle(liunx)
    53     # coures_pickle1.dump_pickle(go)
    54     # with open(course_obj, 'rb') as f:
    55     #     data = coures_pickle1.load_pickle()
    56     #     print(data.__dict__)
    57     # #
    View Code

    Student.py 

     1 import os
     2 from .db_handler import My_pickle
     3 from conf import setting
     4 
     5 class myStudent:
     6     def __init__(self,name,school,age,sex):
     7         self.name = name
     8         self.school =school
     9         self.age = age
    10         self.sex = sex
    11         self.course = []
    12         self.classes = []
    13         self.performance = ''
    14 
    15 class Student:
    16     menu = [
    17         ('查看课程','showCourse'),
    18         ('注册账号','registeredAccount'),
    19         ('选择班级','creatClass'),
    20 
    21     ]
    22     def __init__(self,name):
    23         self.name = name
    24         self.teacher_pickle_obj = My_pickle(setting.teacher_obj)
    25         self.course_pickle_obj = My_pickle(setting.course_obj)
    26         self.class_pickle_obj = My_pickle(setting.class_obj)
    27         self.school_pickle_obj = My_pickle(setting.school_obj)
    28         self.student_pickle_obj = My_pickle(setting.student_obj)
    29 
    30     @staticmethod
    31     def user_info(obj):
    32         with open(setting.userinfo,'a') as f:
    33             f.write('
    %s'%obj)
    34 
    35     def show(self,pickle_obj):
    36         pickle_obj = getattr(self,pickle_obj)
    37         load_g = pickle_obj.load_pickle()
    38         # print(load_g.__dict__)
    39         for coures_obj in load_g:
    40             for i in coures_obj.__dict__:
    41                 print(i, coures_obj.__dict__[i])
    42             print(''.center(50,'-'))
    43 
    44     def creatClass(self):
    45         self.show('class_pickle_obj')
    46         choice_class = input('请输入选择的班级:').strip()
    47         student_clas = self.student_pickle_obj.load_pickle()
    48         for student_obj in student_clas:
    49             if student_obj.name == choice_class:
    50                 student_obj.classes.append(choice_class)
    51                 self.student_pickle_obj.edit_pickle(student_obj)
    52                 print('已成功加入班级!')
    53         else:
    54             print("输入的信息有误!")
    55 
    56     def registeredAccount(self):
    57         student_name = input('请输入名字:').strip()
    58         student_pwd = input('请输入密码:').strip()
    59         student_age = input('请输入年龄:').strip()
    60         student_sex = input('请输入性别:').strip()
    61         self.showSchool()
    62         student_school = input('请选择学校:').strip()
    63         self.showClass()
    64         student_class  = input('请选择班级:').strip()
    65         class_g = self.class_pickle_obj.load_pickle()
    66         for clas in class_g:
    67             # print(clas.name)
    68             if clas.name == student_class:
    69                 content = '%s|%s|Student'%(student_name,student_pwd)
    70                 Student.user_info(content)
    71                 stu_obj = myStudent(student_name,student_school,student_age,student_sex)
    72                 My_pickle(setting.student_obj).dump_pickle(stu_obj)
    73                 print('创建成功!')
    74 
    75     def showSchool(self):
    76         self.show('school_pickle_obj')
    77     def showClass(self):
    78         self.show('class_pickle_obj')
    79 
    80     def showCourse(self):
    81         self.show('course_pickle_obj')
    View Code

    Teachar.py

     1 import os
     2 from .db_handler import My_pickle
     3 from .school import Class
     4 from .Student import Student
     5 from conf import setting
     6 
     7 class myTeacher:
     8     def __init__(self,name,school,salary):
     9         self.name = name
    10         self.school = school
    11         self.salary = salary
    12         self.classes = []
    13         self.student = []
    14 
    15 
    16 class Teacher:
    17     menu =[
    18         ('查看班级','showclass'),
    19         ('选择班级','showStudent'),
    20         ('选择上课班级','creatClass'),
    21         ('查看班级学员信息','showStudent'),
    22         ('修改学员成绩','creatPerformance'),
    23     ]
    24     def __init__(self,name):
    25         self.name = name
    26         self.teacher_pickle_obj = My_pickle(setting.teacher_obj)
    27         self.course_pickle_obj = My_pickle(setting.course_obj)
    28         self.class_pickle_obj = My_pickle(setting.class_obj)
    29         self.school_pickle_obj = My_pickle(setting.school_obj)
    30         self.student_pickle_obj = My_pickle(setting.student_obj)
    31 
    32 
    33     def show(self,pickle_obj):
    34         pickle_obj = getattr(self,pickle_obj)
    35         load_g = pickle_obj.load_pickle()
    36         # print(load_g.__dict__)
    37         for coures_obj in load_g:
    38             for i in coures_obj.__dict__:
    39                 print(i, coures_obj.__dict__[i])
    40             print(''.center(50,'-'))
    41 
    42     def showclass(self):
    43         self.show('class_pickle_obj')
    44     def showStudent(self):
    45         self.show('student_pickle_obj')
    46     def creatClass(self):
    47         self.show('class_pickle_obj')
    48         choice = input('请选择要上课的班级:').strip()
    49         print('已选择%s班,请准时上课'%choice)
    50     def creatPerformance(self):
    51         self.show('student_pickle_obj')
    52         choice = input('请输入需修改成绩的名字:').strip()
    53         choice_p  = input('请输入修改成绩:').strip()
    54         student_g = self.student_pickle_obj.load_pickle()
    55         for student_obj in student_g:
    56             if student_obj.name == choice:
    57                 student_obj.performance = choice_p
    58                 self.student_pickle_obj.edit_pickle(student_obj)
    View Code
  • 相关阅读:
    第二次作业——评分!
    第一次点评!
    神经网络测试:利用分块patch输入的弊端
    利用分块进行网络输入测试
    python 用filter求解素数
    英语语法
    git clone 下载出现Time out
    路由转发
    获取用户密码
    后门维持
  • 原文地址:https://www.cnblogs.com/yjiu1990/p/9146523.html
Copyright © 2011-2022 走看看