一、功能简要

基本实现以下功能,但是有部分地方由于时间关系并未写,而且并未做细微的完善,大致功能完成。
角色:学校、学员、课程、讲师
要求:
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. 《自拍教程13》Windows的常用命令

    这些是Windows系统自带的常用DOS命令集合, 先大概了解下,当然如果能熟练掌握那最好了. 后续思维篇,思维篇还会结合不通的测试场景, 届时将列出这些命令更详细的使用描述. table.dataf ...

  2. CVE-2020-0618 SQL Server远程代码执行

    1.简介 SQL Server Reporting Services(SSRS)提供了一组本地工具和服务,用于创建,部署和管理移动报告和分页报告. SSRS Web应用程序中的功能允许低特权用户帐户通 ...

  3. SpringMVC版本报错解决办法

    报错代码: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  4. 消息队列MQ(一)

    消息队列 为什么要用消息队列,都有什么优缺点? 要问的是消息队列都有哪些场景,然后项目里具体实现的什么场景,你在这个场景里用的什么消息队列? 期望的回答是,你们公司有个什么业务,这个业务场景有什么技术 ...

  5. VMware使用与安装

    VMware安装 下载完Vmware -> 双击打开安装包 -> 选择下一步(如下图界面) 选择接受协议,点击下一步 选择经典进行安装.这个是默认安装,会把默认插件安装到相对应的路径 选择 ...

  6. MySQL基础(1) | 数据类型

    MySQL基础(1) | 数据类型 数值类型 TINYINT #小整数值,1 字节,有符号(-128,127),无符号(0,255) SMALLINT #大整数值,2 字节 MEDIUMINT #大整 ...

  7. beego框架之orm模块——mysql

    参考beego原文:http://beego.me/docs/mvc/model/orm.md#main.go beego ORM 是一个强大的 Go 语言 ORM 框架,orm模块主要是处理MVC中 ...

  8. win10自带邮箱如何使用?win10自带邮箱如何同步qq邮箱邮件?

    win10自带邮箱如何使用? 相信很多小伙伴在登录win10自带的邮箱登录QQ邮箱时,显示同步失败或者登录超时,但又找不到相关的资料,下面是我自己邮箱的操作流程,小伙伴可以尝试一下,有什么问题留言即可 ...

  9. Linux 文件(持续更新)

    一.文件类型 Linux操作系统把所有内容(文件.图片.视频.设备)都当作文件看待.处理,即一切皆文件. Linux系统把所有文件分为七种类型: 文件类型 文件类型标识 说明 使用ls -l命令查看文 ...

  10. 浅谈python的第三方库——pandas(一)

    pandas作为python进行数据分析的常用第三方库,它是基于numpy创建的,使得运用numpy的程序也能更好地使用pandas. 1 pandas数据结构 1.1 Series 注:由于pand ...