选课系统
程序员文章站
2022-05-15 14:21:14
选课系统 1.程序框架 2.文件夹建立 3.api 1.common_api.py 4.bil 1.common.py 5.conf 1.setting.py 6.core 1.admin.py 2.src.py 3.student.py 4.teacher.py 7.db 1.common_mod ......
选课系统
花了一晚上写的,可能还存在不足
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()