选课系统

花了一晚上写的,可能还存在不足

1.程序框架

2.文件夹建立

D:/选课系统
|___api
| |___common_api.py
|___bil
| |___common.py
|___conf
| |___setting.py
|___core
| |___admin.py
| |___src.py
| |___student.py
| |___teacher.py
|___db
| |___common_modles.py
| |___modles.py
|___starts.py
|___test.py
|___选课系统.jpg
#写的思路,先写视图,再根据功能需求写接口,路径什么的都丢入setting.py,生成的人物的类丢modles.py,公共的课程学习等类丢入common_modles.py,后面写功能就是写逻辑了

3.api

1.common_api.py

import pickle
import os
def save_obj(obj): path = os.path.dirname(os.path.dirname(__file__))
file_path = os.path.join(path,'db',obj.__class__.__name__) if not os.path.exists(file_path):
os.mkdir(file_path)
obj_path = os.path.join(file_path,f'{obj.name}.pkl') if not os.path.exists(obj_path):
with open(obj_path,'wb') as fw:
pickle.dump(obj,fw)
return True
with open(obj_path, 'wb') as fw:
pickle.dump(obj, fw)
return False

4.bil

1.common.py

from conf.setting import LONG_DICT
import pickle
import os def user(user): def login_deco(func): def wrapper(*args, **kwargs): if LONG_DICT[user]: func()
else: print('请先登入') return wrapper return login_deco def read_obj(objtype,name): path = os.path.dirname(os.path.dirname(__file__))
file_path = os.path.join(path,'db',objtype) if not os.path.exists(file_path):
os.mkdir(file_path)
obj_path = os.path.join(file_path,f'{name}.pkl') if os.path.exists(obj_path):
with open(obj_path, 'rb') as fr:
read_obj = pickle.load(fr)
return read_obj
return False

5.conf

1.setting.py

import os
LONG_DICT = {'student':None,'teacher':None,'admin':None} PATH = os.path.dirname(os.path.dirname(__file__))
STUDENT_FILE_PATH = os.path.join(PATH,'db','student')
TEACHER_FILE_PATH = os.path.join(PATH,'db','teacher')
ADMIN_FILE_PATH = os.path.join(PATH,'db','admin')
COURSE_FILE_PATH = os.path.join(PATH,'db','course')
SCHOOL_FILE_PATH = os.path.join(PATH,'db','school')

6.core

1.admin.py

from conf.setting import *
from bil.common import user,read_obj
from db.modles import Admin,Teacher,Course,School #注册功能
def register():
print('欢迎使用注册功能')
while True:
print('输入Q退出')
register_name = input('请输入你的名字')
register_pwd = input('请输入你的密码') if register_name=='Q' or register_pwd =='Q':
print('退出成功')
return False admin = Admin(register_name,register_pwd) if admin.save():
print('注册成功')
return True
else:
print('账户已存在')
continue #登入功能
def login():
print('欢迎使用登入功能')
while True:
print('输入Q退出')
login_name = input('请输入你的名字')
login_pwd = input('请输入你的密码') if login_name == 'Q' or login_pwd == 'Q':
print('退出成功')
return False if not os.path.exists(ADMIN_FILE_PATH):
os.mkdir(ADMIN_FILE_PATH) path = os.path.join(ADMIN_FILE_PATH,f'{login_name}.pkl')
if not os.path.exists(path):
print('账号不存在')
continue info_obj = read_obj('admin',login_name) if info_obj.pwd == login_pwd:
print('登入成功')
LONG_DICT['admin'] = login_name return True
else:
print('密码错误')
continue #创建学习功能
@user('admin')
def found_school():
print('欢迎使用创建学校功能')
while True: print('输入Q退出')
name = input('请输入学校的名字')
pwd = input('请输入学校的地址') if name == 'Q' or pwd == 'Q':
print('退出成功')
return False obj = School(name, pwd) if obj.save():
print('创建成功')
return True
else:
print('账户已存在')
continue #创建老师功能
@user('admin')
def found_teacher():
print('欢迎使用创建老师功能')
while True: print('输入Q退出')
name = input('请输入老师的名字')
pwd = input('请输入你的密码') if name=='Q' or pwd =='Q':
print('退出成功')
return False obj = Teacher(name,pwd) if obj.save():
print('创建成功')
return True
else:
print('账户已存在')
continue #创建课程功能
@user('admin')
def found_course():
print('欢迎使用创建课程功能')
while True: print('输入Q退出')
name = input('请输课程的名字') if name == 'Q' :
print('退出成功')
return False obj = Course(name) if obj.save():
print('创建成功')
return True
else:
print('已存在')
continue #功能字典
action ={
'1':register,
'2':login,
'3':found_school,
'4':found_teacher,
'5':found_course,
} #终端显示功能字典
msg = '''
------------------
| 1:注册账号 |
| 2:登入账号 |
| 3:创建学校 |
| 4:创建老师 |
| 5:创建课程 |
| Q:退出功能 |
------------------
''' #管理员视图运行
def admin_action():
while True: print(msg)
chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break
elif chiose in action: action[chiose]()
else:print('请好好输入') ; continue

2.src.py

from core.student import student_action
from core.teacher import teacher_action
from core.admin import admin_action
action ={
'1':student_action,
'2':teacher_action,
'3':admin_action,
} #终端显示功能字典
msg = '''
------------------
| 1:学生 |
| 2:老师 |
| 3:管理员 |
| Q:退出功能 |
------------------
''' #主界面视图运行
def run():
while True: print(msg)
chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break
elif chiose in action: action[chiose]()
else:print('请好好输入') ; continue

3.student.py

from conf.setting import *
from bil.common import user,read_obj
from db.modles import Student,Course #注册功能
def register():
print('欢迎使用注册功能')
while True:
print('输入Q退出')
register_name = input('请输入你的名字')
register_pwd = input('请输入你的密码') if register_name=='Q' or register_pwd =='Q':
print('退出成功')
return False obj = Student(register_name,register_pwd) if obj.save():
print('注册成功')
return True
else:
print('账户已存在')
continue
#登入功能
def login():
print('欢迎使用登入功能')
while True:
print('输入Q退出')
login_name = input('请输入你的名字')
login_pwd = input('请输入你的密码') if login_name == 'Q' or login_pwd == 'Q':
print('退出成功')
return False if not os.path.exists(STUDENT_FILE_PATH):
os.mkdir(STUDENT_FILE_PATH) path = os.path.join(STUDENT_FILE_PATH, f'{login_name}.pkl')
if not os.path.exists(path):
print('账号不存在')
continue info_obj = read_obj('student', login_name) if info_obj.pwd == login_pwd:
print('登入成功')
LONG_DICT['student'] = login_name return True
else:
print('密码错误')
continue #选择学校功能
@user('student')
def choose_school():
print('欢迎使用选择学校功能')
while True:
print('输入Q退出') if not os.path.exists(SCHOOL_FILE_PATH):
os.mkdir(SCHOOL_FILE_PATH) lis = os.listdir(SCHOOL_FILE_PATH)
if lis == []:
print('没有学校,请让管理员创建学校')
return False while True:
print('学校名称:')
for school_name in lis:
print(f'\t\t{school_name[:-4]}') name = input('请输入学校的名字') if name == 'Q':
print('退出成功')
return False if read_obj('school',name): obj_student = read_obj('student',LONG_DICT['student'])
obj_student.school = name
obj_student.save()
print('选择学校成功')
return True else:
print('学校不存在')
continue #选择课程功能
@user('student')
def choose_course():
print('欢迎使用选择课程功能')
print('输入Q退出') if not os.path.exists(COURSE_FILE_PATH):
os.mkdir(COURSE_FILE_PATH) lis = os.listdir(COURSE_FILE_PATH)
if lis == []:
print('没有课程,请让管理员创建课程')
return False while True:
print('课程名字:')
for course_name in lis:
print(f'\t\t{course_name[:-4]}') name = input('请输入学校的名字') if name == 'Q':
print('退出成功')
return False if read_obj('course', name): obj_student = read_obj('student', LONG_DICT['student']) #type:Student
obj_student.course.append(name)
obj_student.save() course_obj = read_obj('course', name) #type:Course
obj_student.add_course(course_obj)
course_obj.save() print('选择课程成功')
return True else:
print('学校不存在')
continue #查看成绩功能
@user('student')
def check_score():
print('欢迎使用查看成绩功能')
obj_student = read_obj('student', LONG_DICT['student']) #type:Student if obj_student.score :
print(f'你的成绩是{obj_student.score }')
return True
print('你没有成绩') #功能字典
action ={
'1':register,
'2':login,
'3':choose_school,
'4':choose_course,
'5':check_score,
} #终端显示功能字典
msg = '''
------------------
| 1:注册账号 |
| 2:登入账号 |
| 3:选择学校 |
| 4:选择课程 |
| 5:查看成绩 |
| Q:退出功能 |
------------------
''' #学生视图运行
def student_action():
while True: print(msg)
chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break
elif chiose in action: action[chiose]()
else:print('请好好输入') ; continue if __name__ == '__main__':
student_action()

4.teacher.py

from conf.setting import *
from bil.common import user,read_obj
from db.modles import Student,Course #登入功能
def login():
print('欢迎使用登入功能')
while True:
print('输入Q退出')
login_name = input('请输入你的名字')
login_pwd = input('请输入你的密码') if login_name == 'Q' or login_pwd == 'Q':
print('退出成功')
return False if not os.path.exists(TEACHER_FILE_PATH):
os.mkdir(TEACHER_FILE_PATH) path = os.path.join(TEACHER_FILE_PATH, f'{login_name}.pkl')
if not os.path.exists(path):
print('账号不存在')
continue info_obj = read_obj('teacher', login_name) if info_obj.pwd == login_pwd:
print('登入成功')
LONG_DICT['teacher'] = login_name return True
else:
print('密码错误')
continue #查看学生
@user('teacher')
def check_student():
print('欢迎使用查看学生功能') print('输入Q退出') if not os.path.exists(STUDENT_FILE_PATH):
os.mkdir(STUDENT_FILE_PATH) lis = os.listdir(STUDENT_FILE_PATH)
if lis == []:
print('没有学生')
return False while True:
print('学生账号:')
for course_name in lis:
print(f'\t\t{course_name[:-4]}') name = input('请输入学生的名字') if name == 'Q':
print('退出成功')
return False if read_obj('student', name):
student_obj = read_obj('student', name) #type:Student
print(f'学生账号:{student_obj.name}\n'
f'学生密码:{student_obj.pwd}\n'
f'学生学校:{student_obj.school}\n'
f'学生课程:{student_obj.course}\n'
f'学生成绩:{student_obj.score}\n')
return True
else:
print('学生账号不存在') #查看课程
@user('teacher')
def check_course():
print('欢迎使用查看课程功能') if not os.path.exists(COURSE_FILE_PATH):
os.mkdir(COURSE_FILE_PATH) lis = os.listdir(COURSE_FILE_PATH)
if lis == []:
print('没有课程')
return False
else:
print('课程名称:')
for course_name in lis:
print(f'\t\t{course_name[:-4]}') wait = input('输入任意键退出\n') #选择课程功能
@user('teacher')
def choose_course():
print('欢迎使用选择课程功能') print('输入Q退出') if not os.path.exists(COURSE_FILE_PATH):
os.mkdir(COURSE_FILE_PATH) lis = os.listdir(COURSE_FILE_PATH)
if lis == []:
print('没有课程')
return False
else:
print('课程名称:')
for course_name in lis:
print(f'\t\t{course_name[:-4]}') name = input('请输入课程的名字') if name == 'Q':
print('退出成功')
return False if read_obj('course', name): obj_teacher = read_obj('teacher', LONG_DICT['teacher'])
obj_teacher.course.append(name)
obj_teacher.save() course_obj = read_obj('course', name) # type:Course
obj_teacher.add_course(course_obj)
course_obj.save() print('课程选择成功') else:
print('课程不存在') #修改成绩
@user('teacher')
def revision_score():
print('欢迎使用修改成绩功能') print('输入Q退出') if not os.path.exists(STUDENT_FILE_PATH):
os.mkdir(STUDENT_FILE_PATH) lis = os.listdir(STUDENT_FILE_PATH)
if lis == []:
print('没有学生')
return False
else:
print('学生名称:')
for course_name in lis:
print(f'\t\t{course_name[:-4]}') name = input('请输入学生的名字') if name == 'Q':
print('退出成功')
return False if read_obj('student', name): student_obj = read_obj('student', name) #type:Student score = input('请输入学生的成绩') student_obj.score = score student_obj.save() else:
print('学生不存在')
#功能字典
action ={
'1':login,
'2':check_student,
'3':check_course,
'4':choose_course,
'5':revision_score,
} #终端显示功能字典
msg = '''
------------------
| 1:登入账号 |
| 2:查看学生 |
| 3:查看课程 |
| 4:选择课程 |
| 5:修改成绩 |
| Q:退出功能 |
------------------
''' #老师视图运行
def teacher_action():
while True: print(msg) chiose = input('请选择') if chiose == 'Q': print('退出成功') ; break
elif chiose in action: action[chiose]()
else:print('请好好输入') ; continue

7.db

1.common_modles.py

'''
基类:
保存 学校类:姓名、地址、课程列表
添加课程 课程类:姓名、学生列表
添加学生
添加老师
'''
from api.common_api import save_obj #基类
class Base: #存对象
def save(self):
return save_obj(self) #定义学校
class School(Base): def __init__(self,name,addr):
self.name = name
self.addr = addr
self.course = []
self.teacher = []
self.student = [] def add_course(self,Course):
self.course.append(Course) #定义课程
class Course(Base): def __init__(self, name):
self.name = name
self.studet_list = []
self.teacher_list = [] def add_studet(self,Student):
self.studet_list.append(Student) def add_teacher(self,Teacher):
self.teacher_list.append(Teacher)

2.modles.py

'''
基类:
保存 管理员类:姓名、密码
创建学校
创建课程
创建老师 老师类:姓名、密码、课程列表
添加课程
修改分数 学生类:姓名、密码、学校、课程列表、分数
获取学校
选择学校
添加课程
'''
from db.common_modles import * #创建学生
class Student(Base): def __init__(self,name,pwd):
self.name = name
self.pwd = pwd
self.school = None
self.course = []
self.score = None def check_school(self):
return self.school def choose_school(self,obj):
self.school = obj.name def add_course(self,Course):
Course.add_studet(self) class Teacher(Base): def __init__(self,name,pwd):
self.name = name
self.pwd = pwd
self.course = []
self.school = None def revision_score(self,Student,score):
Student.score = score def add_course(self,Course):
Course.add_teacher(self) class Admin(Base): def __init__(self,name,pwd):
self.name = name
self.pwd = pwd def found_school(self,name,addr):
School(name,addr) def found_teacher(self,name,pwd):
Teacher(name,pwd) def found_course(self,name):
Course(name)

8.starts.py(运行程序)

from core.src import run
if __name__ == '__main__':
run()

9.test.py(生成第2里面的树状图)

import os
def dirsTree():
PATH = os.path.dirname(__file__)
print(PATH)
lis = os.listdir(PATH)
if lis != None:
for a in lis:
print(f'|___{a}')
if '.' not in a:
a_path = os.path.join(PATH,a)
lis_2 = os.listdir(a_path)
if lis_2 != None:
for b in lis_2:
if b != '__pycache__':
print(f'| |___{b}')
dirsTree()

python面向对象编程小程序- 选课系统的更多相关文章

  1. python flask构建小程序订餐系统--centos下项目开发环境的搭建

    1.项目开发环境的搭建(Linux环境) 1)软件的安装 我们搭建整个项目的过程中,我们需要用到下面的一些软件,但是这些软件的安装过程我们在这里不用说明.(因为windows软件的安装比较的简单,类似 ...

  2. python 面向对象编程 - 小游戏

    面向对象写的小游戏 欢迎玩耍 class Omnicience: camp = 'Omniscience' def __init__(self, name, atk=100, hp=1000, mp= ...

  3. Python - 面向对象编程 - 小实战(1)

    题目 设计一个类Person,生成若干实例,在终端输出如下信息 小明,10岁,男,上山去砍柴 小明,10岁,男,开车去东北 小明,10岁,男,最爱大保健 老李,90岁,男,上山去砍柴 老李,90岁,男 ...

  4. Python - 面向对象编程 - 小实战(2)

    需求 小明和小美都爱跑步 小明体重 75 公斤 小美体重 45 公斤 每次跑步会减肥 0.5 公斤 每次吃东西体重增加 1 公斤 需求分析 小明.小美都是一个具体的对象,他们都是人,所以应该抽象成人类 ...

  5. Python - 面向对象编程 - 小实战(3)

    需求 房子(House)有户型.总面积.家具名称列表:新房子没有任何的家具 家具(HouseItem)有名字.占地面积 席梦思(bed) 占地 4 平米 衣柜(bed) 占地 2 平米 餐桌(bed) ...

  6. Python flask构建微信小程序订餐系统

    第1章 <Python Flask构建微信小程序订餐系统>课程简介 本章内容会带领大家通览整体架构,功能模块,及学习建议.让大家在一个清晰的开发思路下,进行后续的学习.同时领着大家登陆ht ...

  7. Python flask构建微信小程序订餐系统☝☝☝

    Python flask构建微信小程序订餐系统☝☝☝ 一.Flask MVC框架结构 1.1实际项目结构 1.2application.py  项目配置文件 Flask之flask-script模块使 ...

  8. Python flask构建微信小程序订餐系统✍✍✍

    Python flask构建微信小程序订餐系统  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题, ...

  9. python面向对象编程学习

    python面向对象编程 基本概念理解 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作 ...

随机推荐

  1. 发布Qt Widgets桌面应用程序的方法(自定义进程步骤,用QT Creator直接生成)

    发布Qt Widgets桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它可以在桌面.移动平台以及嵌入式平台上运行.目前Qt 5介绍程序发布的文章帖子比较少.大家又非常想要知道如何发布Qt应用程序 ...

  2. DUI-分层窗口两种模式(SetLayeredWindowAttributes和UpdateLayeredWindow两种方法各有利弊)

    LayeredWindow提供两种模式: 1.使用SetLayeredWindowAttributes去设置透明度, 完成窗口的统一透明,此时窗口仍然收到PAINT消息, 其他应用跟普通窗口一样. 2 ...

  3. Windows服务(system权限)程序显示界面与用户交互,Session0通知Session1里弹出对话框(真的很牛) good

    源码资源下载:http://download.csdn.net/detail/stony1980/4512984   1.VC2008中编写“Windows服务”(Windows Service)程序 ...

  4. SAP TABLECONTROL 自定义SEARCH HELP

    项目上需要开发一个界面如下的应用程序.这是一个MB1A发料的辅助程序,限制住移动类型和在特定字段写入产品号. 这个应用程序的主要功能毫无疑问是通过BAPI实现的.但在TABLECONTROL中需要对填 ...

  5. python中的基本数据类型之 int bool str

    一.基本数据类型 1. int  ==>  整数.主要用来进行数学运算. 2.str  ==>  字符串.可以保存少量的数据,并进行相应的操作. 3.bool  =>  布尔值.判断 ...

  6. 宜信开源|手把手教你安装第一个LAIN应用

    LAIN是宜信公司大数据创新中心开发的开源PaaS平台.在金融的场景下,LAIN 是为解放各个团队和业务线的生产力而设计的一个云平台.LAIN 为宜信大数据创新中心各个团队提供了统一的测试和生产环境, ...

  7. VsCode 快捷键(Mac)

    按键使用符号: Shift (⇧) Control(或 Ctrl)⌃ Command(或 Cmd)⌘ Option(或 Alt)⌥ 打开文件夹 Cmd+o 调试 // 开启调试 F5 // 停止调试 ...

  8. centos7安装apache http server启动失败--Failed to start The Apache HTTP Server.

    centos7安装apache http server启动失败     除了nginx可以开启http服务外,apche http server也可以开启http服务,安装过程如下:1. 首先,检测是 ...

  9. 多语言应用性能监控系统:Elastic APM

    ▶ 概述 Elastic APM 是基于 Elastic Stack 构建的应用性能监控系统.通过 Elastic APM 可以监控应用程序,收集有关请求的响应时间.数据库查询.高速缓存调用.外部 H ...

  10. 深入理解Java虚拟机笔记——虚拟机类加载机制

    目录 概述 动态加载和动态连接 类加载的时机 类的生命周期 被动引用 例子一(调用子类继承父类的字段) 例子二(数组) 例子三(静态常量) 类加载的过程 加载 验证 准备 解析 符号引用 直接引用 初 ...