python--面向对象编程之学生选课系统练习

时间:2024-05-01 11:33:10

1、系统目录结构

python--面向对象编程之学生选课系统练习

文件夹注解:

bin--系统管理员和学生的主程序代码

config--系统的配置文件

db--系统的数据文件

  admin--管理员的数据文件

  student--学生的数据文件

lib--系统的公共类文件

1、admin.py

  主要用于管理员注册、登录系统、创建授课老师、创建课程等操作。

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
管理员可操作的方法
"""
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import pickle
import os
from lib import models
from config import settings
from lib.models import Course
from lib.models import Teacher
from lib.models import Admin def create_teacher(admin_obj):
"""
管理员创建老师
:param admin_obj:
:return:
"""
teacher_list = []
while True:
teacher_name = input("请输入老师的姓名:(q退出)")
if teacher_name == "q":
break
teacher_age = input("请输入老师的年龄:")
obj = models.Teacher(teacher_name, teacher_age, admin_obj)
teacher_list.append(obj)
if os.path.exists("teacher_list"): #判断老师列表是否存在
exists_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
teacher_list.extend(exists_list)
pickle.dump(teacher_list, open(settings.TEACHER_DB_DIR, 'wb')) def create_course(admin_obj):
"""
管理员创建课程
:param admin_obj:
:return:
"""
teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
for num, item in enumerate(teacher_list, 1):
print(num, item.name, item.age, item.create_time, item.create_admin.username)
course_list = []
while True:
name = input("请输入课程名(q退出):")
if name == "q":
break
cost = input("请输入课时费:")
num = input('请选择老师(序号):')
obj = models.Course(name, cost, teacher_list[int(num) - 1], admin_obj)
course_list.append(obj)
if os.path.exists(settings.COURSE_DB_DIR): #判断课程列表是否存在
exists_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
course_list.extend(exists_list)
pickle.dump(course_list, open(settings.COURSE_DB_DIR, 'wb')) def look_course():
"""
管理员查看课程表
:return:
"""
course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
for num, item in enumerate(course_list, 1):
print(num, item.course_name, item.cost, item.teacher.name, item.create_time, item.create_admin.username) def to_login(user, pwd):
"""
管理员登录的方法
:param user:
:param pwd:
:return:
"""
if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, user)):
# 从文件中将管理员对象读取出来(里面封装了用户信息以及提供了登录访求)
admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR, user), 'rb'))
if admin_obj.login(user, pwd):
print('登录成功!')
while True:
sel = input("1、创建老师;2、创建课程; 3、查看课程表(q退出程序) \n >>>>")
if sel == '': #创建老师
create_teacher(admin_obj)
elif sel == '': #创建课程
create_course(admin_obj)
elif sel == '':
look_course()
else:
break
else:
return 1
else:
return 0 def to_register(user, pwd):
"""
管理员注册的方法
:param user:
:param pwd:
:return:
"""
admin_obj = models.Admin()
admin_obj.register(user, pwd) def main():
inp = input("1、管理员登录; 2、管理员注册;\n >>>>>")
user = input('请输入用户名:')
pwd = input('请输入密码:')
if inp == '':
ret = to_login(user, pwd)
if ret == 1:
print("密码错误!")
elif ret == 0:
print("用户不存在!") elif inp == '':
to_register(user, pwd) if __name__ == "__main__":
main()

admin.py

2、students.py

  主要是学生注册、登录系统,选课等操作。

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
学生可操作的方法
"""
import os
import sys
import pickle
sys.path.append(os.path.dirname(os.path.dirname(__file__))) from lib.models import Course
from lib.models import Admin
from lib.models import Teacher
from config import settings
from lib import models def to_select_course(student_obj):
"""
学生选课的方法
:param student_obj:
:return:
"""
course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
for num, item in enumerate(course_list, 1):
print(num, item.course_name, item.cost, item.teacher.name)
while True:
num = input("请选择课程(q退出):")
if num == 'q':
break
select_course_obj = course_list[int(num) - 1]
if select_course_obj not in student_obj.course_list:
student_obj.course_list.append(select_course_obj)
pickle.dump(student_obj, open(os.path.join(settings.BASE_STUDENTS_DIR, student_obj.username), 'wb')) def course_info(student_obj):
"""
查看学生已选择的课程
:return:
"""
for item in student_obj.course_list:
print(item.course_name, item.teacher.name) def to_register(user, pwd):
"""
学生注册
:param user:
:param pwd:
:return:
"""
obj = models.Student()
obj.register(user, pwd) def to_login(user, pwd):
"""
学生登录
:param user:
:param pwd:
:return:
"""
if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, user)):
student_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR, user), 'rb'))
if student_obj.login(user, pwd):
inp = input('1、选课;2、上课;3、查看已选课程 \n >>>')
if inp == '':
to_select_course(student_obj)
elif inp == '':
course_info(student_obj)
elif inp == '':
pass
else:
print('密码错误')
else:
print("学生用户不存在") def main():
inp = input("1、学生登录;2、学生注册;\n >>>")
user = input("请输入学生用户名:")
pwd = input("请输入登录密码:")
if inp == '':
to_login(user, pwd)
elif inp == '':
to_register(user, pwd) if __name__ == "__main__":
main()

students.py

3、settings.py

  系统主要路径参数的设置文件

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import os
#定义路径变量
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")
BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")
TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")
COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")

settings.py

4、models.py

  系统公共类的代码实现

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
用于存储老师、管理员、学生类
""" import time
import pickle
from config import settings
import os #定义老师类
class Teacher:
"""
封装老师的相关信息
"""
def __init__(self, name, age, admin):
self.name = name
self.age = age
self.__assets = 0
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.create_admin = admin def gain(self, cost):
"""
增加资产
:param cost: 增加的数量
:return:
"""
self.__assets += cost def decrease(self, cost):
"""
减少资产
:param cost: 减少的数量
:return:
"""
self.__assets -= cost #定义课程类
class Course:
"""
课程相关信息
"""
def __init__(self, course_name, cost, teacher_obj, admin):
self.course_name = course_name
self.cost = cost
self.teacher = teacher_obj
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.create_admin = admin #定义管理员类
class Admin:
"""
封装管理员
"""
def __init__(self):
self.username = None
self.password = None def login(self, user, pwd):
"""
管理员登录
:param user:
:param pwd:
:return:
"""
if self.username == user and self.password == pwd:
return True
else:
return False def register(self, user, pwd):
"""
管理员注册
:param user:
:param pwd:
:return:
"""
self.username = user
self.password= pwd path = os.path.join(settings.BASE_ADMIN_DIR, self.username)
pickle.dump(self, open(path, 'xb')) #定义学生类
class Student:
"""
学生相关信息
"""
def __init__(self):
self.username = None
self.password = None self.course_list = []
self.study_dict = {} def select_course(self, course_obj):
"""
学生选课
:param course_obj:
:return:
"""
self.course_list.append(course_obj) def register(self, user, pwd):
"""
学生注册
:param user:
:param pwd:
:return:
"""
self.username = user
self.password = pwd
path = os.path.join(settings.BASE_STUDENTS_DIR, self.username)
pickle.dump(self, open(path, 'xb')) def login(self, user, pwd):
"""
学生登录
:param user:
:param pwd:
:return:
"""
if self.username == user and self.password == pwd:
return True
else:
return False def study(self, course_obj):
"""
学生上课
:param course_obj:
:return:
"""
class_result = course_obj.have_lesson()
if course_obj in self.study_dict.keys():
self.study_dict[course_obj].append(class_result)
else:
self.study_dict[course_obj] = [class_result,]

models.py