python--面向对象编程之学生选课系统练习
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--面向对象编程之学生选课系统练习的更多相关文章
- python开发项目:学生选课系统
程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...
- python基础-10 程序目录结构 学生选课系统面向对象练习
一 程序目录结构 1 bin文件夹 二进制文件.代码程序 2 conf 配置文件 3 帮助文档 4 头文件库文件等 二 学生选课系统部分代码 未完待续 1 包内的__init__.py文件 在包 ...
- 学生选课系统 c语言
/********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加 ...
- JAVA | 学生选课系统
这里使用JAVA语言编写的简易的学生选课系统,展现的都是这个系统核心代码. 其中有不足欢迎批评和指正! 链接数据库的代码 package connection;//连接数据库student impor ...
- 学生选课系统v1.0
最近两天写了下老师课上留的作业:学生选课系统.感觉自己写的特别麻烦,思路特别不清晰,平常自己总会偷懒,一些太麻烦细节的功能就不去实现了,用简单的功能来替代,直到自己这回写完这个系统(但自己写的比较lo ...
- java web知识点复习,重新编写学生选课系统的先关操作。
为了复习之前学习的相关的html,javaweb等知识.自己有重新编写了一遍学生选课系统. 下面主要展示登录界面的代码,以及各个大的主页面的相关jsp. <%@ page language=&q ...
- python实现学生选课系统 面向对象的应用:
一.要求: 选课系统 管理员: 创建老师:姓名.性别.年龄.资产 创建课程:课程名称.上课时间.课时费.关联老师 使用pickle保存在文件 学生: 学生:用户名.密码.性别.年龄.选课列表[].上课 ...
- Python开发程序:选课系统-改良版
程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- Python开发程序:选课系统
本节作业: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...
- python 面向对象 class 老男孩选课系统
要求:1. 创建北京.上海 2 所学校 class2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. 课程包含,周期,价格,通过学校创建课 ...
随机推荐
- Mysql 命令 load data infile 权限问题
[1]Mysql命令load data infile 执行权限问题 工作中,经常会遇到往线上环境mysql数据库批量导入源数据的场景. 针对这个场景问题,mysql有一个很高效的命令:load dat ...
- 在C++中调用FFTW
FFTW是一个可以进行可变长度一维或多维DFT的开源C程序库,是目前最快的FFT算法实现. 本文简述了在Windows平台上,如何在C++中调用FFTW,所使用的IDE为Visual Studio 2 ...
- vue nexttick的理解和使用场景
应用场景 需要在视图更新之后,基于新的视图进行操作 文档说明 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM nextTick原理 1.异步说明 V ...
- 「雅礼集训 2018 Day5」Convex 凸包、莫队
LOJ 看到离线区间操作仍然考虑莫队,然后可以发现:我们对于原来的凸包集合按照极角序维护一个链表,那么删除一个位置可以\(O(1)\),撤回删除操作也可以\(O(1)\)(因为原来的链表结构中当前节点 ...
- 【题解】分离与合体 [Loj10151]
[题解]分离与合体 [Loj10151] 传送门:分离与合体 \([Loj10151]\) [题目描述] 给定一个长度为 \(n\) 的序列,如果从某个点 \(k\) 处将区间 \([l,r]\) 断 ...
- docker镜像上传阿里云仓库
推送至阿里云镜像:1.首先在阿里云上选择容器镜像服务,创建命名空间以及镜像仓库2. docker login --username=zhangshitongsky@163.com registry.c ...
- 2、Vue构造器和扩展
1.VUE构造器简介 VUE构造器是一个非常重要的语法. 每个Vue.js应用都是通过构造函数Vue创建一个根实例. New了Vue对象,然后调用了这个vue对象的构造器,并向构造器传入了数据. 在实 ...
- 《C++ Primer》学习总结;兼论如何使用'书'这种帮助性资料
6.25~ 6.27,用了3天翻了一遍<C++ Primer>. ▶书的 固有坏处 一句话: 代码比 文字描述 好看多了.————> 直接看习题部分/ 看demo就行了 看文字在描述 ...
- Schnorr签名介绍
Schnorr签名介绍 来源 https://panzhibiao.com/2019/02/28/schnorr-sigature/ https://github.com/bitcoin/bitcoi ...
- 事件绑定+call apply指向
JS高级 事件—— 浏览器客户端上客户触发的行为都称为事件 所有事件都是天生自带的,不需要我们去绑定,只需要我们去触发,通过obj.事件名=function(){ } 事件名:onmousemove: ...