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. 课程包含,周期,价格,通过学校创建课 ...
随机推荐
- C语言交换两个指针所指位置的数值
交换指针变量x和y所指向的存储位置处存放的值,不需要第三个位置来存储临时变量.这种方式并没有性能上的优势. void replace(int *x, int *y) { *y = *x ^ *y; * ...
- Matlab分布云图绘制(渐变彩色)
方法1. 函数:fill 举例说明:应力分布云图 x=[0 1 1 0 0]; %x坐标 y=[0 0 1 1 0]; %y坐标 stress=[1 2 3 4 1] %应力大小 fill(x,y,s ...
- [翻译] InfluxDB 存储机制解析
原文地址: https://medium.com/dataseries/analysis-of-the-storage-mechanism-in-influxdb-b84d686f3697 TODO
- Java的常用API
Object类 1.toString方法在我们直接使用输出语句输出对象的时候,其实通过该对象调用了其toString()方法. 2.equals方法方法摘要:类默认继承了Object类,所以可以使用O ...
- 在 docker 安装 jenkins (解决无法访问jenkins的错误)
前提:安装好docker. 拉取Jenkins镜像: python docker pull jenkins 遇到错误:Docker:TLS handshake timeout错误 原因:国外,网速慢, ...
- Introducing KSQL: Streaming SQL for Apache Kafka
Update: KSQL is now available as a component of the Confluent Platform. I’m really excited to announ ...
- .net core mvc启动顺序以及主要部件4-MVC
前面三章已经把MVC启动过程以及源代码做了讲解,本章开始正式MVC,mvc全称叫model view controller,也就是把表现层又细分三层,官网的图片描述: 默认创建了一个.net core ...
- EasyUI datagrid-export 将datagrid的数据导出至Excel-解决科学计数法
通过EasyUI datagrid-export.js 将datagrid的数据导出至Excel的时候,如果有类似身份证一样很长的数字,需要在后台返回数据的时候在数字前增加一个 “ ”,将数字转为字符 ...
- webpack等bundler是如何工作的-简化版本
webpack- why and how 首先不要被webpack做的复杂花哨的工作所迷惑,到底webpack是个啥?一句话,webpack是一个module bundler(模块打包器).多一句话, ...
- MySQL-长事务详解
前言: 『入门MySQL』系列文章已经完结,今后我的文章还是会以MySQL为主,主要记录下近期工作及学习遇到的场景或者自己的感悟想法,可能后续的文章不是那么连贯,但还是希望大家多多支持.言归正传,本 ...