程序目录:

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

  • bin文件夹
  1. administrator

    1. #!/usr/bin/env python
    2. # -*- coding;utf-8 -*-
    3.  
    4. import random
    5. import time
    6. import pickle
    7. import os
    8. import sys
    9. from config import settings
    10. from lib import models
    11. from lib.models import *
    12. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    13.  
    14. def create_course(admin_obj):
    15. teacher_list = pickle.load(open(settings.TEACHER_DB_DIR, "rb"))
    16. for num, item in enumerate(teacher_list, 1):
    17. print(num, item.name, item.age, item.create_time, item.create_admin.username)
    18. Course_list = []
    19. while True:
    20. name = input("请选择课程名称...:")
    21. if name == "q":
    22. break
    23. cost = input("请选择课时费...:")
    24. if cost == "q":
    25. break
    26. num = input("选择老师(序号):")
    27. if num == "q":
    28. break
    29. obj = models.Course(name, cost, teacher_list[int(num) - 1], admin_obj)
    30. Course_list.append(obj)
    31.  
    32. if os.path.exists(settings.COURSE_DB_DIR):
    33. exists_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
    34. Course_list.extend(exists_list)
    35. pickle.dump(Course_list, open(settings.COURSE_DB_DIR, "wb"))
    36.  
    37. def create_teacher(admin_obj):
    38. teacher_list = []
    39. while True:
    40. teacher_name = input("请输入老师姓名(q表示退出):")
    41. if teacher_name == "q":
    42. break
    43. teacher_age = input("请输入老师年龄:")
    44. obj = models.Teacher(teacher_name, teacher_age, admin_obj)
    45. teacher_list.append(obj)
    46. if os.path.exists(settings.TEACHER_DB_DIR):
    47. exists_list = pickle.load(open(settings.TEACHER_DB_DIR, "rb"))
    48. teacher_list.extend(exists_list)
    49. pickle.dump(teacher_list, open(settings.TEACHER_DB_DIR, "wb"))
    50.  
    51. def login(user, pwd):
    52. if os.path.exists(os.path.join(settings.BASE_ADMIN_DIR, user)):
    53. # 从文件中将管理员对象读取出来(里面封装了用户信息以及提供了登录方法)
    54. admin_obj = pickle.load(open(os.path.join(settings.BASE_ADMIN_DIR, user), "rb"))
    55. if admin_obj.login(user, pwd):
    56. print("登陆成功!")
    57. while True:
    58. se1 = input("1、创建老师;2、创建课程;(q表示退出)\n>>>")
    59. if se1 == '1':
    60. create_teacher(admin_obj)
    61. elif se1 == '2':
    62. create_course(admin_obj)
    63. elif se1 == "q":
    64. break
    65. return 2
    66. else:
    67. return 1
    68. else:
    69. return 0
    70.  
    71. def register(user, pwd):
    72. admin_obj = models.Admin()
    73. admin_obj.register(user, pwd)
    74.  
    75. def main():
    76. inp = input("1、管理员登录;2、管理员注册;(q表示退出) \n>>>")
    77. while True:
    78. if inp == "1":
    79. user = input("请输入用户名:")
    80. pwd = input("请输入密码:")
    81. ret = login(user, pwd)
    82. if ret == 1:
    83. print("用户名或密码错误!")
    84. elif ret == 0:
    85. print("用户不存在!")
    86. elif ret == 2:
    87. print("退出成功!")
    88. break
    89. elif inp == "2":
    90. user = input("请输入用户名:")
    91. pwd = input("请输入密码:")
    92. register(user, pwd)
    93. print("注册成功!")
    94. elif inp == "q":
    95. print("退出成功!")
    96. break
    97.  
    98. if __name__ == "__main__":
    99. main()
  2. students
    1. #!/usr/bin/env python
    2. # -*- coding;utf-8 -*-
    3. import random
    4. import time
    5. from lib import models
    6. import os
    7. import sys
    8. import pickle
    9. from config import settings
    10. from lib.models import Course, Admin, Teacher
    11. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
    12.  
    13. def course_info(student_obj):
    14. course_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
    15. for num, item in enumerate(student_obj.course_list, 1):
    16. print(num, item.course_name, item.cost, item.teacher_obj.name)
    17.  
    18. def select_course(student_obj):
    19. """
    20. 学生选课
    21. :param student_obj:
    22. :return:
    23. """
    24. course_list = pickle.load(open(settings.COURSE_DB_DIR, "rb"))
    25. for num, item in enumerate(course_list, 1):
    26. print(num, item.course_name, item.cost, item.teacher_obj.name)
    27. while True:
    28. num = input("请选择课程(q退出)\n>>>")
    29. if num == "q":
    30. break
    31. select_course_obj = course_list[int(num) - 1]
    32. if select_course_obj not in student_obj.course_list:
    33. student_obj.course_list.append(select_course_obj)
    34. pickle.dump(student_obj, open(os.path.join(settings.BASE_STUDENTS_DIR, student_obj.username), "wb"))
    35.  
    36. def register(user, pwd):
    37. """
    38. 学生注册
    39. :param user:
    40. :param pwd:
    41. :return:
    42. """
    43. obj = models.Students()
    44. obj.register(user, pwd)
    45.  
    46. def login(user, pwd):
    47. """
    48. 学生登录
    49. :param user:
    50. :param pwd:
    51. :return:
    52. """
    53. if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, user)):
    54. student_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR, user), "rb"))
    55. while True:
    56. if student_obj.login(user, pwd):
    57. inp = input("1、选课;2、上课;3、查看课程信息(q表示退出!)\n>>>")
    58. if inp == "1":
    59. select_course(student_obj)
    60. elif inp == "3":
    61. course_info(student_obj)
    62. elif inp == '2':
    63. pass
    64. elif inp == 'q':
    65. break
    66. else:
    67. print("用户名或密码错误!")
    68. return 1
    69. else:
    70. print("用户不存在")
    71. return 0
    72.  
    73. def main():
    74. inp = input("1、登录;2、注册;\n>>>")
    75. user = input("请输入用户名:\n>>>")
    76. pwd = input("请输入密码:\n>>>")
    77. if inp == "1":
    78. ret = login(user, pwd)
    79. elif inp == '2':
    80. ret = register(user, pwd)
    81. if ret:
    82. print("注册成功!")
    83.  
    84. if __name__ == "__main__":
    85. main()
  • config配置文件

    1. #!/usr/bin/env python
    2. # -*- coding;utf-8 -*-
    3. import os
    4.  
    5. BASE_DIR = os.path.dirname(os.path.dirname(__file__))
    6.  
    7. BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")
    8.  
    9. BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")
    10.  
    11. TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")
    12.  
    13. COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")
    14.  
    15. LOG_PATH = os.path.join(BASE_DIR, "log")
  • db数据文件:用来存放管理员和学生的注册用户名密码,以及选课开课信息。注意:开课信息和学生选课信息不能混淆,注意存放路径
  • lib公用模块文件
    1. #!/usr/bin/env python
    2. # -*- coding;utf-8 -*-
    3. import random
    4. import time
    5. import pickle
    6. import os
    7. from config import settings
    8.  
    9. class Teacher:
    10. """
    11. 封装老师的相关信息
    12. """
    13. def __init__(self, name, age, admin):
    14. self.name = name
    15. self.age = age
    16. self.__assets = 0
    17. self.create_time = time.strftime("%Y-%m-%d %H:%M:%S")
    18. self.create_admin = admin
    19.  
    20. def gain(self, cost):
    21. """
    22. 增加资产
    23. :param cost: 增加的数量
    24. :return: 收入
    25. """
    26. self.__assets += cost
    27.  
    28. def decrease(self, cost):
    29. """
    30. 减少资产
    31. :param cost: 减少的数量
    32. :return: 收入
    33. """
    34. self.__assets -= cost
    35.  
    36. class Admin:
    37. """
    38. 封装管理员的信息
    39. """
    40. def __init__(self):
    41. self.username = None
    42. self.password = None
    43.  
    44. def login(self, user, pwd):
    45. """
    46. 管理员登录
    47. :param user: 用户名
    48. :param pwd: 密码
    49. :return:
    50. """
    51. if self.username == user and self.password == pwd:
    52. return True
    53. else:
    54. return False
    55.  
    56. def register(self, user, pwd):
    57. """
    58. 管理员注册
    59. :param user:
    60. :param pwd:
    61. :return:
    62. """
    63. self.username = user
    64. self.password = pwd
    65.  
    66. path = os.path.join(settings.BASE_ADMIN_DIR, self.username)
    67.  
    68. pickle.dump(self, open(path, "xb"))
    69. return True
    70.  
    71. class Course:
    72. """
    73. 课程相关信息
    74. """
    75. def __init__(self, course_name, cost, teacher_obj, admin ):
    76. self.course_name = course_name
    77. self.cost = cost
    78. self.teacher_obj = teacher_obj
    79. self.create_time = time.strftime("%Y-%m-%d %H:%M:%S")
    80. self.create_admin = admin
    81.  
    82. def have_lesson(self):
    83. """
    84. 课程上课,自动给相关联的任课老师增加课时费
    85. :return: 课程内容返回给上课者
    86. """
    87. self.teacher.gain(self.cost)
    88. content = random.randrange(10, 100)
    89.  
    90. class Students:
    91. """
    92. 学生相关信息
    93. """
    94. def __init__(self):
    95. self.username = None
    96. self.password = None
    97. self.course_list = []
    98. self.study_dict = {}
    99.  
    100. def select_course(self,course_obj):
    101. """
    102. 学生选课
    103. :param course_obj:
    104. :return:
    105. """
    106. self.course_list.append(course_obj)
    107.  
    108. def study(self,course_obj):
    109. """
    110. 学生上课
    111. :param course_obj:
    112. :return:
    113. """
    114. class_result = course_obj.have_lesson()
    115. if course_obj in self.study_dict.keys():
    116. self.study_dict[course_obj].append(class_result)
    117. else:
    118. self.study_dict[course_obj] = [class_result,]
    119.  
    120. def login(self, user, pwd):
    121. """
    122. 学生登录
    123. :param user:
    124. :param pwd:
    125. :return:
    126. """
    127. if self.username == user and self.password == pwd:
    128. return True
    129. else:
    130. return False
    131.  
    132. def register(self, user, pwd):
    133. """
    134. 学生注册
    135. :param user:
    136. :param pwd:
    137. :return:
    138. """
    139. self.username = user
    140. self.password = pwd
    141.  
    142. path = os.path.join(settings.BASE_STUDENTS_DIR, self.username)
    143. try:
    144. pickle.dump(self, open(path, "xb"))
    145. except Exception as f:
    146. return False
    147. else:
    148. 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. NX二次开发-NXString转换为char*方法

    NX9+VS2012 #include <uf.h> #include <uf_drf.h> #include <NXOpen/Annotations_Note.hxx& ...

  2. js 彻底理解回调函数

    一.前奏 在谈回调函数之前,先看下下面两段代码: 不妨猜测一下代码的结果. function say (value) { alert(value); } alert(say); alert(say(' ...

  3. [Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?

    转:http://blog.csdn.net/alexander_xfl/article/details/9150971 RunTime.exec()这个接口可以说是给我们开发者提供了一个很好的直观操 ...

  4. 3.RabbitMQ 第一个程序

    RabbitMQ消息服务器主要解决应用程序之间异步消息传输问题,传统的MQ分为点对点和主题与订阅,RabbitMQ使用Exchange(交换机)实现更加灵活的消息传递. 前面介绍过几个概念,Routi ...

  5. Openstack-L 路由注入方式

    目录 目录 前言 从 Commands 到 Action 操作函数 前言 Openstack 新旧版本提供了不同的路由注入方式,也就是 Route Module 的代码方式不同,就二次开发而言用那一种 ...

  6. 2019 牛客多校第二场 H Second Large Rectangle

    题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目大意 给定一个 n * m 的 01 矩阵,求其中第二大的子矩阵,子矩阵元素必须全部为 1.输出其大小 ...

  7. Sigils of Elohim

    题目大意 见游戏链接https://store.steampowered.com/app/321480/. 分析 作为一个程序猿,我拒绝用人脑dfs. 代码如下 #include <bits/s ...

  8. React:JS中的this和箭头函数

    JS中的this和纯面向对象(java,c++)中的this有点不大一样,其原因就是作用域不同,导致JS中的this的指向不明确,在java中的this指当前对象的this或当前类的this,在JS中 ...

  9. 【python】collections的使用

    老师布置了一个课后作业. 统计文本中字母出现的次数并找到最大的那一个 首先是读取文本吧.和c里的也差不多,打开,关闭,读取. path = f = f.close() 然后就用到了这个黑科技.coll ...

  10. JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。

    编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...