程序目录:

  1. bin文件夹下为可执行文件:administrator,students
  2. config文件夹下为设置文件,涉及系统参数配置:setting
  3. db文件夹为数据类文件,涉及系统的输入输出数据:admin,students
  4. lib文件夹下为公用模块文件
  5. log为日志文件夹

  • bin文件夹
  1. administrator

    #!/usr/bin/env python
    # -*- coding;utf-8 -*- import random
    import time
    import pickle
    import os
    import sys
    from config import settings
    from lib import models
    from lib.models import *
    sys.path.append(os.path.dirname(os.path.dirname(__file__))) def create_course(admin_obj):
    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("请选择课程名称...:")
    if name == "q":
    break
    cost = input("请选择课时费...:")
    if cost == "q":
    break
    num = input("选择老师(序号):")
    if num == "q":
    break
    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 create_teacher(admin_obj):
    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(settings.TEACHER_DB_DIR):
    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 login(user, pwd):
    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:
    se1 = input("1、创建老师;2、创建课程;(q表示退出)\n>>>")
    if se1 == '1':
    create_teacher(admin_obj)
    elif se1 == '2':
    create_course(admin_obj)
    elif se1 == "q":
    break
    return 2
    else:
    return 1
    else:
    return 0 def register(user, pwd):
    admin_obj = models.Admin()
    admin_obj.register(user, pwd) def main():
    inp = input("1、管理员登录;2、管理员注册;(q表示退出) \n>>>")
    while True:
    if inp == "1":
    user = input("请输入用户名:")
    pwd = input("请输入密码:")
    ret = login(user, pwd)
    if ret == 1:
    print("用户名或密码错误!")
    elif ret == 0:
    print("用户不存在!")
    elif ret == 2:
    print("退出成功!")
    break
    elif inp == "2":
    user = input("请输入用户名:")
    pwd = input("请输入密码:")
    register(user, pwd)
    print("注册成功!")
    elif inp == "q":
    print("退出成功!")
    break if __name__ == "__main__":
    main()
  2. students
    #!/usr/bin/env python
    # -*- coding;utf-8 -*-
    import random
    import time
    from lib import models
    import os
    import sys
    import pickle
    from config import settings
    from lib.models import Course, Admin, Teacher
    sys.path.append(os.path.dirname(os.path.dirname(__file__))) def course_info(student_obj):
    course_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
    for num, item in enumerate(student_obj.course_list, 1):
    print(num, item.course_name, item.cost, item.teacher_obj.name) def 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_obj.name)
    while True:
    num = input("请选择课程(q退出)\n>>>")
    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 register(user, pwd):
    """
    学生注册
    :param user:
    :param pwd:
    :return:
    """
    obj = models.Students()
    obj.register(user, pwd) def 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"))
    while True:
    if student_obj.login(user, pwd):
    inp = input("1、选课;2、上课;3、查看课程信息(q表示退出!)\n>>>")
    if inp == "1":
    select_course(student_obj)
    elif inp == "3":
    course_info(student_obj)
    elif inp == '2':
    pass
    elif inp == 'q':
    break
    else:
    print("用户名或密码错误!")
    return 1
    else:
    print("用户不存在")
    return 0 def main():
    inp = input("1、登录;2、注册;\n>>>")
    user = input("请输入用户名:\n>>>")
    pwd = input("请输入密码:\n>>>")
    if inp == "1":
    ret = login(user, pwd)
    elif inp == '2':
    ret = register(user, pwd)
    if ret:
    print("注册成功!") if __name__ == "__main__":
    main()
  • config配置文件

    #!/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") LOG_PATH = os.path.join(BASE_DIR, "log")
  • db数据文件:用来存放管理员和学生的注册用户名密码,以及选课开课信息。注意:开课信息和学生选课信息不能混淆,注意存放路径
  • lib公用模块文件
    #!/usr/bin/env python
    # -*- coding;utf-8 -*-
    import random
    import time
    import pickle
    import os
    from config import settings 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 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"))
    return True class Course:
    """
    课程相关信息
    """
    def __init__(self, course_name, cost, teacher_obj, admin ):
    self.course_name = course_name
    self.cost = cost
    self.teacher_obj = teacher_obj
    self.create_time = time.strftime("%Y-%m-%d %H:%M:%S")
    self.create_admin = admin def have_lesson(self):
    """
    课程上课,自动给相关联的任课老师增加课时费
    :return: 课程内容返回给上课者
    """
    self.teacher.gain(self.cost)
    content = random.randrange(10, 100) class Students:
    """
    学生相关信息
    """
    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 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,] 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_STUDENTS_DIR, self.username)
    try:
    pickle.dump(self, open(path, "xb"))
    except Exception as f:
    return False
    else:
    return True
  • 日志文件:保存系统相关操作记录

Python全栈开发:选课系统实例的更多相关文章

  1. Python全栈开发:递归实例

    #!/usr/bin/env python # -*- coding;utf-8 -*- """ 递归不能无限,python会限制递归深度,递归主要用于费布拉切数列 &q ...

  2. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  3. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  4. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  5. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  6. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  7. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

  8. 自学Python全栈开发第一次笔记

           我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...

  9. Win10构建Python全栈开发环境With WSL

    目录 Win10构建Python全栈开发环境With WSL 启动WSL 总结 对<Dev on Windows with WSL>的补充 Win10构建Python全栈开发环境With ...

  10. python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)

    python全栈开发笔记第二模块 第四章 :常用模块(第二部分)     一.os 模块的 详解 1.os.getcwd()    :得到当前工作目录,即当前python解释器所在目录路径 impor ...

随机推荐

  1. NXOpenC#_Training_blockstyler(cn)【转载】

  2. 其它课程中的python---1、python基础

    其它课程中的python---1.python基础 一.总结 一句话总结: 可以先把视频平台搭起来,这样学习效率会高很多,而且有额外收益 1.python的优势有哪些? 一个广泛的标准库 扩展性:比如 ...

  3. Model Maker上手指南

    Model Maker上手指南 目录 1.MM可爱的脸 2.MM中的工程Project 3.新建类图 4.添加类成员 5.实现类的方法 6.生成Delphi代码 7.逆向到模型 8.完全的逆向工程 作 ...

  4. (转)元类metaclass

    阅读目录 一 前言 二 什么是元类 三 class关键字创建类的流程分析 五 自定义元类控制类OldboyTeacher的创建 六 自定义元类控制类OldboyTeacher的调用 六 再看属性查找 ...

  5. 获取从天气预报接口返回回来的json数据

    搬迁到了我的新博客中 ==> http://www.suanliutudousi.com/2017/08/26/%E8%8E%B7%E5%8F%96%E4%BB%8E%E5%A4%A9%E6%B ...

  6. PostGIS 通过SQL语句实现空间分析【入门级】

    PostGIS是对象关系型数据库系统PostgreSQL的一个扩展,PostGIS提供如下空间信息服务功能:空间对象.空间索引.空间操作函数和空间操作符.同时,PostGIS遵循OpenGIS的规范. ...

  7. 2019-10-9-dotnet-不申请额外数组空间合并多个只读数组列表

    title author date CreateTime categories dotnet 不申请额外数组空间合并多个只读数组列表 lindexi 2019-10-09 15:15:10 +0800 ...

  8. arm-linux-strip 的使用

    3.2.1    1. 移除所有的符号信息 [arm@localhost gcc]#cp hello hello1 [arm@localhost gcc]#arm­linux­strip ­strip ...

  9. Linux-iptables-route-rule

    详情: http://www.mamicode.com/info-detail-1412618.html  最后面有粘贴 linux系统路由表 linux一共0-255个路由表 linux可以自定义从 ...

  10. Python全栈开发:django网络框架(一)

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...