python编写学生选课系统程序_python面向对象编程小程序- 选课系统
选课系统
花了一晚上写的,可能还存在不足
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面向对象编程小程序- 选课系统相关推荐
- python oop求三角形面积公式_Python面向对象编程-OOP
Python面向对象编程-OOP 20141216 Chenxin整理 OOP的3大特性: 封装,继承,多态 一.封装 OOP目的,OOP为了代码重用 :分解代码 ,最小化代码的冗余以及对现在的代码进 ...
- python制作微信小程序_python搭建微信小程序
微信官方发布小程序自动化测试框架Minium.该框架支持使用Python或者Javascript编写自动化测试程序,可以运行在IDE.Android以及iOS三端. 由于是微信官方发布,该框架注定秒杀 ...
- python的核心理念是什么_Python 面向对象编程的核心概念知识点简介
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于 无量测试之道 ,作者: 无量测试之道 刚接触Python的新手.小白,可以复制下面 ...
- python聊天程序_python实现聊天小程序
本文实例为大家分享了python实现聊天小程序的具体代码,供大家参考,具体内容如下 我这里实现的是客户端与服务端进行通信的功能,比较简单,与上一篇文章的群聊不太一样. 服务端server.py #-* ...
- python收银小程序_python面向过程编程小程序- 模拟超市收银系统
6.16自我总结 功能介绍 程序功能介绍: 商品信息再读取修改买卖均已xlsx格式 且生成购物记录也按/用户名/购买时间.xlsx格式生成 账号密码输入错误三次按照时间进行冻结 用户信息已json格式 ...
- python实例属性与类属性_Python 面向对象编程:类的创建与初始化、实例属性与方法、类属性与方法...
1. 类的创建并实例化 类的定义:在Python中,类通过class 关键字定义.按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的.下面是一个 ...
- python背单词小程序_python背单词小程序
import random as t #创建单词序列 words=("easy","difficult","answer","co ...
- python代码测试健康指数计算器_Python入门级别的小程序(BMI计算器)
我是大涵呐,一个刚入Python的菜鸟,想通过自己了解的告诉同样刚学Python或者想学的朋友们一些基础的东西,希望对你们有所帮助. while True: # 1.输入身高(m).体重(kg) ,转 ...
- python编写一个欧拉筛法求素数的小程序
n=eval(input()) #代码开始 def ouLaShai(upperBound): # 筛选器都标记为质数 filter=[True for i in range(upperBound+1 ...
最新文章
- 腾讯产品课观后感之定位2018-08-22
- 如何使用计算机中的导出,如何将iPhone手机中的音乐导出至电脑
- java ee实验新闻_JAVAEE第四次作业-JSP显示新闻
- vb.net 功能f8键事件_憋了三年,史上最全的 F1~F12 键用法整理出来了!
- getmodifiers java_getModifiers()方法如何计算多个修饰符的值?
- 游戏软件的测试方法简述
- 2021年中国电子高度表市场趋势报告、技术动态创新及2027年市场预测
- 如何根据configure.ac和Makefile.am为开源代码产生当前平台的Makefile
- Emgu-WPF学习使用-Rectangle识别
- history(路由控制)
- 二进制BIN文件比较工具,也适合用来对比解析BIN文件,发现数据存储规律,更改数据。
- abp框架java_ABP框架的体系结构及模块系统讲解
- 漫谈TCP-AIMD/BBR的公平性以及buffer bloat
- 球面绘制六边形——二维平面坐标转成三维球面坐标
- Jenkins整合slaver完整搭建
- GitHub——修改DNS提高git clone速度
- Python - GPA的计算
- 三级网络技术_无线局域网设备安装与调试
- 强大的代码编档工具—Doxygen
- 向Gitlab项目工程提交代码时出现无法推送的问题