Python全栈开发:选课系统实例
程序目录:
- bin文件夹下为可执行文件:administrator,students
- config文件夹下为设置文件,涉及系统参数配置:setting
- db文件夹为数据类文件,涉及系统的输入输出数据:admin,students
- lib文件夹下为公用模块文件
- log为日志文件夹
- bin文件夹
- 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()
- #!/usr/bin/env python
- 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()
- #!/usr/bin/env python
- 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")
- #!/usr/bin/env python
- 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
- #!/usr/bin/env python
- 日志文件:保存系统相关操作记录
Python全栈开发:选课系统实例的更多相关文章
- Python全栈开发:递归实例
#!/usr/bin/env python # -*- coding;utf-8 -*- """ 递归不能无限,python会限制递归深度,递归主要用于费布拉切数列 &q ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- Python全栈开发【基础一】
Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
- 自学Python全栈开发第一次笔记
我已经跟着视频自学好几天Python全栈开发了,今天决定听老师的,开始写blog,听说大神都回来写blog来记录自己的成长. 我特别认真的跟着这个视频来学习,(他们开课前的保证书,我也写 ...
- Win10构建Python全栈开发环境With WSL
目录 Win10构建Python全栈开发环境With WSL 启动WSL 总结 对<Dev on Windows with WSL>的补充 Win10构建Python全栈开发环境With ...
- python全栈开发中级班全程笔记(第二模块、第四章)(常用模块导入)
python全栈开发笔记第二模块 第四章 :常用模块(第二部分) 一.os 模块的 详解 1.os.getcwd() :得到当前工作目录,即当前python解释器所在目录路径 impor ...
随机推荐
- NX二次开发-NXString转换为char*方法
NX9+VS2012 #include <uf.h> #include <uf_drf.h> #include <NXOpen/Annotations_Note.hxx& ...
- js 彻底理解回调函数
一.前奏 在谈回调函数之前,先看下下面两段代码: 不妨猜测一下代码的结果. function say (value) { alert(value); } alert(say); alert(say(' ...
- [Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?
转:http://blog.csdn.net/alexander_xfl/article/details/9150971 RunTime.exec()这个接口可以说是给我们开发者提供了一个很好的直观操 ...
- 3.RabbitMQ 第一个程序
RabbitMQ消息服务器主要解决应用程序之间异步消息传输问题,传统的MQ分为点对点和主题与订阅,RabbitMQ使用Exchange(交换机)实现更加灵活的消息传递. 前面介绍过几个概念,Routi ...
- Openstack-L 路由注入方式
目录 目录 前言 从 Commands 到 Action 操作函数 前言 Openstack 新旧版本提供了不同的路由注入方式,也就是 Route Module 的代码方式不同,就二次开发而言用那一种 ...
- 2019 牛客多校第二场 H Second Large Rectangle
题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目大意 给定一个 n * m 的 01 矩阵,求其中第二大的子矩阵,子矩阵元素必须全部为 1.输出其大小 ...
- Sigils of Elohim
题目大意 见游戏链接https://store.steampowered.com/app/321480/. 分析 作为一个程序猿,我拒绝用人脑dfs. 代码如下 #include <bits/s ...
- React:JS中的this和箭头函数
JS中的this和纯面向对象(java,c++)中的this有点不大一样,其原因就是作用域不同,导致JS中的this的指向不明确,在java中的this指当前对象的this或当前类的this,在JS中 ...
- 【python】collections的使用
老师布置了一个课后作业. 统计文本中字母出现的次数并找到最大的那一个 首先是读取文本吧.和c里的也差不多,打开,关闭,读取. path = f = f.close() 然后就用到了这个黑科技.coll ...
- JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。
编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...