python小项目——选课系统

程序名称: python选课系统

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

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

框架

1、视图:三个视图,管理员视图、讲师视图、学员视图

2、角色分类:学校、课程、班级、讲师、学员

3、课程、班级、讲师、学员都要通过管理员进行创建

4、关联关系:教师关联班级,班级关联课程。创建讲师时,要有关联班级的信息,创建班级时,要关联对应课程

5、视图功能:管理视图:添加查看更新课程、班级、讲师、学员信息

讲师视图:查看自己的学员

学员视图:注册缴费

数据库:使用shelve模块,存储在database

 

项目目录架构

 

 

 

代码

bin中start.py 

 1 #!/usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 #Author:SiWen
 4 
 5 import os
 6 import sys
 7 import platform
 8 
 9 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
10 sys.path.insert(0,BASE_DIR)
11 #print(sys.path)
12 
13 from core import main
14 from config import settings
15 
16 if __name__ == '__main__':
17     obj = main.Main()
18     obj.run()
start
config下setting.py
 1 #!/usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 #Author:SiWen
 4 
 5 import os
 6 import sys
 7 import platform
 8 
 9 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
10 database_path = os.path.join(BASE_DIR,"database")
11 
12 school_db_file = os.path.join(database_path,"school")
settings.py
core中main主函数
  1 #!/usr/bin/env python
  2 #-*- coding:utf-8 -*-
  3 #Author:SiWen
  4 import os
  5 import sys
  6 import shelve
  7 from config import settings
  8 from modules.school import School
  9 
 10 
 11 class Main(object):
 12     def __init__(self):
 13         pass
 14 
 15     def run(self):
 16         while True:
 17             print('''_______欢迎进入选课系统_______
 18                             1.学生视图
 19                             2.讲师视图
 20                             3.学校视图
 21                             q.返回主界面''')
 22             user_choice = input('请输入您的选择:')
 23             if user_choice == '1':
 24                 Manage_student()
 25             if user_choice == '2':
 26                 Manage_teacher()
 27             if user_choice == '3':
 28                 Manage_school()
 29             if user_choice == 'q':
 30                 print('您已退出系统,返回主界面')
 31                 break
 32             else:
 33                 print('请输入正确选项')
 34 
 35 
 36 class Manage_school(object):
 37     # 学校视图
 38     def __init__(self):
 39         if os.path.exists(settings.school_db_file + '.dat'):
 40             self.school_db = shelve.open(settings.school_db_file)  # 打开数据库
 41             self.run_manage()
 42             self.school_db.close()  # 关闭数据库
 43 
 44         else:
 45             print('初始化数据库')
 46             self.initialize_school()
 47             self.run_manage()
 48             self.school_db.close()
 49 
 50     def initialize_school(self):
 51         self.school_db = shelve.open(settings.school_db_file)
 52         self.school_db['北京'] = School('中国*北京', '北京')
 53         self.school_db['上海'] = School('中国*上海', '上海')
 54 
 55     def run_manage(self):
 56         while True:
 57             for key in self.school_db:
 58                 print('学校名称:', key)
 59             school_choice = input('请选择学校名称:').strip()
 60             self.school_choice = school_choice
 61             if school_choice in self.school_db:
 62                 self.school_obj = self.school_db[school_choice]
 63 
 64                 while True:
 65                     print("\n欢迎来到老男孩%s校区\n"
 66                           "添加课程 add_course\n"
 67                           "增加班级 add_class\n"
 68                           "招聘讲师 add_teacher\n"
 69                           "查看课程 check_course\n"
 70                           "查看班级 check_class\n"
 71                           "查看讲师 check_teacher\n"
 72                           "退出程序 exit" % self.school_obj.school_name)
 73                     user_func = input('请输入要进行的操作:').strip()
 74                     if hasattr(self, user_func):
 75                         getattr(self, user_func)()
 76             else:
 77                 print('Please input right school name')
 78 
 79     def add_course(self):
 80         course_name = input('请输入课程名称').strip()
 81         course_price = input('请输入课程价格').strip()
 82         course_time = input('请输入课程3'
 83                             '周期').strip()
 84         if course_name in self.school_obj.school_course:
 85             print('课程已存在')
 86             self.school_obj.create_course(course_name, course_price, course_time)
 87             print("课程更新完成")
 88         else:
 89             self.school_obj.create_course(course_name, course_price, course_time)
 90             print("课程添加成功")
 91 
 92         self.school_db.update({self.school_choice: self.school_obj})
 93 
 94     def add_teacher(self):
 95         teacher_name = input('请输入讲师名字').strip()
 96         teacher_salary = input('请输入讲师工资').strip()
 97         teacher_class = input('请输入讲师的班级').strip()
 98         if teacher_class in self.school_obj.school_class:
 99             class_obj = self.school_obj.school_class[teacher_class]
100             if teacher_name not in self.school_obj.school_teacher:
101                 self.school_obj.create_teacher(teacher_name, teacher_salary, teacher_class.class_obj)
102                 print('新讲师聘用成功')
103             else:
104                 self.school_obj.update_teacher(teacher_name, teacher_salary, teacher_class.class_obj)
105                 print('讲师信息更新成功')
106         else:
107             print('关联课程不存在,请输入正确班级')
108         self.school_db.update({self.school_choice: self.school_obj})  # 更新数据库
109 
110     def add_class(self):
111         class_name = input('请输入班级名称').strip()
112         course_name = input('请输入开设课程').strip()
113         if class_name not in self.school_obj.school_class:
114             if course_name in self.school_obj.school_course:
115                 course_obj = self.school_obj.school_course[course_name]
116                 self.school_obj,creat_class(class_name,course_obj)
117                 self.school_db.update({self.school_choice: self.school_obj})  # 更新数据库
118                 print('课程添加成功')
119             else:
120                 print ('系统错误,课程不存在')
121         else:
122             print('系统错误,班级已存在')
123 
124     def check_course(self):
125         self.school_obj.show_course()
126 
127     def check_class(self):
128         self.school_obj.show_class()
129 
130     def check_teacher(self):
131         self.school_obj.show_teacher()
132 
133     def exit(self):
134         self.school_db.close()
135         sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m")
136 class Manage_teacher(object):
137     def __init__(self):
138         if os.path.exists(settings.school_db_file + ".dat"):  # shelve会生成三个文件,其中有.dat结尾
139             self.school_db = shelve.open(settings.school_db_file)  # 打开学校数据库文件
140             self.run_manage()  # 运行管理视图
141             self.school_db.close()  # 关闭数据库文件
142         else:
143             print("\033[31;1m数据库文件不存在,请先创建学校\033[0m")
144             exit()
145 
146     def run_manage(self):
147         print('欢迎进入讲师视图')
148         for key in self.school_db:
149             print("学校名称:", key)
150         choice_school = input("\33[34;0m输入选择学校名:\33[0m").strip()
151         self.school_choice = choice_school
152         if self.school_choice in self.school_db:
153             self.school_obj = self.school_db[choice_school]
154             teacher_name = input('请输入讲师姓名')
155             while True:
156                 if teacher_name in self.school_obj.school_teacher:
157                     print('''欢迎进入讲师视图
158                             查看班级 check_class
159                             退出     exit''')
160                     user_func = input('请选择所需操作')
161                     if hasattr(self,user_func):
162                         getattr(self,user_func)()
163 
164                 else:
165                     print('教师不存在')
166                     break
167 
168     def check_class(self, teacher_name):
169         self.school_obj.show_teacher_classinfo(teacher_name)
170 
171     def exit(self, *args):
172         self.school_db.close()
173         sys.exit("\033[32;1m欢迎下次使用学员管理系统\033[0m")
174 
175 class Manage_student(object):
176     def __init__(self):
177         if os.path.exists(settings.school_db_file + ".dat"):  # shelve会生成三个文件,其中有.dat结尾
178             self.school_db = shelve.open(settings.school_db_file)  # 打开学校数据库文件
179             self.run_manage()  # 运行管理视图
180             self.school_db.close()  # 关闭数据库文件
181         else:
182             print("\033[31;1m数据库文件不存在,请先创建学校\033[0m")
183             exit()
184 
185     def run_manage(self):
186         print('欢迎来到学员视图')
187         school_choice = input('请选择学校')
188         if school_choice in self.school_db:
189             self.school_choice = school_choice
190             self.school_obj = self.school_db[school_choice]
191             student_name = input('''\033[34;0m输入学生的姓名:\033[0m''').strip()
192             student_age = input('''\033[34;0m输入学生的年龄:\033[0m''').strip()
193             self.school_obj.show_class_course()
194             class_choice = input('''\033[34;0m输入上课的班级:\033[0m''').strip()
195             if class_choice in self.school_obj.school_class:
196                 self.school_obj.create_student(student_name, student_age, class_choice)
197                 self.school_db.update({self.choice_school: self.school_obj})  # 更新数据库数据
198                 print("\33[32;1m学生注册成功\33[0m")
199             else:
200                 print("\33[31;1m系统错误:输入的班级不存在\33[0m")
201         else:
202             print("\33[31;1m系统错误:输入的学校不存在\33[0m")
main.py
modules中school.py
 1 #!/usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 #Author:SiWen
 4 
 5 from modules.course import Course
 6 from modules.classs import Class
 7 from modules.teacher import Teacher
 8 from modules.student import Student
 9 
10 class School(object):
11     '''学校类,包含名称,地址,课程,班级,教师'''
12     def __init__(self,school_name,school_addr):
13         self.school_name = school_name
14         self.school_addr = school_addr
15         self.school_course = {}             #学校所有的课程实例
16         self.school_class = {}
17         self.school_teacher = {}
18         #self.school_student = {}
19 
20     def create_course(self,course_name,course_price,course_time):
21         '''创建课程'''
22         course_obj = Course(course_name,course_price,course_time)
23         self.school_course[course_name] = course_obj
24 
25     def show_course(self):
26         '''查看课程信息'''
27         for key in self.school_course:
28             course_obj = self.school_course[key]
29             print("\33[32;1m课程:%s\t价格:%s\t周期:%s月\33[0m"%(course_obj.course_name,course_obj.course_price,
30                                          course_obj.course_time,))
31 
32     def create_class(self,class_name,courese_obj):
33         '''创建班级'''
34         class_obj = Class(class_name,courese_obj)
35         self.school_class[class_name] = class_obj
36 
37     def show_class(self):
38         for key in self.school_class:
39             class_obj = self.school_class[key]
40             print("\33[32;1m班级:%s\t关联课程:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name))
41 
42     def show_class_course(self):
43         for key in self.school_class:
44             class_obj = self.school_class[key]
45             course_obj = class_obj.class_courese
46             print("\33[32;1m班级:%s\t关联课程:%s\t价格:%s\t周期:%s月\33[0m" % (class_obj.class_name, course_obj.course_name,
47                                                                     course_obj.course_price,course_obj.course_time))
48 
49     def create_teacher(self,teacher_name, teacher_salary,class_name,class_obj):
50         '''创建讲师'''
51         teacher_obj = Teacher(teacher_name, teacher_salary)
52         teacher_obj.teacher_add_class(class_name,class_obj)
53         self.school_teacher[teacher_name] = teacher_obj
54 
55     def update_teacher(self,teacher_name,class_name,class_obj):
56         '''更新教师信息'''
57         teacher_obj = self.school_teacher[teacher_name]
58         teacher_obj.teacher_add_class(class_name,class_obj)
59 
60     def show_teacher(self):
61         '''查看讲师信息'''
62         for key in self.school_teacher:
63             teacher_obj = self.school_teacher[key]
64             class_list = []
65             for i in teacher_obj.teacher_calss:
66                 class_list.append(i)
67             print("\33[32;1m讲师:%s\t薪资:%s\t关联班级:%s\33[0m" % (teacher_obj.teacher_name, teacher_obj.teacher_salary,
68                                                           class_list ))
69     def create_student(self,student_name,student_age,class_choice):
70         '''注册学生'''
71         student_obj = Student(student_name,student_age)     #生成学生实例
72         class_obj = self.school_class[class_choice]         #获取学生所注册班级的实例对象
73         class_obj.class_student[student_name]=student_obj   #班级实例里添加学生信息
74         self.school_class[class_choice] = class_obj         #学校班级字典更新
75 
76     def show_teacher_classinfo(self,teacher_name):
77         teacher_obj = self.school_teacher[teacher_name]
78         for i in teacher_obj.teacher_calss:
79             class_obj = self.school_class[i]
80             student_list = []
81             for k in class_obj.class_student:
82                 student_list.append(k)
83             print("\33[32;1m班级:%s\t关联课程:%s\t学员:%s\33[0m" % (class_obj.class_name, class_obj.class_courese.course_name,
84                                                             student_list))
school.py
modules中classs.py
 1 #!/usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 #Author:SiWen
 4 
 5 class Class(object):
 6     '''班级类,包含名称,课程,学生'''
 7     def __init__(self,class_name,course_obj):
 8         self.class_name = class_name
 9         self.class_courese = course_obj
10         self.class_student = {}         #学生字典
classs.py
modules中course.py
 1 #!/usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 #Author:SiWen
 4 
 5 class Course():
 6     '''定义课程类,包含名称,价格,周期'''
 7     def __init__(self,course_name,course_price,course_time):
 8         self.course_name = course_name
 9         self.course_price = course_price
10         self.course_time = course_time
course.py

 

modules中teacher.py

 1 #!/usr/bin/env python
 2 #-*- coding:utf-8 -*-
 3 #Author:SiWen
 4 
 5 class Teacher(object):
 6     '''讲师类,定义teacher_name,teacher_salary,包含teacher_class'''
 7     def __init__(self, teacher_name, teacher_salary):
 8         self.teacher_name = teacher_name
 9         self.teacher_salary = teacher_salary
10         self.teacher_calss = []                 #班级列表 [s14,15]
11 
12     def teacher_add_class(self,class_name,class_obj):
13         self.teacher_calss[class_name] = class_obj
teacher.py

modules中student.py

1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 #Author:SiWen
4 
5 class Student(object):
6     '''学生类,包含姓名,年龄'''
7     def __init__(self,student_name,student_age):
8         self.student_name = student_name
9         self.student_age = student_age
student.py

 

posted @ 2018-03-28 16:20  Siwen  阅读(1276)  评论(1)    收藏  举报