python day 12

2019/10/18

学习资料来自老男孩教育

1. 通过类来创建选课系统

看完视频之后,自己折腾了一天才重新写出来,算是理解了。

1.1 类库models.py

import os, sys

sys.path.append(os.path.dirname(os.path.dirname(__file__)))
import pickle
import time
from config import settings
import random class Admin(object):
'''封装管理员的相关功能 ''' def __init__(self):
self.username = None
self.passwd = None
self.create_time = None def login(self, user, pwd):
if self.username == user and self.passwd == pwd:
return True
else:
return False def register(self, user, pwd):
'''管理员注册 :param user:
:param pwd:
:return:None
'''
self.username = user
self.passwd = pwd
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S') path = os.path.join(settings.BASE_ADMIN_DIR, user)
pickle.dump(self, open(path, 'wb')) class Teacher(object):
'''
封装老师相关信息
''' def __init__(self, name, sex, age, create_admin, asset=0):
self.name = name
if sex in ('male', 'female'):
self.sex = sex
self.age = age
self.asset = asset
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.create_admin = create_admin def lose_asset(self, account):
'''
减少老师资产
:param account:
:return:
'''
self.asset -= account
return self.asset def gain_asset(self, account):
'''
增加资产
:param account:
:return:
'''
self.asset += account
list2 = []
t_list = pickle.load(open(settings.TEACHER_DB_DIR,'rb'))
for t in t_list:
if t.name == self.name:
t = self
list2.append(t)
pickle.dump(list2,open(settings.TEACHER_DB_DIR,'wb'))
return self.asset class Course(object):
'''
封装课程的相关信息
''' def __init__(self, name, cost, teacher_obj, create_admin):
self.course_name = name
self.cost = cost
self.teacher = teacher_obj
self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
self.create_admin = create_admin def have_lesson(self):
'''
课程上课,自动给相关联的任课老师增加资产
:return: 课程内容返回给上课者
'''
self.teacher.gain_asset(self.cost)
content = random.randrange(10, 100)
r = time.strftime('%Y-%m-%d %H:%M:%S')
temp = '课程:%s,老师:%s,内容:%s,时间:%s' % (self.course_name, self.teacher.name, content, r)
return temp def absence(self):
'''
教学事故
:return:
'''
self.teacher.lose_asset(self.cost * 2) class Student(object):
'''
封装学生相关信息
''' def __init__(self):
self.username = None
self.passwd = None
self.course_list = set()
self.study_dict = {}
self.total_fee = 0 def select_course(self, course_obj):
'''
学生选课
:param course:
:return:
'''
self.course_list.add(course_obj) def study(self, course_obj):
'''
学生上课
:param course_obj:
:return:
'''
class_result = course_obj.have_lesson()
self.total_fee += course_obj.cost
if course_obj in self.study_dict.keys():
self.study_dict[course_obj].append(class_result)
else:
self.study_dict[course_obj] = [class_result, ] def login(self, user, pwd):
if self.username == user and self.passwd == pwd:
return True
else:
return False def register(self, user, pwd):
self.username = user
self.passwd = pwd path = os.path.join(settings.STUDENTS_DB_DIR, user)
pickle.dump(self, open(path, 'wb'))

2. 配置文件setting.py


import os BASE_DIR = os.path.dirname(os.path.dirname(__file__))
BASE_ADMIN_DIR= os.path.join(BASE_DIR,'db','admin')
TEACHER_DB_DIR = os.path.join(BASE_DIR,'db','teacher_list')
COURSE_DB_DIR= os.path.join(BASE_DIR,'db','course_list')
STUDENTS_DB_DIR= os.path.join(BASE_DIR,'db','students')

3. administrator.py

import os
import sys sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from config import settings
from lib.models import *
import pickle def create_teacher(admin_obj):
teacher_list = []
while True:
teacher_name = input("enter teacher's name(q to quit):>>> ").strip()
if teacher_name.lower() == 'q':
break
teacher_sex = input('teacher sex:>>>').strip()
teacher_age = int(input('teacher age:>>>').strip())
teacher_obj = Teacher(teacher_name, teacher_sex,teacher_age, admin_obj)
teacher_list.append(teacher_obj)
if os.path.exists(settings.TEACHER_DB_DIR):
list1 = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
teacher_list.extend(list1)
pickle.dump(teacher_list, open(settings.TEACHER_DB_DIR, 'wb')) def create_course(admin_obj):
course_list = []
teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
for k, i in enumerate(teacher_list, 1):
print(k, i.name, i.sex, i.age, i.create_admin, i.create_time)
while True:
course_name = input('course name(q to quit):>>>').strip()
if course_name.lower() == 'q':
break
cost = int(input('course cost:>>>').strip())
teacher_obj = teacher_list[int(input('teacher number:>>>').strip()) - 1]
course_obj = Course(course_name, cost, teacher_obj, admin_obj)
course_list.append(course_obj)
if os.path.exists(settings.COURSE_DB_DIR):
list2 = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
course_list.extend(list2)
pickle.dump(course_list, open(settings.COURSE_DB_DIR, 'wb')) def check_tinfo(admin_obj):
if os.path.exists(settings.TEACHER_DB_DIR):
t_list = pickle.load(open(settings.TEACHER_DB_DIR, 'rb'))
inp = input('请输入要查看的老师名字:>>>')
for i in range(len(t_list)):
if t_list[i].name == inp:
# sex, age, create_admin, asset = 0
print(t_list[i].name, t_list[i].age, t_list[i].create_admin.username, t_list[i].create_time, t_list[i].asset)
return True def check_sinfo(admin_obj):
if os.path.exists(os.path.join(settings.STUDENTS_DB_DIR, 'xiao li')):
stu_obj = pickle.load(open(os.path.join(settings.STUDENTS_DB_DIR, 'xiao li'), 'rb'))
print(stu_obj.username, stu_obj.course_list, stu_obj.study_dict, stu_obj.total_fee) def login(user, pwd):
path = os.path.join(settings.BASE_ADMIN_DIR, user)
if os.path.exists(path):
admin_obj = pickle.load(open(path, 'rb'))
if admin_obj.login(user, pwd):
print('登陆成功')
while True:
inp = input('1:创建老师;2:创建课程(q退出);3:查看老师信息;4:查看学生信息:\n>>>')
if inp == '1':
create_teacher(admin_obj)
elif inp == '2':
create_course(admin_obj)
elif inp == '3':
check_tinfo(admin_obj)
elif inp == '4':
check_sinfo(admin_obj)
else:
break
else: return 1
else: return 0 def register(user, pwd):
admin_obj = Admin()
admin_obj.register(user, pwd) def main():
print('welcome to the course system')
inp = input('1:管理员登陆;2:管理员注册(q退出)\n:>>>').strip()
user = input('enter username:>>>').strip()
pwd = input('enter password:>>>').strip() if inp == '1':
ret = login(user, pwd)
if ret == '1':
print('密码错误')
elif ret == '0':
print('没有此用户,请先注册')
elif inp == '2':
register(user, pwd)
elif inp == 'q':
exit()
else:
print('输入非法,请重新输入') if __name__ == '__main__':
main()

4. student.py

import os
import sys sys.path.append(os.path.dirname(os.path.dirname(__file__)))
from config import settings
from lib.models import *
import pickle def check_cinfo(stu_obj):
course_list = stu_obj.course_list
print('%s %s %s %s ' % ('序号', '名称', '费用', '老师'))
for k, v in enumerate(course_list, 1):
print(k, v.course_name, v.cost, v.teacher.name) def select_course(stu_obj):
if os.path.exists(settings.COURSE_DB_DIR):
course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
for k, v in enumerate(course_list, 1):
print(k, v.course_name, v.cost, v.teacher.name)
while True:
inp = (input('请输入课程序列号进行选课:>>>').strip())
if inp == 'q':
break
stu_obj.select_course(course_list[int(inp) - 1])
path = os.path.join(settings.STUDENTS_DB_DIR, stu_obj.username)
pickle.dump(stu_obj, open(path, 'wb')) def study(stu_obj):
if stu_obj.course_list:
for k, v in enumerate(list(stu_obj.course_list), 1):
print(k, v.course_name,v.teacher.name)
while True:
inp = (input('请输入课程序列号进行上课:>>>').strip())
if inp == 'q':
break
stu_obj.study(list(stu_obj.course_list)[int(inp) - 1])
path = os.path.join(settings.STUDENTS_DB_DIR, stu_obj.username)
pickle.dump(stu_obj, open(path, 'wb')) def login(user, pwd):
if os.path.exists(os.path.join(settings.STUDENTS_DB_DIR, user)):
stu_obj = pickle.load(open(os.path.join(settings.STUDENTS_DB_DIR, user), 'rb'))
if stu_obj.login(user, pwd):
print('登录成功')
while True:
inp = input('1:选课;2:上课,3:查看课程信息:(q to quit);\n:>>>').strip()
if inp == '1':
select_course(stu_obj)
elif inp == '2':
study(stu_obj)
elif inp == '3':
check_cinfo(stu_obj)
else:
break else:
return 1
else:
return 0 def register(user, pwd):
student = Student()
student.register(user, pwd) def main():
inp = input('1:学生登录;2:学生注册(q退出)\n:>>>').strip()
user = input('enter name:>>>').strip()
pwd = input('enter password:>>>').strip()
if inp == '1':
login(user, pwd)
elif inp == '2':
register(user, pwd)
else:
exit() if __name__ == '__main__':
main()

python day 12: 选课系统的更多相关文章

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

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

  2. [ python ] 作业:选课系统

    功能代码实现源地址:https://www.cnblogs.com/lianzhilei/p/5832691.html    如有侵权,立即删除 本文主要是分析 选课系统 实现思路及上面代码的实现过程 ...

  3. Python 简易版选课系统

    一.创建学生类 # # 创建学生类 import random class Student: def __init__(self,num,name,address,course_lst=None): ...

  4. python+requests模拟登陆 学校选课系统

    最近学校让我们选课,每天都有不同的课需要选....然后突发奇想试试用python爬学校选课系统的课程信息 先把自己的浏览器缓存清空,然后在登陆界面按f12 如图: 可以看到登陆时候是需要验证码的,验证 ...

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

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

  6. python第三十五天-----作业完成--学校选课系统

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

  7. python之选课系统详解[功能未完善]

    作业需求 思路:1.先写出大体的类,比如学校类,学生类,课程类--   2.写出类里面大概的方法,比如学校类里面有创建讲师.创建班级-- 3.根据下面写出大致的代码,并实现其功能       遇到的困 ...

  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. ...

随机推荐

  1. 刷题记录:[FBCTF2019]Products Manager

    目录 刷题记录:[FBCTF2019]Products Manager 一.知识点 1.基于约束的SQL注入攻击 刷题记录:[FBCTF2019]Products Manager 题目复现链接:htt ...

  2. (转载)golang 整数常量INT_MAX INT_MIN最大值最小值

    转载地址:https://blog.csdn.net/bdss58/article/details/78388858 在C语言中,有标准库limits.h定义了一些最大最小值常量,例如int类型的最大 ...

  3. redis-sentinel 高可用方案实践

    近期公司的一块核心业务使用redis作为配置转发中心,存在单点问题,考虑服务的可靠性.针对业务需求,我们确定了我们的需求: 异地跨机房容灾 故障自动切换 尽可能高的保证数据不丢失 针对以上需求,我们分 ...

  4. C# linq 使用Groupby lamda 获取非重复数据

    ).GroupBy(b => b.BasicUserId).Select(a => new MyServicesListViewModel() { HeadIcon = apiUrl + ...

  5. Centos7安装golang

    标准官网:https://golang.org/ 需要墙 镜像官网:https://golang.google.cn/dl/ [国内推荐] 1.下载文件 # wget https://dl.googl ...

  6. 安卓 android studio 报错 The specified Android SDK Build Tools version (27.0.3) is ignored, as it is below the minimum supported version (28.0.3) for Android Gradle

    今天将项目迁移到另一台笔记本,进行build出现以下问题,导致build失败 报错截图: 大致意思,目前使用的build工具版本27.0.3不合适.因为当前使用Gradle插件版本是3.2.1,这个版 ...

  7. k8s记录-master组件部署(八)

    在 192.168.0.1 app 用户下执行1)程序准备tar zxvf kubernetes-server-linux-amd64.tar.gzmv kubernetes/server/bin/{ ...

  8. react项目中element的DatePicker回显

    element的DatePicker获取value的时候是日期对象如下,可以提交的时候查看参数 2019-06-30T17:02:02.000Z  如果是console.log打印出来的话,是这样的 ...

  9. Python 图片Resize.py

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 19-7-14 下午4:54 # @Author : RongT import cv2 ...

  10. 基于thrift的node.js rpc服务

    1.在node.js 服务下创建node_modules文件,npm install  thrift 下载thrift到该文件下. 2.编写idl文件.user.thrift 内容如下: struct ...