1、老师的要求是做学校管理、学生、老师的接口,本文档,只做了学校管理的接口

2、具体要求:

角色:学校、学员、课程、讲师
要求: 1. 创建北京、上海 2 所学校
2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
3. 课程包含,周期,价格,通过学校创建课程
4. 通过学校创建班级, 班级关联课程、讲师
5. 创建学员时,选择学校,关联班级
  创建讲师角色时要关联学校,
6. 提供两个角色接口    
6.1 学员视图, 可以注册, 交学费, 选择班级,    
6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩    
6.3 管理视图,创建讲师, 创建班级,创建课程
7. 上面的操作产生的数据都通过pickle序列化保存到文件里

3、用到的知识点

类:分别定义学校、老师、学生,学校下有课程、班级、老师列表作为属性,有获取课程列表、班级列表和老师列表的方法

用户界面:根据用户身份选择不同的管理接口

pickle:用户通过程序进行的修改,通过pickle dump到文件中,学校的信息进schooldump文件,老师的进teacherdump文件,学生的进studentdump文件。用load能读出dump进去的对象,然后通过类的方法实现一些功能。

4、代码

类定义classdefine.py:

#学校类
#属性:地点,课程,班级,老师
#方法:开设课程,建立班级,招募老师
class School(object):
def __init__(self,location):
self.location=location
self.courselist=[]
self.grouplist=[]
self.teacherlist=[]
print("%s 学校成立。"%self.location) def creatcouse(self):
coname = input("请输入课程名字:")
coprice = input("请输入课程价格:")
coperiod = input("请输入课程周期:")
coobj = Course(coname, coprice, coperiod)
self.courselist.append(coobj)
return def creatteacher(self):
tname = input("请输入老师姓名:")
tage = input("请输入老师年龄:")
tgender = input("请输入老师性别:")
tobj = Teacher(tname, tgender, tage)
self.teacherlist.append(tobj)
return def creatgroup(self):
cname=input("请输入课程名字:")
gname=input("请输入班级名字:")
gteacher=input("请输入带班老师名字:")
gobj=Group(cname,gname,gteacher)
self.grouplist.append(gobj) def getcourses(self):
lenth=len(self.courselist)
if lenth==0:
print("%s学校不开设课程:"%self.location)
else:
print("%s 学校开设以下课程:" % (self.location))
i=0
while i<lenth:
print(self.courselist[i].name)
i+=1
return def getteacher(self):
lenth=len(self.teacherlist)
if lenth==0:
print("%s学校没有老师:"%self.location)
else:
print("%s 学校有以下老师:" % (self.location))
i=0
while i<lenth:
print(self.teacherlist[i].name)
i+=1
return def getgroup(self):
lenth=len(self.grouplist)
if lenth==0:
print("%s学校没有班级:"%self.location)
else:
print("%s 学校有以下班级:" % (self.location))
i=0
while i<lenth:
print(self.grouplist[i].name)
i+=1
return
#课程类
#属性:课程名字、价格、课程时长
class Course(object):
def __init__(self,name,price,period):
self.name=name
self.price=price
self.period=period
#班级类
#属性:课程名字,班级名字、带班老师名字
class Group(object):
def __init__(self,cname,gname,gteacher):
self.cname=cname
self.gname=gname
self.teacher=gteacher #人类,作为老师和学生类的基类
#属性:姓名、性别、年龄
class People(object):
def __init__(self,name,gender,age):
self.name=name
self.gender=gender
self.age=age #老师类
#属性:人的基础上增加 所属学校,可以教授的课程列表,管理的班级列表
class Teacher(People):
def __init__(self,name,gender,age):
super(Teacher,self).__init__(name,gender,age)
self.courselist=[] #学生类
#属性:人的基础上增加 所属学校,班级列表
class Student(People):
def __init__(self,name,gender,age):
super(Student,self).__init__(name,gender,age)
self.grouplist=[]

学校管理接口schoolmanage.py:

from selectsystem.classdefine.classdefine import *
import pickle
# 创建两个学校SH和BJ,分别代表上海和北京分校
SH= School("上海")
BJ = School("北京") def schoolmanage():
#学校管理视图
print("学校管理视图")
chooseshool=input("请选择您要管理的学校。\n1、上海\n2、北京\n3、退出\n")
while True:
if chooseshool=="":
schoolobj=SH
break
elif chooseshool=="":
schoolobj=BJ
break
elif chooseshool=="":
exit()
else:
chooseshool=input("请选择您要管理的学校。\n1、上海\n2、北京\n3、退出\n") while True:
choice1 = input("请选择您要做的操作。\n1、创建课程\n2、招聘教师\n3、为课程创建班级\n4、保存\n5、目前学校信息\n6、退出\n")
if choice1=="":
schoolobj.creatcouse()
continue
elif choice1=="":
schoolobj.creatteacher()
continue
elif choice1=="":
schoolobj.creatgroup()
elif choice1=="":
with open(r"C:\Users\chinalife\workspace\selectsystem\doc\schooldump", 'wb') as fd:
pickle.dump(schoolobj, fd, 0)
continue
elif choice1=='':
with open(r"C:\Users\chinalife\workspace\selectsystem\doc\schooldump", 'rb') as fd:
schoolobj=pickle.load(fd)
schoolobj.getcourses()
schoolobj.getteacher()
schoolobj.getgroup()
elif choice1=='':
break
else:
choice1 = input("请选择您要做的操作。\n1、招聘教师\n2、创建课程\n3、为课程创建班级\n4、退出\n")

主程序入口main.py:

from selectsystem.classdefine.classdefine import *
from selectsystem.code.schoolmanage import *
from selectsystem.code.teachermanage import *
from selectsystem.code.studentmanage import * role=input("Who are you?Administor, teacher or student?")
if role=="Administor":
schoolmanage()
elif role=="teacher":
teachermanage()
elif role=="student":
studentmanage()

目前老师的管理接口和学生的管理接口还没有细化,但是学校的管理接口已经做好,类似的写逻辑就可以了。

5、后续可以改进的地方

首先,主程序入口仅靠用户输入自己的身份,实属简单做法,可以将之前做的用户登录验证的功能加进来。

第二,在学校管理接口中,增加班级、关联老师,全凭输入,可以加入验证功能,保证只能在已设课程下新建班级,选择已聘用的老师,即范围限定在学校对象中的课程列表和老师列表中。即数据校验功能,防止输入不合理的数据

 

python--学校管理系统(只做了学校管理的接口)的更多相关文章

  1. [terry笔记]学校管理系统

    如下是要求: # 角色:学校.学员.课程.讲师# 要求:# 1. 创建北京.上海 2 所学校# 2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上 ...

  2. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  3. python脚本实现集群检测和管理

    python脚本实现集群检测和管理 场景是这样的:一个生产机房,会有很多的测试机器和生产机器(也就是30台左右吧),由于管理较为混乱导致了哪台机器有人用.哪台机器没人用都不清楚,从而产生了一个想法-- ...

  4. python主要用来做什么

    python这门编程语言在国外极受欢迎,但在国内使用还不是极普遍. 由于python编程效率极高,现在国内的使用者也开始变得越来越多. python主要用来做什么?这个语言到底有哪些作用呢? 下面主是 ...

  5. BAT线下战争:巨额投资或培养出自己最大对手(包括美团、58、饿了么在内的公司都在计划推出自己的支付工具和金融产品,腾讯只做2不做O)

    BAT线下战争:巨额投资或培养出自己最大对手 2015年10月12日09:49   <财经>杂志    我有话说(18人参与) 收藏本文        BAT大举投资线下公司,看似咄咄逼人 ...

  6. 基于Quqrtz.NET 做的任务调度管理工具

    基于Quqrtz.NET 做的任务调度管理工具 国庆前,需求让我看了一下任务调度的数据表设计.和之前一样,有100多个字段,p1 ~ p100, 我说这是干嘛啊!按这写,写死去了! 然后在网上搜了一下 ...

  7. 学了 Python 能用来做这些!

    来源商业新知网,原标题:学了 Python 能用来做什么? 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的.随着近年大数据.人工智能的兴起,Python 越来越多的出现在人们 ...

  8. 为什么学Python语言,只需四步全面了解Python语言

    为什么学Python语言,只需四步全面了解Python语言每个时代都会悄悄犒赏会选择的人,Python现在风口的语言Python--第三大主流编程语言Python , 是一种面向对象的解释型计算机程序 ...

  9. 安装python发行版本,并用conda来管理Environments,Python,packages

    简介:anaconda指的是一个开源的python发行版本,其包含了conda.Python等180多个科学包及其依赖项. 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 515 MB ...

随机推荐

  1. 【学习OpenCV】——2.4对图像进行平滑处理

    作者基于WIN10+VS2015+OpenCV3.0.0 (本人在学习的时候参考了xiahouzuoxin 的有关文章,在此感谢 ) 图像平滑与图像模糊是同一概念,主要用于图像的去噪.平滑要使用滤波器 ...

  2. Windows下WebStorm使用SVN(转)

    安装了WebStorm之后,想配置svn,结果在file->settings->Version Contorl->subversion->with conmand line c ...

  3. 移动端表层div滑动,导致底层body滑动(touchmove的阻止)

    body很长,可以滑动,body头部有一个模拟下拉的选择框,下拉选择有滚动轴 我给body一个overflow:hidden和高度是没有用的.手机网站上背景还是可以滑动,然后我给body一个touch ...

  4. 如何解压 Mac OS X 下的 PKG 文件(网摘)

    如何解压 Mac OS X 下的 PKG 文件 原文出处:[Macplay] 有时候我们可能需要解包 PKG 格式的安装文件包,在 OS X 系统下完成该操作并不需要你额外再安装软件,系统内置的命令就 ...

  5. Httpd Nginx Haproxy反向代理

    Apache反向代理 部署httpd反向代理 准备工作: 三台虚拟机Ip地址分配: linux-node1:192.168.1.5 (源码编译httpd,并且配置proxy用于代理后端的httpd服务 ...

  6. node.js之setTimeout()、clearTimeout()与 setInterval()与clearInterval()

    1.setTimeout函数与clearTimeout函数 setTimeout(cb,ms,[arg],[...])延时一定时间执行回调函数该函数中cb参数为必填函数,为需要执行的回调函数ms为经过 ...

  7. noip普及组2004 火星人

    火星人 描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法.这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类 ...

  8. 家中路由添加静态IP映射(二)

    家中的路由器普遍通过DHCP向连接到此路由器的客户主机提供IP配置方式,但是一般都是动态IP: 假设需要静态IP配置到个人电脑,就要在路由器上进行配置IP和MAC地址映射关系.如上篇截图.路由器端配置 ...

  9. C语言 进程控制---创建进程fork()函数

    #include "sys/types.h" #include "stdio.h" #include "stdlib.h" #include ...

  10. IT类非开发面试总结--2

    面试总结.. ================================= 第一部分..(自己对公司的最低要求) 面试需要提前准备的是:<想好自己以后要干嘛--我在想我以后要干嘛> ...