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. Scala Types 1

    在 Scala 中所有值都有一种对应的类型 单例类型 形式:value.type,返回类型 value / null 场景1:链式API调用时的类型指定 class Super { def m1(t: ...

  2. ndk-build官方使用说明

    ndk-build 脚本可用于编译采用 NDK 基于 Make 的编译系统的项目.此外,我们还针对 ndk-build 使用的 Android.mk和 Application.mk 配置提供了更具体的 ...

  3. Django ORM 数据库增删改查

    Django ORM 数据库增删改查 增 # 创建.增加数据(推荐) models.UserInfo.objects.create(username=') # 创建.增加数据 dic = {'} mo ...

  4. [CF254C]Anagram(2019-11-15考试)

    题目大意 给你两个长度相同的字符串\(A,B\),要求改变字符串\(A\)中最少的字符,使得字符串\(A\)在排序后和字符串\(B\)相同.输出改变后的字符串\(A\),若多解,输出字典序最小的.\( ...

  5. Java学习: 面向对象的使用与注意事项

    面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...

  6. Linux学习笔记之Linux系统的swap分区

    0x00 什么是swap分区 Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空 ...

  7. c# 基本类型存储方式的研究

    基本单位 二进制,当前的计算机系统使用的基本上是二进制系统.二进制的单位是位,每一位可以表示2个数: 0或1.byte(字节) 有8位,可以表示的数为2的8次方,即256个数,范围为[0-255]. ...

  8. SQL server中常用sql语句

    --循环执行插入10000条数据 declare @ID intbeginset @ID=1 while @ID<=10000begininsert into table_name values ...

  9. C#基础语法,快速上収C#

    C#代码基础语法 对新手的帮助很大,可以尝试多看看然后在敲敲 // 单行注释以 // 开始 /* 多行注释是这样的 */ /// <summary> /// XML文档注释 /// < ...

  10. 完全图解 HTTPS

    安全基础 我们先来看下数据在互联网上数据传递可能会出现的三个比较有代表性的问题,其实后面提到的所有方法,都是围绕解决这三个问题而提出来的. 窃听 伪造 否认 对称密钥加密 假设 A 正在通过互联网向  ...