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. 课程包含,周期,价格,通过学校创建课 ...
随机推荐
- Django阅读目录
(一)Django框架简介 (二)Django框架之第二篇--app注册.静态文件配置.form表单提交.pycharm连接数据库.django使用mysql数据库.表字段的增删改查.表数据的增删改查 ...
- Field "details" doesn't have a default value
[转载:原文链接http://my.oschina.net/wojibuzhu/blog/511104] MySQL 1364 错误提示:#1364 - Field "details&quo ...
- mysql 事务的实现原理
开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究下事务 ...
- 二十三、并发编程之深入解析Condition源码
二十三.并发编程之深入解析Condition源码 一.Condition简介 1.Object的wait和notify/notifyAll方法与Condition区别 任何一个java对象都继承于 ...
- Zookeeper学习笔记:简单注册中心
zookeeper可以作为微服务注册中心,spring cloud也提供了zookeeper注册中心的支持. 本文介绍如何实现一个简单的zookeeper注册中心,主要的实现方式: n个服务提供者对外 ...
- HDOJ 6664 Andy and Maze
HDOJ题目页面传送门 给定一个无向带权图\(G=(V,E),|V|=n,|E|=m\),求边权之和最大的有\(s\)个节点的链的边权之和,即求\(\max\limits_{\forall i\in[ ...
- FreePascal - CodeTyphon 如何让编译的程序更小!
CodeTyphon 6.9 在菜单[project]-->[project option]的弹出界面中 选择[compiler option]-->[debugging] 1,去掉“Ge ...
- grub破解和bios加密
grub破解通过单用户模式,可以实现修改密码 grub加密以后,只能通过bios解除grub密码,方法如下 进入bios 修改启动方式,从CD启动 加载系统镜像,原系统默认挂载到/mnt/sysima ...
- SpringBoot + Nginx 配置HTTPS的一次经历
最近公司开发了一款小程序的应用,但是小程序为了保证数据安全,强制要求使用HTTPS,然后就不得不去配置了一下. 之前在php开发的项目上配置过一次,使用的是wdcp的控制台程序,配置起来很简单,不需要 ...
- python遍历列表删除多个元素的坑
如下代码,遍历列表,删除列表中的偶数时,结果与预期不符. a = [11, 20, 4, 5, 16, 28] for i in a: if i % 2 == 0: a.remove(i) print ...