选课系统

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

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.pyimport 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.pyfrom 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.pyimport 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.pyfrom 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.pyfrom 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.pyfrom 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.pyfrom 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编写学生选课系统程序_python面向对象编程小程序- 选课系统相关推荐

  1. python oop求三角形面积公式_Python面向对象编程-OOP

    Python面向对象编程-OOP 20141216 Chenxin整理 OOP的3大特性: 封装,继承,多态 一.封装 OOP目的,OOP为了代码重用 :分解代码 ,最小化代码的冗余以及对现在的代码进 ...

  2. python制作微信小程序_python搭建微信小程序

    微信官方发布小程序自动化测试框架Minium.该框架支持使用Python或者Javascript编写自动化测试程序,可以运行在IDE.Android以及iOS三端. 由于是微信官方发布,该框架注定秒杀 ...

  3. python的核心理念是什么_Python 面向对象编程的核心概念知识点简介

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于 无量测试之道 ,作者: 无量测试之道 刚接触Python的新手.小白,可以复制下面 ...

  4. python聊天程序_python实现聊天小程序

    本文实例为大家分享了python实现聊天小程序的具体代码,供大家参考,具体内容如下 我这里实现的是客户端与服务端进行通信的功能,比较简单,与上一篇文章的群聊不太一样. 服务端server.py #-* ...

  5. python收银小程序_python面向过程编程小程序- 模拟超市收银系统

    6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式 ...

  6. python实例属性与类属性_Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法...

    1. 类的创建并实例化 类的定义:在Python中,类通过class 关键字定义.按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的.下面是一个 ...

  7. python背单词小程序_python背单词小程序

    import random as t #创建单词序列 words=("easy","difficult","answer","co ...

  8. python代码测试健康指数计算器_Python入门级别的小程序(BMI计算器)

    我是大涵呐,一个刚入Python的菜鸟,想通过自己了解的告诉同样刚学Python或者想学的朋友们一些基础的东西,希望对你们有所帮助. while True: # 1.输入身高(m).体重(kg) ,转 ...

  9. python编写一个欧拉筛法求素数的小程序

    n=eval(input()) #代码开始 def ouLaShai(upperBound): # 筛选器都标记为质数 filter=[True for i in range(upperBound+1 ...

最新文章

  1. 腾讯产品课观后感之定位2018-08-22
  2. 如何使用计算机中的导出,如何将iPhone手机中的音乐导出至电脑
  3. java ee实验新闻_JAVAEE第四次作业-JSP显示新闻
  4. vb.net 功能f8键事件_憋了三年,史上最全的 F1~F12 键用法整理出来了!
  5. getmodifiers java_getModifiers()方法如何计算多个修饰符的值?
  6. 游戏软件的测试方法简述
  7. 2021年中国电子高度表市场趋势报告、技术动态创新及2027年市场预测
  8. 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile
  9. Emgu-WPF学习使用-Rectangle识别
  10. history(路由控制)
  11. 二进制BIN文件比较工具,也适合用来对比解析BIN文件,发现数据存储规律,更改数据。
  12. abp框架java_ABP框架的体系结构及模块系统讲解
  13. 漫谈TCP-AIMD/BBR的公平性以及buffer bloat
  14. 球面绘制六边形——二维平面坐标转成三维球面坐标
  15. Jenkins整合slaver完整搭建
  16. GitHub——修改DNS提高git clone速度
  17. Python - GPA的计算
  18. 三级网络技术_无线局域网设备安装与调试
  19. 强大的代码编档工具—Doxygen
  20. 向Gitlab项目工程提交代码时出现无法推送的问题

热门文章

  1. MyBatis-Plus: 谨慎入坑
  2. css中ul位置移动,css中ul怎么定位
  3. SpringBoot默认日志配置输出级别
  4. Springboot启动扩展点超详细总结,再也不怕面试官问了
  5. 关于页面之间局部显示的几种方式
  6. Java双端队列Deque及其应用
  7. echarts 水桶注水式柱状图
  8. Django 的系统时区设置 RPC
  9. 7月-伟大的事业,一般都是在下半年完成的
  10. UVa 1347 旅行