博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python编辑选课系统
阅读量:5076 次
发布时间:2019-06-12

本文共 17870 字,大约阅读时间需要 59 分钟。

一.需求分析

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

  2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
  3. 课程包含,周期,价格,通过学校创建课程 
  4. 通过学校创建班级, 班级关联课程、讲师
  5. 创建学员时,选择学校,关联班级
  6. 创建讲师角色时要关联学校, 
  6. 提供两个角色接口
  6.1 学员视图, 可以注册, 交学费, 选择班级,
  6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩 
  6.3 管理视图,创建讲师, 创建班级,创建课程

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

二.程序设计原理图

三.代码实现

  工程的创建按照较为简便的格式来描述,大致目录结构如图:

选课系统/|-- bin|   |-- __init__.py ||-- db/ |   |--database/ |    |-- 北京电影学院.pickle |   |-- 上海戏剧学院.pickle |  |-- __init__.py |   |-- core/|   |-- __init__.py|   |-- db_handle.py |  |-- db_opt.py |  |-- main.py |   |-- school_class.py||-- conf/|   |-- __init_py.py|   |-- setting.py||-- __init__.py|-- requirements.txt|-- README   setting.py程序代码如下:
1 import os 2 import sys 3  4 BASE_DIR = os.path.abspath(r'..') 5  6 # print(os.environ) 7  8 DATA_BASE ={ 9     'engine' :'file_storage',10     'suffix':'pickle',11     'name': 'database',12     'path':'%s\db'%BASE_DIR13 }14 15 # print(DATA_BASE['path'])
View Code

  db_handle.py程序代码如下:

1 ''' 2     handle all the database interactions 3 ''' 4  5 def file_handle_db(conn_param): 6     ''' 7     parse the db file path 8     :param conn_param: the db connection params set in settings 9     :return: file path10     '''11     db_path = '%s'%conn_param['path']12     return db_path13 14 def mysql_db_handle(conn_parms):15     '''16     17     :param conn_parms: 18     :return: 19     '''20     pass21 22 def db_handle(conn_param):23     '''24     prase all db type 25     :param conn_param: db config26     :return: 27     '''28     if conn_param['engine'] == 'file_storage':29         return file_handle_db(conn_param)30     elif conn_param['engine'] == 'mysql':31         return mysql_db_handle(conn_param)32     else:33         pass
View Code

  db_opt.py程序代码如下:

1 import pickle 2 import json 3 import os 4  5 from 课后作业.选课系统.conf  import setting 6 from 课后作业.选课系统.core  import db_handle 7  8  9 def file_opt_read(account_file,conn_params):10     '''11     use pickle to load data12     :param account_file: file path13     :param conn_params: data_base config14     :return: file data15     '''16     with open(account_file, 'rb') as f:17         if conn_params['suffix'] == 'pickle':18             account_data = pickle.load(f)19         elif conn_params['suffix'] == 'json':20             account_data = json.load(f)21         else:22             return23     return account_data24 25 26 def file_opt_wtite(school_file,account_data,conn_params):27     '''28     use pickle to dump data29     :param school_file: file path30     :param account_data: jump data31     :param conn_params: data_base config32     :return: 33     '''34     with open(school_file, 'wb') as f:35         if conn_params['suffix'] == 'pickle':36             acc_data = pickle.dump(account_data, f)37         elif conn_params['suffix'] == 'json':38             acc_data = json.dump(account_data, f)39     return True40 41 42 def database_read(name):43     '''44     to read school data from database 45     :param name: file name46     :return: 47     '''48     db_path = db_handle.db_handle(setting.DATA_BASE)#获取路径49     account_file = "%s\%s\%s.%s" % (db_path,setting.DATA_BASE['name'],name,setting.DATA_BASE['suffix'])50     if os.path.isfile(account_file):51         return file_opt_read(account_file,setting.DATA_BASE)52     else:53         return False54 55 56 57 def database_write(account_data):58     '''59     after updated transaction or account data , dump it back to file db60     :param account_data:61     :return:62     '''63     db_path = db_handle.db_handle(setting.DATA_BASE)64     school_file = "%s/%s/%s.%s" %(db_path,setting.DATA_BASE['name'],account_data.name,setting.DATA_BASE['suffix'])65     return file_opt_wtite(school_file,account_data,setting.DATA_BASE)
View Code

  school_class.py程序代码如下:

1 from 课后作业.选课系统.core  import db_opt  2   3 class Course(object):  4     '''  5     create a course class  6     :param name:Course name price: Course price time :Course learning cycle  7     :return:  8     '''  9     def __init__(self,name,price,time): 10         self.name = name 11         self.price = price 12         self.time = time 13  14     def tell(self): 15         print(''' 16         --- Info of Course [%s] --- 17         Name = %s 18         Price = %s 19         Time = %s 20         '''%(self.name,self.name,self.price,self.time)) 21  22 class Class(object): 23     ''' 24     create a class class 创建一个班级类 25     :param name:class name ,course:a course class ,teacher:a teacher class  26     :return: 27     ''' 28     def __init__(self,name,course,teacher): 29         self.name = name 30         self.course = course 31         self.teacher = teacher 32         self.student = [] 33     def tell(self): 34         print(''' 35         --- Info of %s --- 36         Class :%s 37         Course :%s 38         Teacher :%s 39         '''%(self.name,self.name,self.course,self.teacher)) 40  41 class School(object): 42     ''' 43      create a school class 创建一个班级类 44      :param name:school name ,addr:school addr ,teachers[]:a list save in memory that info of teachers be hired 45      :param students[]:a list save in memory that info of students be enrolled 46      :param courses[]:a list save in memory that info of courses be created  47      :param classes[]:a list save in memory that info of classes be created  48      :return: 49      ''' 50     def __init__(self,name,addr): 51         self.name = name 52         self.addr = addr 53         self.teachers = [] 54         self.students = [] 55         self.courses = [] 56         self.classes = [] 57     def tell(self): 58         print(''' 59         --- Info of School :%s --- 60         Name : %s 61         Addr : %s 62         '''%(self.name,self.name,self.addr)) 63  64     def hire(self,teacher,salary): 65         teacher.school = self.name 66         teacher.salary =salary 67         self.teachers.append(teacher) 68         print("%s has hire %s to be a teacher"%(self.name,teacher.name)) 69  70     def enroll(self,student,student_class): 71         self.students.append(student) 72         student_class.student.append(student) 73         student.choose_school(self.name) 74         student.choose_class(student_class) 75         print("%s has enroll %s to be a student"%(self.name,student.name)) 76  77     def create_course(self,course_name,price,time):#创建课程类 78         self.courses.append(Course(course_name,price,time)) 79         print("%s has creat course[%s]"%(self.name,course_name)) 80  81     def create_class(self,Class_name,course,teacher): 82         info = Class(Class_name,course.name,teacher.name) 83         self.classes.append(info) 84         teacher.Class.append(info) 85  86 class SchoolMember(object): 87     ''' 88     it's a base class include of teacher and student 89     :param 90     :return 91     ''' 92     def __init__(self,name,age,sex): 93         self.name = name 94         self.age = age 95         self.sex = sex 96     def tell(self):#个人信息,子类来完善 97         pass 98  99 class Teacher(SchoolMember):100     '''101     it's a subclass class Inheritance by SchoolMember to create a Teacher object102     :param103     :return104     '''105     def __init__(self,name,age,sex,course,salary='null',school='null'):106         super(Teacher,self).__init__(name,age,sex)107         self.salary = salary108         self.course = course109         self.school = school110         self.Class =[]111 112     def tell(self):113         print('''114         --- Info of %s ---115         Name = %s116         Age = %s117         Sex = %s118         Salary = %s119         Course = %s120         Shool = %s121         '''%(self.name,self.name,self.age,self.sex,self.salary,self.course,self.school))122 123 class Student(SchoolMember):124     '''125     it's a subclass class Inheritance by SchoolMember to create a Student object126     :param127     :return128     '''129     def __init__(self, name, age, sex,school='null',grade='null',Class='null',tuition = False):130         super(Student, self).__init__(name, age, sex)131         self.__school = school132         self.grade = grade133         self.__Class = Class134         self.__tuition = tuition135 136     def choose_school(self,name):137         self.__school = name138 139     def choose_grade(self,grade):140         self.grade = grade141         print("%s grade change success !!!"%self.name)142 143     def choose_class(self,Class):144         self.__Class = Class.name145         print("%s choose class success !!!"%self.name)146 147     def tuition(self):148         self.__tuition = True149         print("%s tuituin success !!!"%self.name)150 151     def tell(self):152         print('''153         --- Info of %s ---154         Name = %s155         Age = %s156         Sex = %s157         School = %s158         Class = %s159         Grade = %s160         tuition = %s161         '''%(self.name,self.name,self.age,self.sex,self.__school,self.__Class,self.__grade,self.__tuition))
View Code

  main.py程序代码如下:

1 from 课后作业.选课系统.core  import db_opt  2 from 课后作业.选课系统.core  import school_class  3   4   5 def creat_school():  6     '''  7     create a school class  8     :return:   9     ''' 10     name = input('please input the school name:').strip() 11     addr = input('Plsase input the school addr:').strip() 12  13     School = school_class.School(name,addr) 14     if(db_opt.database_write(School)): 15         print("\033[31;1mSchool [%s] has be created!\033[0m"%School.name) 16         return School 17     else: 18         return False 19  20 def read_school_info(school): 21     ''' 22     load school information from data base  23     :param school: school name 24     :return: school data 25     ''' 26     return  db_opt.database_read(school) 27 def write_school_info(school): 28     ''' 29     dump school information from data base  30     :param school: school name 31     :return: school data 32     ''' 33     return db_opt.database_write(school) 34  35 ''' 36 student interface  37 ''' 38 def student_enroll(school): 39     ''' 40     to handle the student enroll  41     :param school: a school class  42     :return:  43     ''' 44     name = input("please input the student name : ") 45     age = input("please input the student age : ") 46     sex = input("please input the student sex : ") 47     print("---------info of class----------") 48     for i,info in enumerate(school.classes): 49         print('%s.  %s %s %s  '%(i+1,info.name,info.course,info.teacher)) 50     student_num = int(input((">>:")).strip()) - 1 51  52     student= school_class.Student(name,age,sex)#creat a student class 53     school.enroll(student,school.classes[student_num])#enroll a student 54     write_school_info(school) 55 def student_pay(school): 56     ''' 57     to handle the student tuition 58     :param school: a school class  59     :return:  60     ''' 61     name = input("please input student name : ") 62     for info in school.students: 63         if info.name == name: 64             info.tuition() 65             write_school_info(school) 66 def student_choose_class(school): 67     pass 68 def studnt_view(school): 69     ''' 70     student interface 71     :param school: a school class 72     :return:  73     ''' 74     menu = u''' 75     ------- Bank --------- 76     \033[32;1m 77     1.  注册 78     2.  缴费 79     3.  选择班级 80     4.  退出 81     \033[0m''' 82     menu_dic = { 83         '1': student_enroll, 84         '2': student_pay, 85         '3': student_choose_class, 86     } 87     exit_flag = False 88     while not exit_flag: 89         print(menu) 90         user_option = input(">>:").strip() 91         if user_option in menu_dic: 92             menu_dic[user_option](school) 93         else: 94             print("\033[31;1mOption does not exist!\033[0m") 95  96 ''' 97 teacher interface  98 ''' 99 def teacher_teach(school):100     '''101     handle the interaction of teacher choose class to teach102     :param school: a school class 103     :return: 104     '''105     name = input("please input your name : ").strip()106     print("------class info------")107     for info in school.teachers:108         if info.name == name :109             for i,index in enumerate(info.Class):110                 print("%s.  %s "%(i+1,index.name))111 112     user_option = int(input(">>:").strip())-1113     print("%s has teach course[%s] in class[%s]"%(school.teachers[user_option].name,school.teachers[user_option].course,school.teachers[user_option].Class[user_option].name))114 def teacher_student_view(school):115     '''116     a interface for teacher to view student117     :param school: a school class 118     :return: 119     '''120     print("-----------info of classes----------")121     for i,info in enumerate(school.classes):122         print("%s.  %s"%(i+1,info.name))123     user_option = int(input(">>:").strip())-1124     for info in school.classes[user_option].student:125         print(info.name)126 def teacher_change_grade(school):127     '''128     a interface for teacher to change student grade 129     :param school: a school class130     :return: 131     '''132     print("-----------info of classes----------")133     for i,info in enumerate(school.classes):134         print("%s.  %s"%(i+1,info.name))135     user_option = int(input(">>:").strip())-1136     for i,info in enumerate(school.classes[user_option].student):137         print("%s. %s  %s "%(i+1,info.name,info.grade))138     stu_option = int(input(">>:").strip()) - 1139     grade= int(input("pelase input the Student %s new grade : "%(school.classes[user_option].student[stu_option].name)).strip())140     school.classes[user_option].student[stu_option].choose_grade(grade)141     write_school_info(school)142 def teacher_view(school):143     '''144     teacher interface145     :param school: a school class146     :return: 147     '''148     menu = u'''149     ------- Bank ---------150     \033[32;1m151     1.  上课152     2.  查看成员153     3.  修改成绩154     4.  退出155     \033[0m'''156     menu_dic = {157         '1': teacher_teach,158         '2': teacher_student_view,159         '3': teacher_change_grade,160     }161     exit_flag = False162     while not exit_flag:163         print(menu)164         user_option = input(">>:").strip()165         if user_option in menu_dic:166             menu_dic[user_option](school)167         else:168             print("\033[31;1mOption does not exist!\033[0m")169 170 171 172 173 '''174 manage interface 175 '''176 def hire_teacher(school):177     '''178     to hire a teacher by school  179     :param school: a school class180     :return: true181     '''182     name = input("please input the teacher name : ")183     age = input("please input the teacher age : ")184     sex = input("plesse input the teacher sex : ")185     course = input("please input the teach course : ")186     salary = input("please input the teacher salary : ")187     teacher = school_class.Teacher(name,age,sex,course)188     school.hire(teacher,salary)189     write_school_info(school)190     return True191 def create_class(school):192     '''193     to create a class(班级) by school194     :param school: a school class195     :return: true 196     '''197     classname = input("please input the class name : ")198     print("----------info of course-----------")199     for i,info in enumerate(school.courses):200         print("%s.  %s"%(i+1,info.name))201     course_num = int(input((">>:")).strip())-1202     print("----------info of teacher----------")203     for i,info in enumerate(school.teachers):204         print("%s.  teacher name:%s course:%s"%(i+1,info.name,info.course))205     teacher_num = int(input((">>:")).strip())-1206 207     school.create_class(classname,school.courses[course_num],school.teachers[teacher_num])208     write_school_info(school)209 def create_course(school):210     '''211     to create a course by school212     :param school: a school class213     :return: true214     '''215     name = input("please input the course name : ").strip()216     price = input("please input the course price : ").strip()217     time = input("please input the course time : ").strip()218     school.create_course(name,price,time)219     write_school_info(school)220 def manage_view(school):221     '''222     manage interface 223     :param school: 224     :return: 225     '''226     menu = u'''227     ------- Bank ---------228     \033[32;1m229     1.  创建讲师230     2.  创建班级231     3.  创建课程232     4.  退出233     \033[0m'''234     menu_dic = {235         '1': hire_teacher,236         '2': create_class,237         '3': create_course,238     }239     exit_flag = False240     while not exit_flag:241         print(menu)242         user_option = input(">>:").strip()243         if user_option in menu_dic:244             menu_dic[user_option](school)245         else:246             print("\033[31;1mOption does not exist!\033[0m")247 248 249 def main():250     '''251     interact with user252     :return:253     '''254 255     choose = input("please input your school: \n1.北京电影学院\n2.上海戏剧学院\n>> :")256 257     if choose == '1':258         school = read_school_info("北京电影学院")259     elif choose == '2':260         school = read_school_info("上海戏剧学院")261 262     menu = u'''263     ------- Bank ---------264     \033[32;1m265     1.  学员视图266     2.  讲师视图267     3.  管理视图268     4.  退出269     \033[0m'''270     menu_dic = {271         '1': studnt_view,272         '2': teacher_view,273         '3': manage_view,274     }275     exit_flag = False276     while not exit_flag:277         print(menu)278         user_option = input(">>:").strip()279         if user_option in menu_dic:280             menu_dic[user_option](school)281         else:282             print("\033[31;1mOption does not exist!\033[0m")283 284 285 286 main()
View Code

 

 

转载于:https://www.cnblogs.com/wangxingwei/p/9718286.html

你可能感兴趣的文章
设置虚拟机虚拟机中fedora上网配置-bridge连接方式(图解)
查看>>
ES6内置方法find 和 filter的区别在哪
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
java学习笔记之String类
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
蓝桥杯-分小组-java
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>
docker固定IP地址重启不变
查看>>
桌面图标修复||桌面图标不正常
查看>>
JavaScript基础(四)关于对象及JSON
查看>>
JAVA面试常见问题之Redis篇
查看>>
jdk1.8 api 下载
查看>>
getElement的几中属性介绍
查看>>
HTML列表,表格与媒体元素
查看>>
雨林木风 GHOST_XP SP3 快速装机版YN12.08
查看>>
数据结构3——浅谈zkw线段树
查看>>
Introduction to my galaxy engine 2: Depth of field
查看>>
设计器 和后台代码的转换 快捷键
查看>>