1、系统目录结构

文件夹注解:

bin--系统管理员和学生的主程序代码

config--系统的配置文件

db--系统的数据文件

  admin--管理员的数据文件

  student--学生的数据文件

lib--系统的公共类文件

1、admin.py

  主要用于管理员注册、登录系统、创建授课老师、创建课程等操作。

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

admin.py

2、students.py

  主要是学生注册、登录系统,选课等操作。

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. """
  4. 学生可操作的方法
  5. """
  6. import os
  7. import sys
  8. import pickle
  9. sys.path.append(os.path.dirname(os.path.dirname(__file__)))
  10.  
  11. from lib.models import Course
  12. from lib.models import Admin
  13. from lib.models import Teacher
  14. from config import settings
  15. from lib import models
  16.  
  17. def to_select_course(student_obj):
  18. """
  19. 学生选课的方法
  20. :param student_obj:
  21. :return:
  22. """
  23. course_list = pickle.load(open(settings.COURSE_DB_DIR, 'rb'))
  24. for num, item in enumerate(course_list, 1):
  25. print(num, item.course_name, item.cost, item.teacher.name)
  26. while True:
  27. num = input("请选择课程(q退出):")
  28. if num == 'q':
  29. break
  30. select_course_obj = course_list[int(num) - 1]
  31. if select_course_obj not in student_obj.course_list:
  32. student_obj.course_list.append(select_course_obj)
  33. pickle.dump(student_obj, open(os.path.join(settings.BASE_STUDENTS_DIR, student_obj.username), 'wb'))
  34.  
  35. def course_info(student_obj):
  36. """
  37. 查看学生已选择的课程
  38. :return:
  39. """
  40. for item in student_obj.course_list:
  41. print(item.course_name, item.teacher.name)
  42.  
  43. def to_register(user, pwd):
  44. """
  45. 学生注册
  46. :param user:
  47. :param pwd:
  48. :return:
  49. """
  50. obj = models.Student()
  51. obj.register(user, pwd)
  52.  
  53. def to_login(user, pwd):
  54. """
  55. 学生登录
  56. :param user:
  57. :param pwd:
  58. :return:
  59. """
  60. if os.path.exists(os.path.join(settings.BASE_STUDENTS_DIR, user)):
  61. student_obj = pickle.load(open(os.path.join(settings.BASE_STUDENTS_DIR, user), 'rb'))
  62. if student_obj.login(user, pwd):
  63. inp = input('1、选课;2、上课;3、查看已选课程 \n >>>')
  64. if inp == '':
  65. to_select_course(student_obj)
  66. elif inp == '':
  67. course_info(student_obj)
  68. elif inp == '':
  69. pass
  70. else:
  71. print('密码错误')
  72. else:
  73. print("学生用户不存在")
  74.  
  75. def main():
  76. inp = input("1、学生登录;2、学生注册;\n >>>")
  77. user = input("请输入学生用户名:")
  78. pwd = input("请输入登录密码:")
  79. if inp == '':
  80. to_login(user, pwd)
  81. elif inp == '':
  82. to_register(user, pwd)
  83.  
  84. if __name__ == "__main__":
  85. main()

students.py

3、settings.py

  系统主要路径参数的设置文件

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. import os
  4. #定义路径变量
  5. BASE_DIR = os.path.dirname(os.path.dirname(__file__))
  6. BASE_ADMIN_DIR = os.path.join(BASE_DIR, "db", "admin")
  7. BASE_STUDENTS_DIR = os.path.join(BASE_DIR, "db", "students")
  8. TEACHER_DB_DIR = os.path.join(BASE_DIR, "db", "teacher_list")
  9. COURSE_DB_DIR = os.path.join(BASE_DIR, "db", "course_list")

settings.py

4、models.py

  系统公共类的代码实现

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. """
  4. 用于存储老师、管理员、学生类
  5. """
  6.  
  7. import time
  8. import pickle
  9. from config import settings
  10. import os
  11.  
  12. #定义老师类
  13. class Teacher:
  14. """
  15. 封装老师的相关信息
  16. """
  17. def __init__(self, name, age, admin):
  18. self.name = name
  19. self.age = age
  20. self.__assets = 0
  21. self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
  22. self.create_admin = admin
  23.  
  24. def gain(self, cost):
  25. """
  26. 增加资产
  27. :param cost: 增加的数量
  28. :return:
  29. """
  30. self.__assets += cost
  31.  
  32. def decrease(self, cost):
  33. """
  34. 减少资产
  35. :param cost: 减少的数量
  36. :return:
  37. """
  38. self.__assets -= cost
  39.  
  40. #定义课程类
  41. class Course:
  42. """
  43. 课程相关信息
  44. """
  45. def __init__(self, course_name, cost, teacher_obj, admin):
  46. self.course_name = course_name
  47. self.cost = cost
  48. self.teacher = teacher_obj
  49. self.create_time = time.strftime('%Y-%m-%d %H:%M:%S')
  50. self.create_admin = admin
  51.  
  52. #定义管理员类
  53. class Admin:
  54. """
  55. 封装管理员
  56. """
  57. def __init__(self):
  58. self.username = None
  59. self.password = None
  60.  
  61. def login(self, user, pwd):
  62. """
  63. 管理员登录
  64. :param user:
  65. :param pwd:
  66. :return:
  67. """
  68. if self.username == user and self.password == pwd:
  69. return True
  70. else:
  71. return False
  72.  
  73. def register(self, user, pwd):
  74. """
  75. 管理员注册
  76. :param user:
  77. :param pwd:
  78. :return:
  79. """
  80. self.username = user
  81. self.password= pwd
  82.  
  83. path = os.path.join(settings.BASE_ADMIN_DIR, self.username)
  84. pickle.dump(self, open(path, 'xb'))
  85.  
  86. #定义学生类
  87. class Student:
  88. """
  89. 学生相关信息
  90. """
  91. def __init__(self):
  92. self.username = None
  93. self.password = None
  94.  
  95. self.course_list = []
  96. self.study_dict = {}
  97.  
  98. def select_course(self, course_obj):
  99. """
  100. 学生选课
  101. :param course_obj:
  102. :return:
  103. """
  104. self.course_list.append(course_obj)
  105.  
  106. def register(self, user, pwd):
  107. """
  108. 学生注册
  109. :param user:
  110. :param pwd:
  111. :return:
  112. """
  113. self.username = user
  114. self.password = pwd
  115. path = os.path.join(settings.BASE_STUDENTS_DIR, self.username)
  116. pickle.dump(self, open(path, 'xb'))
  117.  
  118. def login(self, user, pwd):
  119. """
  120. 学生登录
  121. :param user:
  122. :param pwd:
  123. :return:
  124. """
  125. if self.username == user and self.password == pwd:
  126. return True
  127. else:
  128. return False
  129.  
  130. def study(self, course_obj):
  131. """
  132. 学生上课
  133. :param course_obj:
  134. :return:
  135. """
  136. class_result = course_obj.have_lesson()
  137. if course_obj in self.study_dict.keys():
  138. self.study_dict[course_obj].append(class_result)
  139. else:
  140. 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. Django阅读目录

    (一)Django框架简介 (二)Django框架之第二篇--app注册.静态文件配置.form表单提交.pycharm连接数据库.django使用mysql数据库.表字段的增删改查.表数据的增删改查 ...

  2. Field "details" doesn't have a default value

    [转载:原文链接http://my.oschina.net/wojibuzhu/blog/511104] MySQL 1364 错误提示:#1364 - Field "details&quo ...

  3. mysql 事务的实现原理

    开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究下事务 ...

  4. 二十三、并发编程之深入解析Condition源码

    二十三.并发编程之深入解析Condition源码   一.Condition简介 1.Object的wait和notify/notifyAll方法与Condition区别 任何一个java对象都继承于 ...

  5. Zookeeper学习笔记:简单注册中心

    zookeeper可以作为微服务注册中心,spring cloud也提供了zookeeper注册中心的支持. 本文介绍如何实现一个简单的zookeeper注册中心,主要的实现方式: n个服务提供者对外 ...

  6. HDOJ 6664 Andy and Maze

    HDOJ题目页面传送门 给定一个无向带权图\(G=(V,E),|V|=n,|E|=m\),求边权之和最大的有\(s\)个节点的链的边权之和,即求\(\max\limits_{\forall i\in[ ...

  7. FreePascal - CodeTyphon 如何让编译的程序更小!

    CodeTyphon 6.9 在菜单[project]-->[project option]的弹出界面中 选择[compiler option]-->[debugging] 1,去掉“Ge ...

  8. grub破解和bios加密

    grub破解通过单用户模式,可以实现修改密码 grub加密以后,只能通过bios解除grub密码,方法如下 进入bios 修改启动方式,从CD启动 加载系统镜像,原系统默认挂载到/mnt/sysima ...

  9. SpringBoot + Nginx 配置HTTPS的一次经历

    最近公司开发了一款小程序的应用,但是小程序为了保证数据安全,强制要求使用HTTPS,然后就不得不去配置了一下. 之前在php开发的项目上配置过一次,使用的是wdcp的控制台程序,配置起来很简单,不需要 ...

  10. python遍历列表删除多个元素的坑

    如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...