一、功能简要

基本实现以下功能,但是有部分地方由于时间关系并未写,而且并未做细微的完善,大致功能完成。
角色:学校、学员、课程、讲师
要求:
1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
5. 创建讲师角色时要关联学校,
6. 提供两个角色接口
6.1 学员视图, 可以注册, 交学费, 选择班级,
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里 二、代码解析  
(1)文件目录:

  

(2)代码

start.py:

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
#Author:chenxz
import os,sys
base_path=os.path.dirname(os.path.dirname(__file__))
sys.path.append(base_path)
from core import main #开始启动程序
if __name__ == '__main__':
Mainprogram_obj=main.Mainprogram()
Mainprogram_obj.run()

start.py

setting:

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
#Author:chenxz
import logging
import os,sys BASE_DIR=base_path=os.path.dirname(os.path.dirname(__file__))
split=os.path.sep
#存放学校数据文件路径
school_file_path=base_path+split+'db'+split+'school'+split+'school_data' #日志文件
LOG_FILE=BASE_DIR+split+'log'+split+'service.log'
#日志级别和格式设置
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename=LOG_FILE,
filemode='a+') if __name__ == '__main__':
print(LOG_FILE)

setting.py

main:

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
#Author:chenxz
import os,sys
import pickle
base_path=os.path.dirname(os.path.dirname(__file__))
sys.path.append(base_path)
from conf import setting
from core import resource class Student_view(object):
'''
学生视觉类
'''
def __init__(self):
self.Admin_view_obj = Admin_view()
self.school_data = self.Admin_view_obj.school_data
def run_view(self):
'''
执行学生视觉,选择登录或者注册
:return:
'''
setting.logging.debug('run_student_view')
while True:
print('=====已有学校=======')
for i in self.school_data:
print('学校:%s ,地址:%s' % (i, self.school_data[i].addr))
school_choice=input('请输入你要管理的学校名(q退出r返回):')
if school_choice in self.school_data:
self.school_obj=self.school_data[school_choice]
while True:
def_dict={'':'register','':'student_login'}
for i,j in enumerate(def_dict):
print(i+1,def_dict[j])
def_choice=input('请输入你的选择(q退出r返回):')
if def_choice.isdigit():
if 0 < int(def_choice) <= len(def_dict):
if hasattr(self,def_dict[def_choice]):
getattr(self,def_dict[def_choice])()
else:
print('没有这个功能方法')
continue
else:
print('输入的数字不正确!')
continue
elif def_choice == 'r':
break
elif def_choice == 'q':
exit()
else:
print('输入必须是数字!')
continue
elif school_choice == 'r':
break
elif school_choice == 'q':
exit()
def register(self,):
'''
注册方法
:return:
'''
setting.logging.debug('学生开始注册')
while True:
student_name=input('请输入学生名称:')
student_password= input('请输入密码:')
student_age = input('请输入学生年纪:')
if student_name in self.school_obj.student_dict:
print('此学生已经注册')
continue
else:
student_obj=resource.Student(student_name,student_password,student_age)
self.school_obj.student_dict[student_name]=student_obj
self.school_data[self.school_obj.name]=self.school_obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('成功添加学生%s' % student_name)
break def student_login(self):
'''
学生登录校验以及选择登录成功后的操作
:return:
'''
while True:
student_user = input('请输入你的用户名:').strip()
student_password = input('请输入你的密码:').strip()
if student_user in self.school_obj.student_dict and self.school_obj.student_dict[
student_user].password == student_password:
print('%s用户登录成功' % student_user)
student_obj = self.school_obj.student_dict[student_user]
while True:
def_dict = {'': 'change_info', '': 'tell_info', '': 'test1', '': 'test2',
'': 'test3'}
for i in def_dict:
print(i, def_dict[i])
def_choice = input("请输入你的选择(q退出r返回):")
if def_choice.isdigit():
if 0 < int(def_choice) <= len(def_dict):
if hasattr(self, def_dict[def_choice]):
getattr(self, def_dict[def_choice])(student_obj)
else:
print('没有这个功能方法')
continue
else:
print('输入的数字不正确!')
continue
elif def_choice == 'r':
break
elif def_choice == 'q':
exit()
else:
print('输入必须是数字!')
continue
break
else:
print('用户密码不正确')
continue def tell_info(self,obj):
'''
查看学生信息
:param obj: 学生对象
:return:
'''
print('''
姓名:%s
年纪:%s
'''%(obj.name,obj.age)) def change_info(self,obj):
'''
修改学生信息
:param obj: 学生对象
:return:
'''
print('change_info') student_password = input('请输入新密码:')
student_age = input('请输入老师新年纪:')
student_name=obj.name
obj.password=student_password
obj.age=student_age
self.school_data[self.school_obj.name].student_name=obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('修改信息成功' ) class Teacher_view(object):
'''
老师视觉类
'''
def __init__(self):
self.Admin_view_obj=Admin_view()
self.school_data=self.Admin_view_obj.school_data
def run_view(self):
'''
执行老师视觉,进行登录以及选择对应的操作
:return:
'''
setting.logging.debug('run Teacher_view')
self.Admin_view_obj.show_school_list()
choice_school=input('请选择你要进入的学校名称:').strip()
if choice_school in self.school_data:
self.school_obj=self.school_data[choice_school]
while True:
teacher_user=input('请输入你的用户名:').strip()
teacher_password=input('请输入你的密码:').strip()
if teacher_user in self.school_obj.teacher_dict and self.school_obj.teacher_dict[teacher_user].password==teacher_password:
print('%s用户登录成功'%teacher_user)
teacher_obj=self.school_obj.teacher_dict[teacher_user]
while True:
def_dict = {'': 'teaching', '': 'tell_info', '': 'show_classes', '': 'show_student_scord',
'': 'change_info'}
for i in def_dict:
print(i, def_dict[i])
def_choice=input("请输入你的选择(q退出r返回):")
if def_choice.isdigit():
if 0 < int(def_choice) <= len(def_dict):
if hasattr(self, def_dict[def_choice]):
getattr(self, def_dict[def_choice])(teacher_obj)
else:
print('没有这个功能方法')
continue
else:
print('输入的数字不正确!')
continue
elif def_choice == 'r':
break
elif def_choice == 'q':
exit()
else:
print('输入必须是数字!')
continue
break
else:
print('用户密码不正确')
continue
else:
print('学校名输入错误!')
def teaching(self,obj):
'''
授课
:param obj: 老师对象
:return:
'''
print('%s is teaching'%obj.name) def tell_info(self,obj):
'''
查看老师信息
:param obj: 老师对象
:return:
'''
print('''
姓名:%s
年纪:%s
工资:%s
'''%(obj.name,obj.age,obj.salary)) def show_classes(self,obj):
'''
查看授课班级
:param obj: 老师对象
:return:
'''
print('====老师授课班级===')
for i in obj.classes:
print(i) def show_course(self,obj):
print('show_student_scord,未写') def change_info(self,obj):
'''
修改老师信息
:param obj: 老师对象
:return:
'''
print('change_info')
#teacher_name = input('请输入新名称:')
teacher_password = input('请输入新密码:')
teacher_salary = input('请输入老师新工资:')
teacher_age = input('请输入老师新年纪:')
teacher_name=obj.name
obj.password=teacher_password
obj.salary=teacher_salary
obj.age=teacher_age
self.school_data[self.school_obj.name].teacher_name=obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('修改信息成功' ) class Admin_view(object):
'''
管理员视图类
'''
def __init__(self):
self.f=open(setting.school_file_path,'rb')
self.school_data=pickle.loads(self.f.read())
def __del__(self):
pass
def run_view(self):
'''
执行管理员视图,并选择你要做的操作
:return:
'''
setting.logging.debug('run Admin_view')
def_dict = {'': 'add_school', '': 'show_school_list', '': 'del_school','':'manage_school'}
while True:
print('''
==========chen_school==========
''')
for i in def_dict:
print(i, def_dict[i])
choice = input('请选择进入的视图(q退出,r返回):')
if choice.isdigit():
if 0 < int(choice) <= len(def_dict):
if hasattr(self,def_dict[choice]):
getattr(self,def_dict[choice])()
else:
print('没有这个功能方法')
continue
else:
print('输入的数字不正确!')
continue
elif choice == 'r':
break
elif choice == 'q':
exit()
else:
print('输入必须是数字!')
continue
def add_school(self):
'''
添加学校方法
:return:
'''
school_name = input('请输入学校名:')
school_addr = input('请输入学校地址:')
school_obj = resource.School(school_name, school_addr)
self.school_data[school_name] = school_obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('添加学校%s成功'%school_name) def show_school_list(self):
'''
查看所有的学校
:return:
'''
print('=====已有学校=======')
for i in self.school_data:
print('学校:%s ,地址:%s'%(i,self.school_data[i].addr))
def del_school(self):
'''
删除学校
:return:
'''
print('=====已有学校=======')
for i in self.school_data:
print('学校:%s ,地址:%s' % (i, self.school_data[i].addr))
del_choice=input('请选择你要删除的学校名(r返回):')
if del_choice in self.school_data: del self.school_data[del_choice]
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('删除%s学校成功'%del_choice)
else:
print('你输入的学校不存在') def manage_school(self):
'''
管理学校方法,进行管理老师学生课程班级等作用
:return:
'''
while True:
print('=====已有学校=======')
for i in self.school_data:
print('学校:%s ,地址:%s' % (i, self.school_data[i].addr))
school_choice=input('请输入你要管理的学校名(q退出r返回):')
if school_choice in self.school_data:
school_obj=self.school_data[school_choice]
while True:
manage_list=['add_teacher','add_classes','add_course','show_teacher','show_classes','show_course','del_teaher','del_classes','del_course']
for i,j in enumerate(manage_list):
print(i+1,j)
manage_choice=input('请输入你的选择(q退出r返回):')
if manage_choice.isdigit():
if 0 < int(manage_choice) <= len(manage_list):
if hasattr(self, manage_list[int(manage_choice)-1]):
getattr(self, manage_list[int(manage_choice)-1])(school_obj)
else:
print('没有这个功能方法')
continue
else:
print('输入的数字不正确!')
continue
elif manage_choice == 'r':
break
elif manage_choice == 'q':
exit()
else:
print('输入必须是数字!')
continue
elif school_choice == 'r':
break
elif school_choice == 'q':
exit()
else:
print('输入的学校不存在')
continue
def add_teacher(self,school_obj):
'''
添加老师
:param school_obj: 要管理的学校对象
:return:
'''
while True:
teacher_name=input('请输入老师名称:')
teacher_password= input('请输入密码:')
teacher_salary = input('请输入老师工资:')
teacher_age = input('请输入老师年纪:')
if teacher_name in school_obj.teacher_dict:
print('此老师已经注册')
continue
else:
teacher_obj=resource.Teacher(teacher_name,teacher_password,teacher_salary,teacher_age)
school_obj.teacher_dict[teacher_name]=teacher_obj
self.school_data[school_obj.name]=school_obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('成功添加老师%s' % teacher_name)
break
def add_classes(self,school_obj):
'''
添加班级
:param school_obj: 要管理的学校对象
:return:
'''
while True:
classes_name=input('请输入班级名称:')
if classes_name in school_obj.classes_dict:
print('此班级已经存在')
continue
else:
classes_obj=resource.Classes(classes_name)
school_obj.classes_dict[classes_name]=classes_obj
self.school_data[school_obj.name]=school_obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('成功添加班级%s' % classes_name)
break
def add_course(self,school_obj):
'''
添加课程
:param school_obj: 要管理的学校对象
:return:
'''
while True:
course_name=input('请输入课程名称:')
course_pay=input('请输入课程价格:')
if course_name in school_obj.course_dict:
print('此课程已经存在')
continue
else:
course_obj=resource.Course(course_name,course_pay)
school_obj.course_dict[course_name]=course_obj
self.school_data[school_obj.name]=school_obj
f = open(setting.school_file_path, 'wb')
f.write(pickle.dumps(self.school_data))
f.close()
print('成功添加课程%s' % course_name)
break
def show_teacher(self,school_obj):
'''
查看老师
:param school_obj: 要管理的学校对象
:return:
'''
teacher_dict=self.school_data[school_obj.name].teacher_dict
for i in teacher_dict:
print('姓名:%s'%i)
def show_classes(self,school_obj):
'''
查看班级
:param school_obj: 要管理的学校对象
:return:
'''
classes_dict=self.school_data[school_obj.name].classes_dict
for i in classes_dict:
print('班级:%s'%i)
def show_course(self,school_obj):
'''
查看课程
:param school_obj: 要管理的学校对象
:return:
'''
course_dict=self.school_data[school_obj.name].course_dict
for i in course_dict:
print('课程:%s'%i)
def del_teaher(self,school_obj):
print('删除老师,未写')
def del_classes(self,school_obj):
print('删除班级,未写')
def del_course(self,school_obj):
print('删除课程,未写') class Mainprogram(object):
'''
主程序类,开启程序,并选择不同视图进入
'''
def __init__(self):
pass
def run(self):
'''
按需选择不同视图
:return:
'''
setting.logging.debug('开始启动程序...')
view_dict = {'': 'Student_view', '': 'Teacher_view', '': 'Admin_view'}
view_list = [Student_view, Teacher_view, Admin_view]
while True:
print('''
==========chen_school==========
''')
for i in view_dict:
print(i, view_dict[i])
choice = input('请选择进入的视图(q退出):')
if choice.isdigit():
if 0 < int(choice) <= len(view_dict):
obj=view_list[int(choice) - 1]()
obj.run_view()
else:
print('输入的数字不正确!')
continue
elif choice=='q':
break
else:
print('输入必须是数字!')
break if __name__ == '__main__':
Mainprogram_obj=Mainprogram()
Mainprogram_obj.run()

resource.py:

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
#Author:chenxz class School(object):
'''
学校类
'''
def __init__(self,name,addr,):
self.name=name
self.addr=addr
self.teacher_dict={}
self.student_dict={}
self.classes_dict={}
self.course_dict={} class Teacher(object):
'''
老师类
'''
def __init__(self,name,password,salary,age):
self.name=name
self.salary=salary
self.age=age
self.password=password
self.classes={}
self.course={} class Classes(object):
'''
班级类
'''
def __init__(self,name):
self.name=name
self.student={}
self.course={} class Course(object):
'''
课程类
'''
def __init__(self,name,pay):
self.name=name
self.pay=pay
self.student={} class Student(object):
'''
学生类
'''
def __init__(self,name,password,age):
self.name=name
self.age=age
self.password=password

resource.py

schoool.py:

 import pickle
import os,sys
base_path=os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
split=os.path.sep
sys.path.append(base_path)
from core import resource
from conf import setting def add_achool():
'''
重置学校文件数据的方法
:return:
'''
school_name=input('请输入学校名:')
school_addr=input('请输入学校地址:')
school_obj=resource.School(school_name,school_addr)
schoo_data={school_name:school_obj}
schoo_data_path=setting.school_file_path
data=pickle.dumps(schoo_data)
f=open(schoo_data_path,'wb')
f.write(data)
f.close() def open_school_file():
'''
查看学校文件
:return:
'''
f = open(setting.school_file_path, 'rb')
school_data = pickle.loads(f.read())
print(school_data['beijing'].teacher_list[0].name) if __name__ == '__main__':
add_achool()

school.py

选课系统项目_python的更多相关文章

  1. python 入门基础23 选课系统 项目

    选课系统 代码地址:github_code # 选课系统 # 角色:学校.学员.课程.讲师 # 要求: # 1. 创建北京.上海 2 所学校 # 2. 创建linux , python , go 3个 ...

  2. day27、28 二十八、项目:选课系统

    选课系统 作业要求 角色:学校.学生.课程.讲师 要求: 1. 创建北京.上海 2 所学校 ----> 创建学校 2. 创建linux , python , go 3个课程 , linux\py ...

  3. Python开发【项目】:选课系统-改良版

    程序名称: 选课系统 角色:学校.学员.课程.讲师要求:1. 创建北京.上海 2 所学校2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开3. ...

  4. C#项目 学生选课系统 C#窗口 Winform项目 项目源码及使用说明

    这是一个学生选课信息管理系统,使用VS2010+SQL2008编写,VS2017正常使用. 项目源码下载地址 https://gitee.com/whuanle/xkgl 笔者录了两个视频,打开项目源 ...

  5. python【项目】:选课系统【简易版】

    功能要求 角色:学校.学员.课程.讲师要求:1. 创建学校2. 创建课程3. 课程包含,周期,价格,通过学校创建课程4. 通过学校创建班级, 班级关联课程.讲师5. 创建学员时,选择学校,关联班级5. ...

  6. python开发项目:学生选课系统

    程序要求:1.创建北京.上海两所学校(分析:通过学校类实例化两个学校实例) 2.创建Linux.python.go三个课程,Linux\go在北京开,Linux在上海开(创建Linux.python. ...

  7. 一个简单的python选课系统

    下面介绍一下自己写的python程序,主要是的知识点为sys.os.json.pickle的模块应用,python程序包的的使用,以及关于类的使用. 下面是我的程序目录: bin是存放一些执行文件co ...

  8. 学生选课系统 c语言

    /********************************* *主题:学生选修课程系统设计 * *设计要求: *1.添加功能:程序能够任意添加课程和学生记录,可提供选择界面供用户选择所需要添加 ...

  9. Python3 之选课系统

    项目介绍:项目名称:(oldboy选课系统)项目功能: 分为 学员视角, 老师视角 , 管理员视角 学员视角{ (注册 登录 个人中心 选课 学习 上课) 登录 就是登录 注册: 填写 资料 信息 完 ...

随机推荐

  1. HessianSharp如何部署到IIS7上?

    第一:添加映射 第二:选择经典

  2. VFP CursorAdapter 起步一(作者:Doug Hennig 译者:fbilo)

    CursorAdapter 类是 VFP 8 中最重要的新功能之一,因为它提供了一种简单易用.接口统一的访问远程数据源方式.在这个月的文章里,Dung Hennig 将向你展示 CursorAdapt ...

  3. 服务器安全之iptables

    服务器安全之iptables iptables防火墙简介 Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的安全自由的基于包过滤的防火墙 ...

  4. 一键安装php5.6.40脚本(LAMP环境)

    #!/bin/bash #安装依赖软件 yum -y install libxml2-devel curl-devel libjpeg libjpeg-devel libpng libpng-deve ...

  5. 你应该了解的 Java SPI 机制

    前言 不知大家现在有没有去公司复工,我已经在家办公将近 3 周了,同时也在家呆了一个多月:还好工作并没有受到任何影响,我个人一直觉得远程工作和 IT 行业是非常契合的,这段时间的工作效率甚至比在办公室 ...

  6. apereo cas 小记01--服务器搭建01

    ---恢复内容开始--- github repository:  apereo/cas 一,获取项目 链接:https://github.com/apereo/cas-overlay-template ...

  7. c# 匿名方法(函数) 匿名委托 内置泛型委托 lamada

    匿名方法:通过匿名委托 .lamada表达式定义的函数具体操作并复制给委托类型: 匿名委托:委托的一种简单化声明方式通过delegate关键字声明: 内置泛型委托:系统已经内置的委托类型主要是不带返回 ...

  8. 零基础Python应该怎样学习呢?(附视频教程)

    Python应该怎样学习呢? 阶段一:适合自己的学习方式 对于零基础的初学者来说,最迷茫的是不知道怎样开始学习?那这里小编建议可以采用视频+书籍的方式进行学习.看视频学习可以让你迅速掌握编程的基础语法 ...

  9. Android埋点方案的简单实现-AOP之AspectJ

    个人博客 http://www.milovetingting.cn Android埋点方案的简单实现-AOP之AspectJ AOP的定义 AOP为Aspect Oriented Programmin ...

  10. PHP0023:PHP 相册管理案例