1、系统目录结构

文件夹注解:

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

python--面向对象编程之学生选课系统练习的更多相关文章

  1. python开发项目:学生选课系统

    程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...

  2. python基础-10 程序目录结构 学生选课系统面向对象练习

    一 程序目录结构 1 bin文件夹 二进制文件.代码程序  2 conf 配置文件  3 帮助文档  4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...

  3. 学生选课系统 c语言

    /********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加 ...

  4. JAVA | 学生选课系统

    这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student impor ...

  5. 学生选课系统v1.0

    最近两天写了下老师课上留的作业:学生选课系统.感觉自己写的特别麻烦,思路特别不清晰,平常自己总会偷懒,一些太麻烦细节的功能就不去实现了,用简单的功能来替代,直到自己这回写完这个系统(但自己写的比较lo ...

  6. java web知识点复习,重新编写学生选课系统的先关操作。

    为了复习之前学习的相关的html,javaweb等知识.自己有重新编写了一遍学生选课系统. 下面主要展示登录界面的代码,以及各个大的主页面的相关jsp. <%@ page language=&q ...

  7. python实现学生选课系统 面向对象的应用:

    一.要求: 选课系统 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 使用pickle保存在文件 学生: 学生:用户名.密码.性别.年龄.选课列表[].上课 ...

  8. Python开发程序:选课系统-改良版

    程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...

  9. Python开发程序:选课系统

    本节作业: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...

  10. python 面向对象 class 老男孩选课系统

    要求:1. 创建北京.上海 2 所学校 class2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含,周期,价格,通过学校创建课 ...

随机推荐

  1. c语言数据结构之线性表的顺序存储结构

    线性表,即线性存储结构,将具有“一对一”关系的数据“线性”地存储到物理空间中,这种存储结构就称为线性存储结构,简称线性表. 注意:使用线性表存储的数据,要求数据类型必须一致,线性表存储的数据,要么全不 ...

  2. HTML5 Canvas实战之刮奖效果【转】

    开源项目地址:https://github.com/artwl/Lottery 作者博客地址:http://www.cnblogs.com/jscode/p/3580878.html 谢谢浏览!

  3. standard_init_linux.go:178: exec user process caused "no such file or directory"

    golang docker build 制作完进项后运行报错 出现该问题的原因是编译的环境和运行的环境不同,可能有动态库的依赖 1.默认go使用静态链接,在docker的golang环境中默认是使用动 ...

  4. FusionInsight大数据开发---sorl应用开发

    sorl应用开发 要求: 了解Solr应用开发适用场景 熟悉Solr应用开发流程 熟悉并使用Solr常用API 理解Collection设计基本原则 应用开发实践 Solr简介 Solr是一个高性能, ...

  5. mysql 事务的实现原理

    开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究下事务 ...

  6. 我的第一个netcore2.2 api项目搭建(二)

    上一章快速使用SqlSugar搭建了netcore api项目,我的第一个netcore2.2 api项目搭建(一) 这一章实现目标二:api使用Swagger,实现api文档管理 效果图:第一张收缩 ...

  7. VS2019+EF6连接Mysql

    开发环境:Win10 + VS2019Mysql服务器版本:8.0.16 一.下载并安装插件(必备) MySQL-Connector-net-6.9.12  链接https://cdn.mysql.c ...

  8. 使用Nexus3搭建Maven私服+上传第三方jar包到本地maven仓库

    1.搭建Maven私服背景 公司还是按捺不住,要搭建一个自己的Maven本地仓库,可以让开发人员down架包,从内网还是快很多. 这样公司的maven本地仓库就是 开发人员自己电脑上的maven仓库 ...

  9. 老生常谈之js深拷贝与浅拷贝

    前言 经常会在一些网站或博客看到"深克隆","浅克隆"这两个名词,其实这个很好理解,今天我们就在这里分析一下js深拷贝和浅拷贝. 浅拷贝 我们先以一个例子来说明 ...

  10. Apache加固之目录、文件限制

    如果你用类似phpstudy集成平台的话,所有你想要修改的配置基本上在phpstudy上就可以直接设置操作.但如果你的服务器是通过一步步安装的(Apache+PHP+Mysql)的话,那么就要对各功能 ...