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() - 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全栈开发:选课系统实例的更多相关文章
- 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 ...
随机推荐
- docker 环境搭建步骤
配置CA: zhaoweipeng@bogon:~$ ls106 baseos.tar fabric-sdk fabric-sdk (1).tar fixture_106zhaoweipeng@bog ...
- JSP/Servlet笔记
一.Servlet简介 Servlet程序可以运行于任何服务器,如web.email.FTP等,所有servlet程序必须实现javax.servlet接口.GenericServlet是实现了jav ...
- 2019 USP Try-outs 练习赛
// 好久没更博客了,最近打了很多场练习赛&校内PK赛,大概自闭忙于补题吧 // 9.26 周四练习赛 A. Kolkhozy 题意 有 n 个数 \(f[i]\) ,有 q 次询问(l, r ...
- 文本数据增量导入到mysql
实现思路: 实现Java读取TXT文件中的内容并存到内存,将内存中的数据和mysql 数据库里面某张表数据的字段做一个比较,如果比较内存中的数据在mysql 里存在则不做处理,如果不存在则 ...
- 02ubuntu下python环境安装
原文链接:https://blog.csdn.net/weixin_42549407/article/details/85198460 我安装的是python3.6.9 1.下载python的源码压缩 ...
- enumrate用法
转自*https://www.runoob.com/python/python-func-enumerate.html*侵删 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组 ...
- 转——调试寄存器 原理与使用:DR0-DR7
下面介绍的知识性信息来自intel IA-32手册(可以在intel的开发手册或者官方网站查到),提示和补充来自学习调试器实现时的总结. 希望能给你带去有用的信息. (DRx对应任意的一个调试寄存器. ...
- Springboot整合dubbo搭建基本的消费、提供和负载均衡
文章目录 1.确定接口 2.创建提供者 2.1 pom配置 2.2dubbo配置文件 2.3 application.properties 2.4 mybatis相关 2.4.1 配置UserMapp ...
- 21个CSS技巧
级联样式表(CSS)在当代Web设计中已经成为重要的环节,如果没有CSS现在的网站将像10年前一样不堪入目.随着CSS技术的普及,越来越多的高质量CSS教程涌入互联网,让我们的学习更加方便. 1.CS ...
- 2018-10-29-微软-Tech-Summit-技术暨生态大会课程-·-基于-Roslyn-打造高性能预编译框架...
title author date CreateTime categories 微软 Tech Summit 技术暨生态大会课程 · 基于 Roslyn 打造高性能预编译框架 lindexi 2018 ...